Archivo de la categoría: brushless

Control de motores brushless

En esta entrada aprenderemos a controlar un motor sin escobillas (brushless) usando Arduino y ESC. En caso de que desee más detalles sobre cómo funcionan los motores BLDC, puede ver el siguiente video que contiene una explicación del principio de funcionamiento de un motor sin escobillas y cómo controlar uno usando Arduino y ESC.

Para este ejemplo, tengo un motor A2212 con las siguientes especificaciones: tiene una clasificación de KV de 2200, se puede alimentar con una batería LiPo 2S, 3S o 4S y requiere 30A ESC. La clasificación KV en un motor sin escobillas define las RPM del motor por voltio sin carga.

A2212

En este caso, los 2200KV significa que, por ejemplo, si alimentamos el motor con una batería LiPo 2S que tiene un voltaje de 7,4 voltios, el motor puede alcanzar RPM máximas de 7,4 veces 2200, o sea, 16280 RPM.

Los motores sin escobillas consumen mucha energía y el método más común para alimentarlos es usar baterías LiPo. El número «S» de una batería LiPo indica cuántas celdas tiene la batería, y cada celda tiene un voltaje de 3,7 V.

Para este ejemplo, usaremos una batería LiPo 3S que tiene 3 celdas y es de 11,1 V. Entonces, puedo esperar que mi motor alcance un máximo de RPM de 24420.

Por último, aquí hay un ESC 30A que usaré para este ejemplo y coincidiré con los requisitos del motor. Por un lado el ESC tiene tres cables que controlan las tres fases del motor y por otro lado tiene dos cables, VCC y GND, para alimentación.

esc

También hay otro conjunto de tres cables que salen del ESC y esa es la línea de señal, +5V y tierra. Esta función del ESC se llama circuito eliminador de batería y, como sugiere el nombre, elimina la necesidad de una batería separada para un microcontrolador. Con esto, el ESC proporciona 5V regulados que pueden usarse para alimentar nuestro Arduino. Esta conexión es en realidad la misma que vemos en los servomotores.

Entonces, controlar un motor sin escobillas usando ESC y Arduino es tan simple como controlar un servo usando Arduino. Los ESC usan el mismo tipo de señal de control que el servo y esa es la señal PWM estándar de 50 Hz.

Brushless-motor-control-signal-50hz-PWM-same-as-servo-motor-768x487

Esto es muy conveniente, ya que, por ejemplo, cuando construimos un avión RC, generalmente necesitamos tanto servos como motores sin escobillas y, de esta manera, podemos controlarlos fácilmente con el mismo tipo de controlador.

Entonces, usando el Arduino, solo tenemos que generar la señal PWM de 50 Hz y, según el ancho de los pulsos o la duración del estado alto, que debe variar de 1 milisegundo a 2 milisegundos, el ESC impulsará el motor desde RPM mínimas hasta máximas.

Diagrama de circuito

Aquí está el diagrama del circuito para este ejemplo. Además del ESC, solo usaremos un potenciómetro simple para controlar la velocidad del motor.

diagrama

Componentes necesarios:

  • Motor sin escobillas
  • ESC 30A
  • Batería Li-Po
  • Placa Arduino
  • Potenciómetro
  • Protoboard y Jump Wires

Código Arduino para control

El código Arduino es realmente simple con solo unas pocas líneas de código.

#include <Servo.h>
Servo ESC;     // Creamos el objeto servo (ESC)
int potValue;  // valor dle potenciometro

void setup() {
  // Asociamos el ESC al pin 9
// (pin, min pulse width, max pulse width in microseconds)
ESC.attach(9,1000,2000);
ESC.writeMicroseconds(900); // send “stop” signal to ESC.
delay(4000); } void loop() { potValue = analogRead(A0); // (valores entre 0 and 1023) potValue = map(potValue, 0, 1023, 0, 180); // mapeamos ESC.write(potValue); // enviamos señal }

Descripción:

  • Necesitamos importar la librería Servo, porque con esta librería podemos generar fácilmente la señal PWM de 50 Hz, de lo contrario, las señales PWM que genera el Arduino están en diferentes frecuencias.
  • Necesitamos crear un objeto servo para el control ESC y definir una variable para almacenar la entrada analógica del potenciómetro.
  • En la sección setup(), usando la función attach(), definimos en qué pin Arduino es la señal de control del ESC conectado y también definimos el ancho de pulso mínimo y máximo de la señal PWM en microsegundos.

En la sección de loop(), primero leemos el potenciómetro, asignamos su valor de 0 a 1023 a un valor de 0 a 180 (mapaemos). Luego, usando la función write(), para enviar la señal al ESC o generamos la señal PWM de 50 Hz. Los valores de 0 a 180 corresponden a los valores de 1000 a 2000 microsegundos definidos en la sección setup().

Si subimos este código a nuestro Arduino y luego lo encendemos todo usando la batería, podemos controlar la velocidad del motor de cero al máximo usando el potenciómetro.

IMPORTANTE: Sin embargo, hay algunas cosas que debemos tener en cuenta aquí. Al alimentar inicialmente el motor, el valor de la señal debe ser igual o inferior al valor mínimo de 1 milisegundo. Esto se denomina armado del ESC, y el motor emite un pitido de confirmación para que sepamos que está armado correctamente. En caso de que tengamos un valor más alto al encender, lo que significa que aceleramos, el ESC no arrancará el motor hasta que aceleremos hasta el valor mínimo correcto. Esto es muy conveniente en términos de seguridad, porque el motor no arranca en caso de que tengamos el acelerador activado al conectar la batería.

Calibración ESC

Por último, expliquemos cómo funciona la calibración ESC. Cada ESC tiene sus propios puntos altos y bajos, y pueden variar ligeramente. Por ejemplo, el punto más bajo podría ser 1,2 milisegundos y el punto más alto podría ser 1,9 milisegundos. En tal caso, nuestro acelerador no hará nada en el primer 20% hasta que alcance ese valor de punto bajo de 1,2 milisegundos.

ESC-Calibration-Pulse-Width-High-and-Low-Point-adjustment-768x695

Para solucionar este problema, podemos calibrar el ESC o configurar los puntos altos y bajos como queramos. Para ese propósito, antes de encender el ESC, primero debemos acelerar nuestro potenciómetro al máximo o un valor al menos mayor que el punto medio actual. Luego, podemos encender el ESC y escucharemos algunos pitidos del motor que en realidad confirman que hemos establecido el nuevo punto alto.

Luego, pasados 2 segundos, debemos mover nuestro potenciómetro a la posición donde indicamos cuál será el nuevo punto bajo. Volveremos a escuchar los pitidos de confirmación y con eso hemos terminado con la calibración ESC. Ahora nuestro acelerador responderá de inmediato y podremos controlar el motor dentro de estos dos nuevos puntos.