Вы находитесь на странице: 1из 11

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
BIT 7 6 5 4 3 2 1 0
+
Doble
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
y2
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
y4
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


Seleccionamos el puerto LPT por el que se enviaran las señales. el
programa reconoce los puertos instalados indicandolo por la direccion
Puerto LPT 1, 2 o 3
base de dicho puerto y si esta insataldo, al seleccionarlo aparece la
palabra ACTIVADO a la derecha del mismo...
Especifica el modo de activacion en que queremos que trabaje el programa.
Modo Act. 4, 5 o 6 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...
Seleccionamos un fichero de comandos para que el controlador realice
Fichero f movimientos especificados por un fichero y asi controlar la maquina en la que
esten instalados los motores. El fichero debe tener la extension ".fpt"...
Movimiento manual de los motores. Se le especifican los pasos que queremos
Origen o
que den los motores de forma manual...
Inicia la ejecucion del fichero de comandos o del proceso pendiente. Una vez
Iniciar
i seleccionado el fichero, debemos pulsar la tecla i para que comience el
Ejecucion
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 Si mientras se ejecuta un fichero pulsamos la tecla '+' , entonces
tiempo + veremos como se incrementa el tiempo de retardo de señal con lo que
de retardo... la velocidad de movimiento de los motores se reducira...
Disminuir Si mientras se ejecuta un fichero pulsamos la tecla '-' , entonces
tiempo - veremos como se decrementa el tiempo de retardo de señal con lo
de Retardo... que la velocidad de movimiento de los motores aumentara...
Si pulsamos un tecla cualquiera, entonces nos pregunta si queremos abortar la
Pausar 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,
ejecucion OTRA
el programa pasa a modo cambiar configuraciones menos el nombre del
del fichero... fichero ya que hay uno en ejecucion. Cuando hayamos acabado pulsamos la
tecla "i" para continuar...
Continuar Continua con la ejecucion del fichero de comandos o del proceso pendiente.
con la i Una vez seleccionado el fichero, debemos pulsar la tecla i para que comience
Ejecucion... el proceso del fichero...
*El teclado debe estar en minusculas...

Aspecto del programa controlador...


Y
ap
pr
su
us
si
na
pa
ha
co
to
in
C
m
op
us
qu
en
co
ya
co
fu
es
pe
m
el

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 Dato1 Dato2 Dato1 Dato1
Comando

Tiempo Encendido Tiempo Apagado


Velocidad 1
(ms) (entero) (ms) (entero)
Numero Puerto (1,
Puerto Lpt 2 0
2, 3) (entero)
Mensaje en Mensaje 1 Mensaje 2
3
pantalla (caracter) (caracter)
Tiempo Segundos
Tiempo Pausa 4 0
(entero)
Modo (0, 1 , 2)
Modo Activacion 5 0
(entero)
Escala Motor 1 Escala Motor 2 Escala Motor Escala Motor
Factor de escala 9
(entero) (entero) 3 (entero) 4 (entero)
Movimiento Pasos Motor 1 Pasos Motor 2 Pasos Motor Pasos Motor
10
motores (entero) (entero) 3 (entero) 4 (entero)
Fin fichero -1 0 0

Un ejemplo de fichero seria:

1,10,0 Velocidad
2,1,0 Puerto Lpt
3,Fichero,Ejemplo Mensaje
5,0,0 Activacion Simple
4,5,0 Pausa de 5 segundos
9,1,1,1,1 Factor de escala
10,100,200,300,400 Movimiento de motores
10,15,365,256,1024 Movimiento de motores
10,-58,+487,65,78 Movimiento de motores
-1,0,0 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.

Вам также может понравиться