Avatar
Mi ESC de código abierto
Feb 29th, 2020 | by: ELECTRONOOBS | Views 3594
Views 3594
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.

2 Comments

  • Noob 19129

    about 11 days ago

    In response to the man inquiring about ini bet slot, daftar slots, game slot indonesia, website game slot, link game slot gacor, slot betting, gacor judi, judi online indonesia, judi indo slot, slot kaya, I highly recommend this consultant about 7rajatogel Login tips or judi slot online itu apa, slot online indonesia, judi online indonesia, slot game jackpot, web judi terbaik, judi indo slot, slot online login, website judi, judi online game, web judi slot, on top of this new 7rajatogel Login url and don't forget judi slot online itu apa, judi slot online terbaru, jackpot game slot, website judi gacor, slot game indonesia, game judi slot online, game judi online slot, website judi, slot yg gacor, game judi slot, alongside all this clicking here on 7rajatogel Login tips which is also great. Also, have a look at this great 7RAJATOGEL link alongside all slot online indonesia, slot game yang mudah menang, slot judi indonesia, judi slot no 1, idn judi, judi slot online gacor, jp slot888, slot game apa, no 1 slot, web slot online, not to mention this this post about 7RAJATOGEL info with gacor game, link game slot gacor, slot gameplay, judi slot itu apa, online slot, game slot link, nama situs judi slot online, slot kaya, website judi online, website judi slot online, for good measure. Check more @ Excellent 7RAJATOGEL Guide 023d94c

    Noob 19129

    about 19 hours ago

    In response to the man inquiring about re index website google google search console reindex site last crawled by google crawl rate google site crawler crawl as google seo what is a backlink instant indexing submit page check google crawler add website to search engines I highly recommend this urlhttp26281wwwmolifannetspaceuid2197303htmlread review on google indexing urlurl or check all pages of a website google console website console web google web page submission test googlebot crawling google indexing api wordpress google link indexer google search console tool check if website is indexed by google reindex website google not to mention this urlhttpsdirstopcomstory20372981deindexinggoogleandgetgoogletocrawlyourwebsitemore info for google indexing siteurl on top of check if site can be indexed deindex site from google meta no index no follow check website index pages new website not showing up on google google indexing problem test googlebot crawling noindex seo seo indexing search engine submission service on top of this urlhttplolcamtopmemberphpactionprofileuid5427top article for google indexing siteurl which is also great Also have a look at this urlhttpsbookmarkvidscomstory19216713crawlgooglesearchresultsandaddsitetogooglemore helpful hints for google indexing blogurl as well as check index site link crawling remove page from index google prevent google from indexing html meta noindex seo site crawler check site index google bing indexnow wordpress site not indexing google console indexing on top of this urlhttpsnolan2h75sxg4nationalwikicomuseron the main page about google indexing tipsurl with add url to google submit link to google console google seo submit new website to search engines index google page instant indexing plugin wordpress prevent page from being indexed test live url add site to google search engine seo google crawler for good measure Check more urlhttp20315718427bookalakornboardviewtopicphpf2t62071p3444578side5682ee5e93a22aa5aaa52673a581ad3p3444578Recommended 7RAJATOGEL Tipsurl 1ed9f3

Login or Sign Up to post comments on this tutorial.