Progetto 8: Guida e Controllo della Velocità del Motore
(1)Descrizione:
Esistono molti modi per pilotare i motori. La nostra auto intelligente utilizza la soluzione più comune chiamata L298P. L298P, prodotto da STMicroelectronics, è un eccellente chip di pilotaggio appositamente progettato per pilotare motori ad alta potenza.
Può pilotare direttamente motori DC, motori a due fasi e a quattro fasi con una corrente di pilotaggio che raggiunge i 2A. Il terminale di uscita del motore adotta 8 diodi Schottky ad alta velocità come protezione.
Abbiamo progettato una scheda di espansione basata sul circuito L298P il cui design a impilamento può essere inserito direttamente nella scheda UNO R3 per l’uso, riducendo le difficoltà tecniche per gli utenti nell’utilizzo e nel pilotaggio del motore.
Impilare la scheda di espansione sulla scheda, alimentare la BAT, girare l’interruttore DIP sull’estremità ON e alimentare la scheda di espansione e la scheda UNO R3 contemporaneamente tramite alimentazione esterna.
Per facilitare il cablaggio, la scheda di espansione è dotata di interfaccia anti-inversione (PH2.0 -2P -3P -4P -5P) e quindi può essere collegata direttamente con motori, alimentatori e sensori/moduli.
L’interfaccia Bluetooth della scheda di espansione per il pilotaggio è completamente compatibile con il modulo Bluetooth Keyestudio HM-10. Pertanto, dobbiamo solo inserire il modulo Bluetooth HM-10 nell’interfaccia corrispondente durante il collegamento.
Allo stesso tempo, la scheda di espansione utilizza anche pin header da 2,54 mm per estendere alcune porte digitali e analogiche disponibili, in modo da poter continuare ad aggiungere altri sensori e svolgere esperimenti di espansione.
La scheda di espansione può essere collegata a 4 motori DC. Nella modalità di connessione predefinita con il cappuccio jumper, i motori delle interfacce A e A1, B e B1 sono collegati in parallelo e il loro schema di movimento è lo stesso. 8 cappucci jumper possono essere utilizzati per controllare la direzione di rotazione delle 4 interfacce motore.
Ad esempio, quando i due cappucci jumper davanti all’interfaccia del motore A vengono cambiati da una connessione orizzontale a una connessione verticale, la direzione di rotazione del motore A è ora opposta alla direzione di rotazione originale.


(2)Parametri:
Tensione di ingresso della parte logica: DC 5V
Tensione di ingresso della parte di pilotaggio: DC 7-12V
Corrente di lavoro della parte logica: ≤36mA
Corrente di lavoro della parte di pilotaggio: ≤ 2A
Potenza massima dissipata: 25W (T=75℃)
Livello del segnale di controllo in ingresso:
Livello alto: 2,3V ≤ Vin ≤ 5V
Livello basso: 0V ≤ Vin ≤ 1,5V
Temperatura di lavoro: -25℃~+130℃
(3)Pilotare il robot in movimento
Il pin di direzione del motore A è D2, il pin di controllo della velocità è D5; il pin di direzione del motore B è D4 e il pin di controllo della velocità è D6.
Secondo la tabella seguente, possiamo sapere come controllare il movimento del robot controllando la rotazione di due motori attraverso le porte digitali e le porte PWM. Il range del valore PWM è 0-255. Maggiore è il valore, più veloce ruota il motore.
Funzione |
D4 |
D6(PWM) |
Motore(sinistra)B |
D2 |
D5(PWM) |
Motore(destra)A |
|---|---|---|---|---|---|---|
Avanti |
HIGH |
255-200 |
Ruota Sinistra |
HIGH |
255-200 |
Ruota Sinistra |
Indietro |
LOW |
200 |
Ruota Destra |
LOW |
200 |
Ruota Destra |
Gira Sinistra |
LOW |
200 |
Ruota Destra |
HIGH |
255-200 |
Ruota Sinistra |
Gira Destra |
HIGH |
255-200 |
Ruota Sinistra |
LOW |
200 |
Ruota Destra |
Stop |
LOW |
0 |
Stop |
LOW |
0 |
Stop |
(4)Schema di Collegamento:

Nota:
Il connettore a 4 pin è contrassegnato con A, A1, B1 e B. Il motore posteriore destro è collegato a B della scheda 8833 e quello anteriore sinistro è collegato alla porta A.
(5)Codice di Test:
(Nota: Non collegare il modulo Bluetooth prima di caricare il codice, perché il caricamento del codice utilizza anche la comunicazione seriale, e potrebbero verificarsi conflitti con la comunicazione seriale Bluetooth, che possono causare il fallimento del caricamento.)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 8.1
motor driver
http://www.keyestudio.com
*/
#define ML_Ctrl 4 // Definire il pin di controllo della direzione del motore sinistro
#define ML_PWM 6 // Definire il pin di controllo PWM del motore sinistro
#define MR_Ctrl 2 // Definire il pin di controllo della direzione del motore destro
#define MR_PWM 5 // 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()
{
// avanti
digitalWrite(ML_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore sinistro su HIGH
analogWrite(ML_PWM, 55); // La velocità di controllo PWM del motore sinistro è 55
digitalWrite(MR_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore destro su HIGH
analogWrite(MR_PWM, 55); // La velocità di controllo PWM del motore destro è 55
delay(2000);// ritardo di 2s
// indietro
digitalWrite(ML_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore sinistro su LOW
analogWrite(ML_PWM, 200); // La velocità di controllo PWM del motore sinistro è 200
digitalWrite(MR_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore destro su LOW
analogWrite(MR_PWM, 200); // La velocità di controllo PWM del motore destro è 200
delay(2000);// ritardo di 2s
// gira sinistra
digitalWrite(ML_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore sinistro su LOW
analogWrite(ML_PWM, 200); // La velocità di controllo PWM del motore sinistro è 200
digitalWrite(MR_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore destro su HIGH
analogWrite(MR_PWM, 55); // La velocità di controllo PWM del motore destro è 55
delay(2000);// ritardo di 2s
// gira destra
digitalWrite(ML_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore sinistro su HIGH
analogWrite(ML_PWM, 55); // La velocità di controllo PWM del motore sinistro è 55
digitalWrite(MR_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore destro su LOW
analogWrite(MR_PWM, 200); // La velocità di controllo PWM del motore destro è 200
delay(2000);// ritardo di 2s
// stop
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 0); // La velocità di controllo PWM del motore sinistro è 0
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 0); // La velocità di controllo PWM del motore destro è 0
delay(2000);// ritardo di 2s
}
(6)Risultati del Test:
Dopo aver effettuato il cablaggio secondo lo schema, caricato il codice di test e acceso l’alimentazione.

l’auto intelligente si muove in avanti per 2s, indietro per 2s, gira a sinistra per 2s, gira a destra per 2s e si ferma per 2s, ripetendo questa sequenza.
(7)Spiegazione del Codice:
digitalWrite(ML_Ctrl,LOW);
Il cambiamento tra livelli alto e basso può far ruotare i motori in senso orario o antiorario. I pin digitali generali possono essere utilizzati per controllare questi movimenti.
analogWrite(ML_PWM,200);
La regolazione della velocità del motore è realizzata tramite PWM, e il pin che controlla la velocità del motore deve essere il pin PWM di Arduino.
(8)Progetto di Espansione:
Regoliamo la velocità dei motori controllando il PWM e il cablaggio rimane invariato.
Codice di Test
(Nota: Non collegare il modulo Bluetooth prima di caricare il codice, perché il caricamento del codice utilizza anche la comunicazione seriale, e potrebbero verificarsi conflitti con la comunicazione seriale Bluetooth, che possono causare il fallimento del caricamento.)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 8.2
motor driver pwm
http://www.keyestudio.com
*/
#define ML_Ctrl 4 // Definire il pin di controllo della direzione del motore sinistro
#define ML_PWM 6 // Definire il pin di controllo PWM del motore sinistro
#define MR_Ctrl 2 // Definire il pin di controllo della direzione del motore destro
#define MR_PWM 5 // 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()
{
// avanti
digitalWrite(ML_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore sinistro su HIGH
analogWrite(ML_PWM, 155); // La velocità di controllo PWM del motore sinistro è 155
digitalWrite(MR_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore destro su HIGH
analogWrite(MR_PWM, 155); // La velocità di controllo PWM del motore destro è 155
delay(2000);// ritardo di 2s
// indietro
digitalWrite(ML_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore sinistro su LOW
analogWrite(ML_PWM, 100); // La velocità di controllo PWM del motore sinistro è 100
digitalWrite(MR_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore destro su LOW
analogWrite(MR_PWM, 100); // La velocità di controllo PWM del motore destro è 100
delay(2000);// ritardo di 2s
// sinistra
digitalWrite(ML_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore sinistro su LOW
analogWrite(ML_PWM, 100); // La velocità di controllo PWM del motore sinistro è 100
digitalWrite(MR_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore destro su HIGH
analogWrite(MR_PWM, 155); // La velocità di controllo PWM del motore destro è 155
delay(2000);// ritardo di 2s
// destra
digitalWrite(ML_Ctrl, HIGH); // Impostare la velocità di controllo della direzione del motore sinistro su HIGH
analogWrite(ML_PWM, 155); // La velocità di controllo PWM del motore sinistro è 155
digitalWrite(MR_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore destro su LOW
analogWrite(MR_PWM, 100); // La velocità di controllo PWM del motore destro è 100
delay(2000);// ritardo di 2s
// stop
digitalWrite(ML_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore sinistro su LOW
analogWrite(ML_PWM, 0); // La velocità di controllo PWM del motore sinistro è 0
digitalWrite(MR_Ctrl, LOW); // Impostare la velocità di controllo della direzione del motore destro su LOW
analogWrite(MR_PWM, 0); // La velocità di controllo PWM del motore destro è 0
delay(2000);// ritardo di 2s
}
Caricare il codice, la velocità del motore è più lenta.
Una corrente bassa farà ruotare il motore lentamente.