Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

17/08/2016 #1

Avatar de seaarg

[Aporte] Controlador brushless para drones
Estimados,

En esta ocasion quiero compartirles un controlador (variador) brushless que diseñe, y es un tanto "especial".

Lo hice a modo didactico por las siguientes razones:

1- Fue el motivo por el cual me inicie con microcontroladores alla hace muchos años.
2- Tengo el desafio de hacerme un quadcopter de cero.
3- Queria hacer algo que pueda usarse directamente con placas de control de quadcopters con motor a escobillas, es decir, que en vez de señal de servo tome la señal pwm del motor directamente, para hacer conversiones brushless de drones brushed.
4- Ademas, queria hacerlo con la mayor cantidad posible de componentes reciclados.

¿Porque especial? porque esta hecho de forma tal que el pwm para el motor no es generado por el micro del variador, sino que es la señal externa de control.

¿Porque tome esta decision? porque, de nuevo, queria que ande directo como "actualizacion" de drones como los syma y porque con esta tecnica obtengo la mayor rapidez de respuesta posible ante cambios en la señal de entrada.

En un quadcopter, la velocidad de respuesta del variador es muy importante ya que afecta directamente la estabilidad. Normalmente un variador de avion es de 50hz, es decir la tasa de refresco de un servo. Los variadores para drones rondan los 500hz. Este variador es instantaneo, reacciona tan pronto como el motor reaccione ya que el micro no esta interpretando la señal.

Mas detalles: Queria hacerlo con componentes lo mas sencillos posibles y que tuviera por aca, es decir: un PIC 16F628A en vez de atmel que todavia no tengo, etc. Ademas de los drivers, todos los otros componentes son reciclados de motherboards de PC.

Esa es la otra idea, ir a un servicio tecnico de computadoras a "hacerles el favor" de sacarles toda la chatarra de encima y reciclar.

Los diodos, transistores, mosfets, capacitores, resistencias, cristal... todo eso se saca de motherboards. Hay 6 mosfets canal N de potencia en formato DPAK en casi cualquier motherboard no demasiado vieja.

Aclaro que esta andando muy bien, pero al firmware del pic aun le falta un poco de trabajo. Por ejemplo, tengo que hacer la rutina de arranque open-loop. Asi como esta funciona muy pero muy bien con varios motores que probe (si el motor tiene iman de neodimio mejor aun) pero por las dudas, la rutina open-loop es obligatorio hacerla. (ya actualizare).

Sin mas chachara, al grano:


Adjunto 2 proyectos DISTINTOS:

1- bldc_nodriver.zip Esta es la primera version "final" que hice, donde NO se requiere driver para los mosfets ya que esta hecho con componentes discretos y bootstrap. NO RECOMIENDO hacer esta version por 2 motivos:
a- Es menos eficiente
b- Es mas dificil de armar
c- No le pienso dar soporte de ningun tipo. La comparto solo para quien no tiene la posibilidad de conseguir los drivers de mosfets (IR2101 en este caso). Si quieren armar esta version, tengan en cuenta reconfigurar los pines y la polaridad del high side en el firmware ya que este esta para la segunda version. Ademas, en este PCB el positivo de bateria va soldado directo en las tabs de los mosfets

2- bldc_dpak_v2: Esta es la version final y la que esta en las fotos. Tambien el firmware que adjunto esta configurado para esta version.

Algunos comentarios:

- La señal de PWM de entrada es invertida, es decir el tiempo en estado bajo es el duty cycle, ya que esta preparado para conectarse derecho a los mosfet que manejan los motores de las plaquitas de syma.

- Los mosfets pueden ser "cualquiera" en formato DPAK y canal N. En mi caso tengo una caja con unas 20 motherboards que me donaron y de ellas obtuve 24 mosfets iguales, pero tambien pueden hacer mezcla considerando leer los datasheets para mas o menos poner mosfets parejos. CUIDADO con el VGS y el voltaje de bateria que vayan a usar.

- Este version con driver usa el IR2101, esto significa que solo va a funcionar con 3 celdas lipo (minimo 10 volts, maximo que toleran los mosfets 20v en gate). Si necesitan algo para 2 celdas o se arman la version con driver discreto, o reemplazan el driver por IR2301 (haberlo sabido antes!!!) o similar.

- En la red de feedback (back emf) del motor, hay unos capacitores de 22nF. Estos son criticos dependiendo el motor. Por ejemplo, para un motor de cdrom sin modificar (unas 7000 rpm max) el capacitor seria de 33nF. En mi caso mis motores son de 2280 kV por lo que tuve que bajar el capacitor (con 10nF funciona) a 22nF para que llegue a las maximas vueltas.

- Los diseños y PCB estan hechos en KICAD. Adentro de los ZIP tienen la lista de materiales tambien. El firmware esta hecho en CSS.

- Para los observadores, SI, el pic esta overclockeado a 25 Mhz cuando es de 20 Mhz. Esto no es estrictamente necesario. Con un cristal de 16 Mhz anda bien pero medio justo para motores de muchas RPM. Con un cristal de 20 Mhz anda perfecto PERO de los motherboards se obtienen gratis cristales de 25 Mhz y he probado esta version de PIC con osciladores ceramicos a 33 Mhz funcionando sin problemas... asi que la decision la tome y puse cristal de 25 Mhz. NO es necesario que hagan eso, pueden poner uno de 20 y se quedan tranquilos. (Ajusten el parametro en el firmware)

- Por ultimo, al firmware le falta un poco y la forma de trabajar con el back emf del motor en el soft no me convence demasiado pero funciona y muy bien. Tambien lo compare (osciloscopio mediante) con un variador comercial y las formas de onda son exactamente las mismas para el mismo motor, excepto que mi variador responde muchisimo mas rapido jaja (el variador de ejemplo que tengo es de avion ojo).

- Otra observacion: Si pueden obtener una o dos motherboards de notebook, entonces pueden obtener mosfets N en SO8 en vez de DPAK. Van a tener que rediseñar la placa pero terminara siendo mas chica. Esta placa es de unos 55mm x 25mm y esta apretada al 100%.

Sin mas, que lo disfruten! La intencion no es hacer algo mas barato (un variador cuesta 4 - 5 dolares en china) sino usar lo que se tiene y hacer las cosas uno mismo.

Quedo a la espera de comentarios, sugerencias, correcciones, etc. Ire actualizando el tema con avances a medida que modifique el software.

PD: Aun no se que pasara con la placa de syma donde lo voy a probar. En estatico funciona perfecto pero se que el PID de las mismas esta preparado para motores lentos, asi que un motor rapido quiza haga algo de bamboleo en sobrevuelo. Veremos.
18/08/2016 #2

Avatar de seaarg

Agrego mas informacion: Despues de nuevas pruebas en la placa final, para un motorcito de 2280 Kv (2280 RPM * V) tuve que cambiar los capacitores de feedback que en esquematico son de 22nF por unos de 10nF.

Con los de 22nF el motor no levantaba las maximas vueltas a 100% de duty cycle y por ende el consumo se estaba elevando.

Tambien quiero agregar que en la entrada de pwm la estoy manejando con un mosfet tal cual seria en una adaptacion de un syma. Si en vez de eso la van a manejar con algo de menos potencia, como una conexion directa a un micro, entonces habria que elevar el valor de la resistencia pull up de 3K3 y quiza cambiar el conjunto de resistencias de base + resistencias de colector de los transistores por algo mas elevado tambien.

El pasabajos formado por resistencia de 3K3 + Capacitor de 100nF que hay entrando al pin marcado como START determina a partir de que duty cycle el motor comienza a funcionar. Los motores DC arrancan a partir de un duty cycle de aproximadamente 33%. Menos que eso no tiene fuerza. La placa controladora del drone syma tambien arranca por ahi aproximadamente con acelerador a minimo.

Cabe aclarar que, hasta donde pude observar, un controlador como el del syma no va nunca a 100% de duty cycle por mas que este con acelerador a fondo, excepto en el momento de maxima exigencia cuando tiene que hacer un loop acrobatico. Tambien supongo que se reserva algo de potencia para mantener el control si lo mueve un viento.
22/08/2016 #3

Avatar de seaarg

Actualizacion:

Adjunto una nueva version del firmware para el controlador.

- Agregado arranque open-loop
- Ajuste de condicion de arranque / detencion

La tabla de arranque de este firmware esta ajustada para el motor Mars Power MX 1806 de 2280 rpm x V

Esta secuencia de arranque le da un pulso de posicionamiento al motor y luego da 3 vueltas en lazo abierto hasta dejar la conmutacion en un valor probado con una helice 5x4 a unas rpm adecuadas para pasar a control de lazo cerrado.

La condicion de detencion (controlada por watchdog timer) se ajusto a algo mas de 1 segundo. Esto le da tiempo suficiente al motor para detenerse antes de quedar preparado para un nuevo arranque. Tiempos menores hacen que el arranque sea mas brusco ya que el motor estaria girando y el primer pulso de posicionamiento lo frena de golpe.

Electronicamente, le hice unas pequeñas modificaciones:

- Cambiado el valor de R2 (entre PWM_IN_N y START) desde 3K3 a 3K9. Este cambio hace que se requiera un duty cycle un poquito mayor antes de arrancar. Probado con placa de drone Syma X5, el motor arranca al mover un poquito la palanca de acelerador.

- Cambiados capacitores de filtro de feedback (C16, C17, C18) a 12.2 nF (10nF en paralelo con 2.2 nF, le puse un par de nanofaradios mas para asegurar bajas rpm sin afectar maximas rpm)

- Tanto en firmware como en el circuito, ahora el sentido de giro (CW, CCW) se selecciona poniendo a 5v o a GND el pin A5 (VPP, reset) En la placa es una resistencia entre los pines de programacion 5V y VPP o entre VPP y GND

Ya termine de armar las 4 plaquitas, ahora me queda cambiar los capacitores de 3 de ellas y armar el drone a ver que pasa en vuelo. Tengo que ver que puedo inventar para hacerle cirugia a la placa de Syma que esta preparada para 1 celda de 3.7V Tengo que ponerle un regulador de 3.3V y averiguar donde esta el divisor de tension (asumo) que detecta bajo voltaje de bateria para adaptarlo a 3 celdas 11.1 V

Algo que quisiera mencionar MUCHO es que con los IR2101, si la bateria baja de 10 volts el drone se cae como piedra porque se apagan. NO deberia pasar ya que las celdas de una lipo no tienen que bajar de unos 3.4 V para no dañarlas asi que habria que aterrizar antes. (en realidad hay varias versiones al respecto de cual es este valor). La opcion seria cambiar los IR2101 por IR2301

PD: Acabo de superar la marca de los 1000 mensajes en el foro!!! :p
Archivos Adjuntos
Tipo de Archivo: zip firmware_bldc_v2.zip (37,6 KB (Kilobytes), 28 visitas)
19/09/2016 #4

Avatar de seaarg

Este mensaje es para avisar si alguien lo esta armando: No lo ponga a volar aun. Funciona pero tiene un problema que a veces sucede en el arranque que puede ocasionar una parada de motor bajo ciertas condiciones.

Dos problemas principales:

1- Al no tener conocimiento el PIC del valor de PWM aplicado, no se controla la corriente de arranque y cuando esta es mucha A VECES el motor no arranca bien. Creo que esto se puede solucionar con minimos cambios.

2- Limitacion del PIC. Al tener la interrupcion de comparadores compartida, no se puede "sordinar" las entradas que no se estan evaluando. Esto hace que en el firmware como esta, se recalcule el tiempo de conmutacion varias veces, pero NO en cada conmutacion. No encontre mayores problemas con esto mas alla de tener el micro demasiado ocupado atendiendo interrupciones inutiles, PERO tampoco me agrada demasiado.

Aun hay que mejorar el firmware. Como dije antes, funciona pero le falta pulir. Para un avion no es tan critico pero para un quad si.
30/10/2016 #5


Hola seaarg, primero que todo te felicito por tu proyecto, esta realmente muy bueno, yo me encuentro igualmente en proceso de construir un drone desde cero y tengo algunas preguntas que hacerte. La señal PWM dices que es externa, o sea sobre esa señal tu no tienes control no? Como es que sincronizas esta señal PWM con la conmutacion de los transistores, la duda mia es, como a partir de esa señal tu conmutas AH,AL,BH,BL,CH y CL?

2. Porque la señal PWM conectada a la base de un transistor y el colector del mismo a AL,BL y CL respectivamente? Sera por lo que decias que tu PWM esta invertido(ciclo util = parte baja de la señal?)

3. Como cambias el ciclo util de la señal?

Realmente no se si las preguntas que hago son basicas pero es que a mi proyecto tengo que hacerle algunas modificaciones dado que en Cuba conseguir un componente es bastante complicado aunque voy a tratar de seguir el consejo y conseguir unos SO8 para hacer la placa mas pequeña. Gracias
30/10/2016 #6

Avatar de seaarg

marion, muchas gracias por leer el tema, paso a contestarte:

1- Este proyecto es distinto a cualquier cosa que hayas podido ver. En el, el micro no genera el PWM para el motor sino que simplemente conmuta un PWM externo que NO es el tipico PPM de la placa controladora del drone sino es un PWM invertido a unos 10 khz donde el duty del mismo termina siendo el duty del motor. Sobre esa señal no hay ningun tipo de control (y ese es el problema que a veces sucede en arranque).

Si te fijas en el esquematico, la señal de entrada va a RB3 por un pasabajos. Esto es solamente para detectar el momento en que hay un (aproximadamente) 33% de duty, a partir del cual el PIC empieza a hacer la conmutacion.

La conmutacion se da cuando los comparadores detectan el back EMF, por lo que el PIC controla la conmutacion, lo que NO controla es el duty de PWM, por ende, la potencia del motor.

Ahora bien, a mayor duty, mas corriente aplicada a las bobinas, lo que acelera el giro del motor, acelerando el timing del back EMF. Esto es detectado por el PIC y hace la conmutacion a la siguiente etapa.

Traduciendo: funciona igual que cualquier variador comercial, con la excepcion que en estos la señal de entrada es evaluada por el micro y este genera un PWM acorde a la misma, en mi caso, esto no existe por lo que la respuesta es inmediata. Eso es toda la diferencia.

2- La señal PWM en la base lleva al transistor a corte / saturacion: En el colector del mismo aplico 5 volts o 0 volts con el micro, de acuerdo a que si esa etapa tiene que conducir o no. Basicamente, solo 1 de los 3 transistores esta activo en un momento dado, a pesar de tener la base en "comun".

El PWM de entrada es invertido ya que esta preparado el circuito para conectarse directo al mosfet de potencia de placas controladoras de drones brushed, tal como la del Syma X5. Los transistorcitos de entrada la vuelven a dar vuelta.

3- Lo cambia la controladora del drone.

Ahora bien, voy a aclarar un par de cosas:

Este proyecto es experimental y tiene ese problema de que un motor se te puede plantar. Para evitar eso habria que modificar la parte de entrada a RB3 a fin de, en vez de tener un 1 o 0 logico, tener un "valor de duty" (con el modulo CCP). A partir de ese valor de duty se podria calcular el timing inicial de conmutacion para solucionar el problema de la plantada de motor en arranque.

Luego de hacer esto y probarlo que funciona pero no me convence, agarre un micro Atmel (Atmega8A) y le puse el firmare de BL-HELI. Este firmware te permite que su señal de entrada tambien sea un PWM "de motor" en vez de PPM por lo que para mis propositos sirve.

El Atmega8A tiene su comparador con entrada seleccionable, lo que hace que se pueda elegir especificamente 1 de las 3 en vez de tener que ignorar las que no se deberian leer en software. Ademas, BL-HELI tiene muchisimo desarrollo y esta super probado.

Para la version con Atmega que estoy haciendo, la estoy haciendo en version cuadruple (4 controladores en 1 sola placa) para evitar hacer una placa de distribucion de energia, y ademas, la estoy haciendo con mosfets SO8 reciclados de notebooks rotas. Bien se puede hacer con mosfets DPAK de motherboard comunes aunque quedaria un poco mas grande y yo necesito hacerla de un maximo de 5x5cm

Si pudieses tener acceso a un Atmega8A, los esquematicos andan dando vueltas por internet y son super simples, por ejemplo el que te adjunto en esta respuesta.

A partir de este esquematico, podes adaptarlo a los componentes que consigas: En mi caso en vez de usar mosfets P y N estoy usando todos N con un bootstrap formado por capacitor y diodo, como en los primeros esquematicos que adjunte en el primer mensaje.

Lo unico complicado seria conseguir el Atmega8A, el cristal o resonador de 16mhz y el programador (que te lo podes fabricar) El firmware de BL-HELI es muy sencillo de modificar para la placa que termines haciendo.

Si te interesa proseguir con el PIC, funciona, pero no es lo ideal, estate preparado para tener que modificar el firmware y hacer ese control de corriente de arranque que mencione. Tambien puede pasar que en una maniobra brusca la helice frene el motor y este no se recupere (aunque no me ha pasado, siempre se recupero)
Archivos Adjuntos
Tipo de Archivo: pdf tp.inc.schematic.pdf (84,7 KB (Kilobytes), 12 visitas)
31/10/2016 #7


Muchas gracias seaarg, realmente tengo la idea de hacer 2 circuitos de control, el primero lo pienso hacer con un 18f4550 conectado por USB a la PC, la parte de potencia va con transistores DPAK de motherboard y entre el micro y los transistores pienso poner un ULN2003, si puedes me dices que crees con respecto al ULN2003 porque los ir2101 imposibles de conseguir.

La otra solucion sera con un dspic33ep64mc206 y un L6235 para manejar los motores, el micro estara conectado por I2C con un raspi que sera el controlador del drone.
31/10/2016 #8

Avatar de seaarg

Si fuera yo, en vez de poner un ULN2003 pongo 3 transistores en los mosfets del high side y le hago un circuito de bootstrap. Fijate en bldc_nodriver.pdf en el primer mensaje. Tan solo habria que jugar un poco con los valores de resistores para obtener la configuracion mas optima posible.

Lo mejor seria hacer una etapa totem-pole con 3 transistores para el high side (a falta de driver) pero como ocupa mucho, los variadores comerciales tienen solo 1 transistor + 1 resistencia pull up, sacrificando eficiencia.

Si no te queda otra que seguir con PIC, te sugiero el PIC18F14K50 o el PIC16F1937, pegale una leida a http://ww1.microchip.com/downloads/e...tes/01305A.pdf

Mi version intenta ser con lo mas comun posible que es el 16F628A pero tiene varias desventajas. Supongo que con un poco mas de trabajo puede lograrse. Tambien podes darle una leida a http://www.silicium628.fr/article_i.php?id=14

Este link en frances tiene un prototipo funcionando con 628. No estoy seguro si funciona 100% bien pero supongo que si. Tampoco se que tan rapido sera para un drone pero es cuestion de armar y verificarlo.

Al L6235 no le da la capacidad de corriente para un motor de drone, a menos que uses motores de CD SIN MODIFICAR que consumen unos 2A pero no se si te alcanzara la potencia total (doy fe que un motor de CD mueve muy bien una helice 5x3 pero el drone tiene que ser muuuy liviano)

Por el tema motores, si no consigues motores comerciales o imanes de neodimio, te comento que un motor de CD normal, cambiandole el bobinado por uno mas grueso ya te da una mejor potencia. Lo ideal es cambiarle los imanes por neodimio pero eso ya es mas complicado de obtener (hay 2 de ellos en cada lente de lectora de CD)

Importante: Si armas mi version del controlador, SI o SI tenes que hacer un control de la corriente de arranque, sino podes tener el problema que tuve yo (drone al piso) por lo que lo descarte para usar el firmware de bl-heli.

Este control de corriente yo lo pense asi:

- Detectar el PWM en el pin RB3, cuando hay un cierto duty es la indicacion de arranque.
- Cambiar el pin RB3 a salida (tiene que haber electronica ahi para no hacer conflicto con la señal de entrada) y controlar con el PWM generado por el pic la corriente hasta que el motor arranque.
- Una vez que arranco, volver RB3 a entrada y dejar que el controlador del drone sea el que genera el PWM.

Es decir, ahi hace falta electronica que permita que el PWM sea externo o interno. Puede ser un simple arreglo con transistores o una compuerta and o nand. En mi cabeza incluso lo pense con solo resistencias pero como te dije, abandone por un micro mas sencillo para estos menesteres como el Atmel.
31/10/2016 #9


Los motores que tengo son reciclados de 5 discos duros de servidor, alcanzan 15000rpm. El 6235 puede manejarlos no?
31/10/2016 #10

Avatar de seaarg

marlonllano7 dijo: Ver Mensaje
Los motores que tengo son reciclados de 5 discos duros de servidor, alcanzan 15000rpm. El 6235 puede manejarlos no?
Ni idea, vas a tener que medir consumo. Tene en cuenta que ese integrado maneja hasta 2.8 A y cuando al motor le pongas una helice quiza ande por esos valores. Uno de CD consume eso mas o menos con helice.

De todos modos, si usarias ese integrado para que querrias hacer este controlador?
01/11/2016 #11


No entiendo mucho tu pregunta pero el 6235 para que me controle el motor y ver como funciona. Otra pregunta: porque prefieres usar drivers individuales para los mosfet y no el 2003? Por motivos de velocidad de conmutacion?
02/11/2016 #12

Avatar de seaarg

marlonllano7 dijo: Ver Mensaje
No entiendo mucho tu pregunta pero el 6235 para que me controle el motor y ver como funciona. Otra pregunta: porque prefieres usar drivers individuales para los mosfet y no el 2003? Por motivos de velocidad de conmutacion?
No, simplemente tamaño y distribucion en placa. 3 transistores SO-23 facilmente acomodables contra 1 integrado
02/11/2016 #13


No serian 6 transistores? La parte baja no lleva drivers?
02/11/2016 #14

Avatar de seaarg

No necesariamente. Si usas mosfets que activen bien con 5 volts no te hace falta. Mira el esquematico bldc_nodriver.pdf adjunto en el primer mensaje.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.