Una Controladora Bipolar para motores Paso a Paso de Potencia, controlada con un microcontrolador 16F627/8...
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:
. Trabaja con dos señales de control, Sentido y Paso...
. Bloqueo del motor cortocircuitando todas las bobinas -> no consume corriente en reposo...
. Sistema de activación de semi-paso descompensado...
Funciones que NO incorpora:
. Sistema de protección contra sobre intensidades (se quema si el motor consume mas de lo que soportan los transistores)...
DESCRIPCIÓN DE FUNCIONAMIENTO...
Básicamente se trata de hacer un aparato que sea capaz
de estar pendiente de cuando se le da la orden de dar un paso y según la
señal del sentido en que debe darlo, realice la activación y desactivacion
del array de puentes H, formados por los transistores Mosfets, para que las
bobinas del motor bipolar queden activadas en la posición deseada.
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 16F628 (también se puede usar el 16F627 pero es igual que el 628 y con menos memoria) 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 bueno a destacar, es que se puede programar todas las veces que queramos...
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.. Para este esquema
se ha usado Mosfets IRFZ44N para conmutar el negativo e IRF5305 para el
positivo.
|
EL ESQUEMA DE LA CONTROLADORA...
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:
Pinchar sobre la imagen
para descargarse el PDF con el esquema...
PRECAUCIONES:
Como se ha dicho antes, esta controladora maneja grandes cantidades de corriente por lo que hay que tener mucho cuidado con la polarización de la fuente de alimentación y con el consumo del os motores, ya que ambas cosas pueden hacer volara por los aires todo el invento...
DESCRIPCIÓN DEL PROGRAMA DEL PIC 16F628:
Por si todavía no se sabe, el motor paso a paso funciona de la siguiente forma:
|
Simple-Activacion
Doble-Activacion
|
Las bobina de un motor paso a paso
están dispuestas de forma esquemáticas en le motor de la forma en como indican
las imágenes a la izquierda.
Como se aprecia, hay dos modos simples de controlar los motores. Uno es bobina a bobina independientemente, llamado Simple Activación. Y el segundo es activar las bobinas dos a dos para que el rotor se posicione entre las dos bobinas y así el motor tiene mas fuerza pero consume el doble. Ambas formas tiene un problema de control, y no es otro que el debido a que el rotor debe dar un salto relativamente grande entre un paso y otro haciendo que el sistema presente un problema de resonancia que puede afectar a la perdida de pasos del motor a frecuencias mas lentas que la máxima que nos permite el motor. Para solventar esto en cierta forma, lo que hago yo es trabajar en semipaso descompensado. Esto quiere decir que el motor trabaja en simple activación y en doble activación. Veamos que es lo que hago: Suponiendo que el rotor esta posicionado en la bobina 1 ,como si se tratara de Simple Activación solamente, a la hora de querer que el rotor pase a la posición de la bobina 2 lo que hago es activar la 2 sin desactivar la 1, así consigo que el motor arranque con mas fuerza y pase a la posición intermedia y luego desactivo la bobina 1 dejando el rotor ya en la posición de la bobina 2. Y lo llamo descompensado ya que el tiempo que estan las dos bobinas activadas a la vez es distinto al que esta la bobina destino activada ya que la doble activacion solo la uso para el instante de vencer la inercia del rotor y ya con la inercia vencida, no necesito mas que activar la bobina de destino para que el rotor se pare... |
Pues ya con esto claro, paso a explicar como funciona el programa
del pic.
El pic esta programado para llevar la
cuenta de los pasos que esta dando y en funcion de esto realizar la activacion
de los Mosfets para que las bobinas de los motores queden activadas correctamente.
Y bueno, ya en este punto solo me queda poner el código en Ensamblador
del PIC para quien quiera utilizarlo lo haga...
;*******************************************************************
; Function: Control de Mosftes para MotorPAP bipolar
; Processor: PIC16F628 at 4 MHz usando internal RC oscillator
; Hardware: 628papB
; Filename: 628papB.asm
; Author: modificado para mantener doble polarizacion durante 1 ms
; Website: www.terra.es/personal/franpr
;*******************************************************************
;
;
; ---- ----
; | 0 |
; | |
; | 7| pSent
; | 6| pEnab
; Vss | | Vdd
; MnegH2 |0 7| MnegH0
; MposH2 |1 6| MposH0
; MposH3 |2 5| MnegH1
; MnegH3 |3 4| MposH1
; ---------
;
;-------------------------------------------------------------------------------------------
;
;Estado de las Bobinas Segun Posicion
;
; Bridge 00 Bridge 01 Bridge 10 Bridge 11
; OFF OFF OFF OFF OFF
; BRK_N N N N N
;
; P0 P N OFF OFF
; P1 OFF OFF P N
; P2 N P OFF OFF
; P3 OFF OFF N P
;
; P01 P N P N
; P12 N P P N
; P23 N P N P
; P30 P N N P
;
;
; Bridge 00 Bridge 01 Bridge 10 Bridge 11
; Mosf N Mosf P Mosf N Mosf P Mosf N Mosf P
Mosf N Mosf P
; OFF 0 1 0 1 0 1 0 1
; BRK_N 1 1 1 1 1 1 1 1
;
; P0 0 0 1 1 0 1 0 1
; P1 0 1 0 1 0 0 1 1
; P2 1 1 0 0 0 1 0 1
; P3 0 1 0 1 1 1 0 0
;
; P01 0 0 1 1 0 0 1 1
; P12 1 1 0 0 0 0 1 1
; P23 1 1 0 0 1 1 0 0
; P30 0 0 1 1 1 1 0 0
;
;
; PortB 0 1 2 3 4 5 6 7
; Mosf 4 5 7 6 3 2 1 0
;
; OFF 0 1 1 0 1 0 1 0
; BRK_N 1 1 1 1 1 1 1 1
;
; P0 0 1 1 0 1 1 0 0
; P1 0 0 1 1 1 0 1 0
; P2 0 1 1 0 0 0 1 1
; P3 1 1 0 0 1 0 1 0
;
; P01 0 0 1 1 1 1 0 0
; P12 0 0 1 1 0 0 1 1
; P23 1 1 0 0 0 0 1 1
; P30 1 1 0 0 1 1 0 0
;
; Invertido por ULN
; OFF 1 0 0 1 0 1 0 1
; BRK_N 0 0 0 0 0 0 0 0
;
; P0 1 0 0 1 0 0 1 1
; P1 1 1 0 0 0 1 0 1
; P2 1 0 0 1 1 1 0 0
; P3 0 0 1 1 0 1 0 1
;
; P01 1 1 0 0 0 0 1 1
; P12 1 1 0 0 1 1 0 0
; P23 0 0 1 1 1 1 0 0
; P30 0 0 1 1 0 0 1 1
;
;
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system
#include "P16F628.INC" ; Include header file
__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF &
_PWRTE_OFF & _BODEN_OFF &_MCLRE_OFF
;
; --------------------------------
; Definicion de DEFINES
; --------------------------------
;
#define piEnab PORTA,6
#define piSent PORTA,7
#define poOFF b'10101001'
#define poPos0 b'11001001'
#define poPos1 b'10100011'
#define poPos2 b'00111001'
#define poPos3 b'10101100'
#define poPos01 b'11000011'
#define poPos12 b'00110011'
#define poPos23 b'00111100'
#define poPos30 b'11001100'
#define poBrkN b'00000000'
;#define isPinHj btfss
#define isPinLj btfss ;invertido ya que el buffer de entrada
invierte las señales
#define isPinHj btfsc ;invertido ya que el buffer de entrada
invierte las señales
;
; --------------------------------
; Declaracion de variables
; --------------------------------
;
CBLOCK 0x20 ; Declare variable addresses starting
at 0x20
dStepPos
dpoPosMed
dpoPosAct
dataL
PDel0
PDel1
ENDC
;
; --------------------------------
; Empieza el pograma...
; --------------------------------
;
ORG 0x000 ; Program starts at 0x000
bcf STATUS,RP1 ; RAM PAGE 0
bcf STATUS,RP0 ; RAM PAGE 0
;
; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------
;
movlw 7
movwf CMCON ; CMCON=7 set comperators off
;
; ----------------------
; INITIALIZE PORTS
; ----------------------
;
movlw b'00000000' ; set up portA
movwf PORTA
movlw b'00000000' ; set up portB
movwf PORTB
bcf STATUS,RP1 ; RAM PAGE 1
bsf STATUS,RP0 ; RAM PAGE 1
movlw b'11111111' ; portA all pins input
movwf TRISA
movlw b'00000000'
movwf TRISB ; portB all pins output
bcf STATUS,RP1 ; RAM PAGE 0
bcf STATUS,RP0 ; RAM PAGE 0
;
; ----------------------
; INITIALIZE VARIABLES
; ----------------------
;
movlw 0x00 ;Inicializo a 1 la Posicion Actual del Rotor
movwf dStepPos
movlw poPos0 ;Inicializo el estado Medio de las Bobinas
a Pos1
movwf dpoPosMed
;
; ----------------------
; INITIALIZE PROGRAMA
; ----------------------
;
gInicio
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
gWaitP isPinHj piEnab
goto gWaitP
movlw poOFF
movwf PORTB
movf dpoPosAct,W ;Activo las bobinas en Paso Actual antes de
dar el paso
movwf PORTB
isPinHj piSent
goto gDoStepDown
goto gDoStepUp
gDoStep
movlw .50
call DEMORA ;0.25ms en Activacion
Previa
movlw poOFF ;Doy Paso Medio -> Hasta Aqui han
pasado 22us.
movwf PORTB
movf dpoPosMed,W
movwf PORTB
movlw .150
call DEMORA ;0.75ms en Doble
Activacion
movlw poOFF ;Doy Paso Actual
movwf PORTB
movf dpoPosAct,W
movwf PORTB
movlw .8 ;8x0.25ms=2ms
call DEMORA1 ;2ms como Maximo en Simple Activacion
gD1RetH
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
gWaitEL isPinLj piEnab
goto gWaitEL
goto gWaitP
gD1RetL
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
goto gWaitP
;
; ----------------------
; Funciones de DarPaso
; ----------------------
;
gDoStepUp
movf dStepPos,W
ADDWF PCL, F
goto gStep01
goto gStep12
goto gStep23
goto gStep30
gStep01 movlw 0x01
movwf dStepPos
movlw poPos01
movwf dpoPosMed
movlw poPos1
movwf dpoPosAct
goto gDoStep
gStep12 movlw 0x02
movwf dStepPos
movlw poPos12
movwf dpoPosMed
movlw poPos2
movwf dpoPosAct
goto gDoStep
gStep23 movlw 0x03
movwf dStepPos
movlw poPos23
movwf dpoPosMed
movlw poPos3
movwf dpoPosAct
goto gDoStep
gStep30 movlw 0x00
movwf dStepPos
movlw poPos30
movwf dpoPosMed
movlw poPos0
movwf dpoPosAct
goto gDoStep
; ----------------------
gDoStepDown
movf dStepPos,W
ADDWF PCL, F
goto gStep03
goto gStep10
goto gStep21
goto gStep32
gStep03 movlw 0x03
movwf dStepPos
movlw poPos30
movwf dpoPosMed
movlw poPos3
movwf dpoPosAct
goto gDoStep
gStep10 movlw 0x00
movwf dStepPos
movlw poPos01
movwf dpoPosMed
movlw poPos0
movwf dpoPosAct
goto gDoStep
gStep21 movlw 0x01
movwf dStepPos
movlw poPos12
movwf dpoPosMed
movlw poPos1
movwf dpoPosAct
goto gDoStep
gStep32 movlw 0x02
movwf dStepPos
movlw poPos23
movwf dpoPosMed
movlw poPos2
movwf dpoPosAct
goto gDoStep
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEMORA movwf PDel0
PLoop0 nop ; este bucle dura 5us
nop
decfsz PDel0, F
goto PLoop0 ; 2 no, loop
return ;
DEMORA1 movwf PDel1
DEMRA11 movlw .50
movwf PDel0
PLoop2 isPinHj piEnab ; Bucle de 5 us. Compruebo que piEnab
este en HIGH
goto PLoop3
decfsz PDel0, F
goto PLoop2 ; 2 no, loop
decfsz PDel1, F
goto DEMRA11 ; 2 no, loop
goto gD1RetH
DEMRA12 movlw .50
movwf PDel0
PLoop3 isPinLj piEnab ; Bucle de 5 us. Compruebo que piEnab
este en LOW
goto gWaitP
decfsz PDel0, F
goto PLoop3 ; 2 no, loop
decfsz PDel1, F
goto DEMRA12 ; 2 no, loop
goto gD1RetL
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...
Este es el aspecto del programa que pasa el fichero .hex al pic...
Ventana de opciones del programa según el programador usado. En este
caso, el TE20...
Aspecto del programador TE20...
Espero que no sufráis mucho con el circuito y que lo disfrutéis...
Motor Paso a Paso de mi fresadora... |
Tres Controladoras Bipolares... |