MOD-DRV8833
Módulo controlador de motores basado en el driver DRV8833 de Texas Instruments.
Con una estructura de doble puente en H con transistores de tecnología MOSFET, este módulo es la solución ideal para construir un pequeño robot basado en Compluino / Arduino (como el Crystalino), o en cualquier otro microcontrolador con lógica 0 - 5V o 0 - 3,3V (Raspberry Pi, STM32...)
El módulo es capaz de controlar hasta dos motores de corriente continua, con una alimentación máxima de 11,5 V. Proporcionando de forma continua hasta 1A de corriente de salida por motor, con picos de 2A.
También soporta montaje en paralelo para controlar un único motor de mayor potencia.
Tabla de control
IN1 / IN3 | IN2 / IN4 | (OUT 1 – OUT2) / (OUT3 / OUT4) |
---|---|---|
0 | 0 | Parada lenta |
1 | 1 | Parada brusca |
1 / PWM | 0 | Avance |
0 | 1 / PWM | Retroceso |
Una de las principales características del DRV8833 es su baja RON, la resistencia que ofrecen los circuitos de conmutación cuando entran en conducción (tan pequeña como 360 miliohmios). Esto permite manejar intensidades de corriente más grandes en menos espacio y, lo que es más importante, reducir las pérdidas por disipación de calor en el propio driver.
A modo de ejemplo, supongamos que tenemos que controlar un motor de 6V con un consumo de unos 600mA. Veamos qué potencia le llegaría al motor y qué pérdidas encontraríamos comparando los drivers anteriormente mencionados.
Esta comparativa, que hemos realizado tomando las características técnicas de los dispositivos proporcionadas por los propios fabricantes, muestra claramente que el DRV8833 es, en las mismas condiciones de alimentación, la solución que más potencia entrega al motor y la que menos pérdidas disipa en forma de calor.
En este montaje controlaremos dos motores de corriente continua.
En este programa ponemos en prácticas las funciones básicas del control de dos motores utilizando un DRV8833 con el montaje anterior.
// Control básico de dos motores con DRV8833
#define MDER_1 3
#define MDER_2 9
#define MIZQ_1 11
#define MIZQ_2 10
void setup()
{
pinMode(MDER_1, OUTPUT);
pinMode(MDER_2, OUTPUT);
pinMode(MIZQ_1, OUTPUT);
pinMode(MIZQ_2, OUTPUT);
}
void loop()
{
digitalWrite(MDER_1, HIGH); //Avanzan ambos motores
digitalWrite(MDER_2, LOW);
digitalWrite(MIZQ_1, LOW);
digitalWrite(MIZQ_2, HIGH);
delay(2000);
digitalWrite(MDER_1, HIGH); //Parada brusca de ambos motores
digitalWrite(MDER_2, HIGH);
digitalWrite(MIZQ_1, HIGH);
digitalWrite(MIZQ_2, HIGH);
delay(200);
analogWrite(MDER_1, 128); //Avanzan al 50% ambos motores
digitalWrite(MDER_2, LOW);
digitalWrite(MIZQ_1, LOW);
analogWrite(MIZQ_2, 128);
delay(2000);
digitalWrite(MDER_1, HIGH); //Parada brusca de ambos motores
digitalWrite(MDER_2, HIGH);
digitalWrite(MIZQ_1, HIGH);
digitalWrite(MIZQ_2, HIGH);
delay(200);
digitalWrite(MDER_1, LOW); //Retroceden ambos motores
digitalWrite(MDER_2, HIGH);
digitalWrite(MIZQ_1, HIGH);
digitalWrite(MIZQ_2, LOW);
delay(2000);
digitalWrite(MDER_1, LOW);//Parada suave de ambos motores
digitalWrite(MDER_2, LOW);
digitalWrite(MIZQ_1, LOW);
digitalWrite(MIZQ_2, LOW);
delay(200);
digitalWrite(MDER_1, LOW); //Retroceden al 50% ambos motores
analogWrite(MDER_2, 128);
analogWrite(MIZQ_1, 128);
digitalWrite(MIZQ_2, LOW);
delay(2000);
digitalWrite(MDER_1, LOW);//Parada suave de ambos motores
digitalWrite(MDER_2, LOW);
digitalWrite(MIZQ_1, LOW);
digitalWrite(MIZQ_2, LOW);
delay(200);
}