Descrición:
Para inverter o sentido de xiro dun motor o que debemos facer é cambiar a polaridade nos seus terminais. Segundo sexa esta conexión o motor xirará en sentido horario ou antihorario. Tamén, segundo sexa a voltaxe que chegue aos terminais, o motor xirará a máis ou menos velocidade.
Para realizar estas funcións cun único compoñente e de forma automática utilizamos os chamados controladores de motores o drivers, cuxa función é controlar o movemento dos motores, tanto en velocidade como en sentido de xiro, a través dos sinais nos seus terminais ou pins.
Hai moitos modelos de drivers no mercado. Irei poñendo aquí as conexións dos que dispoñamos no taller.
L293D | L298N |
TB6612FNG |
L9110 |
![]() |
![]() |
![]() |
![]() |
Montaxe:
L293D
Driver L293D
- Vlox: alimentación do circuíto (5V)
- Vmot: Alimentación dos motores (5-12V)
- GND: 0V (se usas diferente alimentación para placa e motores, poñer GND común)
Conexión dun motor:
- Os pins 3 e 6 (Output1 e Output2) son as saídas ás que se conecta o motor M1.
Control dos motores:
- Os pins Input1 e Input2 son os pins de control do motor M1, que irán conectados á placa Arduíno para controlar o sentido de xiro do motor.
- O pin 1, Enable1, activa o uso do motor M1.
- Cando o pin Enable1 toma un valor HIGH o motor M1 pode xirar dependendo dos valores I1 e I2. Se toma un valor LOW o motor párase, independentemente dos valores que tomen I1 e I2.
- Asignando un valor entre 0 e 255 ao Enable desde un pin pwm regulamos a velocidade do motor.
Enable1 | Input1 | Input2 | Motor |
LOW | X | X | Para |
HIGH | LOW | LOW | Para |
HIGH | LOW | HIGH | Sentido horario |
HIGH | HIGH | LOW | Sentido antihorario |
HIGH | HIGH | HIGH | Para |
Exemplo controlando a velocidade:
analogWrite(Enable1, 150); digitalWrite(In1, HIGH); digitalWrite(In2, LOW);
L298N
Driver L298N
É un driver de motores que nos permite controlar o xiro e velocidade de dous motores de corrente continua.
Alimentación:
O driver inclúe un regulador de tensión que nos permite tanto alimentar os motores como obter unha saída de tensión de 5V pola saída Vlogico. Debemos alimentar o módulo cunha tensión máxima de 12V. Podemos usar esa saída para alimentar a placa arduino.
- Jumper cerrado: alimentamos con 12V Vm e GND. Podemos alimentar a placa arduino conectando Vlogico por Vin. Non conectar tensión por Vlogico, é unha saída.
- Jumper aberto: Habería que alimentar os motores a través de Vm e o módulo controlador con 5V a través de Vlogico, unindo GND.
Control dos motores:
- IN1 e IN2 controlan o sentido de xiro do motor A. IN3 e IN4 do motor B.
- ENA activa e controla a velocidade de xiro do motor A. ENB do motor B, utilizando sinais PWM (de 0 a 255)
- Se hai conectados jumpers nos pins Enable os motores se moverán á velocidade máxima e non poderemos controlar a súa velocidade.
ENA | IN1 | IN2 | Motor |
LOW | X | X | Para |
HIGH | LOW | LOW | Para |
HIGH | LOW | HIGH | Sentido horario |
HIGH | HIGH | LOW | Sentido antihorario |
HIGH | HIGH | HIGH | Para |
Exemplo controlando a velocidade:
analogWrite(ENA, 150); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
TB6612FNG
Driver TB6612FNG:
Por exemplo, para o motor A, o pin PWMA controla a velocidade de xiro (valores de 0 a 255), e os pins AIN1 e AIN2 o sentido de xiro.
AIN1 | AIN2 | Motor |
0 | 1 | Sentido horario |
1 | 0 | Sentido antihorario |
Exemplo controlando a velocidade:
analogWrite(PWMA, 150); digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW);
L9110
Driver L9110
Este driver só é útil para pequenos motores de baixo consumo (máximo 1A) e cun par relativamente baixo. Son moitos os proxectos que usan este tipo de motores e con este driver simplificamos as conexión e programación.
Aliméntase cunha tensión entre 2,5 e 12V. Podemos alimentalo a través da saída de 5V de arduino.
Os pins de control deben ser PWM para poder controlar a velocidade do motor.
Por exemplo para un motor A1, mediante a escritura dixital:
digitalWrite(A1A, HIGH);
digitalWrite(A1B, LOW);
A1A | A1B | Motor |
0 | 0 | parado |
0 | 1 | Sentido horario |
1 | 0 | Sentido antihorario |
Se no canto de usar valores dixitais usamos valores PWM (de 0 a 255) controlamos a velocidade do motor.
analogWrite(A1A, 150); analogWrite(A1B, 0);
Programa:
Neste exemplo imos controlar un motor cun L293D conectando Enable1 ao pin 10, Input1 ao pin 9 e Input2 ao pin 6, pero podes adaptar o código a calquera outro driver de motores.
Faremos que o motor execute o seguinte de maneira cíclica:
- arranca nun sentido e xira durante 3 segundos,
- para durante un segundo
- xira durante 3 segundos en sentido contrario
- volve parar durante un segundo.
// Declaración de variables: const int E1 = 10; // Enable pin const int I1 = 9; // Control pin 1 const int I2 = 6; // Control pin 2 // Configuración: void setup(){ pinMode( 6, OUTPUT); // Configuramos os pins pinMode( 9, OUTPUT); pinMode( 10, OUTPUT); } // Programa: void loop() { digitalWrite(E1, HIGH); // Activamos Motor digitalWrite(I1, HIGH); // Arrancamos nun sentido digitalWrite(I2, LOW); delay(3000); digitalWrite(E1, LOW); // Paramos Motor delay(1000); digitalWrite(E1, HIGH); // Activamos Motor digitalWrite(I1, LOW); // Arrancamos con cambio de sentido digitalWrite(I2, HIGH); delay(3000); digitalWrite(E1, LOW); // Paramos Motor delay(1000); }
Propostas:
- Velocidade: Utiliza a función analogWrite(pin, PWM); para o control da velocidade do motor. Lembra que os sinais PWM van de 0 a 255.
- Funcións I. Crea unhas función chamadas “esquerda”, “dereita” e “paro” que almacenen as instrucións do movemento do motor. Utilízaas para facer o mesmo programa anterior.
- Funcións II. Engade a esas funcións un parámetro para indicar a velocidade de xiro.
- Pulsadores. Conecta dous pulsadores. Cando prememos no primeiro o motor xira en sentido horario, cando prememos no segundo xira en sentido antihorario, e cando non prememos ningún para.
- Finais de carreira. Fai que ao premer nun pulsador o motor xire nun sentido, e cando toca un microinterruptor final de carreira, pare. Ao premer noutro pulsador o motor xira en sentido contrario, e cando acciona outro microinterruptor final de carreira, para.
- Potenciómetro. Conecta un potenciómetro á entrada analóxica A0. Fai que o pin Enable1 tome un valor entre 0 e 255 en función da entrada do potenciómetro (entre 0 e 1023) e observa o cambio de velocidade. Para enviar un valor PWM ao pin Enable1 lémbrate de que ten que estar conectado a un pin PWM do Arduíno. Utiliza a expresión: analogWrite(Enable1, pwm);