EJERCICIO Motor paso a paso unipolar
Descripción del ejercicio
En éste ejercicio veremos dos ejemplo de como trabajar con un motor paso a paso unipolar. Este tipo de motores los podemos encontrar en disqueteras antiguas, y son muy fáciles de controlar. El que utilizamos en este ejercicio tiene seis conectores en los que dos (o uno dependiendo del diseño del motor) es el voltaje de referencia (VCC) y otros cuantro se utilizan para manejar el motor enviando señales síncronizadas.
En este enlace se muestra más información sobre el funcionamiento de motores paso a paso
El primer ejemplo muestra el código básico para hacer girar el motor en una dirección. Pretende orientar a aquellos que nunca han manejado un motor paso a paso. El segundo ejemplo muestra un código más complejo, que permite hacer girar el motor a distintas velocidades y en ambas direcciones, controlando ambas cosas con un potenciómetro.
En la placa protoboard se ha empleado un potenciómetro de 10K Ohmios que está conectado a una entrada analógica y a un driver ULN2003A. Este driver cuenta con un puñado de transistores en su interior. Estos permiten conectar componentes y dispositivos que necesitan mucha más corriente que la que puede ofrecer el Atmaga8 de la placa Arduino.
Detalle del conexionado del motor paso a paso
Detalle del conexionado del driver ULN2003A
Esquema válido para ambos ejemplos. Para el ejemplo 1 hay que eliminar el potenciómetro
Imágen de una placa protoboard con un potenciómetro y un driver ULN2003A conectados a una placa Arduino
Elementos necesarios
- Un driver ULN2003A.
- Un potenciómetro de 10K Ohmios.
- Un motor paso a paso.
- Una placa protoboard.
- Cables para realizar las conexiones.
Código fuente
Ejemplo 1: Código básico para manejar un motor paso a paso
/* Motor paso a paso de Copal
* ---------------------------
*
* Programa para manejar un motor paso a paso unipolar extraido de una
* unidad de disquette de 5'25. De acuerdo a la documentación que
* he encontrado, este: "[...] motor paso a paso fabricado por
* Copal Electronics, con 1,8 grados por paso y 96 ohmios por cada
* vuelta (de la bobina), con una etapa central conectada a diferentes
* cables [...]"
* [http://www.cs.uiowa.edu/~jones/step/example.html]
*
* Es un motor paso a paso unipolar con cinco cables:
*
* - rojo: conector de alimentación, lo tengo a 5V y funciona bien
* - naranja y negro: bobina 1
* - marrón y amarillo: bobina 2
*
* (cleft) 2005 DojoDave for K3
* http://www.0j0.org | http://arduino.berlios.de
*
* @author: David Cuartielles
* @date: 20 Oct. 2005
*/
int motorPin1 = 8; // PIN-es del Motor
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 500; // Delay que determina la velocidad de giro
void setup() {
pinMode(motorPin1, OUTPUT); // Configuración de los PIN-es como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
Ejemplo 2: Código avanzado para manejar un motor paso a paso
/* Motor paso a paso unipolar avanzado
* ------------------------------------
*
* Programa para manejar un motor paso a paso unipolar extraido de una
* unidad de disquette de 5'25. De acuerdo a la documentación que
* he encontrado, este: "[...] motor paso a paso fabricado por
* Copal Electronics, con 1,8 grados por paso y 96 ohmios por cada
* vuelta (de la bobina), con una etapa central conectada a diferentes
* cables [...]"
* [http://www.cs.uiowa.edu/~jones/step/example.html]
*
* Es un motor paso a paso unipolar con cinco cables:
*
* - rojo: conector de alimentación, lo tengo a 5V y funciona bien
* - naranja y negro: bobina 1
* - marrón y amarillo: bobina 2
*
* (cleft) 2005 DojoDave for K3
* http://www.0j0.org | http://arduino.berlios.de
*
* @author: David Cuartielles
* @date: 20 Oct. 2005
*/
int motorPins[] = {8, 9, 10, 11}; // PIN-es del motor
int count = 0; // Contador 1
int count2 = 0; // Contador 2
int delayTime = 500; // Delay que determina la velocidad de giro
int val = 0;
void setup() {
for (count = 0; count < 4; count++) { // Configuración de los PIN-es como salida digital
pinMode(motorPins[count], OUTPUT);
}
}
void moveForward() {
if ((count2 == 0) || (count2 == 1)) { // Mueve el motor hacia delante. Para hacerlo desplaza los
count2 = 16;
} // bits de la vable count2 entre los PIN-es del motor.
count2>>=1;
for (count = 3; count >= 0; count--) { // 16 = 00010000 --> 00001000 --> 00000100 --> 00000010 ...
digitalWrite(motorPins[count], count2>>count&0x01);
}
delay(delayTime);
}
void moveBackward() {
if ((count2 == 0) || (count2 == 1)) { // Mueve el motor hacia delante. Para hacerlo desplaza los
count2 = 16; // bits de la vable count2 entre los PIN-es del motor.
}
count2>>=1;
for (count = 3; count >= 0; count--) { // 16 = 00010000 --> 00001000 --> 00000100 --> 00000010 ...
digitalWrite(motorPins[3 - count], count2>>count&0x01);
}
delay(delayTime);
}
void loop() {
val = analogRead(0);
if (val > 540) { // Cuanto mayor es el valor del potenciómetro
delayTime = 2048 - 1024 * val / 512 + 1; // más rápido se mueve hacia delante
moveForward();
} else if (val < 480) { // Cuanto menor es el valor del potenciómetro
delayTime = 1024 * val / 512 + 1; // más rápido se mueve hacia atrás
moveBackward();
} else {
delayTime = 1024; // Cuando el valor del potenciometro se encuentra
} // en la zona media, el motor se para.
}
Referencias
Con el objetivo de entender mejor este ejemplo, hemos revisado numerosa documentación. Los enlaces que vienen a continuación pueden resultar interesantes con el objetivo de aprender algo más sobre la teoría de motores paso a paso:
- Tutorial sobre motores paso a paso
- Motores paso a paso
- Motores paso a paso Bipolares
- Información sobre el motor que estamos utilizando
- Buena explicación sobre motores paso a paso
- Buen PDF con información básica