Avatar
Mi ESC de código abierto
Feb 29th, 2020 | by: ELECTRONOOBS | Views 2399
Views 2399
He estado tratando de hacer un buen ESC durante años. Mi primer prototipo hace 3 años estaba funcionando "bien". Era muy grande y el BEMF no era tan bueno. Podría alcanzar velocidades decentes y tienes ese tutorial aquí en esta página . Ahora, con mi versión final, tengo todo lo que quería. Alta velocidad, buena detección de BEMF y eso significa buen torque, control PWM de la velocidad y tamaño pequeño. El tablero está programado en Arduino.
VER EL VIDEO
PARTE 1 - Introducción

Entonces, ¿qué es un ESC ? Bueno, los controladores electrónicos de velocidad se utilizan para controlar motores sin escobillas, en este caso, el motor tiene una entrada de fase triple. Para controlar esta entrada, el ESC debe aplicar una secuencia especial de señales BAJA y ALTA en un orden predefinido. Tiene que conmutarse muy rápido y girando el rotor del motor. En este tutorial veremos cómo controlar la rotación, la velocidad, detectar el BEMF y saber cuándo hacer el cambio al siguiente paso de la secuencia. Por lo tanto, este es un controlador de velocidad del motor sin escobillas sin sensor, ya que no utiliza ningún sensor para detectar la posición del rotor. Aprenderemos:

- El esquema y por qué necesitamos cada parte
- Control de puente MOSFET de triple fase
- Detección BEMF y cruce 0
- Interrumprions y comparador interno de ATMEGA328
- Control PWM

PARTE 2 - Esquemático

Ahora el esquema puede parecer complicado pero no lo es. Lo primero es lo primero, tenemos un bloque de energía. Este es un circuito convertidor de dólar que dará 5V para todas las partes digitales. La entrada principal podría ser de 11 a 18V, pero este bloque siempre dará 5V. El siguiente bloque es el puente de triple fase. Estos son 6 MOSFET en configuraciones de puente que se utilizan para energizar las bobinas del motor. Cada uno de estos MOSFET tiene un control de controlador con el IR2101, que es un controlador dual para que pueda controlar los lados alto y bajo del puente.

Tenemos el bloque divisores de voltaje BEMF. El voltaje del motor será más alto que el voltaje máximo que el ATmega328 podría soportar como entrada, en este caso 5V. Entonces, para eso, usando algunas resistencias de 10K y 33K, bajamos el voltaje para que la entrada analógica del ATmega328 pueda leer eso. Estas entradas se utilizarán para detectar la posición del rotor y saber cuándo cambiar al siguiente paso de la secuencia de rotación. También tenemos el microcontrolador ATmega328, el programador CH340 para que podamos cargar códigos con el conector USB y algunos componentes adicionales más, como zumbadores, LED y almohadillas.
 

Esta es la lista de piezas para este proyecto. Asegúrate de usar los mismos componentes. Verifique todas las conexiones, suelde las piezas y luego cargue el código y pruébelo.

 
Nosotros necesitamos:
PARTE 3 - LA PCB

La PCB que he diseñado es de 60 por 35 mm. En la foto a continuación, puede ver la primera versión de la PCB en rojo, pero también la versión final con máscara de soldadura negra. El V1.0 tenía algunos errores, como algunas conexiones GND malas, un pin incorrecto para el zumbador y también las pistas de alimentación estaban cubiertas por la máscara de soldadura. Para la versión V2.0, ahora todos los problemas están solucionados y las pistas grandes están expuestas para poder llenarlas con soldadura para obtener más corriente. Puede descargar los archivos gerber desde abajo.

 
Cuando descargue el archivo GERBERS anterior, tendrá un archivo .zip. Vaya a JLCPCB o cualquier otro fabricante profesional de PCB, cargue el archivo .zip y solicite sus placas. En mi caso, 10 PCB me costaron solo 2 dólares más gastos de envío, que para España fueron 6 dólares más. Yo 7 días, recibo las siguientes tablas con un gran aspecto. Tiene una capa de seda para todos los componentes, por lo que soldarlos debería ser fácil. El grosor de la PCB es de 1.6 mm, las pistas de señal son de 0.2 mm y las pistas de potencia son de 2 mm. Esta placa roja no tiene pistas de potencia expuestas, pero el archivo GERBER que puede descargar desde arriba está con la versión final, así que no se preocupe.
PARTE 4.1 - MONTAJE: Convertidor 5V

La primera parte que soldamos es el bloque de alimentación. Este será un circuito convertidor reductor que reducirá el voltaje de 12 V a 5 V para el microcontrolador y otras partes digitales.¿Por qué hacemos esta parte primero? Bueno, si primero soldamos la parte digital y luego el bloque de alimentación y, por error, la salida del convertidor reductor no es de 5V sino de 12V, bueno, eso quemará toda la parte digital.

PARTE 4.2 - MONTAJE: El ATmega328

El segundo paso es soldar la configuración básica del microcontrolador. Ese es el chip ATmega328p-AU, el cristal de 16MHz, la resistencia R23 de 1M ohm, la resistencia R1 de 10K ohm, el condensador C6 de 100nF. Estos componentes son obligatorios para que el microcontrolador funcione. Una vez que haya soldado todas estas partes, podemos probar si podemos subir algo al chip.

 
Una vez que haya soldado todas las partes para la configuración básica, conecte el programador externo FTDI a los pads RX DTR y TX, pero también a Vcc y GND. Ahora abra Arduino IDE y cargue el siguiente código de prueba que aumentará el valor de "x" cada segundo e imprímalo en el monitor en serie. Si puede ver que el número aumenta, eso significa que el IC estaba bien soldado y está funcionando sin problemas.
PARTE 4.3 - MONTAJE: El FTDI CH340

Una vez que el voltaje es de 5V y el chip ATmega está funcionando, podemos seguir soldando piezas. La siguiente parte es el programador FTDI CH340. Este chip hará la conexión entre un conector USB desde una PC y nuestro chip ATmega. Así que suelde el CH340C, el condensador C7 y los resistores R18 y R19 de 1k. También suelde el conector USB. Asegúrese de que el chip FTDI sea el CH340C, no el CH340G, porque eso también necesitará un cristal. Una vez que suelde el chip y el conector, intente cargar el mismo código que antes pero esta vez con el conector USB en la placa. Si funciona estamos bien para ir.

PARTE 4.4 - MONTAJE: Soldar el resto

Ahora que todo funciona, podemos soldar las resistencias BEMF, los controladores MOSFET con el diodo y los condensadores y los MOSFET en la parte posterior para el puente de triple fase. También suelde los LED y el zumbador. Finalmente, soldamos 3 cables con conectores hembra a las almohadillas GND, Vcc y PWM. Estas serán la señal de entrada del receptor de radio, como cualquier otro ESC comercial.

PARTE 5.1 - Código

Ahora el código es un poco largo y difícil de entender. Es por eso que cada línea tiene un comentario. Así que descargue el código del siguiente enlace. Luego lea cada línea para comprender por qué hago cada parte. El código tendrá el main.ino pero también el código secundario para la escritura / lectura EEPROM. El código comienza definiendo las variables a usar en el código. En el bucle de configuración, primero verificamos si la primera posición de la memoria EEPROM es 1. Si no, eso significa que es la primera vez que ejecutamos el código, por lo que guardamos los valores mínimo y máximo de la señal de entrada PWM y también escribimos un "1 "en la primera dirección EEPROM.


//This will only run once after you uplaod the code
if( EEPROM.read(1) != 1)
{
  EEPROM_writeAnything(PWM_IN_MIN_ADRESS, PWM_IN_MIN);         
  EEPROM_writeAnything(PWM_IN_MAX_ADRESS, PWM_IN_MAX);  
  EEPROM.write(1, 1);


PARTE 5.2 - Código

Luego, aún en el bucle de configuración, configuramos todos los registros. Configuramos los pines como salidas / entradas, configuramos los registros PWM y también configuramos el pin digital D8 para poder crear interrupciones de cambio de estado del pin. Este pin se usa para leer el ancho de entrada PWM en microsegundos.


DDRD  |= B00011100;           // Configure pins 2, 3 and 4 as outputs
PORTD  = B00000000;           //pins 0 to 7 set to LOW
DDRB  |= B00001110;           // Configure pins 9, 10 and 11 as outputs
PORTB  &= B00110001;          //B00110001    D9, D10 and D11 to LOW
// Timer1
TCCR1A = 0;
TCCR1B = 0x01;
// Timer2
TCCR2A = 0;
TCCR2B = 0x01;
// Comparator on pin D6
ACSR   = 0x10;           // Clear flag comparator interrupt
//Set D8 (PWM in) to trigger interrupt (we use this to read PWM input)
PCICR |= (1 << PCIE0);    //enable PCMSK0 scan                                                 
PCMSK0 |= (1 << PCINT0);  //Set pin D8 trigger an interrupt on state change.    


PARTE 5.3 - Código

Después de la configuración del registro, hay algunos bucles que detectarán si el ESC debe ingresar al modo de configuración o no. Si la señal PWM de entrada está por encima de un cierto valor cuando se enciende el ESC, entonces debe ingresar al modo de configuración donde puede establecer el rango máximo y mínimo de la entrada PWM. Si no, saltará al bucle de rotación del motor.


//Power on mode select
  if(PWM_INPUT > PWM_IN_MIN + 115)  //We enter config mode to set the PWM range
  {
     ESC_MODE_ON = false;           //Motor rotation is OFF till the config mode is done
    while(!PWM_RANGE_SET)
    { 
    .
    .
    .   


PARTE 5.4 - Código

Luego tenemos un montón de funciones e ISR para detectar el valor de entrada PWM, para cambiar los pines de los controladores MOSFET a alto o bajo o a PWM o no PWM y también para cambiar la entrada del comparador en el pin D6. Con esta entrada leemos el BEMF y en cada paso de la secuencia necesitamos cambiar esa entrada de BEMF_A a BEMF_B o BEMF_C. El Armega328 tiene este comparador en el pin D6. La entrada negativa si este comparador será la línea COM, que es la suma de todas las fuentes electromotrices posteriores de A, B y C. Luego, la entrada positiva del comparador se seleccionará en el código con la línea:

 
Por favor lea el código para más detalles. Compílalo y súbelo a la pizarra. Ahora podemos conectar una salida de fase del motor sin escobillas y probarla. Después de conectar el motor, aplique 12V en la entrada y conecte un receptor de radio PWM a los pines PWM.

void BEMF_A_RISING(){  
  ADCSRA = (0 << ADEN);     // Disable the ADC module
  ADCSRB = (1 << ACME);     // Enable MUX select for negative input of comparator
  ADMUX = 2;                // Select A2 as comparator negative input
  ACSR |= 0x03;             // Set interrupt on rising edge*/
}
    .
    .
    .  


PARTE 6 - Prueba

Una vez que cargó el código y conectó la energía, el motor y la entrada PWN, podemos probar esto. Asegúrese de que el joystick PWM esté bajo y luego conecte la alimentación. Cuando aumenta la señal PWM, el motor debe girar. Si desea establecer un nuevo rango de PWM y calibrar el ESC, simplemente coloque el joystick en la posición media antes de encender el ESC. Encienda el ESC y escuchará los pitidos de configuración. Después de los pitidos, coloque el joystick en el valor máximo y luego en el valor mínimo y se almacenará en la EEPROM. Eso es.

0 Comments

Login or Sign Up to post comments on this tutorial.