You are on page 1of 16

Una Controladora Bipolar para motores Paso a Paso de Potencia, controlada con un microcontrolador 16F627/8...

Este circuito lo he diseado yo despus 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 dems componentes, garantiza una fiabilidad de funcionamiento en las funciones que le he programado... Funciones que incorpora: . Trabaja con dos seales de control, Sentido y Paso... . Bloqueo del motor cortocircuitando todas las bobinas -> no consume corriente en reposo... . Sistema de activacin de semi-paso descompensado... Funciones que NO incorpora: . Sistema de proteccin contra sobre intensidades (se quema si el motor consume mas de lo que soportan los transistores)...

Os recomiendo que veis todos los artculos relacionados con los motores PaP que tengo en mi pagina para que podis comprender mejor el funcionamiento de esta controladora...

DESCRIPCIN DE FUNCIONAMIENTO... Bsicamente se trata de hacer un aparato que sea capaz de estar pendiente de cuando se le da la orden de dar un paso y segn la seal del sentido en que debe darlo, realice la activacin y desactivacion del array de puentes H, formados por los transistores Mosfets, para que las bobinas del motor bipolar queden activadas en la posicin deseada. Pues bien, todo esto lo hacemos va software ya que hoy en da disponemos de herramientas tan tiles como los microcontroladores , que no son mas que unos pequeos 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 (tambin 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 caractersticas son idneas para este tipo de aplicacin. 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 electrnica, solo me he quedado con la capacidad de conmutar grandes cantidades de corriente sin que para ello se necesite gran potencia de activacin. Segn 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 activacin, 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.

*Para mas datos, ya sabis, http://www.google.com/

EL ESQUEMA DE LA CONTROLADORA... Pues, a partir de aqu, lo dems es electrnica 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 polarizacin de la fuente de alimentacin y con el consumo del os motores, ya que ambas cosas pueden hacer volara por los aires todo el invento...

DESCRIPCIN DEL PROGRAMA DEL PIC 16F628: Por si todava no se sabe, el motor paso a paso funciona de la siguiente forma: Las bobina de un motor paso a paso estn dispuestas de forma esquemticas en le motor de la forma en como indican las imgenes a la izquierda. Como se aprecia, hay dos modos simples de controlar los motores. Uno es bobina a bobina Simple-Activacion independientemente, llamado Simple Activacin. 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 Doble-Activacion 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 mxima 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 activacin y en doble activacin. Veamos que es lo que hago: Suponiendo que el rotor esta posicionado en la bobina 1 ,como si se tratara de Simple Activacin solamente, a la hora de querer que el rotor pase a la posicin 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 posicin intermedia y luego desactivo la bobina 1 dejando el rotor ya en la posicin 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. PAra hacerlo compatible con todos los soft cncdel mercado, esta controladora trabaja con dos seales, la de Paso y la de Sentido. Cada vez que la seal de dar Paso se activa, el micro comprueba hacia donde lo tiene que dar en funcion del estado de la seal de Sentido. Una vez hecho esto, el programa realiza la activacionen Simple Activacion del estado actual durante un periodo de 0,25ms ya que las bobinas son apagadas cuando el motor lleva un cierto tiempo sin girar.Luego de estos 0,25ms, el programa realiza la Doble Polarizacion para iniciar el arranque del rotor y asi vencer la inercia del mismo durante un tiempo de 0,75ms y luego pasa a Simple Activacion durante un tiempo de 2ms. Todo esto hace que un paso completo se realice en 3ms, pero estos parametros son modificables en el programa dependiendo del motor que tengamos... Una vez pasados estos 3ms el programa cortocircuitea las bobinas a negativo para que esto produzca un efecto de freno e impida que le motor gire cuando estan las bobinas apagadas. El rotor se bloquea ya que sin estar activadas las bobinas, el motor se comporta como un generador el cual al tener las bobinas cortocircuitadas es como hacer que tenga un consumo elevadisimo el generador haciendo que para mover el rotor haga falta realizar una fuerza muy elevada...

Y bueno, ya en este punto solo me queda poner el cdigo 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 decimal system #include "P16F628.INC" ; Use the PIC16F628 and ; Include header file

__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF &_MCLRE_OFF ; ; -------------------------------; Definicion de DEFINES ; -------------------------------; #define #define piEnab piSent PORTA,6 PORTA,7 b'10101001' b'11001001' b'10100011' b'00111001' b'10101100' b'11000011' b'00110011' b'00111100' b'11001100' b'00000000'

#define poOFF #define #define #define #define #define #define #define #define poPos0 poPos1 poPos2 poPos3 poPos01 poPos12 poPos23 poPos30

#define poBrkN

;#define isPinHj btfss #define isPinLj btfss ;invertido ya que el buffer de entrada invierte las seales #define isPinHj btfsc ;invertido ya que el buffer de entrada invierte las seales ; ; -------------------------------; 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 ; RAM PAGE 0 ; RAM PAGE 0

bcf STATUS,RP1 bcf STATUS,RP0

; ; -------------------------------; SET ANALOG/DIGITAL INPUTS PORT A ; -------------------------------; movlw 7 movwf CMCON ; CMCON=7 set comperators off

; ; ---------------------; INITIALIZE PORTS ; ---------------------; movlw b'00000000' movwf PORTA movlw b'00000000' movwf PORTB bcf STATUS,RP1 bsf STATUS,RP0 movlw b'11111111' movwf TRISA movlw b'00000000' movwf TRISB bcf STATUS,RP1 bcf STATUS,RP0

; set up portA ; set up portB

; RAM PAGE 1 ; RAM PAGE 1 ; portA all pins input

; portB all pins output ; RAM PAGE 0 ; RAM PAGE 0

; ; ---------------------; INITIALIZE VARIABLES ; ---------------------; movlw 0x00 ;Inicializo a 1 la Posicion Actual del Rotor movwf dStepPos movlw poPos0 las Bobinas a Pos1 ;Inicializo el estado Medio de

movwf

dpoPosMed

; ; ---------------------; INITIALIZE PROGRAMA ; ---------------------; gInicio movlw movwf movlw movwf gWaitP goto poOFF PORTB poBrkN PORTB isPinHj gWaitP ;Activo Freno

piEnab

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 call .50 DEMORA

;0.25ms en Activacion Previa ;Doy Paso Medio -> Hasta

movlw poOFF Aqui han pasado 22us. movwf PORTB movf dpoPosMed,W movwf PORTB movlw call movlw movwf movf movwf movlw call Activacion gD1RetH movlw .150 DEMORA poOFF PORTB dpoPosAct,W PORTB .8 DEMORA1

;0.75ms en Doble Activacion ;Doy Paso Actual

;8x0.25ms=2ms ;2ms como Maximo en Simple

poOFF

;Activo Freno

movwf movlw movwf gWaitEL goto goto gD1RetL movlw movwf movlw movwf goto

PORTB poBrkN PORTB isPinLj gWaitEL gWaitP poOFF PORTB poBrkN PORTB gWaitP piEnab

;Activo Freno

; ; ---------------------; Funciones de DarPaso ; ---------------------; gDoStepUp movf dStepPos,W ADDWF PCL, F goto gStep01 goto gStep12 goto gStep23 goto gStep30 gStep01 movwf movlw movwf movlw movwf goto gStep12 movwf movlw movwf movlw movwf goto gStep23 movwf movlw movwf movlw movwf movlw 0x01 dStepPos poPos01 dpoPosMed poPos1 dpoPosAct gDoStep movlw 0x02 dStepPos poPos12 dpoPosMed poPos2 dpoPosAct gDoStep movlw 0x03 dStepPos poPos23 dpoPosMed poPos3 dpoPosAct

goto gStep30 movwf movlw movwf movlw movwf goto

gDoStep movlw 0x00 dStepPos poPos30 dpoPosMed poPos0 dpoPosAct gDoStep

; ---------------------gDoStepDown movf dStepPos,W ADDWF PCL, F goto gStep03 goto gStep10 goto gStep21 goto gStep32 gStep03 movwf movlw movwf movlw movwf goto gStep10 movwf movlw movwf movlw movwf goto gStep21 movwf movlw movwf movlw movwf goto gStep32 movwf movlw movwf movlw movwf goto movlw 0x03 dStepPos poPos30 dpoPosMed poPos3 dpoPosAct gDoStep movlw 0x00 dStepPos poPos01 dpoPosMed poPos0 dpoPosAct gDoStep movlw 0x01 dStepPos poPos12 dpoPosMed poPos1 dpoPosAct gDoStep movlw 0x02 dStepPos poPos23 dpoPosMed poPos2 dpoPosAct 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 que piEnab este en HIGH goto PLoop3 decfsz PDel0, F goto PLoop2 decfsz PDel1, F goto DEMRA11 goto gD1RetH DEMRA12 movwf movlw PDel0 .50 ; Bucle de 5 us. Compruebo

; Bucle de 5 us. Compruebo

; 2 no, loop ; 2 no, loop

PLoop3 isPinLj piEnab que piEnab este en LOW goto gWaitP decfsz PDel0, F goto PLoop3 decfsz PDel1, F goto DEMRA12 goto gD1RetL END COMO PROGRAMAR EL PIC...

; 2 no, loop ; 2 no, loop

Esto se hace con un programa llamado ICPROG, que os lo bajis de internet buscndolo en algn buscador, y con un programador que venden en las tiendas de electrnica llamado TE20. Con esto as sin mas, se programa el PIC. A continuacin paso a poner unas fotos del programa, programador, y las opciones de configuracin del programa para este programador... Pinchando en cualquiera de las imgenes siguientes os bajareis el fichero .hex que hace falta para programar el PIC con el programa...<!--[if ! supportLineBreakNewLine]--><!--[endif]-->

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

Ventana de opciones del programa segn el programador usado. En este caso, el TE20...

Aspecto del programador TE20...

Espero que no sufris mucho con el circuito y que lo disfrutis...

Para mi fresadora yo utilizo tres motores como los de la foto de abajo, alimentados con 12V. Con esta sobrealimentacin no tengo problemas de temperatura ni en los motores ni en la controladora y la maquina se mueve a 450mm por minuto. No es mucho, pero es suficiente para hacer lo que tengo pensado hacer con ella. Si sobrealimentara mas los motores, podra aumentar la frecuencia de conmutacinde los pasos del programa del pic y hacer que los motores se muevan mas rpidos pero no me hace falta y as estoy completamente seguro de que la electrnica va sobrada de potencia como para estar tranquilo al dejar la maquina trabajando sola en la cochera mientras yo veo la tele.

Motor Paso a Paso de mi fresadora...

Tres Controladoras Bipolares...

Pagina del autor: http://www.infolaser.net/franpr/

You might also like