Project 8: Motoraansturing en Snelheidsregeling
(1)Beschrijving:
Er zijn veel manieren om motoren aan te sturen. Onze slimme auto gebruikt de meest gebruikelijke oplossing genaamd L298P. L298P, geproduceerd door STMicroelectronics, is een uitstekende aandrijfchip speciaal ontworpen voor het aansturen van hoogvermogen motoren.
Het kan DC-motoren, twee-fase en vier-fase motoren direct aansturen met een aandrijfstroom die 2A bereikt. En de uitgangsaansluiting van de motor maakt gebruik van 8 hoge-snelheid Schottky-diodes als bescherming.
We hebben een uitbreidingsbord ontworpen op basis van het L298P-circuit, waarvan het gelaagde ontwerp direct in het UNO R3-bord gestoken kan worden voor gebruik, waardoor de technische moeilijkheden voor gebruikers bij het gebruiken en aansturen van de motor worden verminderd.
Stapel het uitbreidingsbord op het bord, sluit de BAT aan, zet de DIP-schakelaar naar het ON-uiteinde, en voed het uitbreidingsbord en het UNO R3-bord tegelijkertijd via externe voeding.
Om het bedraden te vergemakkelijken, is het uitbreidingsbord uitgerust met anti-omgekeerde interface (PH2.0 -2P -3P -4P -5P) en kan het dus direct worden aangesloten met motoren, voeding en sensoren/modules.
De Bluetooth-interface van het aandrijf-uitbreidingsbord is volledig compatibel met de Keyestudio HM-10 Bluetooth-module. Daarom hoeven we alleen de HM-10 Bluetooth-module in de bijbehorende interface te steken bij het aansluiten.
Tegelijkertijd gebruikt het aandrijf-uitbreidingsbord ook 2.54 pin-headers om enkele beschikbare digitale poorten en analoge poorten uit te breiden, zodat u andere sensoren kunt blijven toevoegen en uitbreidingsexperimenten kunt uitvoeren.
Het uitbreidingsbord kan worden aangesloten op 4 DC-motoren. In de standaard jumper-cap verbindingsmodus zijn de A- en A1-, B- en B1-interface-motoren parallel aangesloten, en hun bewegingspatroon is hetzelfde. 8 jumper-caps kunnen worden gebruikt om de rotatierichting van de 4 motorinterfaces te regelen.
Wanneer de twee jumper-caps voor de motor A-interface bijvoorbeeld worden veranderd van een horizontale verbinding naar een verticale verbinding, is de rotatierichting van motor A nu tegengesteld aan de oorspronkelijke rotatierichting.


(2)Parameters:
Invoerspanning logisch deel: DC 5V
Invoerspanning aandrijvingsdeel: DC 7-12V
Werkstroom logisch deel: ≤36mA
Werkstroom aandrijvingsdeel: ≤ 2A
Maximaal dissipatiemogen: 25W (T=75℃)
Ingangsniveau regelsignaal:
Hoog niveau: 2.3V ≤ Vin ≤ 5V
Laag niveau: 0V ≤ Vin ≤ 1.5V
Werktemperatuur: -25℃~+130℃
(3)De robot laten bewegen
De richtingspin van motor A is D2, de snelheidsregelingspin is D5; de richtingspin van motor B is D4 en de snelheidsregelingspin is D6.
Volgens de onderstaande tabel kunnen we zien hoe we de beweging van de robot kunnen regelen door de rotatie van twee motoren te besturen via de digitale poorten en PWM-poorten. Hierbij is het bereik van de PWM-waarde 0-255. Hoe groter de waarde, hoe sneller de motor roteert.
Functie |
D4 |
D6(PWM) |
Motor (links)B |
D2 |
D5(PWM) |
Motor(Rechts)A |
|---|---|---|---|---|---|---|
Vooruit rijden |
HIGH |
255-200 |
Draait Links |
HIGH |
255-200 |
Draait Links |
Achteruit gaan |
LOW |
200 |
Draait Rechts |
LOW |
200 |
Draait Rechts |
Links draaien |
LOW |
200 |
Draait Rechts |
HIGH |
255-200 |
Draait Links |
Rechts draaien |
HIGH |
255-200 |
Draait Links |
LOW |
200 |
Draait Rechts |
Stoppen |
LOW |
0 |
Stop |
LOW |
0 |
Stop |
(4)Aansluitingsschema:

Opmerking:
De 4-pins connector is gemarkeerd met A, A1, B1 en B. De rechter achtermotor is verbonden met B van het 8833-bord en de linker voormotor is verbonden met de A-poort.
(5)Testcode:
(Opmerking: Verbind de Bluetooth-module niet voordat u de code uploadt, omdat het uploaden van de code ook seriële communicatie gebruikt, en er mogelijk conflicten zijn met de Bluetooth seriële communicatie, waardoor het uploaden kan mislukken.)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 8.1
motor driver
http://www.keyestudio.com
*/
#define ML_Ctrl 4 // Definieer de richtingsregelingspin van de linker motor
#define ML_PWM 6 // Definieer de PWM-regelingspin van de linker motor
#define MR_Ctrl 2 // Definieer de richtingsregelingspin van de rechter motor
#define MR_PWM 5 // Definieer de PWM-regelingspin van de rechter motor
void setup()
{
pinMode(ML_Ctrl, OUTPUT);// Definieer de richtingsregelingspin van de linker motor als OUTPUT
pinMode(ML_PWM, OUTPUT);// Definieer de PWM-regelingspin van de linker motor als OUTPUT
pinMode(MR_Ctrl, OUTPUT);// Definieer de richtingsregelingspin van de rechter motor als OUTPUT
pinMode(MR_PWM, OUTPUT);// Definieer de PWM-regelingspin van de rechter motor als OUTPUT
}
void loop()
{
// vooruit
digitalWrite(ML_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de linker motor in op HIGH
analogWrite(ML_PWM, 55); // PWM-regelingssnelheid van de linker motor is 55
digitalWrite(MR_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de rechter motor in op HIGH
analogWrite(MR_PWM, 55); // PWM-regelingssnelheid van de rechter motor is 55
delay(2000);// vertraging van 2s
// achteruit
digitalWrite(ML_Ctrl, LOW); // Stel richtingsregelingssnelheid van de linker motor in op LOW
analogWrite(ML_PWM, 200); // PWM-regelingssnelheid van de linker motor is 200
digitalWrite(MR_Ctrl, LOW); // Stel richtingsregelingssnelheid van de rechter motor in op LOW
analogWrite(MR_PWM, 200); // PWM-regelingssnelheid van de rechter motor is 200
delay(2000);// vertraging van 2s
// links draaien
digitalWrite(ML_Ctrl, LOW); // Stel richtingsregelingssnelheid van de linker motor in op LOW
analogWrite(ML_PWM, 200); // PWM-regelingssnelheid van de linker motor is 200
digitalWrite(MR_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de rechter motor in op HIGH
analogWrite(MR_PWM, 55); // PWM-regelingssnelheid van de rechter motor is 55
delay(2000);// vertraging van 2s
// rechts draaien
digitalWrite(ML_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de linker motor in op HIGH
analogWrite(ML_PWM, 55); // PWM-regelingssnelheid van de linker motor is 55
digitalWrite(MR_Ctrl, LOW); // Stel richtingsregelingssnelheid van de rechter motor in op LOW
analogWrite(MR_PWM, 200); // PWM-regelingssnelheid van de rechter motor is 200
delay(2000);// vertraging van 2s
// stoppen
digitalWrite(ML_Ctrl, LOW);
analogWrite(ML_PWM, 0); // PWM-regelingssnelheid van de linker motor is 0
digitalWrite(MR_Ctrl, LOW);
analogWrite(MR_PWM, 0); // PWM-regelingssnelheid van de rechter motor is 0
delay(2000);// vertraging van 2s
}
(6)Testresultaten:
Na het bedraden volgens het schema, het uploaden van de testcode en het inschakelen.

rijdt de slimme auto 2s vooruit, 2s achteruit, 2s naar links, 2s naar rechts en stopt 2s en herhaalt deze volgorde.
(7)Code-uitleg:
digitalWrite(ML_Ctrl,LOW);
De wisseling tussen hoge en lage niveaus kan motoren clockwise of anticlockwise laten roteren. Algemene digitale pinnen kunnen worden gebruikt om deze bewegingen te besturen.
analogWrite(ML_PWM,200);
De snelheidsregeling van de motor wordt gerealiseerd door PWM, en de pin die de snelheid van de motor regelt moet de PWM-pin van Arduino zijn.
(8)Uitbreidingsproject:
We passen de snelheid van motoren aan door PWM te regelen en de bedrading blijft hetzelfde.
Testcode
(Opmerking: Verbind de Bluetooth-module niet voordat u de code uploadt, omdat het uploaden van de code ook seriële communicatie gebruikt, en er mogelijk conflicten zijn met de Bluetooth seriële communicatie, waardoor het uploaden kan mislukken.)
/*
Keyestudio Mini Tank Robot V3 (Popular Edition)
lesson 8.2
motor driver pwm
http://www.keyestudio.com
*/
#define ML_Ctrl 4 // Definieer de richtingsregelingspin van de linker motor
#define ML_PWM 6 // Definieer de PWM-regelingspin van de linker motor
#define MR_Ctrl 2 // Definieer de richtingsregelingspin van de rechter motor
#define MR_PWM 5 // Definieer de PWM-regelingspin van de rechter motor
void setup()
{
pinMode(ML_Ctrl, OUTPUT);// Definieer de richtingsregelingspin van de linker motor als OUTPUT
pinMode(ML_PWM, OUTPUT);// Definieer de PWM-regelingspin van de linker motor als OUTPUT
pinMode(MR_Ctrl, OUTPUT);// Definieer de richtingsregelingspin van de rechter motor als OUTPUT
pinMode(MR_PWM, OUTPUT);// Definieer de PWM-regelingspin van de rechter motor als OUTPUT
}
void loop()
{
// vooruit
digitalWrite(ML_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de linker motor in op HIGH
analogWrite(ML_PWM, 155); // PWM-regelingssnelheid van de linker motor is 155
digitalWrite(MR_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de rechter motor in op HIGH
analogWrite(MR_PWM, 155); // PWM-regelingssnelheid van de rechter motor is 155
delay(2000);// vertraging van 2s
// achteruit
digitalWrite(ML_Ctrl, LOW); // Stel richtingsregelingssnelheid van de linker motor in op LOW
analogWrite(ML_PWM, 100); // PWM-regelingssnelheid van de linker motor is 100
digitalWrite(MR_Ctrl, LOW); // Stel richtingsregelingssnelheid van de rechter motor in op LOW
analogWrite(MR_PWM, 100); // PWM-regelingssnelheid van de rechter motor is 100
delay(2000);// vertraging van 2s
// links
digitalWrite(ML_Ctrl, LOW); // Stel richtingsregelingssnelheid van de linker motor in op LOW
analogWrite(ML_PWM, 100); // PWM-regelingssnelheid van de linker motor is 100
digitalWrite(MR_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de rechter motor in op HIGH
analogWrite(MR_PWM, 155); // PWM-regelingssnelheid van de rechter motor is 155
delay(2000);// vertraging van 2s
// rechts
digitalWrite(ML_Ctrl, HIGH); // Stel richtingsregelingssnelheid van de linker motor in op HIGH
analogWrite(ML_PWM, 155); // PWM-regelingssnelheid van de linker motor is 155
digitalWrite(MR_Ctrl, LOW); // Stel richtingsregelingssnelheid van de rechter motor in op LOW
analogWrite(MR_PWM, 100); // PWM-regelingssnelheid van de rechter motor is 100
delay(2000);// vertraging van 2s
// stoppen
digitalWrite(ML_Ctrl, LOW); // Stel richtingsregelingssnelheid van de linker motor in op LOW
analogWrite(ML_PWM, 0); // PWM-regelingssnelheid van de linker motor is 0
digitalWrite(MR_Ctrl, LOW); // Stel richtingsregelingssnelheid van de rechter motor in op LOW
analogWrite(MR_PWM, 0); // PWM-regelingssnelheid van de rechter motor is 0
delay(2000);// vertraging van 2s
}
Upload de code, de snelheid van de motor is lager.
Een lage stroom zorgt ervoor dat de motor langzaam roteert.