Kod Arduino i wideo: Sterownik silnika DC L293D (bez kontroli prędkości)
Ten poradnik omawia, jak używać sterownika silnika L293D z Arduino do sterowania silnikiem prądu stałego. L293D pozwala obracać silnik zarówno w kierunku zgodnym, jak i przeciwnym do ruchu wskazówek zegara. Postępując zgodnie z tym przewodnikiem, nauczysz się, jak podłączyć komponenty i zaprogramować Arduino, aby osiągnąć pożądaną kontrolę silnika.
W tym projekcie wykorzystamy sterownik silnika L293D do sterowania pojedynczym silnikiem prądu stałego. Silnik będzie mógł zmieniać kierunek na podstawie poleceń podanych w kodzie Arduino. Dla lepszego zrozumienia konfiguracji i kodu warto obejrzeć powiązane wideo (na wideo w 00:00).
Wyjaśnienie sprzętu
L293D to układ scalony zaprojektowany do sterowania silnikami. Może sterować dwoma silnikami prądu stałego jednocześnie lub jednym silnikiem krokowym. Układ wykorzystuje konfigurację mostka H, aby umożliwić kontrolę kierunku poprzez przełączanie polaryzacji napięcia przyłożonego do silnika. Ta elastyczność czyni go doskonałym wyborem do projektów robotyki i automatyki.
Oprócz L293D użyjemy płytki Arduino do wysyłania sygnałów sterujących do sterownika silnika. Arduino wygeneruje niezbędne poziomy logiczne, aby włączyć silnik i określić kierunek jego obrotu. Konfiguracja będzie również wymagać silnika prądu stałego i zasilacza zgodnego z wymaganiami napięciowymi silnika.
Szczegóły z karty katalogowej
| Producent | Texas Instruments |
|---|---|
| Numer części | L293D |
| Napięcie logiczne/IO | 5 V |
| Napięcie zasilania | 4,5 - 36 V |
| Prąd wyjściowy (na kanał) | 600 mA |
| Prąd szczytowy (na kanał) | 1,2 A |
| Zalecana częstotliwość PWM | 20 kHz |
| Progi logiczne wejścia | 2,5 V (typ.) |
| Spadek napięcia / RDS(on) / nasycenie | 1,5 V (maks.) |
| Limity termiczne | 150 °C (maks.) |
| Obudowa | 16-DIP |
| Uwagi / warianty | Może sterować dwoma silnikami |
- Upewnij się, że napięcie zasilania nie przekracza 36 V.
- Zastosuj odpowiednie odprowadzanie ciepła podczas pracy przy maksymalnym prądzie.
- Zawsze podłączaj masę Arduino i sterownika silnika.
- Sprawdź okablowanie, aby uniknąć odwróconej polaryzacji połączeń.
- Używaj sygnałów PWM do kontroli prędkości, jeśli będzie to potrzebne w przyszłych projektach.
Instrukcje okablowania


Aby podłączyć sterownik silnika L293D do Arduino, zacznij od podłączenia zasilania i masy. Podłącz piny 4 i 5 układu L293D do masy. Następnie podłącz pin 1 (Vcc1) do wyjścia 5 V Arduino. Dla Vcc2 (pin 8) podłącz zewnętrzne zasilanie, upewniając się, że odpowiada specyfikacji napięciowej silnika.
Następnie podłącz pin włączający (pin 1) do pinu 8 na Arduino, aby kontrolować zasilanie silnika. Dla wejść sterujących silnikiem podłącz pin 2 (1A) układu L293D do pinu 2 na Arduino oraz pin 7 (2A) do pinu 7 na Arduino. Na koniec podłącz zaciski silnika do pinów 3 (1Y) i 6 (2Y) na L293D.
Przykłady kodu i omówienie
Poniższy kod inicjalizuje piny i konfiguruje sterowanie silnikiem. Użyte identyfikatory obejmują P1A dla pierwszego pinu sterującego silnikiem oraz EN12 dla pinu włączającego. Funkcja setup konfiguruje piny jako wyjścia.
void setup() {
Serial.begin(9600); // konfiguracja monitora szeregowego do wyświetlania informacji
pinMode(P1A, OUTPUT); // zdefiniuj pin jako WYJŚCIE dla P1A
pinMode(P2A, OUTPUT); // zdefiniuj pin jako WYJŚCIE dla P2A
pinMode(EN12, OUTPUT); // zdefiniuj pin jako WYJŚCIE dla 1,2EN enable
}
W pętli silnik jest sterowany tak, aby obracał się w obu kierunkach z przerwami pomiędzy. Stan silnika jest drukowany na monitorze szeregowym za pomocą Serial.println.
void loop() {
Serial.println("Obrót CW");
digitalWrite(EN12, HIGH); // Włącz 1A i 2A
digitalWrite(P1A, HIGH); // wyślij sygnał HIGH do P1A
digitalWrite(P2A, LOW); // wyślij sygnał LOW do P2A
delay(3000); // silnik działa przez 3 sekundy
digitalWrite(EN12, LOW); // Wyłącz 1A i 2A
}
Ten fragment pokazuje, jak kontrolować kierunek obrotu silnika poprzez zmianę poziomów logicznych wysyłanych do P1A i P2A. Silnik działa przez 3 sekundy, zanim się zatrzyma i zmieni kierunek.
Oto jak użyto sterowników półmostka L293D:
Demonstracja / Czego się spodziewać
Po zakończeniu konfiguracji i wgraniu kodu powinieneś zaobserwować, że silnik obraca się w jednym kierunku przez 3 sekundy, zatrzymuje się na 2 sekundy, a następnie obraca się w przeciwnym kierunku przez kolejne 3 sekundy. Stan silnika będzie wyświetlany na monitorze szeregowym, potwierdzając działania (na filmie o 12:00).
Typowe pułapki obejmują zapewnienie odpowiedniego napięcia zasilania silnika oraz sprawdzenie poprawności podłączeń silnika. Jeśli silnik nie reaguje, sprawdź ponownie okablowanie i połączenia zasilania.
Znaczniki czasu w filmie
- 00:00 - Wprowadzenie
- 02:30 - Wyjaśnienie okablowania
- 05:00 - Omówienie kodu
- 10:00 - Demonstracja sterowania silnikiem
++
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* watch L293 video for details https://youtu.be/jAmDliHcTJ0
* Code is available at http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Control Code by Robojax.com 2018025
}
void loop() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.println("Rotating CW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
// L293 Motor Control Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println("Rotating CCW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
Serial.println("=========== Loop done");
delay(500);
// L293 Motor Control Code by Robojax.com 2018025
}
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
* Code is available at: http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Contro Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Contro Code by Robojax.com 2018025
}
void loop() {
if(value == 45){
rotateMA("CW",HIGH); // start motor in CW
}
delay(3000);
rotateMA("CW",LOW); // stop motor
delay(2000);
rotateMA("CCW",HIGH); // start motor in CCW
delay(3000);
rotateMA("CW",LOW); /// stop motor
delay(2000);
// L293 Motor Contro Code by Robojax.com 2018025
}// loop ends
/**
* function: rotateMA(String di,int action)
* Sends power to motor A
* di is a string and can be "CW" or "CCW"
* to use:
* rotateMA("CW",HIGH);// to rotate motor CW
* rotateMA("CCW",HIGH);// to rotate motor CCW
* to stop the motor:
* rotateMA("CW",LOW);// to stop motor
*/
void rotateMA(String di,int endis)
{
// L293 Motor Contro Code by Robojax.com 2018025
if(di =="CW"){
Serial.println(" Rotating CW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
}else{
// L293 Motor Contro Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println(" Rotating CCW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
}
// L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here
Rzeczy, których możesz potrzebować
-
AmazonPurchase L293D motor driver ICamzn.to
-
AliExpressPurchase L293D motor driver IC from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Karta katalogowa (pdf)
-
robojax_L293D_motor_shield_manual.pdf
robojax_L293D_motor_shield_manual.pdf0.16 MB -
L293d datasheet
L293d_datasheet.pdf0.34 MB