30 sept. 2012

Moviendo un motor paso a paso con el puerto paralelo sin integrados (Jugando con hardware)

Esta vez vamos a jugar un poco con hardware, específicamente lo que haremos será mover un motor PAP (paso a paso) a través de la PC haciendo uso únicamente de transistores y sin usar ningún circuito integrado.

Para empezar es conveniente documentarse un poco del funcionamiento de este tipo de motores http://es.wikipedia.org/wiki/Motor_paso_a_paso


Sabemos que para hacer girar un motor PAP Bipolar tenemos que dar pulsos secuenciales en sus 4 cables (Que llamaremos A, B, C y D), pero alternando la polaridad, por lo que la circuito necesario se complica un poco, mientras que para los Unipolares este problema desaparece, así que empezaremos por jugar con los motores PAP Unipolares.






Unipolares:

Esquema de conexión en el puerto paralelo:

Me parece que queda bastante claro, pero vale aclarar que los "pines" del esquema son los correspondientes del puerto paralelo,  y que estamos usando el nibble bajo del byte del puerto; además se puede ver como los 2 cables "comunes" del motor unipolar se conectan al positivo de la fuente de alimentación, la cual corresponde con la tensión que requiere nuestro motor (en mi caso 9V), y los cables A,B,C y D serán conectados al negativo de la fuente al saturarse los transistores con la señal del puerto. Gracias a Fernando (Aces_High_87) por la ayuda con el lío que tenia con los transistores.

Aquí se puede apreciar de color Rojo los 8 pines de datos del puerto, de los cuales hemos usado 4 (del pin 2 al 5) es decir 4 bits.

Aquí se pude observar el circuito que yo he montado y he usado un cable de puerto paralelo de una vieja impresora, lo cual resulta muy practico.





Código:

Con el circuito montado lo que necesitamos ahora es el código que saque las señales correctas en el orden correcto por el puerto paralelo para mover nuestro motor, y tomando en cuenta también los distintos modos a los que puede trabajar el motor(Simple Step, Double Step, Half Step).

Las secuencias son:



Simple Step: A-B-C-D
Double Step(mayor torque): AB-BC-CD-DA
Half Step(doble precisión al dar medio paso por ves): A-AB-B-BC-C-CD-D-DA

El código no pretende ser un ejemplo de elegancia ni mucho menos, pero funciona... Es solamente una clase la cual usaremos con otro código para controlar el motor

https://github.com/alx741/pp_steppers/blob/master/unipolar.cpp

 

 

Bipolares:

Esquema de conexión en el puerto paralelo:


Aquí he implementado 2 "puentes H" de transistores para controlar ambas bobinas del motor alternando las polaridades usando nuevamente 4 pines de los 8 del puerto


Código:

En este caso el código es más simple puesto que en los motores PAP Bipolares no tenemos distintos "modos" de paso.

https://github.com/alx741/pp_steppers/blob/master/bipolar.cpp



Haciendo girar el motor:

Ahora que tenemos las clases necesarias para mover el motor cuyo circuito ya tenemos montado en el puerto paralelo, usaremos un código que a su vez aproveche dichas clases para jugar con el motor.

Así que ha manera de ejemplo yo he agregado la función main() para el fuente de unipolar.cpp, quedando así (es de lo más simple y tonto):

https://github.com/alx741/pp_steppers/blob/master/rotate.cpp




Una vez compilado con g++ unipolar.cpp -o rotate lo ejecutamos obteniendo este resultado:
 




Que podemos hacer con todo esto?

Pues... Hay que ser muy falto de imaginación para pensar que esto es inútil... pero en realidad publico esto con la intención de publicar más adelante algo mucho más interesante y para lo cual usaremos todo esto.