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.