Está en la página 1de 5

31/03/12 A d ino : Mo o Pa o A Pa o

ATENCI N: Está página está desactualizada, se mantiene en el servidor de Arduino.cc a título ilustrativo y cómo documentación, sin
embargo, no es posible editarla y no se harán modificaciones de la misma. Es posible que haya caracteres que no se muestren de la
forma apropiada, no se hará nada por editarlos

Para más información visite http://arduino.es

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

a d ino.cc/e _old/Eje cicio /Mo o Pa oAPa o 1/5


31/03/12 A d ino : Mo o Pa o A Pa o

+5 V
Detalle del conexionado del driver ULN2003A

a d ino.cc/e _old/Eje cicio /Mo o Pa oAPa o 2/5


31/03/12 A d ino : Mo o Pa o A Pa o

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]
a d ino.cc/e _old/Eje cicio /Mo o Pa oAPa o 3/5
31/03/12 A d ino : Mo o Pa o A Pa o
* [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
a d ino.cc/e _old/Eje cicio /Mo o Pa oAPa o 4/5
31/03/12 A d ino : Mo o Pa o A Pa o
* @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:

Castellano:

- Tutorial sobre motores paso a paso


- Motores paso a paso
- Motores paso a paso Bipolares

Inglés:

- Informaci n sobre el motor que estamos utilizando


- Buena explicaci n sobre motores paso a paso
- Buen PDF con informaci n básica

Page last modified on April 16, 2006, at 12:37 PM


Powered b PmWiki

a d ino.cc/e _old/Eje cicio /Mo o Pa oAPa o 5/5

También podría gustarte