MOTORES DC
ÍNDICE:
0.- TEORÍA: MOTOR DC
1.- PRÁCTICA: MOTOR CON TRANSISTOR
2.- PRÁCTICA: MOTOR CON CIRCUITO INTEGRADO.
0.-TEORÍA: MOTORES DC
Arduino (UNO) no proporciona corriente suficiente para hacer funcionar, en condiciones "dignas", un motor de corriente continua de los que solemos usar en el aula-taller de Tecnologías (motor DC).
Conviene alimentar Arduino con una fuente externa (7 -12 V) para poder proporcionar intensidad necesaria para el par motor requerido en los proyectos.
Existen "shields" o tarjetas que se encajan sobre Arduino y le añaden funciones específicas como mover motores DC.
Además de utilizar una shield específica de motores DC, tenemos otras posibilidades para ponerlo en marcha:
1.- PRÁCTICA: MOTOR CON TRANSISTOR
El transistor es un componente analógico con infinidad de aplicaciones.
Como se observa en la imagen, es un dispositivo con tres pines llamados emisor (E), colector (C) y base (B). El funcionamiento a groso modo es sencillo: Si suministramos "cierta" cantidad de corriente al terminal llamado base, entre los terminales emisor y colector circulará una corriente proporcional a la que entra por la base.
Puede ser unas 100 veces mayor (este valor dependerá del transistor y se llama ganancia), por lo tanto, lo que tenemos es un amplificador de corriente, o sea, que con una intensidad pequeña podemos obtener una más grande entre los terminales emisor y colector.
Si a estos dos terminales conectamos un motor DC conseguiremos hacerlo girar con garantías. Cuando no hay corriente en la base (o es muy pequeña) el colector y emisor están desconectados y no circulará corriente entre ellos.
Desde Arduino (salida digital) actuamos sobre la base si enviamos un HIGH al pin digital donde la conectemos (pin 6 en el esquema). El transistor tiene que tener suficiente ganancia.
Se conecta un diodo de protección en antiparalelo (1N004). Cuando el motor se para las bobinas se desmagnetizan y se descargan de energía eléctrica. El diodo proporciona un camino para su descarga (la energía se disipa en forma de calor en el diodo) y así se evita que sufra el transistor.
( Otra posibilidad que protege el transistor es, en vez de conectar directamente el motor al colector del transistor, ubicar un relé en esa posición y accionar el motor con alimentación independiente con la conmutación del relé. O también, usar un par de transistores según el ejemplo de montaje con TIP121 (NPN, par Darlington):
https://www.fairchildsemi.com/datasheets/TI/TIP120.pdf
)
CÓDIGO DEL PROGRAMA:
// Activa y desactiva un // motorDC conectado al pin6 // durante 2 segundos void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6, HIGH); delay(2000); digitalWrite(6, HIGH); delay(2000); }
ACTIVIDADES:
1.. Diseña el montaje mediante un relé conectado en el colector del transistor.
2.- PRÁCTICA: MOTOR DC CON EL CIRCUITO INTEGRADO L293.
El circuito integrado L293 permite controlar motoresDC de pequeña potencia. Para utilizarlo hay que hacer un montaje externo a Arduino, en una placa de pruebas, y alimentar a los motores a través de este circuito integrado.
El CI L293 tiene las siguientes características:
- Se pueden controlar hasta 2 motores.
- Proporciona 1A a los motores (en total) y permite cambiar el sentido de giro.
- Utiliza un puente en H que funciona según se observa en las figuras (internamente utiliza transistores para conmutar*) :
(
Datasheet: http://www.me.umn.edu/courses/me2011/arduino/technotes/dcmotors/L293/l293.pdf
)
Como vimos en la sección de Alimentación eléctrica de Arduino NO es recomendable alimentar Arduino, cuando se trabaja con elementos de "alto" consumo como pueden ser los motores DC, con el cable USB. Tenemos la posibilidad de proporcionar más (mili)amperios a través de la conexión jack de Arduino. En el pin Vin tendremos una salida del voltaje que apliquemos por el jack que servirá para alimentar a los motores a través del integrado mediante el pin 8 (VC ó Vcc2). Para ver los márgenes de voltaje de trabajo del CI consultar la hoja de datos del fabricante.
Vamos a ver de qué manera se pueden activar los motores DC para hacer una secuencia sencilla de giro. Primero de todo vamos a ver cómo se conecta todo.
Las conexiones del circuito integrado según podemos ver en la hoja de datos del fabricante son las siguientes:
3.- PRÁCTICA: MOTOR DC CON UNA SHIELD (L293D)
Una shield (o mochila) es un accesorio de Arduino que nos ahorra tener que usar muchas conexiones. En esta ocasión es un aparato que se usa para suministrar mayores potencias en tecnología lógica DTL o TTL tanto a motores DC, como a relés, motores paso a paso, etc.
Esta mochila utiliza el chip L293D basado en dos puentes para conectar dos posibles motores. Una alimentación externa suministrará la potencia que queramos. Los diodos de protección están incluidos.
Este aparato es adecuado para hacer aplicaciones de conmutacion a una frecuencia superior a 5Hz.
CARACTERÍSTICAS DE ESTA MOCHILA:
Pines de conexión por canal:
Ejemplo:
Si no se necesitan el Brake (freno) ni la Current Sensing (detección de corriente) y se quiere usar más pines para otras aplicaciones, se puede desactivar estas características quitando el respectivo jumper de la shield.
Las otras conexiónes que ofrece la shield son:
CÓDIGO SIMPLE Y FUNCIONAL
void setup() {
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
delay(1000);
digitalWrite(12,LOW);
delay(2000);
digitalWrite(12, LOW);
digitalWrite(9, HIGH);
delay(3000);
digitalWrite(9,LOW);
delay(6000);
}
ACTIVIDADES:
1.- Ahora varía la velocidad del motor cambiando el comando digitalWrite(9,HIGH) por el de analogWrite(9,50) del tipo PWM. Prueba con distintos valores entre0 y 255 para ver el abanico de todas las velocidades posibles.
)
Como vimos en la sección de Alimentación eléctrica de Arduino NO es recomendable alimentar Arduino, cuando se trabaja con elementos de "alto" consumo como pueden ser los motores DC, con el cable USB. Tenemos la posibilidad de proporcionar más (mili)amperios a través de la conexión jack de Arduino. En el pin Vin tendremos una salida del voltaje que apliquemos por el jack que servirá para alimentar a los motores a través del integrado mediante el pin 8 (VC ó Vcc2). Para ver los márgenes de voltaje de trabajo del CI consultar la hoja de datos del fabricante.
Vamos a ver de qué manera se pueden activar los motores DC para hacer una secuencia sencilla de giro. Primero de todo vamos a ver cómo se conecta todo.
Las conexiones del circuito integrado según podemos ver en la hoja de datos del fabricante son las siguientes:
Vcc2(VC), pin 8 del L293: El voltaje que se introduzca aquí
alimentará a los motores (Vin de Arduino
Vcc1(VSS), pin 18 del L293: El voltaje que se introduzca aquí
alimentará al propio circuito integrado (+5V de Arduino)
Las conexiones del circuito con Arduino las podemos ver en el siguiente esquema:
Vamos a detallar la correspondencia entre pines de Arduino y del circuito L293
Para saber la orientación del sentido de giro disponemos de la siguiente tabla de verdad:
El programa hace que el motor gire en un sentido durante 1 segundo, cambie de sentido y gire durante otro segundo. Esta secuencia la repite 5 veces y después el motor se para.
CÓDIGO:
CÓDIGO:
#define ENABLE 3 #define DIRB 4 #define DIRA 5 void setup() { int i = 0; pinMode(ENABLE,OUTPUT); pinMode(DIRA,OUTPUT); pinMode(DIRB,OUTPUT); digitalWrite(ENABLE,HIGH); for (i=0;i<5;i++) { digitalWrite(DIRA,HIGH); digitalWrite(DIRB,LOW); delay(1000); digitalWrite(DIRA,LOW); digitalWrite(DIRB,HIGH); delay(1000); } digitalWrite(ENABLE,LOW); } void loop(){ }
Pregunta Verdadero-Falso
3.- PRÁCTICA: MOTOR DC CON UNA SHIELD (L293D)
Una shield (o mochila) es un accesorio de Arduino que nos ahorra tener que usar muchas conexiones. En esta ocasión es un aparato que se usa para suministrar mayores potencias en tecnología lógica DTL o TTL tanto a motores DC, como a relés, motores paso a paso, etc.
Esta mochila utiliza el chip L293D basado en dos puentes para conectar dos posibles motores. Una alimentación externa suministrará la potencia que queramos. Los diodos de protección están incluidos.
Este aparato es adecuado para hacer aplicaciones de conmutacion a una frecuencia superior a 5Hz.
CARACTERÍSTICAS DE ESTA MOCHILA:
*New L293D motor shield, the input voltage DC4.5-25V,
*600mA OUTPUT CURRENT CAPABILITY PER CHANNEL
*1.2A PEAK OUTPUT CURRENT (non repetitive)PER CHANNEL
*ENABLE FACILITY
*OVERTEMPERATURE PROTECTION
*LOGICAL "0" INPUT VOLTAGE UP TO 1.5 V(HIGH NOISE IMMUNITY)
*INTERNAL CLAMP DIODES
Pines de conexión por canal:
Function | pins per Ch. A | pins per Ch. B |
Direction | D12(IN1) | D13(IN2) |
PWM | D3 | D11 |
Brake | D9 | D8 |
Current Sensing | A0 | A1 |
Ejemplo:
- D12(IN1)= HIGH Y D13(IN2)=LOW >>>MOTOR1 AVANZA
- D13(IN1)= LOW Y D13(IN2)=HIGH >>>MOTOR1 RETROCEDE.
- D12(IN1)=LOW Y D13(IN2)=LOW >>> MOTOR1 PARA
- Terminales con tornillo para los dos motores y la alimentación externa.
- 2 conectores TinkerKit de dos entradas analógicas (en blanco), conectados a A2 y A3.
- 2 conectores TinkerKit de dos salidas analógicas (en naranja en el centro), conectados a las salidas PWM en los pines D5 y D6.
- 2 conectores TinkerKit de la interfaz TWI (en blanco con 4 pines), uno de entrada y otro de salida para uno.
CÓDIGO SIMPLE Y FUNCIONAL
void setup() {
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
delay(1000);
digitalWrite(12,LOW);
delay(2000);
digitalWrite(12, LOW);
digitalWrite(9, HIGH);
delay(3000);
digitalWrite(9,LOW);
delay(6000);
}
ACTIVIDADES:
1.- Ahora varía la velocidad del motor cambiando el comando digitalWrite(9,HIGH) por el de analogWrite(9,50) del tipo PWM. Prueba con distintos valores entre0 y 255 para ver el abanico de todas las velocidades posibles.
4.- PRÁCTICA: CONTROL VELOCIDAD MOTOR CON UN POTENCIÓMETRO.
Vamos a controlar el sentido de giro y la velocidad de un motor mediante un solo potenciómetro conectado en la entrada analógica A0.
El valor leído en el potenciómetro estará entre 0 y 1023, mientras que el valor que se puede entregar en la salida de Arduino PWM debe estar entre 0 y 255. Por esta razón hay que mapearlo.
Vamos a controlar el sentido de giro y la velocidad de un motor mediante un solo potenciómetro conectado en la entrada analógica A0.
El valor leído en el potenciómetro estará entre 0 y 1023, mientras que el valor que se puede entregar en la salida de Arduino PWM debe estar entre 0 y 255. Por esta razón hay que mapearlo.
El valor pwm2 siempre debe ser contrario al pwm1. Así, cuando una entrada del chip L923D esté HIGH, la otra estará en LOW, y el motor girará en un sentido u otro.
CÓDIGO DEL PROGRAMA:
#define DCHA_PIN 6 // pin6 de Arduino como entrada PWM
#define IZDA_PIN 5 //pin5 de Arduino como la otra entrada PWM inversa a la anterior
#define POT_PIN A0 //entrada analógica del potenciómetro
void setup() {
pinMode(DCHA_PIN, OUTPUT);
pinMode(IZDA_PIN, OUTPUT);
pinMode(POT_PIN, INPUT);
}
void loop() {
int lectura=analogRead(POT_PIN); //leemos el potenciometro
int pwm1= map(lectura,0,1023,0,255); //hacemos escala de valores
int pwm1= map(lectura,0,1023,255,0); //invertimos la escala en la otra entrada
analogWrite(DCHA_PIN,pwm1); //pasamos la potencia al motor
analogWrite(IZDA_PIN,pwm2);
delay(100);
}
pinMode(POT_PIN, INPUT);
}
void loop() {
int lectura=analogRead(POT_PIN); //leemos el potenciometro
int pwm1= map(lectura,0,1023,0,255); //hacemos escala de valores
int pwm1= map(lectura,0,1023,255,0); //invertimos la escala en la otra entrada
analogWrite(DCHA_PIN,pwm1); //pasamos la potencia al motor
analogWrite(IZDA_PIN,pwm2);
delay(100);
}