Un Regulador Electrónico de Velocidad Para motores 600 controlado con un microcontrolador 12C508...

Este circuito lo he diseñado yo después de estudiar varios esquemas por internet y realizar varias pruebas con el. No es muy sofisticado, pero al llevar un microcontrolador que es quien gestiona los demás componentes, garantiza una fiabilidad de funcionamiento en las funciones que le he programado...

Funciones que incorpora:

. Sistema BEC de alimentación de receptores y servos...

. Detección de Palanca de acelerador al arrancar...

. Control PWM de potencia del motor...

. Sistema de freno de motor activable por un jumper...

. Sistema de aviso acústico de irregularidades...

Funciones que NO incorpora:

. Sistema de protección contra sobre intensidades (se quema si el motor consume mas de lo que soportan los transistores)...

. Protección a enchufar la batería en sentido contrario (no tiene protección a la polaridad inversa)


Antes de meternos de lleno en el asunto, contaros que un compañero Danes (Thomas Scherrer) ha realizado una version de este regulador en componentes SMD (de los pequeños)...

 
 Visitad su pagina que no tiene desperdicio...

http//www.webx.dk/rc/ecs2.htm


Pues, vamos a ello...

El esquema básico del regulador no es mas que el siguiente:


DESCRIPCIÓN DE FUNCIONAMIENTO...

Básicamente se trata de hacer un aparato que sea capaz de interpretar las señales que envía el receptor y según esa señal, realice una conmutación PWM (modulación por ancho de pulso) a través de un Transistor MOSFET que es el encargado de controlar la corriente que pasa al motor a modo de interruptor electrónico. Pues bien, todo esto lo hacemos vía software ya que hoy en día disponemos de herramientas tan útiles como los microcontroladores , que no son mas que unos pequeños circuitos integrados que tienen la capacidad de ser programados para que podamos realizar con ellos la actividad que seamos capaces de programarles. En este caso se ha utilizado el Micro 12C508 de la casa Microchip ( http://www.microchip.com ) ya que sus características son idóneas para este tipo de aplicación. Para mas datos os remito a la pagina de su fabricante. Lo único a destacar, es que solo se puede programar una vez, por lo que no es posible reutilizarlo una vez programado...


Antes de seguir con el micro, paso a describir brevemente lo que es un transistor MOSFET:

Como yo no soy un experto en electrónica, solo me he quedado con la capacidad de conmutar grandes cantidades de corriente sin que para ello se necesite gran potencia de activación. Según esquema adjunto, un transistor mosfet viene, entre otros, con este encapsulado.

Para no extendernos mucho, el mosfet tiene tres patas, la para Gate es la de activación, que es la que será controlada por el microcontrolador. La pata Source, es la entrada de corriente y la Drain, es la de salida. con esto así, podemos encontrar transistores que trabajan conmutando el positivo, y los que conmutan el negativo. En nuestro caso, hemos utilizado los que trabajan conmutando el negativo ya que, por su fabricación, soportan mayores intensidades y son relativamente baratos...

*Para mas datos, ya sabéis, http://www.google.com

Utilizando el transistor IRFZ44 he conseguido controlar 20A sin apreciar una temperatura considerable en los transistores. Si se quiere controlar mayor intensidad (consumo), solo hay que reemplazarlos por el IRL2203N que podrían llegar a controlar hasta 35A con este regulador...


EL REGULADOR DE TENSIÓN...

Bueno, como esto parece estar claro, pasamos a hablar del encargado de regular la tensión a 5V para que funcione el microcontrolador y también para poder alimentar al receptor y los servos con la misma batería del motor...
En casi todos los sitios que he encontrado relacionado con este tema, siempre han advertido que no es buena solución utilizar como alimentación del receptor, la misma batería que la del motor ya que esta ultima esta sometida a gran carga, la del motor, y a un control del mismo que se realiza por PWM, osea, por conmutación a mas de 1000Hz que pueden provocar interferencias en el receptor por causa de no tener una alimentación muy limpia... De todas formas, es una solución que se usa muy comúnmente y que da buenos resultados. También hay que destacar que hay veces en que los modelos reciben interferencias y no sabemos de que puede ser, pues, como somos todos mayorcitos y ya estamos advertidos, seguimos con el tema...

El regulador de tensión empleado es el LM2940 CT5 que es un regulador de tensión fija a 5V regulando a través del positivo y que es capaz de dar hasta 1A de consumo en continuo. Esto equivale a poder alimentar un receptor y tres servos, sin que tengamos que preocuparnos demasiado por el integrado y la integridad del modelo... Se ha utilizado este integrado ya que tiene como peculiaridad, que consume poco voltaje en su proceso de regulación, así cuando la batería se aproxima a los 5,5V el integrado es capaz aun de seguir dando los 5V necesarios para alimentar el receptor. ¿Por que he dicho 5,5V?. Pues no es mas que la tensión a la que el microcontrolador deja de controlar el motor para reservar lo que queda de batería solo y exclusivamente para el receptor, y por mas que queramos dar motor, el micro no nos dejara produciendo una señal acústica que nos indicara que la batería esta agotada...

Pues, a partir de aquí, lo demás es electrónica auxiliar que es necesaria para el funcionamiento del regulador. Un esquema detallando todos sus componentes es el siguiente:

descripcion del circuito con sus componentes

Si picas sobre la imagen te bajas el PDF con el fotolito para fabricar el circuito...


PRECAUCIONES:

Como se puede ver en la parte superior derecha del esquema, hay dos "TRANSISTORES", uno es el transistor del freno y el otro es el regulador de tensión, " NO PUEDEN ESTAR EN CONTACTO " así es que recomiendo aislar el transistor del freno con un termorretractil para que no se pueda producir un contacto con el regulador de tensión. Ya que si aislamos el regulador de tensión, estamos impidiendo que refrigere correctamente...


Además, en el esquema se ve que hay una indicación a " Pines Act Freno ". Esto no es mas, que lo que allí va es un par de pinas para que con un JUMPER, de los utilizados en los ordenadores, activemos el freno, si queremos que este funcione...


DESCRIPCIÓN DEL PROGRAMA DEL PIC 12C508:

Por si todavía no se sabe, el receptor envía señales a los servos en el siguiente formato:

señales que el receptor envia a los servos

La señal va codificada en formato PWM con una frecuencia de 50Hz (20 veces por segundo) y que los limites están en 0.5ms para la posición 0 hasta 2.5ms para la posición 180.

Después de estudiar varias emisoras, y con la intención de que el programa sea valido para el mayor numero posible de radios, los limites en que el regulador empieza a controlar esta en:

1.2ms para la posición APAGADO
hasta...
1.8ms para el 100%

*todos estos valores aproximados, pero muy orientativos...


Pues analizando esta señal, el micro entra en un bucle infinito, o hasta que lo apaguemos, en el que cuenta cuanto tiempo dura la señal que envía el receptor y según eso, genera una señal PWM de unos 1000Hz con amplitud del pulso que va desde 0% para apagado, hasta 100% para plena potencia. Así controla el motor desde apagado hasta 100%.

El programa empieza comprobando que al encender el regulador, Osea, enchufar la batería, ya que no tiene interruptor por considerar que no es buena solución el poner un interruptor a un controlador electrónico que por cualquier causa pueda arrancar el motor, ya que si se funden los transistores, por la causa que fuera, el motor saldría en marcha. Cosa que no sucede si esta desenchufada la batería... Seguimos, al encender el regulador, la palanca del motor este en apagado para garantizar que el motor no sale en marcha justo en el instante de enchufarlo, ya que suele suceder que nuestros dedos andan justo por ahí cerca de la hélice cuando enchufamos la batería, no? Si la palanca no esta en apagado, el regulador emitirá unos pitidos constantes que nos avisaran acústicamente que algo va mal. si esto sucede al encenderlo, solo tenemos que bajar la palanca del motor y ya esta...

Si hemos enchufado correctamente todo, el regulador emitirá cuatro pitidos indicándonos que todo va correcto... si no hace nada al enchufarlo, Será por que no recibe señal de receptor...

Además, el programa va monitoreando el estado de la batería del motor a través del divisor de tensión que esta formado por el par de resistencias que se conecta a su pin de entrada 4. Mediante software se controla que cuando el voltaje en el pin baje de 1.2V, unos 5,5V en la batería, el programa comprueba que esto se mantenga así un tiempo mínimo, asegurándose que no es una interferencia y si esto sigue así el intervalo programado, el regulador corta la alimentación del motor durante tres segundos, para darle tiempo a la batería a que se recupere, y se resetea empezando desde el principio...

Si el regulador detecta que ha dejado de llegarle señal desde el receptor, se resetea y pone el motor en apagado...

Cuando todo va correctamente, el regulador realiza un control proporcional de la velocidad del motor en función de la posición de la palanca del motor. Así se podrá controlar la velocidad del motor de forma proporcional...

PRECAUCION:
Si, por lo que fuere, el avión esta en el suelo y se activa el motor por accidente y la hélice esta atorada con lo que sea, el regulador se quemara, ya que no lleva ningún sistema de protección contra sobreintensidades. Esto puede quedarse solo en que salga un poco de humo del avión, hasta el hecho de que los efectos especiales sean con fuego y todo. Advertidos quedáis todos...



Y bueno, ya en este punto solo me queda poner el código en Ensamblador del PIC para quien quiera utilizarlo lo haga. Ya se que se podría haber hacho mejor, pero este ha sido mi primer programa para un PIC...

;******************************************************************
;******************************************************************
; ESTA VERSION DEL PROGRAMA SE HA RELIZADO CON DOS DEFINES SEGUN LOS
; MOSFETS TENGAN O NO UN TRANSISTOR NPN QUE LOS CONTROLE.
; LOS MOSFETS DE PWM SON DE CANAL N Y EL DE FRENO ES DE CANAL P
;
;******************************************************************
;******************************************************************
;
; PIC 12c508
; __________
; Vdd(+5v) I O I Vss(masa)
; I I
; BAT_IN I I FRENO
; SERVO_IN I I PWM-out
; ----------
;
;
;******************************************************************
;****** CABECERA DEL PROGRAMA *************************************
;******************************************************************

LIST P = 12c508a
INCLUDE <P12c508a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC

;******************************************************************
;****** FUNCIONAMIENTO DEL PROGRAMA *******************************
;******************************************************************
;El bucle dura 51 US.
; para 1224us IN -> OUT STOP -> / 51 us = 24 pasos x 2 (nb cuenta)= 48 CUENTAS
; para 1785us IN -> OUT MAXIMO -> / 51 us = 35 pasos x 2 (nb cuenta)= 70 CUENTAS
; con 24 pasos IN -> 0 pasos OUT
; con 35 pasos IN -> 11x2 pasos OUT
; con 11x2+1 pasos OUT , MAX -> 23x51 = 1173us => frecPWM = 0.85kHz.

;******************************************************************
;****** DEFINES ***************************************************
#DEFINE ACTPWM bcf
#DEFINE DESPWM bsf

#DEFINE PIN GPIO,3 ;Pin de entrada de Señal Receptor
#DEFINE PBAT GPIO,4 ;Pin de entrada de Señal de la bateria

#DEFINE PSTOP GPIO,1 ;Pin de salida de MOSFET FRENO
#DEFINE POUT GPIO,2 ;Pin de salida de PWM MOSFET
#DEFINE EEPREV FLAGS,0 ;Estado previo de la entrada

;#DEFINE PIN FLAGS,7 ;Define temporal para la entrada de señal
;#DEFINE PBAT FLAGS,6 ;Define temporal para la señal de bateria
#DEFINE TEST FLAGS,5 ;Define de prueba del programa

#DEFINE NbPLow .24 ;Relacion de pasos que detecta la posicion LOW de la palanca IpwmHref-1

#DEFINE IpwmHrf .48 ;Relacion de Frecuencias entre PWMIN - PWMOUT
#DEFINE OpwmFrec .23 ;Pasos del ciclo de las señal de salida
#DEFINE pStop .200 ;Pasos de retardo para activar el Freno 14x200x50us=140ms
#DEFINE pBat .200 ;Pasos de verificacion de caida de la bateria 200x50us=10ms
#DEFINE pRecOff .200 ;Pasos de de verificacion de apagao del receptor 200x50usx14=140ms

;******************************************************************
;***** DEFINO LOS REGISTROS RAM ***********************************

IpwmH EQU 07h ;Variable con los pasos del estado H de la entrada
OpwmH EQU 08h ;Variable con los pasos del estado H de la salida
CpwmF EQU 09h ;Contador de pasos de la frecuencia de salida
CpwmH EQU 0Ah ;Contador del estado H de la salida
CpBat EQU 0Bh ;Contador de pasos del estado de la bateria Low
CpStop EQU 0Ch ;Contador de pasos para retardar la activacion del freno
CpROff EQU 0Dh ;Contador de pasos para detectar el receptor apagado
FLAGS EQU 0Eh ;Flags

CTmp1 EQU 0Fh ;Variable temporal de contador
CTmp2 EQU 10h ;Variable temporal de contador
CTmp3 EQU 11h ;Variable temporal de contador
CTmp4 EQU 12h ;Variable temporal de contador

;******************************************************************
;****** CONFIGURO EL PIC ******************************************

RESET
org 00h

movwf OSCCAL

movlw b'11000000' ;Configuro el registro OPTION
OPTION

movlw b'11111001' ;Todas entradas menos gpio,2 -> salidaPWM y gpio,1 -> FRENO
tris GPIO
bcf PSTOP ;Desactivo el freno
NOP
DESPWM POUT ;Desactivo la señal de Salida de PWM

;******************************************************************
;****** INICIALIZO VARIABLES **************************************

INITVAR
clrf FLAGS
clrf IpwmH

movlw pStop
movwf CpStop
movlw pBat
movwf CpBat
movlw pRecOff
movwf CpROff
movlw OpwmFrec
movwf CpwmF
movlw .1
movwf CpwmH
movwf OpwmH

;******************************************************************
;****** INICIO EL PROGRAMA ****************************************
;******************************************************************

;******************************************************************
;Aqui compruebo si estoy probando el programa para ir directamente al inicio de regulacion
btfsc TEST ;Es LOW la entrada de señal
goto WAITLOW2 ;NO



;******************************************************************
;Aqui retardo la puesta en marcha del programa para dar tiempo al receptor a enviar la señal
movlw .250
call PAUSAMS

;Compruebo que al encender el regulador el acelerador este LOW
ISLOWPAL
movlw .10 ;Hago que la comprobacion de palanca baja se realice 10 veces...
movwf CTmp4

WAITLOW1
btfsc PIN ;Es LOW la entrada de señal
goto WAITLOW1 ;NO

WAITHIGH1
btfss PIN ;Es HIGH la entrada de señal
goto WAITHIGH1 ;NO

CONTANDO ;El bucle de comprobacion debe durar el mismo tiempo que el del programa
movlw .15 ;Duracion: 2+(15-1)*3+2+1+4= 51us.
movwf CTmp1
CONT_11 decfsz CTmp1,f ;Este bucle dura 3us.
goto CONT_11
NOP
incf IpwmH,f ;Incremento el contador de ciclos de entrada
btfsc PIN ;Es LOW la entrada de señal
goto CONTANDO ;NO

movlw NbPLow ;Cargo en W la relacion entre PWM's
subwf IpwmH,w ;Resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
btfss STATUS,0 ;Compruebo si el resultado es negativo
goto INICIO ;SI, me voy a comenzar la ejecucion de la regulacion
clrf IpwmH ;NO, Reseteo la variable IpwmH usada antes

;DESDE AQUI esto debe durar unos 250ms.
movlw .250
call ZUMBIDO

;DESDE AQUI otros 250-(20+10)(del pulso de señal del servo)= 220ms.

movlw .220
call PAUSAMS

;Vuelta a comprobar el acelerador
goto ISLOWPAL

;*********************************************************************
;*********************************************************************
;Aqui es donde se comienza con la regulacion de la velocidad del motor
;*********************************************************************

INICIO
clrf IpwmH ;reseteo la variable IpwmH usada antes
decfsz CTmp4,f
goto WAITLOW1

;******************************************************************
;******************************************************************
;Genero una señal que indique el inicio del programa
movlw .5
movwf CTmp4
PITIDO
movlw .50
call PAUSAMS
movlw .50
call ZUMBIDO
decfsz CTmp4,f
goto PITIDO




;******************************************************************
;******************************************************************
;INICIO DEL PROGRAMA DE REGULACION

WAITLOW2
btfsc PIN
goto WAITLOW2

START11
btfsc PIN ;es L la señal de entrada
goto SALTO10 ;NO
btfss EEPREV ;SI, fue H la señal de entrada en el ultimo ciclo?
goto SALTO30 ;NO
bcf EEPREV ;SI, especifico que la señal de entrada en este ciclo ha cambiado a L
movlw IpwmHrf ;cargo en W la relacion entre PWM's
subwf IpwmH,w ;resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
btfss STATUS,0 ;compruebo si el resultado es negativo
movlw .0 ;SI, Pongo el registro W a 0 para que luego se incremente a 1 y se actualice el registro OpwmH
movwf OpwmH ;NO, Pongo el contenido de W en la variable de pasos de salida
incf OpwmH,f ;Incremento el resultado de la resta para evitar el resultado no negativo y que puede ser .0 produciendo un error al aplicar la instruccion decfsz al valor .0
clrf IpwmH ;Pongo a cero el contador de ciclos de la señal de entrada
movlw pRecOff ;Reseteo el contador de deteccion de Receptor Apagado
movwf CpROff
goto SALTO31

SALTO11
bsf EEPREV ;especifico que la ultima entrada ha sido H
incf IpwmH,f ;incremento el contador de ciclos de entrada

;******************************************************************
;COMPRUEBO SI LA BATERIA ESTA CON CARGA SUFUCIENTE

SALTO31
btfsc PBAT ;es L la señal de la bateria
goto SALTO40A ;NO
decfsz CpBat,f ;SI, Aqui decremento el contador de la bateria LOW
goto SALTO40B ;NO es cero
DESPWM POUT ;SI, Desactivo la señal de PWM

movlw .12 ;Espero 3 Segundos para volver a activar la regulacion
movwf CTmp4 ; Asi evito los tirones del limite de la BATERIA
WAITSECOND
movlw .250
call PAUSAMS
decfsz CTmp4,f
goto WAITSECOND

goto INITVAR ;Me voy al inicio del programa y empezamos de nuevo...

;******************************************************************
;AQUI SE GENERA LA SEÑAL DE SALIDA PWM

SALTO41 ;ESTO ES EL PUNTO MEDIO DEL PROGRAMA
btfsc PIN ;Compruebo la señal de entrada otra vez...
incf IpwmH,f ;incremento el contador de ciclos de entrada

;Comienzo con la generacion de señal
decfsz CpwmF,f
goto SALTO60A
movlw OpwmFrec
movwf CpwmF
movf OpwmH,w
movwf CpwmH

decfsz CpStop,f ;Decremento el contador de activacion del freno para retardar su activacion
goto SALTO50 ;NO es cero
bsf PSTOP ;Se hace Cero el contador; Activo el freno
movlw .1 ;pongo el registro W a 1 para que luego se actualice el registro CpStop
movwf CpStop ;Pongo el contenido de W en la variable de retardo STOP

SALTO51
decfsz CpROff,f ;Decremento el contador de pasos de deteccion de Receptor Apagado
goto SALTO60B
movlw .1
movwf OpwmH
movwf CpwmH
movwf CpROff

SALTO61
decfsz CpwmH,f
goto SALTO71
DESPWM POUT
movlw .1
movwf CpwmH
goto START10

SALTO71
bcf PSTOP ;Desactivo el freno
movlw pStop ;Reseteo el contador de retardo del freno
movwf CpStop
ACTPWM POUT ;Activo la señal de Salida de PWM
goto START11



;******************************************************************
;****** GOTOS para equilibrar el programa *************************
;******************************************************************

SALTO10
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO11

SALTO30
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO31

SALTO40A
movlw pBat ;Reseteo el contador de retardo de comprobacion Bateria
movwf CpBat
goto SALTO41
SALTO40B
goto SALTO41

SALTO50
goto SALTO51

SALTO60A
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO61
SALTO60B
NOP
goto SALTO61

START10
goto START11


;******************************************************************
;******************************************************************
;****** Funciones del programa ************************************
;******************************************************************

;***********************************
;*** Genera el Zumbido del motor ***

ZUMBIDO
movwf CTmp3

GENSIG1
;RETARDO unos 40us
ACTPWM POUT ;Genero la señal de aviso de acelerador en marcha
movlw .13 ;Duracion: 1+2+(13-1)*3+2= 41us.
movwf CTmp1
CONT_21 decfsz CTmp1,f ;Este bucle dura 3us.
goto CONT_21
;RETARDO unos 940us
DESPWM POUT
movlw .10
movwf CTmp1
CONT_31 movlw .30
movwf CTmp2
CONT_32 decfsz CTmp2,f ;Este bucle dura 3us.
goto CONT_32
decfsz CTmp1,f
goto CONT_31 ;Este bucle dura 1+2+(2+(3x(30-1)+2)+3)x10-1= 942us.

decfsz CTmp3,f
goto GENSIG1 ;Este bucle dura (41+942)x!W-1=Xus.
retlw .0

;**********************************
;*** Genera una pausa de !Wx1ms ***

PAUSAMS
movwf CTmp3

;RETARDO unos 980us
CONT_43 movlw .10
movwf CTmp1
CONT_41 movlw .31
movwf CTmp2
CONT_42 decfsz CTmp2,f ;Este bucle dura 3us.
goto CONT_42
decfsz CTmp1,f
goto CONT_41 ;Este bucle dura 2+(2+(3x(31-1)+2)+3)x10-1= 971us.

decfsz CTmp3,f
goto CONT_43 ;Este bucle dura 971x!W-1=Xus
retlw .0


;******************************************************************
;******************************************************************
;******************************************************************

END


COMO PROGRAMAR EL PIC...

Esto se hace con un programa llamado ICPROG, que os lo bajáis de internet buscándolo en algún buscador, y con un programador que venden en las tiendas de electrónica llamado TE20. Con esto así sin mas, se programa el PIC. A continuación paso a poner unas fotos del programa, programador, y las opciones de configuración del programa para este programador...
Pinchando en cualquiera de las imágenes siguientes os bajareis el fichero .hex que hace falta para programar el PIC con el programa del regulador de velocidad. Recordad que estos pic's son OTP, osea (ONE TIME PROGRAMABLE) programables una sola vez...

iCprog
Este es el aspecto del programa que pasa el fichero .hex al pic...

configuracion iCprog
Ventana de opciones del programa según el programador usado. En este caso, el TE20...

programador pics
Aspecto del programador TE20...


Y si buscáis mas información relacionada con ese tipo de circuitos, solo tenéis que iros al
http://www.google.com
y poner "ESC" (Electronic Speed Controller)...

Espero que no sufráis mucho con el circuito y que lo disfrutéis...