Controlador de dos motores paso a paso

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.

Descripción y funcionamiento de un motor paso a paso:

Los motores unipolares tienen una toma intermedia en cada bobina, esta vá a Vcc o a masa según sea el circuito de control, luego solo tenemos que alimentar la bobina correspondiente. Tienen 6 cables pero en algunos modelos los dos comunes están unidos internamente y solo tienen 5. Los motores bipolares no tienen toma intermedia en las bobinas y para controlarlos se necesita invertir la alimentación de estas con un puente en "H" o un driver del tipo L293.

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 está hecho con varias bobinas y el rotor consta de un imán permanente con un número de polos que depende del ángulo 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 de tres modos diferentes:

Funcionamiento simple:

Las bobinas se activan una a una por separado, de esta forma se consigue un poco menos de fuerza pero el consumo es menor.

Funcionamiento doble:

Cada vez se activan dos bobinas, así el motor tiene más fuerza ya que son dos bobinas las que arrastran y sujetan el rotor.

Medio paso:

Es una mezcla de las dos anteriores, primero se activa una bobina y luego dos, así el ángulo de los pasos se reduce a la mitad al igual que la velocidad.

Características del circuito:

Esquema:

Este circuito se ha diseñado pensando en los motores unipolares que son los más corrientes y más 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 además 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 están parados los leds estarán apagados, si los motores están en pausa los leds estarán intermitentes y si están en marcha los leds estarán 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.

El circuito integrado ULN2803 se compone de 8 drivers como 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.

 

 

 

 

 

 

Funciones de los pulsadores:

El pulsador P1 sirve para seleccionar el motor que vamos a controlar: si está sin apretar controlamos el motor 1 y si está 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 está  apretado se controla el motor 2.

Pulsador P2: Disminuye la velocidad si el motor está  en marcha, si está  parado lo pone en pausa y cada pulsación avanza un paso, si se mantiene apretado el motor girará continuamente a la izda.

Pulsador P3: A cada pulsación pone en marcha o para el motor. Si se pulsa más de 5 segundos graba en la memoria del PIC el estado actual de los motores(velocidad, dirección, etc.) y será como estarán al encender. Si se mantiene pulsado y al mismo tiempo se pulsa P1 la dirección del motor será  a la izda., y si en lugar de P1 se pulsa P4 irá  a la dcha.

Pulsador P4: Aumenta la velocidad si el motor está en marcha, si está parado lo pone en pausa y cada pulsación avanza un paso, si se mantiene apretado el motor girará continuamente a la dcha.

Configuración del tipo de avance: Se enciende el circuito manteniendo un pulsador apretado, los leds se pondrán intermitentes para indicarlo; según el pulsador que hayamos apretado el avance será de un paso o de medio, esta configuración será 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.


Notas:

 


Programa de control desde el PC:

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 quedarán 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. serán la mitad.

El botón superior derecho graba la configuración en la EEPROM del PIC y al encender los motores estarán en el mismo estado que cuando salvamos la configuración.

 

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.

 

Descarga del programa de control desde el PC.


Comandos de control desde el puerto serie:

Podemos hacer nuestro propio programa de control desde el PC conociendo los comandos de control a través del puerto serie, el diálogo 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 carácter 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 está parado, a 0 en marcha.
bit 1 A 1 el motor está 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 está 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 carácter(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 carácter(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 carácter, 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 en milisegundos(1 a 255) al motor 2, el byte a enviar es el segundo carácter, 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) vá 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) vá 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 vá 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 vá 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 será el estado en el que quedarán 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.

Motores probados con el circuito descrito:


El código del PIC no está disponible, quién esté interesado en la construcción de este circuito puede solicitar el PIC16F627 programado.