Professional Documents
Culture Documents
Saludos, humano. Alguna vez has intentado calibrar un ESC con Arduino? Si lo has
hecho, habrs visto que no es nada fcil: hay que hacer todo un ritual para activar el ESC, y
despus generar un pulso para controlarlo. Adems, cada uno de estos aparatos es un
mundo y se activa de forma diferente. Yo mismo me he quebrado mis circuitos neuronales
para intentar arrancar uno. Y no es agradable.
Lista de piezas
Motor Brushless
ESC: la razn por la que ests aqu. Yo tengo un ESC GX de 20A. Si vas a utilizar
otro modelo, asegrate de que pueda proporcionar amperaje suficiente para el motor
brushless.
Placa Arduino
Jumpers Macho-Macho: para conectar el ESC a Arduino.
Regletas: para hacer las conexiones entre el ESC, el motor y la batera si no quieres
soldar. Necesitars tambin un destornillador.
Conexiones
Debes tener cuidado al conectar el motor. Los motores brushless tienen 3 cables, al igual
que el ESC. El cable central del motor debe ir conectado al cable central del ESC.
Sino, puedes daar los componentes.
Pero no te preocupes si giras los otros dos cables (los extremos): slo cambiar la direccin
de giro del motor.
Rituales de activacin
Los ESC se controlan mediante pulsos. Podra dedicar todo un artculo a hablar de pulsos,
pero voy a dar una explicacin rpida.
Un pulso es una seal que se enva cada cierto tiempo, normalmente cada 20ms. Si
tienes un pin digital a LOW, y cada 20ms lo pones a HIGH durante un milisegundo, ests
creando un pulso de 1ms.
Esta imagen ilustra como vara la seal de un pulso de 1ms en funcin del tiempo:
Los ESC se controlan con pulsos de entre 1 y 2 milisegundos. A partir de ahora, me voy
a referir a los pulsos de 1ms como pulsos de amplitud mnima y a los de 2ms como pulsos
de amplitud mxima.
Antes de empezar a funcionar, los ESC esperan recibir un pulso de activacin. Algunos se
activan si reciben un pulso de amplitud mxima durante 2-5 segundos, y otros con un
pulso de amplitud mnima durante esta misma cantidad de tiempo.
Por desgracia, los ESC estn pensados para aficionados a RC, y no a la robtica. Por eso en
la documentacin casi nunca se especifica con qu amplitud de pulso debe activarse el
controlador. Hay antiguas leyendas que hablan de ESCs bien documentados, pero yo nunca
he dado mucho crdito a estos mitos.
Lo importante aqu es el punto 1. Los ESCs estn pensados para funcionar con mandos de
radio, y lo que este punto dice es que para activar el ESC hay que mover el mando a su
posicin ms baja. Y en su posicin ms baja, los mandos generan un pulso de amplitud
mnima (excepto algunos modelos, pero esto no viene al caso).
Si tu documentacin dice que hay que mover la palanca de gas a su posicin mxima,
significa que para activar el ESC hay que generar un pulso de 2ms.
Despus, la velocidad del motor se hace variar enviando pulsos tambin entre 1ms
(velocidad mnima) y 2ms (velocidad mxima).
El motor emitir un pitido cuando el ESC est activado. Despus puedes enviar valores
enteros entre 1000 y 2000 para cambiar la velocidad.
Final de lnea.
/
**********************************************************************
****************************
* Alberto Lpez Gass
22/12/2011 *
* www.dieBotReise.blogspot.com
*
*
alblopgas@gmail.com *
*
*
* Descripcin: Programa que controla la velocidad de un control
Brushless a travs del *
* puerto Serial usando el monitor de Arduino.
*
* Software de libre distribucion Licencia Creative
Commons 3.0 *
**********************************************************************
****************************/
#include <Servo.h>
#define PINMOTOR 8 //pin conectado al ESC, en este caso CH_5 en
ARDUPILOT corresponde al pin 8
#define MAXIMOPWM 150 // Son grados Podia llegar hasta 180,paramas
seguridad lo dejo bajo
#define MINIMOPWM 40 // por si acaso empezar con un valor
inferior, mi motor no arranca hasta 65
#define PASO 1 // Incrementos del teclado
#define BAUD 9600 //velocidad puerto serial funciona hasta 38400
int pulsoMotor;
int ordenTeclado=0;
Servo myservo; // creamos el motor como elemento en la libreria
byte recibiendoByte ;
boolean iniciado = false;
void setup()
{
Serial.begin(BAUD);
myservo.attach(PINMOTOR); // inicializo el ESC en el pin
determinado
Serial.println(" Comienzo del test"); //
Serial.println (" Pulsar 'A' para arrancar \n Cuando escuche el
pitido de confirmacin");
while ( iniciado==false ){
myservo.write(0); // Aramado
recibiendoByte = Serial.read(); // Leemos el Byte recibido
if (recibiendoByte == 65 || recibiendoByte ==97) { // A o
a Mayusculas o minusculas
iniciado=true;
}
}
Serial.println("inicio del loop principal \n Para subir controlar
velocidad pulse \n 'A' para subir \n 'Z' para bajar \n 'S'
para terminar Stop \n");
}
void loop(){
Los motores sin escobillas funcionan debido a un campo magntico generado en su interior,
el cual se crea a partir de sus 3 bobinas, (existen variadas formas de bobinado las mas
comunes son de estrella o triangulo), estas para ser excitadas, se tiene que dar con el ancho
de pulso exacto en cada bobina para lograr un giro completo y por consiguiente generar una
aceleracin y fuerza suficiente para nuestros proyectos.
Lo bueno es que para facilitarnos la vida existen los ESC (Electronic Speed Controller),
que en Espaol seria : control de velocidad electrnico, esta pequea herramienta nos
facilitara la labor de controlar la velocidad enviando un valor desde nuestro Arduino.
ESC
Mas informacin You are not allowed to view links. Register or Login
Motor Brushless
Mas informacin You are not allowed to view links. Register or Login
Para controla el motor solo se tiene que cargar el siguiente cdigo en nuestro arduino
/*
rojo (GRUESO)
_____(VCC de
alimentacion del motor)
|
potenciometro | negro
(GRUESO)
| ____(GND de
alimentacion del motor)
___(MOTOR)___________|__|_________
negro
________________ | |
___(GND)______
| | | |
| |
| _____ | __(MOTOR)____| |
__| rojo |
| / \ | | ESC |
___(VCC)___ |
| | ( ) | | | |__
|
| \_____/ | __(MOTOR)______| |
| blanco |
| | | | | |__________________| |
__(SEAL) |
| | | | |
| |
| | | | | Codigo by RREEDD
| |
| | | |______|
| |
| | | _________________
| |
| | | |d13 D12|
| |
| | | |3v3 D11|
| |
| | |A(0) |REF D10|
D9 | |
| | |_______________|A0 Arduino D9|
_____________________________________| |
| | |A1 NANO D8|
|
| | |A2 D7|
|
| | |A3 D6|
|
| | |A4 D5|
|
| | |A5 D4|
|
| | |A6 D3|
|
| | VCC |A7 D2|
GND |
| |_________________|5v GND|
____________________________________________|
|GND |RST RST|
|______________________|GND TR|
|VIN TX|
|_______________|
*/
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the
potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the
servo (value between 0 and 180)
myservo.write(val); // sets the servo position
according to the scaled value
delay(15); // waits for the servo to get
there
}
Motor DC Brushless
Los primeros motores sin escobillas fueron los motores de corriente alterna asncronos.
Hoy en da, gracias a la electrnica, se muestran muy ventajosos, ya que son ms baratos de
fabricar, pesan menos y requieren menos mantenimiento, pero su control era mucho ms
complejo. Esta complejidad prcticamente se ha eliminado con los controles electrnicos.
Ms informacin:
https://en.wikipedia.org/wiki/Brushless_DC_electric_motor
https://es.wikipedia.org/wiki/Motor_el%C3%A9ctrico_sin_escobillas
Para cotrolar los motores brushless necesitaremos un ESC (Electronic Speed Control)
https://en.wikipedia.org/wiki/Electronic_speed_control
Los motores brushless se usan habitualmente en los drones y son trifsicos con un variador
para controlar de forma muy exacta la velocidad del motor.
Ms informacin: https://learn.adafruit.com/adafruit-motor-selection-guide/brushless-dc-
motor-control
Servomotor
Servomotor (o tambin llamado servo) es similar a un motor de corriente continua pero con
la capacidad de posicionarse en una posicin determinada y permanecer fija en esta.
Normalmente el ngulo es de 0 a 180 grados y se alimentan a 5 voltios mnimo.
Algunos servos servos pueden alimentarse directamente desde Arduino sin necesidad de un
driver, lo que supone una ventaja. En caso de usar varios servos con un mismo Arduino,
este no podr alimentarlos y habr que usar una fuente de alimentacin externa.
Un servomotor est formado por un motor de corriente continua, una caja reductora, un
juego de engranajes, un potencimetro y un circuito de control. Puede aguantar cierto peso
a travs del par o torque del servo indicado en sus caractersticas. Normalmente se indica
con Kg/cm, que quiere decir los kilos que aguanta a 1 cm de distancia.
Para controlar un servo, se usa el PWM. La mayora de los servos trabaja en una frecuencia
de 50 Hz (20ms). Cuando se manda un pulso, la anchura de este determina la posicin
angular del servo. La anchura vara segn el servomotor pero normalmente es entre 0,5ms a
2,5ms.
En Arduino la frecuencia por defecto de PWM es de 500 Hz, pero con la librera servo
conseguimos una seal PWM con la frecuencia y duty cycle adecuada.
El Arduino utiliza la librera <Servo.h> para controlar los servos y dispone de las siguientes
funciones:
http://arduino.cc/en/Reference/Servo
http://arduino.cc/en/Reference/ServoAttach
http://arduino.cc/en/Reference/ServoWrite
http://arduino.cc/en/Reference/ServoRead
Ms informacin de servos:
http://platea.pntic.mec.es/vgonzale/cyr_0204/ctrl_rob/robotica/sistema/motores_servo.htm
Ms informacin:
http://en.wikipedia.org/wiki/Servomotor
http://www.info-ab.uclm.es/labelec/solar/electronica/elementos/servomotor.htm
Todos los servos tienen 3 cables de conexin uno para alimentacin DC (normalmente 5-
6V), otro para masa y el tercero para la seal.
Los tamaos de los servos son:
Torque: determina la mxima fuerza rotacional que puede aplicar el servo, se mide
en kg.cm. Cambia a mnimo y mximo voltaje
Velocidad: la medida del tiempo que tarda en rotar un cierto nmero de grados, se
mide en sec/60. Es diferente a mnimo y mximo voltaje.
La mayora de los servos estndar y low cost, usan un motor DC estndar de 3 polos. Hay
servos con motores de 5 polos que hace que el servo sea ms rpido en aceleracin y mayor
torque en el arranque. Pero tambin hay servos:
Brushless. Son ms eficiente y dan ms fuerza, adems de una vida til mayor.
https://www.servocity.com/
https://www.servocity.com/servos/hitec-servos
https://www.servocity.com/servos/futaba-servos
Servos lineales:https://www.servocity.com/servos/heavy-duty-linear-servos
Un servo puede controlarse directamente con un Arduino para generar la seal de control
que hemos visto anteriormente.
http://www.bajdi.com/torobot-32-channel-servo-controller/
http://letsmakerobots.com/files/32_Servo_Controller_Manual.pdf
http://www.elabpeers.com/32-channel-servo-controller.html
Un servo de rotacin continua es un motor cuyo circuito electrnico nos permite controlar
la direccin de giro. A diferencia del servos anteriormente mencionados, no se detiene en
una posicin, sino que gira continuamente. Son muy utilizados en robtica y en muchas
aplicaciones electrnicas, como en lectores de DVD.
http://tienda.bricogeek.com/motores/118-servomotor-de-rotacion-continua-sm-
s4303r.html
https://www.servocity.com/html/hsr-
2645cr_servo__continuous_r.html#.VqiH0_nhDct
https://www.pololu.com/product/1248