Introducción:
Los motores de dc tradicionales,
presentan un funcionamiento muy sencillo, ya que al energirzarlos comienzan a
girar y al cambiar la polaridad de sus 2 terminales, se cambia el sentido de
giro. Sin embargo, para controlar la posición, el numero de giros y la
velocidad no es posible con este tipo de motores. Una alternativa para el
control de motores eléctricos, son los motores a pasos, una alternativa para el
control de velocidad, posición y giro.
Paso 1:
En la presente práctica, se
controlará un motor a pasos empleando los siguientes componentes:
-
Tarjeta Arduino Uno
- Motor a pasos bipolar
- Drive para motores L293
-
Fuente de alimentación
externa (4 baterías AA)
El siguiente diagrama muestra la
conexión de la tarjeta Arduino con el drive L293. Para el motor a pasos, se
colocaron 4 LEDs, éstos 4 componentes corresponden a las 4 terminales del motor
a pasos bipolar.
|
Diagrama de conexión de la tarjeta Arduino y el motor a pasos |
Paso 2:
La siguiente tabla muestra la
secuencia de las 4 terminales del Arduino al drive del motor. Esta secuencia
permite el giro del motor antihorario.
|
Terminal
|
|
A
|
B
|
C
|
D
|
Paso
1
|
1
|
0
|
1
|
0
|
Paso
2
|
1
|
0
|
0
|
1
|
Paso
3
|
0
|
1
|
0
|
1
|
Paso
4
|
0
|
1
|
1
|
0
|
El código de colores para el motor
bipolar es:
Cable azul => Terminal A
Cable rojo => Terminal B
Cable blanco => Terminal C
Cable naranja => Terminal D
Los pines para la activación de las
señales son del 10 al 13. A continuación se muestra el programa, el cual activa
diferentes velocidades para el giro del motor. A continuación el programa.
/****** Motor a Pasos ***** //
* Escrito: AMS
*
*/
int Informacion_Serial;
int Terminal_A=10;
int Terminal_B=11;
int Terminal_C=12;
int Terminal_D=13;
void setup() {
pinMode(Terminal_A, OUTPUT);
pinMode(Terminal_B, OUTPUT);
pinMode(Terminal_C, OUTPUT);
pinMode(Terminal_D, OUTPUT);
Serial.begin(9600);
Serial.print("0==> Parar, 1==> Lento, 2==> Medio");
Serial.println("3==> Rapido, 4==> Muy rapido");
} //
void loop() {
while(true)
{
if(Serial.available()>0) {
Informacion_Serial=Serial.read();
if (Informacion_Serial=='0')
{
Serial.println("Paro");
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,0);
}
else if (Informacion_Serial=='1')
{
Serial.println("Lento");
for(int vuelta = 0; vuelta <12; vuelta++)
{
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(500);
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(500);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(500);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(500);
}
}
else if (Informacion_Serial=='2')
{
Serial.println("Medio");
for(int vuelta = 0; vuelta <12; vuelta++)
{
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(100);
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(100);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(100);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(100);
}
}
else if (Informacion_Serial=='3')
{
Serial.println("Rapido");
for(int vuelta = 0; vuelta <12; vuelta++)
{
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(20);
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(20);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(20);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(20);
}
}
else if (Informacion_Serial=='4')
{
Serial.println("Muy Rapido");
for(int vuelta = 0; vuelta <12; vuelta++)
{
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(8);
digitalWrite(Terminal_A,1);
digitalWrite(Terminal_B,0);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(8);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,0);
digitalWrite(Terminal_D,1);
delay(8);
digitalWrite(Terminal_A,0);
digitalWrite(Terminal_B,1);
digitalWrite(Terminal_C,1);
digitalWrite(Terminal_D,0);
delay(8);
}
}
}
}
}
Paso 3:
La siguiente imagen nuestra el
circuito terminado. La transmisión de datos se realiza a través del puerto
serial para dar los comandos al motor.
|
Motor a pasos bipolar con tarjeta Arduino UNO |
Paso 4:
Ahora se realiza la prueba del
circuito en el video. La siguiente imagen muestra la comunicación a través del
puerto serial.
|
Puerto serial para la comunicación entre el Arduino y la PC |
|
|
|