Sunteți pe pagina 1din 3

CONTROL DE MOTORES PASO A PASO CON ARDUINO:

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:
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 contra electromotrices de
autoinducción en el motor, parece ser que el modelo L293Dya los lleva incorporados, por lo
que podríamos prescindir de ellos.

S-ar putea să vă placă și