Proyecto 8 Control de Motor y Velocidad
Descripción

Hay muchas formas de controlar un motor. Nuestro robot coche utiliza la solución más común: L298P, que es un excelente controlador de motor IC de alta potencia producido por STMicroelectronics. Puede controlar directamente motores DC, motores paso a paso de dos fases y cuatro fases. La corriente de conducción es de hasta 2A, y el terminal de salida del motor utiliza ocho diodos Schottky de alta velocidad como protección.
Diseñamos una placa base en función del circuito L298p. El diseño apilado reduce la dificultad técnica del uso y control del motor.
Especificación
Diagrama de Circuito de la Placa L298P

Voltaje de entrada de la parte lógica: DC5V
Voltaje de entrada de la parte de conducción: DC 7-12V
Corriente de trabajo de la parte lógica: <36mA
Corriente de trabajo de la parte de conducción: <2A
Disipación de potencia máxima: 25W (T=75℃)
Temperatura de trabajo: -25℃~+130℃
Nivel de entrada de señal de control: nivel alto 2.3V<Vin<5V, nivel bajo\0.3V<Vin<1.5V

Conducir el Robot para Moverse
A través del diagrama de circuito anterior, el pin de dirección del motor A es D12, y el pin de velocidad es D3; D13 es el pin de dirección del motor B, D11 es el pin de velocidad.
Sabemos cómo controlar los puertos digitales según el siguiente gráfico.
PWM decide que 2 motores se enciendan para conducir el robot coche. El valor PWM está en el rango de 0-255. Cuanto mayor sea el número, más rápido gira el motor.
Robot Tanque |
Motor (A) |
Motor (B) |
|---|---|---|
Adelante |
Girar en sentido horario |
Girar en sentido horario |
Atrás |
Girar en sentido antihorario |
Girar en sentido antihorario |
Girar a la izquierda |
Girar en sentido antihorario |
Girar en sentido horario |
Girar a la derecha |
Girar en sentido horario |
Girar en sentido antihorario |
Parar |
Parar |
Parar |
Componentes

Diagrama de Conexión

Nota: el bloque terminal de 4 pines está marcado con serigrafía 1234. La línea roja del motor trasero derecho está conectada al terminal 1, la línea negra está vinculada al extremo 2. La línea roja del motor delantero izquierdo está conectada al terminal 3, la línea negra está vinculada al puerto 4.
Código de Prueba
/*
keyestudio Mini Tank Robot V2.1
lección 8.1
controlador de motor
http://www.keyestudio.com
*/
#define ML_Ctrl 13 //define el pin de control de dirección del motor izquierdo
#define ML_PWM 11 //define el pin de control PWM del motor izquierdo
#define MR_Ctrl 12 //define el pin de control de dirección del motor derecho
#define MR_PWM 3 //define el pin de control PWM del motor derecho
void setup()
{
pinMode(ML_Ctrl, OUTPUT);//define el pin de control de dirección del motor izquierdo como salida
pinMode(ML_PWM, OUTPUT);//define el pin de control PWM del motor izquierdo como salida
pinMode(MR_Ctrl, OUTPUT);//define el pin de control de dirección del motor derecho como salida
pinMode(MR_PWM, OUTPUT);//define el pin de control PWM del motor derecho como salida
}
void loop()
{
digitalWrite(ML_Ctrl,LOW);//establece el pin de control de dirección del motor izquierdo en BAJO
analogWrite(ML_PWM,200);//establece la velocidad de control PWM del motor izquierdo en 200
digitalWrite(MR_Ctrl,LOW);//establece el pin de control de dirección del motor derecho en BAJO
analogWrite(MR_PWM,200);//establece la velocidad de control PWM del motor derecho en 200
//adelante
delay(2000);//retraso de 2s
digitalWrite(ML_Ctrl,HIGH);//establece el pin de control de dirección del motor izquierdo en ALTO
analogWrite(ML_PWM,200);//establece la velocidad de control PWM del motor izquierdo en 200
digitalWrite(MR_Ctrl,HIGH);//establece el pin de control de dirección del motor derecho en ALTO
analogWrite(MR_PWM,200);//establece la velocidad de control PWM del motor derecho en 200
//atrás
delay(2000);//retraso de 2s
digitalWrite(ML_Ctrl,HIGH);//establece el pin de control de dirección del motor izquierdo en ALTO
analogWrite(ML_PWM,200);//establece la velocidad de control PWM del motor izquierdo en 200
digitalWrite(MR_Ctrl,LOW);//establece el pin de control de dirección del motor derecho en BAJO
analogWrite(MR_PWM,200);//establece la velocidad de control PWM del motor derecho en 200
//izquierda
delay(2000);//retraso de 2s
digitalWrite(ML_Ctrl,LOW);//establece el pin de control de dirección del motor izquierdo en BAJO
analogWrite(ML_PWM,200);//establece la velocidad de control PWM del motor izquierdo en 200
digitalWrite(MR_Ctrl,HIGH);//establece el pin de control de dirección del motor derecho en ALTO
analogWrite(MR_PWM,200);//establece la velocidad de control PWM del motor derecho en 200
//derecha
delay(2000);//retraso de 2s
analogWrite(ML_PWM,0);//establece la velocidad de control PWM del motor izquierdo en 0
analogWrite(MR_PWM,0);//establece la velocidad de control PWM del motor derecho en 0
//parar
delay(2000);//retraso de 2s
}//*****************************************
Resultado de la Prueba
Conecte según el diagrama de conexión, cargue el código y encienda, el coche inteligente avanza y retrocede durante 2s, gira a la izquierda y derecha durante 2s, se detiene durante 2s y alterna.
Explicación del Código
digitalWrite(ML_Ctrl,LOW): la dirección de rotación del motor se decide por el nivel alto/bajo y los pines que deciden la dirección de rotación son pines digitales.
analogWrite(ML_PWM,200): la velocidad del motor se regula por PWM, y los pines que deciden la velocidad del motor deben ser pines PWM.
Práctica de Extensión
Ajuste la velocidad que PWM controla del motor, y conecte de la misma manera.

/*
keyestudio Mini Tank Robot V2.1
lección 8.2
pwm del controlador de motor
http://www.keyestudio.com
*/
#define ML_Ctrl 13 //define el pin de control de dirección del motor izquierdo
#define ML_PWM 11 //define el pin de control PWM del motor izquierdo
#define MR_Ctrl 12 //define el pin de control de dirección del motor derecho
#define MR_PWM 3 //define el pin de control PWM del motor derecho
void setup()
{
pinMode(ML_Ctrl, OUTPUT);//define el pin de control de dirección del motor izquierdo como SALIDA
pinMode(ML_PWM, OUTPUT);//define el pin de control PWM del motor izquierdo como SALIDA
pinMode(MR_Ctrl, OUTPUT);//define el pin de control de dirección del motor derecho como SALIDA
pinMode(MR_PWM, OUTPUT);//define el pin de control PWM del motor derecho como SALIDA
}
void loop()
{
digitalWrite(ML_Ctrl,LOW);//Establece el pin de control de dirección del motor izquierdo en BAJO
analogWrite(ML_PWM,100);//Establece la velocidad de control PWM del motor izquierdo en 100
digitalWrite(MR_Ctrl,LOW);//Establece el pin de control de dirección del motor derecho en BAJO
analogWrite(MR_PWM,100);//Establece la velocidad de control PWM del motor derecho en 100
//adelante
delay(2000);//define 2s
digitalWrite(ML_Ctrl,HIGH);//Establece el pin de control de dirección del motor izquierdo en nivel ALTO
analogWrite(ML_PWM,250);//Establece la velocidad de control PWM del motor izquierdo en 100
digitalWrite(MR_Ctrl,HIGH);//Establece el pin de control de dirección del motor derecho en nivel ALTO
analogWrite(MR_PWM,250);//Establece la velocidad de control PWM del motor derecho en 100
//atrás
delay(2000);//define 2s
digitalWrite(ML_Ctrl,HIGH);//Establece el pin de control de dirección del motor izquierdo en nivel ALTO
analogWrite(ML_PWM,250);//Establece la velocidad de control PWM del motor izquierdo en 100
digitalWrite(MR_Ctrl,LOW);//Establece el pin de control de dirección del motor derecho en nivel BAJO
analogWrite(MR_PWM,250);//Establece la velocidad de control PWM del motor derecho en 100
//izquierda
delay(2000);//define 2s
digitalWrite(ML_Ctrl,LOW);//establece el pin de control de dirección del motor izquierdo en BAJO
analogWrite(ML_PWM,250);//establece la velocidad de control PWM del motor izquierdo en 200
digitalWrite(MR_Ctrl,HIGH);//establece el pin de control de dirección del motor derecho en ALTO
analogWrite(MR_PWM,250);//establece la velocidad de control PWM del motor derecho en 100
//derecha
delay(2000);//define 2s
analogWrite(ML_PWM,0);//establece la velocidad de control PWM del motor izquierdo en 0
analogWrite(MR_PWM,0);//establece la velocidad de control PWM del motor derecho en 0
//parar
delay(2000);//define 2s
}//******************************************************************
Cargue el código exitosamente, los motores giran más rápido.