Software de Control de 4 motores Paso a Paso por el Puerto Paralelo...
 
 
Antes de leer este articulo debemos sabernos la leccion de:
  Funcionamiento del Puerto Paralelo del PC...
  Funcionamiento de los motores Paso a Paso Unipolares de 4 Fases...
  Filosofia de control de los motores con el integrado ULN2083...
  Filosofia de control de 4 motores con el integrado 74LS574...
 
 
Con lo que el tema que nos abarca es simple y sencillamente el de explicar brevemente el funcionamiento del controlador de 4 motores y el software de control del mismo.
Si ya hemos leido con atencion el apartado de motores paso a paso de mi pagina, tomamos como conclucion que el tema se limita a enviar una secuencia de señales (bytes)por el puerto LPT a intervalos de tiempo determinado para que el motor gire en un sentido u otro y a una velocidad u otra.
Pues bien, el programa lo unico que hace es tener almacenada en memoria la codificacion de señales que se indican abajo y enviarlas secuencialmente por el puerto paralelo con un retardo dado. Si tenemos claro los cuadros de abajo:
 
 Relacion entre los Bits de cada Byte enviado y los pins de la clavija del puerto paralelo:
 
 
 La clavija es la que esta en el ordenador vista desde fuera...
 
 
PIN
D7
D6
D5
D4
D3
D1
D1
D0
BIT
7
6
5
4
3
2
1
0
 
 
 
Para controlar un motor PAP Unipolar de Cuatro Fases necesitamos enviar una secuencia de BYTES por el puerto paralelo a intervalos de tiempo constantes de la siguiente forma:
 
Para Simple Activacion: BIT
7
6
5
4
3
2
1
0
   
BOBINADO        
2
3
4
1
   
                   
DEC
HEX
  Pos0
0
0
0
0
0
0
0
1
1
0x01
  Pos1
0
0
0
0
0
0
1
0
2
0x02
  Pos2
0
0
0
0
0
1
0
0
4
0x05
  Pos3
0
0
0
0
1
0
0
0
8
0x08
 
Para Doble Activacion: BIT
7
6
5
4
3
2
1
0
   
BOBINADO        
2
3
4
1
   
                   
DEC
HEX
  Pos0
0
0
0
0
0
0
1
1
3
0x03
  Pos1
0
0
0
0
0
1
1
0
6
0x06
  Pos2
0
0
0
0
1
1
0
0
12
0x0C
  Pos3
0
0
0
0
1
0
0
1
9
0x09
 
Para 
Simple
+
Doble
BIT
7
6
5
4
3
2
1
0
   
  BOBINADO        
2
3
4
1
   
                   
DEC
HEX
  Pos0
0
0
0
0
0
0
0
1
1
0x01
  Pos1
0
0
0
0
0
0
1
1
3
0x03
  Pos2
0
0
0
0
0
0
1
0
2
0x02
  Pos3
0
0
0
0
0
1
1
0
6
0x06
  Pos4
0
0
0
0
0
1
0
0
4
0x05
  Pos5
0
0
0
0
1
1
0
0
12
0x0C
  Pos6
0
0
0
0
1
0
0
0
8
0x08
  Pos7
0
0
0
0
1
0
0
1
9
0x09
 
 
 
Esto es solo para un motor, si queremos controlar dos, solo tenemos que utilizar tambien los bites del 4 al 7 con la misma codificacion que para los bites 0 a 3. como estamos trabajando en hexadecimal, solo tenemos que multiplicar el valor anterior por 16 y asi pasamos la codificacion de los bites 0 a 3 a los bites 4 a 7.
Pues bien, como no se pretende dar un curso de programacion en C, sino, explicar brevemente el algoritmo del programa de control de dos motores pap de forma sencilla, os adjunto el codigo fuente del programa para que podais ver las tripas del mismo...
 
 
 
Electronica de control de 4 motores PAP por el puerto Paralelo...
 
En cuanto a la parte electronica, esta esta basada en dos tipos de integrados. El 74LS574 y el ULN2083.
 
En cuanto al 74LS574 dire que es un integrado que tiene 8 flip-flop controlados mediante el pin CLK y con tecnologia TTL. Para la gente de a pie, como yo, esto quiere decir que es un integrado capaz de memorizar el estado de las ocho patas de entrada cuando la señal de la pata CLK pasa de 0 a 5V manteniendo dicha señal en sus 8 patas de salida mientras que no se le vuelva a indicar en la pata CLK que memorice un nuevo estado.
Asi consigo que los datos enviados por el puerto paralelo sean duplicados ya que mediante la pata CLK de cada integrado indico cual de ellos debe memorizar la señal enviada.
 
El ULN2083 es un array de ocho transistores NPN de emisor comun y compatible TTL. Esto ultimo significa que trabaja con 5V en la parte logica del integrado, cosa que es totalmente compatible con el puerto paralelo y con el 74LS574 ahorrando mucha electronica auxiliar.
Para que lo tengamos mas claro, el ULN2083 funciona como ocho interruptores controlados por sus ocho patas de entrada que son capaz de soportar un consumo de 500mA por lo que conseguimos que las señales enviadas por el puerto paralelo y posteriormente captadas por cada uno de los 74LS574 tengan la capacidad de coontrolar consumos de hasta 500mA y a un voltaje que depende del voltaje al que se alimente el ULN2083 que en el caso del controlador es de 12V. Esto significa que si vecesitamos controlar los motores con otra tension que no sea 12V, solo tenemos que cambiar la tension de 12V por la que sea con la que trabajan los motores. Para mas datos, teneis que mirar la hoja de caracteristicas del ULN2083. Cuidado al subir la tension por encima de los 12V ya que debereis cambiar las resistencias de los leds teniendo en cuenta la nueva tension de trabajo. Esto se hace con la siguiente formula: R = (Vmotor - 1.5) / 0.01A ya que los leds tienen una caida de tension de unos 1.5V y trabajan con unos 10mA.
 
Asi quedaria el esquema del controlador donde las ocho patas de netradas de cada 74LS574 van en paralelo y conectados al puerto de Datos del puerto paralelo y mediante dos bites del puerto de Control del puerto paralelo controlamos sendos pines de CLK de cada 74LS574 para indicar a cada integrado cuando deben memorizar el estado del puerto de Datos.

Con esto la secuencia de enviar señales a los motores se limita a:
1_ Poner a 0V los pines C0 y C1 del puerto de Control del LPT
2_ Enviar la señal para los motores 1 y 2
3_ Poner a 5V el pin C0 del puerto de Control para que memorice la señal el integrado 1
4_ Enviar la señal para los motores 3 y 4
5_ Poner a 5V el pin C1 del puerto de Control para que memorice la señal el integrado 2

Y asi para cada paso de envio de señal.
Recordad que los bits C0 y C1 del puerto de control estan invertidos por lo que enviando un 1 tenemos 0V en el pin y enviando un 0 tenemos 5V.

Asi quedaria la placa del controlador vista desde los componentes.
Creo que queda claro el conexionado de cada una de sus entradas y salidas donde a la salida del ULN le he puesto unos diodos leds para controlar visualmente el estado de cada bobina.

La lista de componentes es:
1 - Placa circuito impreso de 100X100
2 - Integrados 74LS574 con zocalos
2 - Integrados ULN2083 o ULN2803 con zocalos
2 - Diodos Zener de 12V 0.5w
16 - Diodos led del color que querais
16 - Resistencias de 1K
1 - Regelta de conexiones de 11 tomas
2 - Regletas de conexiones de 9 tomas

Con esto y con el FOTOLITO en PDF que adjunto podeis hacer el controlador.

Debeis tener mucho cuidado con esto ya que cualquier error podria dañar vuestro PC, por lo que si no entendeis bien claro el esquema os recomiendo que busqueis a un amigo que sepa un poco de electronica.
Yo ya tengo hecho mas de 5 controladores y todos funcionan perfectamente, por lo que no me hago responsable de lo que pueda suceder por su uso.

Y asi quedaria el circuito si lo instalamos todo correctamente. Debeis tener en cuenta que el comun de los motores y de los Leds es el positivo por lo que se debe tener especial cuidado en la posicion en la que soldemos los Leds.

Mas sencilla imposible, y recordad, a la limitacion de componentes le viene relacionada un especial cuidado en su uso ya que no tiene ningun tipo de proteccion contra burradas o sobreintensidades, etc...

Para la alimentacion de este circuito yo he utilizado una fuente de ordenador ya que estas fuentes tienen las dos tensiones, 5 y 12V donde ambas alimentaciones tienen el negativo comun y el criterio de colores es el indicado en la fotografia.
  Masa -> Negro
  5V     -> Rojo
  12V   -> Amarillo

Ala, a disfrutarlo...

 
 
 
Programa de control de los 4 motores PAP con el esquema antes indicado...
 
Basicamente, el programa lo que hace es tener almacenado la codificacion de señales dependiendo del tipo de activacion en la que queramos hacer trabajar el motor y con un contador llevamos la cuenta de la señal que se ha enviado para asi seguir la secuencia correcta. Para variar la velocidad, lo que se hace es controlar el tiempo que tardamos en enviar una señal desde que se envio la anterior (en milisegundos). Y basicamente eso es todo el programa. Si quereis ver el codigo fuente del mismo en C lo teneis aqui.
 
Si hemos leido el articulo del controlador de dos motores pap, este es lo mismo pero que envia dos secuencas de señales de forma consecutiva, una para los primeros dos motores y la otra para los otros dos.
 
Si le echamos un vistazo al programa podemos ver que esta realizado en MSDOS. Esto es debido a la necesidad de un control en tiempo real de las señales a enviar y a la intension de usar un ordenador muy basico que controle los motores sin necesidad de usar nuestro PC moderno para algo tan rudimentario. Yo uso ordenadores 486 antiguos para el control de mis maquinas y asi no malgasto la vida util de mi Pentium 166MMX que es con el que programo. Por ahi he visto que venden estos 486 a unas 3000 pts osea a unos 18 euros.
El programa tambien funciona bajo windows pero de vez en cuando sufre unos parones debido a que el sistema controla los puertos del PC y realiza operaciones periodicas, nada importante pero molestas...
 
Antes de continuar con la explicacion del programa, os dire que esta programado para un uso correcto del mismo ya que no he invertido tiempo en programarle proteccion contra burradas provenientes del manazas que lo use. Esto lo digo ya que no os debe extrañar si al hacer algo con el mismo pasan cosas raras y ante tal situacion os recomiendo salir del programa y volver a entrar. Lo siento, pero yo consigo usarlo correctamente sin problema alguno y por eso no lo sigo desarrollando en esa direccion.
El programa es bien simple. Se configura y se usa. Esto quiere decir que tiene unas opciones de configuracion y luego se le pone a trabajar.
 
Atencion, para que el programa funcione correctamente el puerto paralelo tiene que estar configurado como EPP o ECP en la BIOS del ordenador.
 
Las opciones de configuracion son las isguientes:
 
OPCION  TECLA  DESCRIPCION
Puerto LPT
1, 2 o 3
Seleccionamos el puerto LPT por el que se enviaran las señales. el programa reconoce los puertos instalados indicandolo por la direccion base de dicho puerto y si esta insataldo, al seleccionarlo aparece la palabra ACTIVADO a la derecha del mismo...
Modo Act.
4, 5 o 6
Especifica el modo de activacion en que queremos que trabaje el programa. dependiendo de la tecla pulsada alarece a la derecha de la pantalla el modo elegido...
Velocidad
v
Especificamos un par de datos en milisegundos que se refieren al tiempo de retardo que transcurrira entre una señal y la siguiente. El dato esta compuesto por un par de numeros que significan e tiempo que queremos que esten las bobinas encendidas y el tiempo que queremos que esten apagadas.
¿Esto que significa?, pues que si queremos que se envien señales cada 10 milisegundos, podemos poner como velocidad (10 - 0) lo que significa que cada vez que se envien las señales estaran las bobinas 10 milisegundos encendidas antes de enviar la siguiente señal o podemos configurar la velocidad como (4 - 6) lo que quiere decir que despues de enviar una señal, las bobinas estaran 4 milisegundos encendidas  y 6 milisegundos apagadas antes de enviar la señal siguiente. En total habra un intervalo de tiempo de 10 milisegundos pero los 6 ultimos seran con las bobinas apagadas. Esto es asi ya que si seleccionamos una velocidad muy lenta, las bobinas de los motores estaran mucho tiempo encendidas y por consiguiente se calentaran los motores y con esta opcion de apagar las bobinas podemos hacer trabajar menos las bobinas para velocidades muy lentas...
Fichero
f
Seleccionamos un fichero de comandos para que el controlador realice movimientos especificados por un fichero y asi controlar la maquina en la que esten instalados los motores. El fichero debe tener la extension ".fpt"...
Origen
o
Movimiento manual de los motores. Se le especifican los pasos que queremos que den los motores de forma manual...
Iniciar Ejecucion
i
Inicia la ejecucion del fichero de comandos o del proceso pendiente. Una vez seleccionado el fichero, debemos pulsar la tecla i para que comience el proceso del fichero...
Salir
s
Salimos del programa...
*El teclado debe estar en minusculas...
 
 
Las opciones de teclado mientras que se ejecuta un fichero son las isguientes:
 
OPCION  TECLA  DESCRIPCION
Aumentar tiempo
de retardo...
+
Si mientras se ejecuta un fichero pulsamos la tecla '+' , entonces veremos como se incrementa el tiempo de retardo de señal con lo que la velocidad de movimiento de los motores se reducira...
Disminuir tiempo
de Retardo...
-
Si mientras se ejecuta un fichero pulsamos la tecla '-' , entonces veremos como se decrementa el tiempo de retardo de señal con lo que la velocidad de movimiento de los motores aumentara...
Pausar la ejecucion
del fichero...
OTRA
Si pulsamos un tecla cualquiera, entonces nos pregunta si queremos abortar la ejecucion del fichero, si respondemos que si el programa da por terminado el fichero y se queda en espera de nuevas instrucciones. si respondemos que no, el programa pasa a modo cambiar configuraciones menos el nombre del fichero ya que hay uno en ejecucion. Cuando hayamos acabado pulsamos la tecla "i" para continuar...
Continuar con la
Ejecucion...
i
Continua con la ejecucion del fichero de comandos o del proceso pendiente. Una vez seleccionado el fichero, debemos pulsar la tecla i para que comience el proceso del fichero...
*El teclado debe estar en minusculas...
 
 
Aspecto del programa controlador...
 
Y esta es la apariencia del programa. Os sugiero que lo useis un poco sin conectar nada al puerto paralelo y hagais pruebas con el sobre todo lo arriba indicado.
Como no tiene muchas opciones de uso, espero que no tardeis en aprender como funciona ya que me consta que su funcionamiento es correcto a pesar de ser muy elemental...
EL EJECUTABLE LO TENEIS AQUI...
 
 
 
Formato del Fichero de Comandos para el controlador...
 
Pero para que todo esto tenga una aplicacion practica, el programa se ha planteado como un interprete de un tipo de ficheros especifico. Digamos que ese fichero lo que hace es dar instrucciones de lo que debe hacer el programa en cada momento, por lo que dependiendo de lo que contenga el fichero haremos lo que nos interese con los motores.
Por lo tanto, es en dicho fichero donde se codifican las instrucciones especificas de cada maquina a la que esten conectados los motores.
El fichero debe ser de texto y su sintaxis es muy simple; Comando, dato1,dato2,...
Los comandos que acepta son:
 
 
Descripcion Comando
Comando
Dato1
Dato2
Dato1
Dato1
 
 
 
 
   
Velocidad
1
Tiempo Encendido (ms) (entero)
Tiempo Apagado (ms) (entero)
   
Puerto Lpt
2
Numero Puerto (1, 2, 3) (entero)
0
   
Mensaje en pantalla
3
Mensaje 1 (caracter)
Mensaje 2 (caracter)
   
Tiempo Pausa
4
Tiempo Segundos (entero)
0
   
Modo Activacion
5
Modo (0, 1 , 2) (entero)
0
   
Factor de escala
9
Escala Motor 1 (entero)
Escala Motor 2 (entero)
Escala Motor 3 (entero)
Escala Motor 4 (entero)
Movimiento motores
10
Pasos Motor 1 (entero)
Pasos Motor 2 (entero)
Pasos Motor 3 (entero)
Pasos Motor 4 (entero)
Fin fichero
-1
0
0
   
 
 
Un ejemplo de fichero seria:
 
1,10,0
2,1,0
3,Fichero,Ejemplo
5,0,0
4,5,0
9,1,1,1,1
10,100,200,300,400
10,15,365,256,1024
10,-58,+487,65,78
-1,0,0
Velocidad
Puerto Lpt
Mensaje
Activacion Simple
Pausa de 5 segundos
Factor de escala
Movimiento de motores
Movimiento de motores
Movimiento de motores
Fin fichero
 
Pues Bien, dicho fichero debe estar en la misma ruta que el programa y para su generacion ya debemos tener un poco mas de conocimientos de programacion debido a que todo dependera de a que tipo de maquina esten conectados los motores para generar un tipo de fichero.
En resumen, lo que aqui se ha explicado no es mas que un simple driver de 4 motores paso a paso que es capaz de recibir ordenes desde un fichero y mover los motores segun dichas ordenes...
 
Solo me queda advertiros que el software esta todavia en fase de desarrollo por lo que tiene mas de un fallo, sobre todo a la hora de la interface con el usuario y que la intencion de esta pagina no es la de hacer clientes, sino todo lo contrario, es la de poner al alcance de todos la situacion actual de mi proyecto para facilitarle la labor a los que como yo no decidimos a rompernos la cabeza con estas cosas.
 
Sin mas, dependiendo del tipo de sigerencias que me vayan llegando pondre una pagina con las cuestiones mas importantes que vayan surguiendo.