Controlador de dos motores paso a paso
[pic]
Aquí se describe un circuito que nos permite controlar dos motores paso
a paso mediante cuatro pulsadores, si queremos también lo podemos hacer
desde el PC a través de un puerto serie con un programa hecho
especialmente para ello. Si sabemos programar en alguno de los lenguajes
habituales: Visual Basic, Delphi, C++ o
cualquier otro que nos permita gestionar el puerto serie podemos hacer un programa de acuerdo a nuestras necesidades.
[pic]Descripción y funcionamiento de un motor
paso a paso:
pic] |Los motores unipolares tienen|[pic] |Los
motores |
| |una toma intermedia en cada | |bipolares no tienen|
| |bobina, esta va a Vcc o a | |toma intermedia en |
| |masa según sea el circuito de| |las bobinas y para |
| |control, luego solo tenemos | |controlarlos se |
| |que alimentar la bobina | |necesita invertir |
| |correspondiente. Tienen 6 | |la alimentación de |
| |cables pero en algunos | |estas con un puente|
| |modelos los dos comunes estan| |en 'H' o un driver |
| |unidos internamente y solo | |del tipo L293. |
| |tienen 5. | | |
En los motores paso a paso se puede regular la velocidad y la dirección
de giro como en los convencionales pero tienen la gran diferencia de que se
pueden dejar en una posición fija y se puede hacer un giro del
número de grados o de vueltas que deseemos. El estator esta hecho
con varias bobinas y el rotor consta de un iman
permanente con un número de polos que depende del angulo de cada paso. El número de pasos por vuelta de estos motores suele ser de
200, 96, 48 o 24. El giro del motor se hace conectando
secuencialmente las bobinas y atrayendo hacia ellas al rotor. Dependiendo de
como se vayan activando esas bobinas podemos hacer girar el motor detres modos
diferentes:
|[pic] |[pic] |[pic] |
|Funcionamiento simple: |Funcionamiento doble: |Medio paso: |
|Las bobinas se activan una a una por|Cada vez se activan dos bobinas,
así|Es una mezcla de las dos anteriores, |
|separado, de esta forma se consigue |el motor tiene mas fuerza ya que
son|primero se activa una bobina y luego |
|un poco menos de fuerza pero el |dos bobinas las que arrastran y |dos,
así el angulo de los pasos se |
|consumo es menor. |sujetan el rotor. |reduce a la mitad al igual que la |
| | |velocidad.
[pic]Características del circuito:
• Permite controlar dos motores unipolares con 4 pulsadores o desde el
PC.
• Velocidad regulable desde 1 a 255 milisegundos por paso.
• Dirección seleccionable.
• Modo de avance de medio paso o de paso completo.
• Desde el PC podemos activar en modo timer para que pare al cabo de un tiempo de 1 a 255 minutos.
• Desde el PC podemos enviar comando de avance de un
número de pasos de 1 a 255.
[pic]Esquema
[pic]
Este circuito se ha diseñado pensando en los motores unipolares que son
los mas corrientes
y mas sencillos de manejar. El microcontrolador PIC16F627 es el
componente principal, él se comunica con el PC a través de la
UART a 9600 bps, recibe del
PC las órdenes y contesta con el estado de los motores(velocidad,
dirección, etc. Como el número de pines del PIC es limitado, dos
de ellos(PB0 y PB3) se han usado para la
conexión de los pulsadores P2 y P4 y ademas para el control de
los indicadores LED1 y LED2, estos indican el estado de los motores, el LED1
indica el estado del motor 1 y el LED2 indica el estado del motor 2, si
estan parados los leds estaran apagados, si los motores
estan en pausa los leds estaran intermitentes y si estan
en marcha los leds estaran encendidos.
La alimentación del circuito debe ir de acuerdo a
la tensión de los motores que vamos a usar. Se ha puesto el diodo D1
para proteger el circuito ante las inversiones de polaridad.
pic] |El circuito integrado ULN2803 se compone|
| |de 8 driverscomo el de la imagen que |
| |pueden manejar intensidades de hasta 500|
| |mA., el PIC controla cada motor a través|
| |cuatro de estos drivers. Si no es |
| |suficiente intensidad para los motores |
| |que queremos controlar o se calienta |
| |demasiado necesitaremos poner cuatro |
| |transistores de potencia adecuados a la |
| |intensidad que consuma nuestro motor, |
| |pero normalmente el ULN ya es suficiente|
| |para la mayoría de motores. |
[pic]Funciones de los pulsadores:
El pulsador P1 sirve para seleccionar el motor que vamos a controlar: si
esta sin apretar controlamos el motor 1 y si esta pulsado
controlaremos el motor 2, el resto de pulsadores P2, P3 y P4 nos permiten poner
en marcha o parar el motor, variar la velocidad, etc.:
Pulsador P1: Si no se pulsa se controla el motor 1 con el resto de pulsadores,
si esta apretado se controla el motor 2.
Pulsador P2: Disminuye la velocidad si el motor esta
en marcha, si esta parado lo pone en pausa y cada
pulsación avanza un paso, si se mantiene apretado el motor girara
continuamente a la izda.
Pulsador P3: A cada pulsación pone en marcha o para el motor. Si se
pulsa mas de 5 segundos graba en la memoria del
PIC el estado actual de los motores(velocidad,
dirección, etc.) y sera como
estaran al encender. Si se mantiene pulsado y al mismo tiempo se pulsa
P1 la dirección del
motor sera a la izda., y si en lugar de
P1 se pulsa P4 ira a la dcha.
Pulsador P4: Aumenta la velocidad si el motor esta en marcha, si
esta parado lo pone en pausa y cada pulsación avanza un paso, si se mantiene apretado el motor girara
continuamente a la dcha.
Configuración del tipo de avance: Se enciende el circuitomanteniendo un
pulsador apretado, los leds se pondran intermitentes para indicarlo;
según el pulsador que hayamos apretado el avance sera de un paso
o de medio, esta configuración sera guardada permanentemente en
la memoria del PIC
P1: Avance de medio paso en el motor 1.; P2: Avance de un paso en el motor 1.;
P3: Avance de medio paso en el motor 2. ; P4 Avance de un
paso en el motor 2.
[pic]
[pic]Notas
• Todos los motores tienen un límite para la velocidad
maxima, dependiendo del tipo de motor y
del
número de pasos unos admiten mas velocidad que otros. Para algunos
motores el tiempo mínimo entre cada paso es de 5 milisegundos, si se
pone menos vibran pero no giran.
• Las revoluciones por minuto dependen del número de pasos, a un
motor de 200 pasos puesto a 2 milisegundos por paso le corresponden 150 R.P.M.,
a uno de 96 pasos 312 R.P.M., a uno de 48 pasos 625 R.P.M. y a uno de 24 1250
R.P.M
• Si desde el ordenador queremos enviar un número de pasos
determinado -por ejemplo una vuelta- es mejor poner antes en pausa el motor
para que esté alimentado antes y despues del giro y el eje quede sujeto.
• La diferencia entre pausa y paro es que en pausa el motor esta
alimentado y fijo en una posición, en paro el motor esta sin
alimentación y el eje libre.
• Si un motor esta mucho tiempo en pausa
puede calentarse demasiado especialmente si esta en modo de avance
doble.
• No todos los motores tienen unos cables de colores standart para
distinguir las bobinas, pero algunos tienen naranja y amarillo para una
bobina y marrón y negro para otra; otros tienen rojo y rojo-blanco para
una y verde y verde-blanco para otra.
[pic]
[pic]Programa de control desde el PC:
pic] |Este programa nos |
| |permite controlar |
| |individualmente los dos|
| |motores, podemos |
| |ponerlos en marcha, |
| |ponerlos en|
| |pausa(parados pero |
| |alimentados) o |
| |pararlos. |
| |También podemos hacer |
| |que avancen un número |
| |determinado de pasos(1 |
| |a 255) o usar el modo |
| |TIMER y ponerlos en |
| |marcha durante un |
| |tiempo de 1 a 255 |
| |minutos y luego |
| |quedaran parados. |
| |El programa también nos|
| |permite seleccionar el |
| |sentido de giro y el |
| |tipo de avance: medio |
| |paso o un paso. Con las|
| |barras deslizantes |
| |podemos regular la|
| |duración de cada paso |
| |de 1 a 255 miliseg., |
| |según este tiempo el |
| |programa calcula las |
| |revoluciones por |
| |minuto; para ello |
| |debemos de haber |
| |configurado(ver |
| |apartado siguiente) el |
| |número de pasos de cada|
| |motor ya que las R.P.M.|
| |dependen de la duración|
| |de cada paso y del |
| |número de pasos del
|
| |motor. Si el tipo de |
| |avance es de medio paso|
| |las R.P.M. seran la |
| |mitad. |
| |El botón superior |
||derecho graba la |
| |configuración en la |
| |EEPROM del
PIC y al |
| |encender los motores |
| |estaran en el mismo |
| |estado que cuando |
| |salvamos la |
| |configuración. |
pic] |Al pulsar el botón de
configuración nos aparece |
| |la siguiente ventana que nos permite seleccionar |
| |el puerto serie del
PC al que hemos conectado el |
| |controlador. |
| |Para poder ver las revoluciones por minuto de |
| |cada motor debemos poner el número de pasos que |
| |tiene cada uno, si no sabemos de cuantos pasos |
| |son, podemos seleccionar un número de pasos
y |
| |enviarselos y ver cuantos corresponden a una |
| |vuelta completa. |
[pic]Descarga del programa de control desde el PC.
[pic]
[pic]Comandos de control desde el puerto serie:
Podemos hacer nuestro propio programade control desde el PC conociendo los
comandos de control a través del puerto serie, el dialogo con el
PC funciona a 9600 bps, 8 bits, sin paridad y un bit de stop. Los comandos a
enviar por el puerto serie se componen de 3 bytes: el primero es el tipo de
comando, el 2º el valor a enviar y el 3º es el checksum, este byte es
la suma de los otros dos y sirve para que el PIC verifique que la comunicación
ha sido correcta; por ejemplo en el comando '92k ' el código
ASCII del 9 es 57 y el del 2 es 50, por tanto el checksum que tenemos que
enviar es 107 que corresponde al caracter k.
Bytes de estado: El PIC contiene dos bytes de estado, uno por cada motor, de
cada byte se usan solo los 4 bits LSB y tienen las siguientes funciones:
|bit 0 |A 1 el motor esta parado, a 0 en marcha. |
|bit 1 |A 1 el motor esta en pausa. |
|bit 2 |Dirección del motor: a 1 a la dcha. y 0 a la izda. |
|bit 3 |Tipo de avance: a 1 un paso, a 0 medio paso. |
|bit 4 |Avance doble, si esta a 1 este bit
prevalece sobre el anterior. |
|bit 5 |No usado. |
|bit 6 |No usado. |
|bit 7 |No usado. |
Los bytes de estado de los motores, así como la velocidad se leen o escriben con los
comandos de la siguiente tabla:
|'1xC ' |Envía un byte de estado al
motor 1, el byte a enviar es el segundo caracter(x), el tercero |
| |es el checksum. El PIC contesta con un byte que
contiene el checksum recibido del
PC. |
|'1xC ' |Envía un byte de estado al
motor 2, el byte a enviar es el segundo caracter(x), el tercero |
| |es el checksum. El PIC contesta con un byte que
contiene el checksum recibido del
PC. |
|'AxC ' |Envía la duración de
cada paso en milisegundos(1 a 255) al motor 1, el byte a enviar es el |
| |segundo caracter, el tercero es el checksum. El PIC contesta con un byte que contiene el |
| |checksum recibido del
PC. |
|'BxC ' |Envía la duración de
cada paso enmilisegundos(1 a 255) al motor 2, el byte a enviar es el |
| |segundo caracter, el tercero es el checksum. El PIC contesta con un byte que contiene el |
| |checksum recibido del
PC. |
|'PxC ' |Envía comando de avance de
un número de pasos al motor 1, el número de pasos a avanzar(1 a |
| |255) va en el segundo byte(x), el tercero es el checksum. El PIC
contesta con un byte que |
| |contiene el checksum recibido del
PC. |
|'QxC ' |Envía comando de avance de
un número de pasos al motor 2, el número de pasos a avanzar(1 a |
| |255) va en el segundo byte(x), el tercero es el checksum. El PIC contesta
con un byte que |
| |contiene el checksum recibido del
PC. |
|'TxC ' |Función de timer, activa el
motor 1 durante un número determinado de minutos(1 a 255), este|
| |número va en el segundo byte, el tercero es el checksum. El
PIC contesta con un byte que |
| |contiene el checksum recibido del
PC. |
|'UxC ' |Función de timer, activa el
motor 1 durante un número determinado de minutos(1 a 255), este|
| |número va en el segundo byte, el tercero es el checksum. El
PIC contesta con un byte que |
| |contiene el checksum recibido del
PC. |
|'G0w ' |Graba en la memoria EEPROM del PIC
el estado de los motores, este sera el estado en el que |
| |quedaran al encender el circuito. El PIC contesta con un byte que contiene el checksum |
| |recibido del
PC. |
|'92k ' |Lectura del estado de los motores, el PIC contesta con 5
bytes: el 1º contiene el byte de |
| |estado del motor 1, el 2º byte contiene el estado del motor 2, el
3º contiene la duración |
| |de cada paso del motor 1, el 4º contiene la duración de cada paso
del motor 2 y el 5º byte |
| |es el checksum.
[pic]
Motores probados con el circuito descrito:
[pic]
[pic]
El código del
PIC no esta disponible, quién esté interesado en la
construcción de este circuito puede solicitar el PIC16F627 programado.