CONTROL DE MOTORES PASO A PASO CON ARDUINO:

Tutorial de motores paso a paso

Programa para controlar un motor paso a paso bipolar con Arduino:

Puedes bajarte el programa pinchando aquí, o bien copiar el código y pegarlo en el entorno de programación de Arduino.

Como se puede observar el programa es bastante sencillo basta con ir modificando la secuencia de alimentación de las bobinas del motor, tal y como se expone en el tutorial, dando un tiempo (mSecPaso) entre cada secuencia con objeto de que se produzca la desmagnetización y magnetización de los polos correspondientes, variando este tiempo variamos la velocidad del motor; si se utiliza un motor diferente al referenciado, sera necesario comprobar mediante tanteo el valor mínimo y máximo de este parámetro, en nuestro caso esta entre 750 y 2350 aproximadamente.

Como se observa en el bucle loop() el programa lo que hace es que el motor gire una vuelta completa en una dirección y otra en sentido contrario, de forma continua. Observese que el motor es de 0,9 grados por paso, luego una vuelta la completara en 360/0,9=400 pasos.

/*CONTROL DE UN MOTOR PASO A PASO BIPOLAR, DE UN DISCO DURO VIEJO
TYPE KP4GM1-001
0,9 DEG/STEP NO 4Z28
US PATENT Nº 4.347457
JAPAN SERVO CO.LTD
*/
#include <SoftwareSerial.h> //PARA COMUNICACIÓN CON EL PC

//DEFINICION DE VARIABLES
//pines del motor paso a paso mA y mB devanado 1, mC y mD devanado 2
int mA=3; int mB=4; int mC=5; int mD=6;
int mSecPaso=1500;/*tiempo en microsegundos entre paso y paso la velocidad sera:
velocidad=1000000/mSecPaso en vueltas/segundo. Valor minimo 750 maximo 2350
con menos de 750 no arranca con mas de 2350 se salta pasos.*/

void setup() {
pinMode(mA, OUTPUT);
pinMode(mB, OUTPUT);
pinMode(mC, OUTPUT);
pinMode(mD, OUTPUT);
pinMode(mD, OUTPUT);
//INICIAR EN PARO
digitalWrite(mA, LOW);
digitalWrite(mB, LOW);
digitalWrite(mC, LOW);
digitalWrite(mD, LOW);
Serial.begin(9600);
}

void izquierda(){
//paso 1
digitalWrite(mA, LOW);
digitalWrite(mB, HIGH);
digitalWrite(mC, HIGH);
digitalWrite(mD, LOW);
delayMicroseconds(mSecPaso);
//paso 2
digitalWrite(mC, LOW);
digitalWrite(mD, HIGH);
delayMicroseconds(mSecPaso);
//paso 3
digitalWrite(mA, HIGH);
digitalWrite(mB, LOW);
delayMicroseconds(mSecPaso);
//paso 4
digitalWrite(mC, HIGH);
digitalWrite(mD, LOW);
delayMicroseconds(mSecPaso);
}//FIN izquierda

void derecha(){
//paso 1
digitalWrite(mA, HIGH);
digitalWrite(mB, LOW);
digitalWrite(mC, HIGH);
digitalWrite(mD, LOW);
delayMicroseconds(mSecPaso);
//paso 2
digitalWrite(mC, LOW);
digitalWrite(mD, HIGH);
delayMicroseconds(mSecPaso);
//paso 3
digitalWrite(mA, LOW);
digitalWrite(mB, HIGH);
delayMicroseconds(mSecPaso);
//paso 4
digitalWrite(mC, HIGH);
digitalWrite(mD, LOW);
delayMicroseconds(mSecPaso);
}//FIN derecha

void loop() {
for(int i=0; i<100; i++) derecha();
delay (1000);
for(int i=0; i<100; i++) izquierda();
Serial.print("mSecPaso =");
Serial.println(mSecPaso, DEC); //Muestra el valor de mSecPaso en la pantalla del ordenador
delay (1000);
//Si se quiere ver la variación de velocidad en el motor en función de mSecPaso, quitar // en la linea siguiente.
//mSecPaso+=50;
}

Esquema eléctrico:

Esquema eléctrico de conexionado del motor paso a paso con Arduino

Los pines mA, mB, mC y mD van a la placa de Arduino a los pines 3, 4, 5, y 6 respectivamente, en este motor concretamente puede sustituirse la fuente de 12 V por otra de 9V, si este trabaja en vacío o con poca carga.

Los diodos son para proteger el integrado L293B de las fuerzas contraelectromotrices de autoinducción en el motor, parece ser que el modelo L293D ya los lleva incorporados, por lo que podríamos prescindir de ellos.

Aplicaciones similares:

Motor paso a paso unipolar. Control de motores en general.