Motorlar va L298N drayveri
Nega pin motorni aylantira olmaydi, L298N ning H-koʻprigi yoʻnalish va tezlikni qanday belgilaydi, Unoni undan qanday xavfsiz quvvatlantirish kerak va setMotor() har bir qatorda nima qiladi.
Asosiysi
- Pin 20 mA beradi, TT motorga esa robotni yurgizish uchun taxminan 0,3 A, toʻsilib qolganda 1 A gacha tok kerak.
- H-koʻprik motordan oʻtadigan tokning yoʻnalishini teskarisiga oʻzgartiradi, shuning uchun motor ikki tomonga ham aylana oladi.
- IN1 va IN2 yoʻnalishni belgilaydi; jumperi olib tashlangan ENA ga beriladigan PWM esa tezlikni 0 dan 255 gacha belgilaydi.
- L298N ichida taxminan 1,8 V yoʻqoladi: 6 V dan motorlarga taxminan 4,2 V yetib boradi.
- L298N ning +5V chiqishi Unoning 5V pinini taʼminlaydi; GND larni oʻzaro ulang va batareyani hech qachon 5V piniga ulamang.
Motorga Arduino pini bera oladiganidan ancha koʻp tok kerak. Ular orasida L298N motor drayveri turadi. Uno kuchsiz signallar yuboradi, L298N esa batareya quvvatini motorlarga beradi yoki uzadi, ularni oldinga yoki orqaga, tez yoki sekin aylantiradi.
Nega pin motorni aylantira olmaydi

Foto: Lukas Ruge · CC0
Raqamlarni solishtiring:
| Nima | Tok |
|---|---|
| Uno pini, xavfsiz | 20 mA |
| Uno pini, mutlaq chegara | 40 mA |
| TT motor, erkin aylanganda | taxminan 100–150 mA |
| TT motor, robotni yurgizganda | taxminan 300 mA |
| TT motor, toʻsilib qolganda (toʻxtab qolish) | taxminan 1000 mA (1 A) gacha |
Hatto erkin aylanayotgan motorga ham pin xavfsiz bera oladigan tokdan kamida besh baravar koʻp tok kerak. Gʻildirak toʻsilib qolganda esa ellik baravar koʻp tok kerak boʻladi.
Ikkinchi muammo ham bor. Motor — simdan oʻralgan gʻaltak. Gʻaltakdan oʻtayotgan tok birdan toʻxtasa, gʻaltak qisqa, lekin yuqori kuchlanish sakrashini hosil qiladi. Bu sakrash pinni yoki tranzistorni ishdan chiqarishi mumkin. L298N modulida bunday sakrashlarni ushlab qoladigan diodlar bor. Shuning uchun motorni hech qachon Arduino piniga toʻgʻridan-toʻgʻri ulamang.
H-koʻprik gʻoyasi
Oʻzgarmas tok motorini boshqa tomonga aylantirish uchun undan oʻtadigan tokning yoʻnalishini teskarisiga oʻzgartirasiz. H-koʻprik buni toʻrtta kalit yordamida bajaradi.
H harfini koʻz oldingizga keltiring. Motor — oʻrtadagi koʻndalang chiziq. Ikkala tik chiziqning har birida bitta kalit motordan yuqorida, yana bitta kalit esa undan pastda joylashgan. Yuqori uchlar batareyaning + qutbiga, pastki uchlar esa GND ga ulanadi.
- Yuqori chap va pastki oʻng kalitlarni yoqing. Tok motor orqali chapdan oʻngga oqadi va motor bir tomonga aylanadi.
- Yuqori oʻng va pastki chap kalitlarni yoqing. Tok oʻngdan chapga oqadi va motor boshqa tomonga aylanadi.
- Ikkala pastki kalitni yoqing. Endi motorning ikkala simi oʻzaro tutashadi. Aylanayotgan motor generator boʻlib ishlaydi, bu qisqa tutashuv esa uni tez sekinlashtiradi: motor tormozlanadi.
- Toʻrttala kalitni ham oʻchiring. Motor uzilib qoladi. U ishqalanish toʻxtatguncha erkin aylanib boradi.
Bir tomondagi, yaʼni bitta tik chiziqdagi ikkala kalitni yoqish batareyaning + qutbini toʻgʻridan-toʻgʻri GND ga ulab qoʻygan boʻlardi. Kirishlarning hech qanday kombinatsiyasi bunga olib kela olmaydi. L298N mikrosxemasi ichida ikkita H-koʻprik bor, shuning uchun bitta modul ikkita motorni boshqaradi. Uning kalitlari tranzistorlardan iborat, shuning uchun ular juda tez yoqilib-oʻchira oladi.
L298N ning klemmalari va pinlari
| Klemma yoki pin | Nima uchun kerak | Robot-mashinada |
|---|---|---|
| +12V | Motorlar taʼminoti, 5–35 V (bu nom shunchaki yozuv) | Batareyaning + simi (qizil), taxminan 6 V |
| GND | Taʼminot va signallar uchun yer | Batareyaning - simi (qora) va Unoning GND pinlaridan biri |
| +5V | Modulning oʻz 5 V stabilizatori chiqishi; stabilizator jumperi (kichik qalpoqcha, koʻpincha 5V-EN deb belgilanadi) oʻrnatilgan boʻlsa ishlaydi | Unoning 5V pini, HC-SR04 bor robotlarda esa uning VCC pini ham |
| OUT1, OUT2 | A motori | Chap motor |
| OUT3, OUT4 | B motori | Oʻng motor, simlari almashtirilgan (quyida qarang) |
| ENA, ENB | Enable (ruxsat): A va B motorlarini yoqish yoki oʻchirish hamda ularning tezligi | D5 va D6 (PWM, yaʼni impuls kengligi modulyatsiyasi) |
| IN1, IN2 | A motorining yoʻnalishi | D4 va D7 |
| IN3, IN4 | B motorining yoʻnalishi | D8 va D12 |
Har bir kanal 2 A gacha, qoʻshimcha sovutishsiz esa taxminan 1 A tok bera oladi. Yurayotgan TT motorga taxminan 0,3 A kerak.
Yangi modulning ENA va ENB pinlarida jumper deb ataladigan kichik qalpoqchalar boʻladi. Jumper pinni 5 V ga ulaydi. Shunda motor doim yoqilgan boʻladi: IN1 va IN2 har xil boʻlsa, u toʻliq tezlikda aylanadi. Tezlikni boshqarish uchun ikkala jumperni olib tashlang va ENA hamda ENB ni Unoning PWM pinlariga ulang. Simulyatorda ENA dan Uno piniga sim ulangan boʻlsa, bu jumper olib tashlangan degani.
Rostlik jadvali
A motori uchun:
| ENA | IN1 | IN2 | Motor |
|---|---|---|---|
| HIGH | HIGH | LOW | oldinga aylanadi |
| HIGH | LOW | HIGH | orqaga aylanadi |
| HIGH | HIGH | HIGH | tormozlanadi |
| HIGH | LOW | LOW | tormozlanadi |
| LOW | istalgan | istalgan | erkin aylanadi (inersiya bilan) |
B motori ham ENB, IN3 va IN4 bilan xuddi shunday ishlaydi. Bu yerda «oldinga» deganda OUT1 + va OUT2 - boʻlganda motor aylanadigan yoʻnalish tushuniladi. Robot qaysi tomonga yurishi motor qanday oʻrnatilganiga ham bogʻliq.
PWM bilan tezlikni boshqarish
analogWrite(ENA, value) ENA ni soniyasiga taxminan 980 marta yoqib-oʻchiradi. 0 dan 255 gacha boʻlgan qiymat motor quvvat oladigan vaqt ulushini belgilaydi. Motor va gʻildirak bunday tez impulslarga ergasha olmaydi: ular buning uchun juda ogʻir. Ular oʻrtacha qiymatga javob beradi:
| analogWrite(ENA, ...) | Yoqilgan vaqt ulushi | Motordagi oʻrtacha kuchlanish |
|---|---|---|
| 255 | 100 % | taxminan 4,2 V |
| 200 | 78 % | taxminan 3,3 V |
| 128 | 50 % | taxminan 2,1 V |
| 0 | 0 % | yoʻq: motor erkin aylanadi |
Kichik qiymatlarda motor faqat gʻuvillaydi, lekin aylanmaydi. Oʻrtacha kuchlanish reduktordagi ishqalanishni yengishga yetmaydi. Bu chegara qayerda ekani motorga, batareyalarga va polga bogʻliq. Shu sababli Masofa saqlovchi robot sketchi hech qachon 90 dan sekinroq yurmaydi.
Voltlar qayerga ketadi
L298N da kalit vazifasini bipolyar tranzistorlar bajaradi. Motor toki doim ulardan ikkitasi orqali oʻtadi: biri H harfining yuqori qismida, ikkinchisi pastki qismida. Ikkalasi birgalikda taxminan 1,8 V ni oladi. Shuning uchun 6 V li batareyadan motorlarga atigi taxminan 4,2 V yetib boradi. Simulyator ham xuddi shu raqamlardan foydalanadi.
TT motorlar 3–6 V ga moʻljallangan, shuning uchun 4,2 V bilan ham ishlaydi. Lekin bunda robot toʻliq 6 V dagiga qaraganda sekinroq yuradi.
Robot qanchalik tez yuradi? 65 mm li gʻildirak bir marta aylanganda robot π × 65 mm, yaʼni taxminan 20 sm siljiydi. Demak, daqiqasiga 150 marta aylanadigan gʻildirak robotni daqiqasiga taxminan 30 m, yaʼni 0,5 m/s tezlikda yurgizadi.
Unoni L298N dan quvvatlantirish
Robotda bor-yoʻgʻi bitta batareya bor. L298N ning oʻz 5 V stabilizatori Unoni ham quvvatlantiradi: uning +5V klemmasi Unoning 5V piniga ulanadi.
Toʻliq 5 V berishi uchun stabilizatorning kirishiga taxminan 7 V kerak. Toʻrtta AA batareyadan u taxminan 4,4 V beradi. Bu biroz past, lekin Uno ishlashi uchun yetarli.
L298N ning +5V chiqishini VIN ga ham ulamang. VIN Unoning oʻz stabilizatoriga boradi, unga esa 7–12 V kerak. Kirishida taxminan 4,4 V boʻlsa, mikrosxemaga ishlash uchun juda kam kuchlanish yetib boradi. Simulyator ikkala xatoni ham tekshiradi.
Umumiy yer (GND)
Kuchlanish doim ikki nuqta orasida oʻlchanadi. Uno D4 ni HIGH qilganda, D4 Unoning GND piniga nisbatan bir necha volt yuqori boʻladi. L298N buni faqat xuddi shu GND ga nisbatan oʻlchagandagina seza oladi. Shuning uchun L298N ning GND klemmasi Unoning GND pinlaridan biriga ulanadi. Robot-mashinada bu sim Unoning taʼminot tokini ham batareyaga qaytaradi. Bu sim boʻlmasa, simulyator umumiy yer yoʻqligi haqida xabar beradi.
Nega oʻng motorning simlari almashtirilgan
Ikkala motor bir xil, lekin oʻng motor teskari burilgan holda, chap motorning koʻzgudagi aksi kabi oʻrnatilgan. Ulanish bir xil boʻlsa, oʻsha «oldinga» signali oʻng gʻildirakni orqaga aylantirardi va robot joyida aylanib qolardi. Shuning uchun oʻng motorning simlari ataylab almashtirilgan: M+ OUT4 ga, M- esa OUT3 ga ulanadi. Endi bir xil signal berilganda ikkala gʻildirak ham oldinga aylanadi. Tuzatish ulanishda qilingan, shuning uchun kod ikkala motorni bir xilda boshqara oladi.
Ulanish
Mana shu sahifadagi robotning toʻliq ulanishi.
| Qayerdan | Qayerga | Nima uchun |
|---|---|---|
| Batareya + | L298N +12V | Motorlar quvvati: toʻrtta AA batareyadan taxminan 6 V |
| Batareya - | L298N GND | Batareya minusi |
| L298N +5V | Uno 5V | Drayver stabilizatori Unoni quvvatlaydi: taxminan 4,4 V |
| L298N GND | Uno GND | Umumiy yer: signallarga bir xil 0 V kerak |
| Uno D5 | L298N ENA | Chap motor tezligi (PWM); ENA jumperi olib qoʻyilgan |
| Uno D4 | L298N IN1 | Chap motor yoʻnalishi |
| Uno D7 | L298N IN2 | Chap motor yoʻnalishi |
| Uno D8 | L298N IN3 | Oʻng motor yoʻnalishi |
| Uno D12 | L298N IN4 | Oʻng motor yoʻnalishi |
| Uno D6 | L298N ENB | Oʻng motor tezligi (PWM); ENB jumperi olib qoʻyilgan |
| Chap motor M+ | L298N OUT1 | |
| Chap motor M- | L298N OUT2 | |
| Oʻng motor M+ | L298N OUT4 | Ataylab almashtirilgan: bu motor koʻzgudagidek oʻrnatilgan |
| Oʻng motor M- | L298N OUT3 | Ataylab almashtirilgan: bu motor koʻzgudagidek oʻrnatilgan |
Arduino Uno R3Simulyatorda bor× 1Narxni doʻkonda koʻring
L298N motor drayveri moduliSimulyatorda bor× 1Narxni doʻkonda koʻring
TT reduktorli motor 1:48, 65 mm gʻildirak bilanSimulyatorda bor× 2Narxni doʻkonda koʻring
4 × AA batareya qutisiSimulyatorda bor× 1Narxni doʻkonda koʻringSharli tayanch 20 mmSimulyatorda bor× 1Narxni doʻkonda koʻring
Ulash simlari toʻplami× 1Narxni doʻkonda koʻring
MotorTest sketchi
// Motor test: both motors speed up, slow down, then the same backwards.
// L298N: ENA -> D5, IN1 -> D4, IN2 -> D7 (left), ENB -> D6, IN3 -> D8, IN4 -> D12 (right)
const byte ENA = 5, IN1 = 4, IN2 = 7;
const byte ENB = 6, IN3 = 8, IN4 = 12;
// speed from -255 (full backwards) to 255 (full forwards); 0 lets the motor coast
void setMotor(byte enablePin, byte inA, byte inB, int speed) {
speed = constrain(speed, -255, 255);
digitalWrite(inA, speed > 0); // IN1 high, IN2 low: forwards
digitalWrite(inB, speed < 0); // IN1 low, IN2 high: backwards
analogWrite(enablePin, abs(speed)); // PWM on ENA: how fast
}
void drive(int left, int right) {
setMotor(ENA, IN1, IN2, left);
setMotor(ENB, IN3, IN4, right);
}
void ramp(int direction) {
for (int s = 0; s <= 255; s += 5) {
drive(direction * s, direction * s);
delay(30);
}
for (int s = 255; s >= 0; s -= 5) {
drive(direction * s, direction * s);
delay(30);
}
}
void setup() {
const byte pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (byte pin : pins) pinMode(pin, OUTPUT);
}
void loop() {
ramp(1); // forwards
delay(500);
ramp(-1); // backwards
delay(500);
}ramp(1) ikkala motorning tezligini 0 dan 255 gacha 5 birlik qadam bilan oshiradi, har 30 ms da bitta qadam. Keyin tezlikni yana 0 gacha kamaytiradi. Oshishda ham, kamayishda ham 52 tadan qadam boʻladi: taxminan 1,6 soniya oshish va 1,6 soniya kamayish. Yarim soniyalik tanaffusdan keyin ramp(-1) xuddi shuni orqaga yurishda takrorlaydi. loop() ning bitta toʻliq aylanishi taxminan 7 soniya davom etadi. setup() massiv boʻylab oʻtadigan qisqa for sikli yordamida oltita boshqaruv pinini chiqishga aylantiradi.
setMotor() qatorma-qator
Bu saytdagi motorlarni boshqaradigan har bir sketch bir xil ikkita funksiyadan foydalanadi. Mana birinchisi:
void setMotor(byte enablePin, byte inA, byte inB, int speed) {
speed = constrain(speed, -255, 255);
digitalWrite(inA, speed > 0); // IN1 high, IN2 low: forwards
digitalWrite(inB, speed < 0); // IN1 low, IN2 high: backwards
analogWrite(enablePin, abs(speed)); // PWM on ENA: how fast
}- 1-qator. Funksiya bitta motorning uchta pinini va -255 (orqaga toʻliq tezlikda) dan 255 (oldinga toʻliq tezlikda) gacha boʻlgan tezlikni qabul qiladi.
- 2-qator.
constrain()tezlikni shu oraliqda ushlab turadi. 300 tezlik 255 ga aylanadi. - 3-qator.
speed > 0— taqqoslash, shuning uchun uning natijasitrueyokifalseboʻladi.trueHIGH,falseesa LOW hisoblanadi. Demak, IN1 faqat tezlik musbat boʻlganda HIGH boʻladi. - 4-qator. Xuddi shunday, IN2 faqat tezlik manfiy boʻlganda HIGH boʻladi.
- 5-qator.
abs()minus ishorasini olib tashlaydi: -160 soni 160 ga aylanadi. Bu qiymat ENA dagi PWM ga beriladi va motor qanchalik tez aylanishini belgilaydi.
Chap motor uchun uchta misol:
| Chaqiruv | IN1 | IN2 | ENA | Motor |
|---|---|---|---|---|
setMotor(ENA, IN1, IN2, 200) |
HIGH | LOW | PWM 200 | oldinga, tez |
setMotor(ENA, IN1, IN2, -160) |
LOW | HIGH | PWM 160 | orqaga, sekinroq |
setMotor(ENA, IN1, IN2, 0) |
LOW | LOW | doim LOW | erkin aylanadi |
0 tezlikda motor erkin aylanadi, chunki ENA LOW boʻladi. Motor tormozlanmaydi.
Ikkinchi funksiya — drive(left, right). U setMotor() ni ikki marta chaqiradi: chap motor uchun ENA, IN1 va IN2 bilan, oʻng motor uchun esa ENB, IN3 va IN4 bilan. drive(200, 200) robotni toʻgʻri oldinga yurgizadi, drive(-160, -160) orqaga yurgizadi, drive(170, -170) esa uni joyida oʻngga aylantiradi.
Simulyatorda sinab koʻring
Robotni arenada ishga tushiring. U sekin oldinga yuradi, tezlashadi, sekinlashadi va toʻxtaydi. Yarim soniyadan keyin xuddi shuni orqaga qarab takrorlaydi. Motorlarning jonli koʻrsatkichi tezlik oshganda koʻtariladi, kamayganda pasayadi. Har safar tezlik noldan oshishni boshlaganda gʻildiraklar hali aylanmaydi, chunki kuchlanish hali juda past.
Keyingi Birinchi yurish loyihasida xuddi shu drive() funksiyasi robotni kvadrat boʻylab yurgizadi.
Oʻzingizni tekshiring
1Nega Arduino pini TT motorni toʻgʻridan-toʻgʻri aylantira olmaydi?
Pin xavfsiz holatda 20 mA beradi, motorga esa yurganda taxminan 0,3 A, toʻsilib qolganda 1 A gacha tok kerak. Bundan tashqari, oʻchirilgan motor hosil qiladigan kuchlanish sakrashi pinni shikastlashi mumkin.
2ENA HIGH, IN1 va IN2 esa ikkalasi ham LOW. Motor nima qiladi?
Motor tormozlanadi. Uning ikkala simi GND ga ulanadi, shuning uchun motor tez toʻxtaydi.
3Nega 6 V li batareyadan motorlarga atigi taxminan 4,2 V yetib boradi?
L298N ning bipolyar tranzistorlari koʻprik ichida taxminan 1,8 V ni yoʻqotadi.
Topshiriq
Simulyatorda oʻng motorni chap motor bilan bir xil ulang: M+ ni OUT3 ga, M- ni OUT4 ga. MotorTest sketchini arenada ishga tushiring va robot nima qilishini kuzating. Keyin simlarga tegmasdan, sketchning bitta qatorini oʻzgartirib, robotni yana toʻgʻri yuradigan qiling.
Maslahat
Motor qaysi tomonga aylanishi faqat uning ikkita IN pinidan qaysi biri HIGH ekaniga bogʻliq.