/*
* Control de motor unipolar
* primer ejemplo - paso completo y direccion única
* AGV 2021-10-21
*/
const int led = 23;
int val_led = LOW;
// cable rojo => conectar a Vcc
const int motor_blue = 16;
const int motor_pink = 17;
const int motor_yellow = 18;
const int motor_orange = 19;
// la bobina se activa con un valor de pin HIGH pues el valor se niega con el transistor de salida correspondiente del ULN2003
// paso completo si se inicia en 0 es onda simple, 1 onda doble (más torque)
int tabla_control[4][8]={ // 0 1 2 3 4 5 6 7
{ HIGH, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH },
{ LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW },
{ LOW, LOW, LOW, LOW, LOW, HIGH, HIGH, HIGH },
{ LOW, HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW }
};
void setup()
{
pinMode(led, OUTPUT);
digitalWrite(led, val_led); // HIGH / LOW
// pines de salida del motor - el rojo es el pin intermedio, conectado a 5VDC
pinMode(motor_blue, OUTPUT);
pinMode(motor_pink, OUTPUT);
pinMode(motor_yellow, OUTPUT);
pinMode(motor_orange, OUTPUT);
// initialize the serial port
Serial.begin(115200);
delay(100);
Serial.println("----------------");
Serial.println("Comienzo programa control motor paso a paso");
delay(1000); // antes de comenzar el bucle del programa
}
void loop()
{
static int spaso=0; // va de 0 a 7, recorre las configuraciones de activación de las bobinas
static int iter=0; // iteraciones del bucle, pulsos dados
iter++;
spaso++; // medio paso +=1 , paso completo +=2
if(spaso >7) spaso=0;
// revisar si este código de colores cuadra con el motor que se tiene
// p.e. en este caso blue 2 <-> pink 3
digitalWrite(motor_orange, tabla_control[0][spaso]);
digitalWrite(motor_yellow, tabla_control[1][spaso]);
digitalWrite(motor_pink , tabla_control[3][spaso]);
digitalWrite(motor_blue , tabla_control[2][spaso]);
delay(10);
#define NUM_ITER_POR_VUELTA 2048 // 4096 si la resolución es doble => medio paso
if(iter>=NUM_ITER_POR_VUELTA){
val_led=(val_led==HIGH)?LOW:HIGH;
digitalWrite(led, val_led); // HIGH <-> LOW
Serial.printf("Nueva vuelta -> iteraciones dadas: %d \n", iter);
iter=0;
}
}