Controlador de motor PaP con micropasos

Este montaje, basado en PIC16F628A y en LMD18245 permite controlar un motor paso a paso bipolar de hasta 3A a 50V y obtener hasta 10 micropasos por cada paso. De esta forma se convierte un motor convencional de 200 pasos en uno de 2000. 

El driver para motores PaP (Paso a Paso) LMD18245 es algo caro, y en este montaje se necesitan dos, pero permite hacer maravillas en el control del motor con muy pocos componentes adicionales. He tomado como punto de partida el proyecto "Picstep" de Embedded Acquisition Systems, aprovechando que publican el diseño del hardware y los fuentes (aunque no especifican el tipo de licencia). Yo únicamente he añadido los dilswitches al hardware para poder seleccionar distintos modos y funciones sin tener que reprogramar el PIC, aunque para eso he tenido que rehacer bastante código a causa de la estructura interna del PIC que obliga a usar distintas instrucciones para acceder a RAM y ROM.

El circuito alimenta a las bobinas del motor a corriente constante por PWM, seleccionable mediante las resistencias R10-R12 según la tabla:

AMPERIOS RESISTENCIA
1 A 18,75 K
2 A 9,38 K
2,5 A 7,5 K
3 A 6,25 K

El PIC selecciona la corriente, relativa a la máxima seleccionada, que aplicará a cada bobina en cada momento y su polaridad de forma que el rotor se posicione en los puntos deseados. No  voy a detallar aquí como funciona el control de motores PAP a corriente constante ni los modos "full step", "half step", micropasos etc. Para eso ya existe un estupendo tutorial de Douglas W. Jones, lástima que esté en inglés.

Como referencia para los que no estén muy puestos en PAP las dos bobinas se encuentran formando un ángulo de 90 grados. En el modo "full step" el rotor se posiciona en 0º, 90º, 180º, 270º y de nuevo 0º. En el modo "half step" es 0º, 45º, 90º, 135º, 180º etc. Esto se consigue alimentando dos bobinas a la vez, de forma que se combina su poder de atracción. En el modo "full step" la fuerza con que las bobinas atraen al rotor es es X, en el "hasf step" el motor tiene mas par en giro constante, pero los pasos individuales tienen X par en los pasos 0º, 90º etc y X*(raíz de 2) en los pasos 45º, 135º etc. Esto produce vibraciones indeseadas, por lo que existe un modo "half step torque compensated" que hace que todos los pasos tengan el mismo par reduciendo la corriente de las bobinas. Aunque parezca que al alimentar dos bobinas a la vez duplicamos el par del rotor no es cierto, ya que el par es el resultado de la suma vectorial de las fuerzas de atracción de las dos bobinas y solo aumenta en 1,4 (raíz de 2). Combinando las fuerzas de las dos bobinas se puede conseguir posicionar el rotor en cualquier ángulo: son los micropasos. Como decía mejor leer este documento http://www.secyt.frba.utn.edu.ar/gia/SDC16.pdf acerca de los micropasos donde se detalla todo esto mucho mejor.

Con este controlador, cambiando el switch MODO A, se consiguen en un motor estándar de 200 pasos por vuelta (1,8º por paso):

MODO PASOS NOMBRE   4-3-2-1 Cwitch MODE A
 0  200  FULL STEP  OFF-OFF-OFF-OFF
 1  400  HALF STEP  OFF-OFF-OFF-ON
 2  400  HALF STEP (par compensado)  OFF-OFF-ON-OFF
 3  800  MICROSTEP 4  OFF-OFF-ON-ON
 4  1600  MICROSTEP 8  OFF-ON-OFF-OFF
 5  2000  MICROSTEP 10  OFF-ON-OFF-ON
 6  3200  MICROSTEP 16  (Nuevo en versión V4)  OFF-ON-ON-OFF
 7  2400  MICROSTEP 12  (Nuevo en versión V5  OFF-ON-ON-ON

Este es el esquema definitivo:

El circuito se alimenta a través de las clemas X1-X3 a 5V y el motor a una tensión entre 10V y 50V, dependiendo de las necesidades. La frecuencia de conmutación PWM depende de la inductancia del motor usado y del condensador C9-C11 y de la resistencia R9-R11. El motor se conecta en el conector SV1 y las señales de control entran por CON1. El LED 3 (ámbar) indica presencia de tensión del motor, el LED 2 (verde) indica que hay tensión en la rama de 5V y el LED 1 (rojo) se enciende mediante un monoestable con cada pulso de control. La señal BRAKE de los LMD no la utilizo y la pongo a 0 mediante un pullup y un inversor, aunque cualquiera puede usarla si le es de utilidad. La entrada esta disponible en el pin 9 del SN74HC14.

Este es el programa que, grabado en el PIC 16F628A, controla el motor: microstepV3.rar. Está compilado con CCS V4.038 y acepta frecuencias de pulsos de hasta 50 Khz. Estoy trabajando en otro que no usa tablas de SIN-COS en ROM sino que las genera en runtime (durante el arranque) y que funcionará hasta unos 40 Khz, pero dejará libre casi toda la memoria del PIC. El dilswitch MODE A sirve para seleccionar el modo, el MODE B no se usa en esta versión, aunque el programa lo lee y lo pasa a una variable.

El software tiene una pequeña complicación: el LMD18245 tiene un bug (o una "funcionalidad oculta"): el chip solo acepta el cambio de la señal de DIRECCION (pata 11) cuando las entradas M1-M4 están todas a 0. El programador original solucionó esto usando dos tablas de datos: una se envía cuando el motor gira en un sentido y otra cuando gira en el otro, haciendo que las señales de control de dirección DIR A y DIR B solo cambien cuando sus correspondientes M1-M4 sean cero. Yo he mantenido esa solución, y he corregido algunos bytes en las tablas y otros detalles...

Acualizado 13/11/2007: Todavía no he colgado la página y ya he terminado a he terminado la versión 4, que incluye un modo 6 de 16 micropasos, con lo que transforma un motor de 200 pasos en uno de 3200!!. En el nuevo firmware MicrostepV4.rar he eliminado algunas tablas de ROM y ahora las genero en el arranque. Es un poco mas lento (45 Khz de frecuencia máxima) pero queda mucha mas RAM y ROM libre en el PIC para futuras mejoras. La pega es que ahora el funcionamiento del programa se entiende peor, es mucho mas didáctico el firmware anterior:  microstepV3.rar.

Actualizado a 27/11/2007: Ya he construido la mesa "Y" de mi CNC, con DM de 16 mm y guías de cajones. Me parecía una chapuza pero tiene una precisión muy alta, y nada de holguras. Para hacer mas pruebas he incorporado un nuevo modo de trabajo (MODO 7) que genera 12 micropasos por cada paso, con lo que se consiguen 2400 pasos para un motor de 200, una solución de compromiso entre los 2000 del MODO 5 (10 micropasos) y los 3200 del MODO 7 (16 micropasos). Usando una nueva tabla de senos sería posible un modo de 14 micropasos o cualquier otro, limitado por la resolución del DAC del LMD que es de 4 bits... El nuevo firmware para el PIC con sus correspondientes fuentes es este: MicrostepV5.rar. No lo he probado mucho todavía, espero que no tenga ningún fallo...

Este es uno de los prototipos listo para funcionar:

Como siempre, y tratándose de prototipos, me gusta cablearlos sobre placa de circuito impreso de islas con hilo de 0,20 mm, aunque he tenido que utilizar otros mas gruesos para las alimentaciones y salidas del motor que han de soportar 3A. Es un poco tedioso pero permite hacer las correcciones de última hora con facilidad, antes de diseñar un PCB.

Como disipador uso una simple placa de aluminio doblada en L y con unos taladros avellanados para enrasar los tornillos. De esta forma hace de disipador y soporte del conjunto. No olvidarse de interponer un buen aislante entre el circuito impreso y el aluminio:

Las pruebas las he realizado con unos motores bastante lentos, de impresoras IBM. Son Sanyo Step-Syn, 103G770-2517 de 4,1V y 1,1A por fase. Estos motores son unipolares, pero yo los uso en modo bipolar simplemente dejando sin conectar las tomas medias de las bobinas. Desgraciadamente así el motor presenta mucha inductancia y necesita una tensión bastante alta para trabajar, por lo que la frecuencia PWM se disminuye hasta 13Khz produciendo un zumbido audible en el motor. Con este controlador consigo hasta 270 Rpm con un par constante y hasta 2000 pasos por revolución. Tengo pensado usarlos en una máquina CNC en la que la transmisión será un husillo de M8 de 1,25 mm de paso de rosca: 1,25mm / 2000pasos = 0,000625 mm por paso, creo que la mecánica no será tan precisa...

Por último este es el conjunto durante las pruebas. Arriba el generador de funciones para generar la frecuencia de pulsos, debajo la fuente de alimentación de 5V y 25V, a la izquierda el osciloscopio para monitorizar las salidas. Sobre la mesa dos controladores con dos motores...

Inicio.

mailto:helitp@gmail.com