Progetto 8 Controllo del Motore e Regolazione della Velocità
Descrizione

Esistono molti modi per azionare un motore. L’auto robot utilizza la soluzione più comune: L298P, un eccellente circuito integrato driver motore ad alta potenza prodotto da STMicroelectronics. Può azionare direttamente motori CC, motori passo-passo a due fasi e quattro fasi. La corrente di azionamento è fino a 2A e il terminale di uscita del motore utilizza otto diodi Schottky ad alta velocità come protezione.
Abbiamo progettato uno shield basato sul circuito L298P. Il design impilabile riduce la difficoltà tecnica nell’utilizzo e nell’azionamento del motore.
Specifiche
Diagramma del circuito per la scheda L298P

Tensione di ingresso della parte logica: CC 5V
Tensione di ingresso della parte di azionamento: CC 7-12V
Corrente di lavoro della parte logica: <36mA
Corrente di lavoro della parte di azionamento: <2A
Dissipazione massima di potenza: 25W (T=75℃)
Temperatura di lavoro: -25℃~+130℃
Livello di ingresso del segnale di controllo: livello alto 2.3V<Vin<5V, livello basso 0.3V<Vin<1.5V

Azionare il Robot per il Movimento
Attraverso il diagramma del circuito sopra riportato, il pin di direzione del motore A è D12 e il pin di velocità è D3; D13 è il pin di direzione del motore B, D11 è il pin di velocità.
Sappiamo come controllare le porte digitali secondo il seguente grafico.
PWM decide l’accensione di 2 motori per azionare l’auto robot. Il valore PWM è nell’intervallo 0-255. Più grande è il numero, più veloce ruota il motore.
Robot Tank |
Motore (A) |
Motore (B) |
|---|---|---|
Avanti |
Ruota in senso orario |
|
Indietro |
Ruota in senso antiorario |
|
Ruota a sinistra |
Ruota in senso antiorario |
Ruota in senso orario |
Ruota a destra |
Ruota in senso orario |
Ruota in senso antiorario |
Arresto |
Arresto |
Arresto |
Componenti

Diagramma di Collegamento

Nota: il blocco terminale a 4 pin è contrassegnato con serigrafia 1234. Il filo rosso del motore posteriore destro è collegato al terminale 1, il filo nero è collegato all’estremità 2. Il filo rosso del motore anteriore sinistro è collegato al terminale 3, il filo nero è collegato alla porta 4.
Codice di Test
/*
keyestudio Mini Tank Robot V2.1
lesson 8.1
motor driver
http://www.keyestudio.com
*/
#define ML_Ctrl 13 //definire il pin di controllo della direzione del motore sinistro
#define ML_PWM 11 //definire il pin di controllo PWM del motore sinistro
#define MR_Ctrl 12 //definire il pin di controllo della direzione del motore destro
#define MR_PWM 3 //definire il pin di controllo PWM del motore destro
void setup()
{
pinMode(ML_Ctrl, OUTPUT);//definire il pin di controllo della direzione del motore sinistro come output
pinMode(ML_PWM, OUTPUT);//definire il pin di controllo PWM del motore sinistro come output
pinMode(MR_Ctrl, OUTPUT);//definire il pin di controllo della direzione del motore destro come output
pinMode(MR_PWM, OUTPUT);//definire il pin di controllo PWM del motore destro come output
}
void loop()
{
digitalWrite(ML_Ctrl,LOW);//impostare il pin di controllo della direzione del motore sinistro a LOW
analogWrite(ML_PWM,200);//impostare la velocità di controllo PWM del motore sinistro a 200
digitalWrite(MR_Ctrl,LOW);//impostare il pin di controllo della direzione del motore destro a LOW
analogWrite(MR_PWM,200);//impostare la velocità di controllo PWM del motore destro a 200
//avanti
delay(2000);//ritardo di 2s
digitalWrite(ML_Ctrl,HIGH);//impostare il pin di controllo della direzione del motore sinistro a HIGH
analogWrite(ML_PWM,200);//impostare la velocità di controllo PWM del motore sinistro a 200
digitalWrite(MR_Ctrl,HIGH);//impostare il pin di controllo della direzione del motore destro a HIGH
analogWrite(MR_PWM,200);//impostare la velocità di controllo PWM del motore destro a 200
//indietro
delay(2000);//ritardo di 2s
digitalWrite(ML_Ctrl,HIGH);//impostare il pin di controllo della direzione del motore sinistro a HIGH
analogWrite(ML_PWM,200);//impostare la velocità di controllo PWM del motore sinistro a 200
digitalWrite(MR_Ctrl,LOW);//impostare il pin di controllo della direzione del motore destro a LOW
analogWrite(MR_PWM,200);//impostare la velocità di controllo PWM del motore destro a 200
//sinistra
delay(2000);//ritardo di 2s
digitalWrite(ML_Ctrl,LOW);//impostare il pin di controllo della direzione del motore sinistro a LOW
analogWrite(ML_PWM,200);//impostare la velocità di controllo PWM del motore sinistro a 200
digitalWrite(MR_Ctrl,HIGH);//impostare il pin di controllo della direzione del motore destro a HIGH
analogWrite(MR_PWM,200);//impostare la velocità di controllo PWM del motore destro a 200
//destra
delay(2000);//ritardo di 2s
analogWrite(ML_PWM,0);//impostare la velocità di controllo PWM del motore sinistro a 0
analogWrite(MR_PWM,0);//impostare la velocità di controllo PWM del motore destro a 0
//arresto
delay(2000);//ritardo di 2s
}//*****************************************
Risultato del Test
Collegare secondo il diagramma di collegamento, caricare il codice e accendere l’alimentazione. L’auto intelligente avanza e indietreggia per 2s, gira a sinistra e a destra per 2s, si arresta per 2s e così via alternativamente.
Spiegazione del Codice
digitalWrite(ML_Ctrl,LOW): la direzione di rotazione del motore è determinata dal livello alto/basso e i pin che determinano la direzione di rotazione sono pin digitali.
analogWrite(ML_PWM,200): la velocità del motore è regolata da PWM e i pin che determinano la velocità del motore devono essere pin PWM.
Pratica di Estensione
Regolare la velocità controllata da PWM del motore e collegare nello stesso modo.

/*
keyestudio Mini Tank Robot V2.1
lesson 8.2
motor driver pwm
http://www.keyestudio.com
*/
#define ML_Ctrl 13 //definire il pin di controllo della direzione del motore sinistro
#define ML_PWM 11 //definire il pin di controllo PWM del motore sinistro
#define MR_Ctrl 12 //definire il pin di controllo della direzione del motore destro
#define MR_PWM 3 //definire il pin di controllo PWM del motore destro
void setup()
{
pinMode(ML_Ctrl, OUTPUT);//definire il pin di controllo della direzione del motore sinistro come OUTPUT
pinMode(ML_PWM, OUTPUT);//definire il pin di controllo PWM del motore sinistro come OUTPUT
pinMode(MR_Ctrl, OUTPUT);//definire il pin di controllo della direzione del motore destro come OUTPUT
pinMode(MR_PWM, OUTPUT);//definire il pin di controllo PWM del motore destro come OUTPUT
}
void loop()
{
digitalWrite(ML_Ctrl,LOW);//Impostare il pin di controllo della direzione del motore sinistro a LOW
analogWrite(ML_PWM,100);//Impostare la velocità di controllo PWM del motore sinistro a 100
digitalWrite(MR_Ctrl,LOW);//Impostare il pin di controllo della direzione del motore destro a LOW
analogWrite(MR_PWM,100);//Impostare la velocità di controllo PWM del motore destro a 100
//avanti
delay(2000);//definire 2s
digitalWrite(ML_Ctrl,HIGH);//Impostare il pin di controllo della direzione del motore sinistro a livello HIGH
analogWrite(ML_PWM,250);//Impostare la velocità di controllo PWM del motore sinistro a 100
digitalWrite(MR_Ctrl,HIGH);//Impostare il pin di controllo della direzione del motore destro a livello HIGH
analogWrite(MR_PWM,250);//Impostare la velocità di controllo PWM del motore destro a 100
//indietro
delay(2000);//definire 2s
digitalWrite(ML_Ctrl,HIGH);//Impostare il pin di controllo della direzione del motore sinistro a livello HIGH
analogWrite(ML_PWM,250);//Impostare la velocità di controllo PWM del motore sinistro a 100
digitalWrite(MR_Ctrl,LOW);//Impostare il pin di controllo della direzione del motore destro a livello LOW
analogWrite(MR_PWM,250);//Impostare la velocità di controllo PWM del motore destro a 100
//sinistra
delay(2000);//definire 2s
digitalWrite(ML_Ctrl,LOW);//impostare il pin di controllo della direzione del motore sinistro a LOW
analogWrite(ML_PWM,250);//impostare la velocità di controllo PWM del motore sinistro a 200
digitalWrite(MR_Ctrl,HIGH);//impostare il pin di controllo della direzione del motore destro a HIGH
analogWrite(MR_PWM,250);//impostare la velocità di controllo PWM del motore destro a 100
//destra
delay(2000);//definire 2s
analogWrite(ML_PWM,0);//impostare la velocità di controllo PWM del motore sinistro a 0
analogWrite(MR_PWM,0);//impostare la velocità di controllo PWM del motore destro a 0
//arresto
delay(2000);//definire 2s
}//******************************************************************
Caricamento del codice completato con successo, i motori ruotano più velocemente.