Pada L298N, arah dan kelajuan duduk pada pin yang berlainan. IN1 HIGH dengan IN2 LOW memusingkan motor ke satu arah, IN1 LOW dengan IN2 HIGH memusingkannya ke arah bertentangan, dan analogWrite() pada ENA menentukan berapa laju. Perangkap yang mematikan kebanyakan binaan pertama: ENA datang dengan satu jumper cap hitam sudah terpasang, jadi arahan kelajuan anda langsung tiada kesan selagi cap itu tidak ditanggalkan.
Apa sebenarnya IN1 dan IN2 arahkan kepada L298N?
Module L298N dibina mengelilingi driver dual full-bridge L298 keluaran ST, dan satu full bridge ialah empat suis yang disusun membentuk huruf H mengelilingi motor. Tutup pasangan kiri-atas dan kanan-bawah, arus melintasi motor ke satu arah; tutup pepenjuru yang satu lagi, ia melintas ke arah bertentangan. Bekalan itu sendiri tidak pernah bertukar polariti β yang bertukar cuma cara motor tergantung merentasinya. Jadi IN1 dan IN2 sebenarnya dua bit, dan dua bit ada empat keadaan.
| ENA | IN1 | IN2 | Apa motor buat |
|---|---|---|---|
| HIGH | HIGH | LOW | Berpusing satu arah |
| HIGH | LOW | HIGH | Berpusing arah bertentangan |
| HIGH | LOW | LOW | Brek β berhenti serta-merta |
| HIGH | HIGH | HIGH | Brek β berhenti serta-merta |
| LOW | apa-apa | apa-apa | Coast β berhenti sambil berputar bebas |
Setiap kali IN1 dan IN2 sama, kedua-dua hujung motor terikat pada rel yang sama, jadi motor itu di-short merentasi dirinya sendiri β dan motor yang sedang berpusing ialah sebuah generator. Generator yang masuk ke dalam short menolak arus, arus itu menghasilkan tork, dan tork itu melawan pusingan. Jadi 00 dan 11 kedua-duanya brek, dan tiada satu pun bermaksud “off”.
Off datang daripada pin enable. Tarik ENA ke LOW dan keempat-empat transistor terbuka serentak. Arus yang tersimpan dalam coil tiada lagi laluan yang dipacu, jadi ia mengalir ke belakang melalui flyback diode pada board masuk semula ke bekalan, yang melawannya dan mematikannya hampir serta-merta β dan tanpa arus tiada tork brek, jadi rotor berputar bebas sehingga berhenti sendiri. Jadual kebenaran ST sendiri memanggil keadaan ini “Free Running Motor Stop”. Brek ialah keadaan pin input; coast ialah keadaan pin enable. ENB, IN3 dan IN4 mengulangi semuanya untuk motor kedua.
Senarai komponen
Pilihan: sebuah multimeter
| Item | Price | Qty | |
|---|---|---|---|
XL830L Digital Multimeter with backlight Portable Multimeter Electronics ProjectMULTIME | RM25.95 |
Dua pemeriksaan lima saat yang jadi senang dengannya: membezakan pin enable daripada pin +5V di bawah setiap jumper cap, dan membaca voltan sebenar yang bridge hantar kepada motor.

Kenapa analogWrite() pada ENA langsung tak beri kesan?
Baris logik L298N lapan posisi lebarnya: satu header dua-pin di setiap hujung yang memakai cap shorting hitam β ENA paling hampir dengan terminal skru tiga-hala, ENB di hujung sana β dengan empat pin IN di antaranya. Cap itu mencantumkan dua pinnya, dan satu bedah skematik board ini menyatakan bahawa jumper ENA dan ENB “mengikatnya HIGH kepada satah kuasa +5V”. Enable memang sudah dipegang HIGH oleh hardware, jadi pin PWM anda tiada apa lagi hendak di-enable. Tanggalkan kedua-dua cap dan simpan.
Kemudian bezakan dua pin terdedah itu, sebab rupanya memang serupa. Board tanpa kuasa, meter pada mod continuity: pegang satu probe pada terminal skru +5V dan sentuh satu lagi pada setiap pin. Yang berbunyi itulah sebelah +5V yang cap tadi rapatkan; jirannya ialah input enable, dan di situlah jumper anda pergi. Berbaloi sepuluh saat itu: kalau wayar mendarat pada pin +5V sebaliknya, kali pertama sketch anda memacu pin Arduino itu ke LOW, anda sudah short rel 5V board ke ground melalui transistor output Arduino sendiri.
Perkara seterusnya yang orang cuba ialah PWM pada IN1 pula. Itu kawalan yang lain sama sekali. PWM pada ENA berselang-seli antara drive dan coast: setiap hirisan off membuka keempat-empat suis, arus tersimpan berpusing bebas melalui flyback diode board, dan rotor terus berputar dengan momentumnya sendiri. PWM pada IN1 dengan IN2 dipegang LOW pula berselang-seli antara drive dan brek, sebab IN1 yang turun ke LOW menjadikan kedua-dua input sama β setiap hirisan off melawan rotor yang baru anda tolak. Songsangkan arah, IN2 pula yang HIGH, jadi hirisan HIGH bertukar menjadi brek dan duty pun terbalik. Kelajuan tempatnya pada pin enable: itu sahaja pin yang maknanya tidak bertukar bila arah bertukar.

Macam mana nak sambung L298N ke Arduino Uno?
Enam pin kawalan L298N ialah pin male yang berdiri tegak keluar dari PCB β header Arduino Uno pula socket female, dan pin tegak itu juga menghalang module daripada masuk ke breadboard. Sensor Shield V5.0 menyelesaikannya: ia ditekan turun ke atas header Uno dan mengeluarkan semula setiap pin digital sebagai satu pin S male dalam set tiga G/V/S, jadi jumper female-to-female biasa boleh merapatkan male dengan male tanpa perlu solder. Kesemua enam isyarat keluar daripada dua blok bersebelahan, 11 10 9 8 dan 7 6 5 4.
Tiga jumper cap ditanggalkan daripada L298N sebelum anda menyambung apa-apa: ENA dan ENB, yang anda tanggalkan dalam bahagian di atas, dan jumper 5V di sebelah terminal skru tiga-hala, yang ada bahagiannya sendiri di bawah. Buat yang ketiga itu sekarang juga, sebab menanggalkannya itulah yang menukar terminal +5V daripada satu output kepada satu input β dan membekalkannya daripada Arduino semasa cap itu masih terpasang ialah punca board jenis ini mati.
| L298N | Sambung ke | Wayar |
|---|---|---|
| ENA (cap ditanggalkan) | Pin S lajur 10 β D10 | Jumper F-F |
| IN1 | Pin S lajur 8 β D8 | Jumper F-F |
| IN2 | Pin S lajur 7 β D7 | Jumper F-F |
| ENB (cap ditanggalkan) | Pin S lajur 9 β D9 | Jumper F-F |
| IN3 | Pin S lajur 6 β D6 | Jumper F-F |
| IN4 | Pin S lajur 5 β D5 | Jumper F-F |
| Terminal skru +5V | Mana-mana pin V pada shield β 5V Uno | F-F dirantai ke M-M |
| Terminal skru GND | Mana-mana pin G pada shield β GND Uno | F-F dirantai ke M-M |
| Terminal skru +12V | Wayar pin tengah socket barrel | Wayar tinned terdedah |
| Terminal skru GND | Wayar sebelah lagi socket barrel | Wayar tinned terdedah |
| OUT1 / OUT2 | Wayar merah dan hitam motor pertama | Wayar tinned terdedah |
| OUT3 / OUT4 | Wayar merah dan hitam motor kedua | Wayar tinned terdedah |
Dua baris memerlukan pertukaran gender. Terminal skru mengapit logam terdedah manakala jumper female menyembunyikan logamnya di dalam shell plastik, jadi cucuk jumper male-to-male ke dalam socket kosong wayar F-F itu dan apit pin segi empatnya di bawah skru. Skru GND menerima dua wayar: negatif adaptor dan sambungan ground sepunya tadi, jadi tarik kedua-duanya selepas mengetatkan. Wayar motor mana masuk ke OUT1 dan mana masuk ke OUT2 terpulang kepada anda: kalau shaft berpusing ke arah yang salah, tukar dua wayar itu atau terbalikkan boolean dalam sketch.
Wayar ground sepunya itu bukan pilihan. HIGH hanya bermakna apabila diukur terhadap satu rujukan, jadi selagi Uno dan L298N tidak berkongsi ground, module itu tiada rujukan tetap untuk menentukan apa maksudnya 5V pada IN1 β driver yang langsung tidak mengendahkan Arduino selalunya inilah puncanya, bukan board yang rosak. Perhatikan juga apa yang wayar itu tidak bawa: arus motor pulang ke adaptor melalui terminal GND, bukan melalui Uno. Motor ini menarik 12mA setiap satu pada rating 3V-nya, tetapi motor yang stall menarik berkali ganda lebih, dan pin 5V Uno bukan tempat yang anda mahu mengetahuinya.
Keselamatan, dan tiada satu pun daripadanya sekadar cerewet. Semua yang ada di sini DC voltan rendah; adaptor 5V itu unit tertutup yang anda memang tak buka. Uji continuity pada pigtail socket barrel sebelum menyambungkannya β continuity daripada pin tengah socket menemukan wayar positif, dan adaptor ini centre-positive. Jangan sekali-kali tarik wayar motor semasa bekalan masih hidup: memutuskan arus di dalam coil menghasilkan lonjakan voltan, dan flyback diode hanya melindungi gelung yang masih utuh. Heatsink itu hampir tidak terasa panas pada arus sekecil ini, tetapi pada motor yang menarik beberapa ampere ia jadi cukup panas untuk mencederakan, jadi tengok dulu sebelum pegang.
Kalau anda lebih suka melihat board ini disambung dan motornya benar-benar berpusing sebelum anda mula mengetatkan skru sendiri, binaan L298N oleh DroneBot Workshop merakamkan hardware yang sama:
Kenapa jumper 5V wajib ditanggalkan pada binaan 5V?
L298N membawa jumper ketiga, satu cap dua-pin berasingan di sebelah terminal skru tiga-hala. Apabila terpasang, ia menyalurkan bekalan motor ke dalam regulator 78M05 di atas board, yang menghasilkan 5V logik dan menghantarnya keluar pada terminal +5V β sempurna pada rel 12V, mustahil pada rel 5V. 78M05 perlukan lebih kurang dua volt headroom, jadi daripada input 5V ia menghasilkan sesuatu yang lebih hampir kepada 3V, sedangkan pin bekalan logik L298 ditetapkan dengan minimum 4.5V. Di bawah paras itu, ST tidak menjamin apa-apa tentang bagaimana chip itu membaca IN1 atau ENA β dan ia tidak gagal dengan bersih, sebab motor sedang menarik pada rel yang sama yang regulator itu gunakan, jadi setiap lonjakan beban menyeret bekalan logik turun bersamanya. Perangainya persis seperti bug di dalam sketch anda.
Tanggalkan jumper itu dan teardown yang sama menyatakan terminal +5V “menjadi port input untuk menerima kuasa luaran”. Bekalkan ia dengan 5V sebenar daripada Uno β yang berjalan atas USB di sini β melalui mana-mana pin V pada shield, dan bekalan logik akan duduk tepat di tempat yang datasheet mahukan. Jumper SEL kuning pada shield kekal terpasang persis seperti ia sampai: link itulah yang mengikat pin V-nya kepada 5V Uno.
Biarkan jumper 5V L298N itu terpasang dan bekalkan terminal itu juga, maka anda telah menyambung 5V Uno terus ke atas pin output 78M05: dua regulator memegang satu nod pada voltan yang sedikit berbeza, yang lebih kuat menolak arus masuk ke dalam yang lebih lemah selagi kedua-duanya bersambung, dan tiada satu pun daripadanya dibina untuk menyerapnya. Itulah cara biasa board ini mati.
Kenapa L298N hilang lebih kurang dua volt sebelum sampai ke motor?
Output L298 ialah pasangan Darlington β dua transistor bipolar bertindan untuk gandaan arus β dan Darlington tidak mampu menarik outputnya sampai ke relnya. Arus dalam H-bridge melalui dua daripadanya secara sesiri, satu bertindak sebagai source yang menolak arus daripada bekalan dan satu sebagai sink yang menariknya ke ground, jadi anda membayar tol itu dua kali. Angka ST pada 1A: 1.35V tipikal di sebelah source, 1.2V tipikal di sebelah sink, dan satu baris Total Drop yang minimumnya 1.80V, dengan maksimum 3.2V pada 1A dan 4.9V pada 2A. Baca semula lajur minimum itu β walaupun pada keadaan terbaiknya, pada 1A chip ini menyimpan 1.8V untuk dirinya sendiri.
Motor kecil menarik jauh lebih sedikit dan susutan itu turun bersama arus, tetapi tidak pernah sampai ke sifar: arus tetap perlu memanjat melalui junction base-emitter yang mengambil bahagian voltnya sendiri walau sekecil mana pun aliran. Bajetkan lebih kurang 1.5β2V hilang di dalam bridge pada arus tahap hobi. Itulah sebabnya binaan L298N selalu terasa lemah.
Jadi: pilih bekalan kira-kira dua volt di atas voltan yang anda mahu ada pada motor. Motor kita ini ratingnya 1.5V hingga 5V, nominal 3V, dan adaptor 5V mendaratkannya sekitar 3.5V β tepat pada ratingnya. Bekalan 9V pula akan meletakkan kira-kira 7.5V merentasi motor yang silingnya 5V; lebih besar bukan lebih selamat di sini, itu caranya coil terbakar. Sudah ada adaptor 12V? Turunkan dengan buck converter LM2596. Dan ukur sendiri pada board anda: dengan motor berjalan pada duty penuh, baca DC volt dari terminal +12V ke GND, kemudian merentasi OUT1 dan OUT2. Bezanya itulah yang bridge simpan untuk dirinya sendiri (panduan multimeter kami menerangkan tetapannya).

Macam mana rupa kod Arduino untuk L298N?
analogWrite() pada Uno tidak perlukan library, dan D10 serta D9 dipilih dengan sengaja: kedua-duanya duduk pada Timer1 pada lebih kurang 490 Hz, jadi kedua-dua saluran berkelakuan serupa. Pin 5 dan 6 pula berjalan sekitar 980 Hz pada timer yang turut memacu millis(), yang memesongkan duty cycle mereka β jadi di sini kedua-duanya membawa output arah biasa sahaja.
// L298N dual H-bridge: arah duduk pada pin IN, kelajuan pada pin EN.
// Tanggalkan cap shorting hitam pada ENA dan ENB dahulu. Selagi cap itu
// terpasang, pin enable terikat pada satah +5V board dan analogWrite()
// padanya tiada apa lagi hendak disuis - motor cuma berpusing laju penuh.
const int ENA = 10; // pin PWM, Timer1, ~490 Hz
const int IN1 = 8;
const int IN2 = 7;
const int ENB = 9; // pin PWM, Timer1 juga, jadi kedua-dua saluran sepadan
const int IN3 = 6;
const int IN4 = 5;
// Rel 5V kehilangan lebih kurang 1.5V di dalam bridge, jadi duty penuh
// memberi kira-kira 3.5V merentasi motor. Minimum motor ini pula 1.5V, dan
// 1.5 / 3.5 daripada skala penuh ialah 255 * 1.5 / 3.5 = 109 kiraan. Di bawah
// kira-kira 110, puratanya jatuh di bawah minimum itu dan motor cenderung
// duduk diam sambil berdengung.
const int MIN_DUTY = 110;
const int MAX_DUTY = 255;
const int KICK = 200; // tolakan seketika untuk lepas stiction dari diam
// EN LOW membuka keempat-empat transistor bridge itu serentak: kedua-dua
// terminal motor terapung, tiada arus boleh berpusing, dan rotor berputar
// bebas sehingga berhenti.
void coast(int en) {
digitalWrite(en, LOW);
}
// Kedua-dua pin IN pada aras yang sama, dengan bridge di-enable, mengikat
// kedua-dua terminal motor pada rel yang sama. Motor yang berpusing ialah
// generator, dan di sini ia generator ke dalam shortnya sendiri - arus itulah
// tork brek.
void brake(int en, int inA, int inB) {
digitalWrite(inA, LOW);
digitalWrite(inB, LOW);
digitalWrite(en, HIGH);
}
// 1,0 satu arah dan 0,1 arah bertentangan. Kelajuan tak pernah sentuh pin ini.
void drive(int en, int inA, int inB, bool forward, int duty) {
digitalWrite(inA, forward ? HIGH : LOW);
digitalWrite(inB, forward ? LOW : HIGH);
analogWrite(en, constrain(duty, 0, MAX_DUTY));
}
void ramp(int en, int inA, int inB, bool forward, int from, int to) {
int stepDir = (to >= from) ? 1 : -1;
for (int duty = from; duty != to; duty += stepDir) {
drive(en, inA, inB, forward, duty);
delay(15);
}
drive(en, inA, inB, forward, to);
}
void setup() {
Serial.begin(9600);
const int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (unsigned int i = 0; i < sizeof(pins) / sizeof(pins[0]); i++) {
pinMode(pins[i], OUTPUT);
// Datasheet L298 meminta Enable LOW sebelum bekalan motor naik dan
// sebelum ia turun. Memulakan semuanya pada LOW mematuhi permintaan itu.
digitalWrite(pins[i], LOW);
}
Serial.println(F("L298N sedia: saluran A pada D10/D8/D7, saluran B pada D9/D6/D5"));
}
void loop() {
Serial.println(F("A depan - kick, kemudian turun ke duty paling perlahan yang masih berpusing"));
drive(ENA, IN1, IN2, true, KICK);
delay(200);
ramp(ENA, IN1, IN2, true, KICK, MIN_DUTY);
delay(1500);
Serial.println(F("A depan - naik sampai penuh"));
ramp(ENA, IN1, IN2, true, MIN_DUTY, MAX_DUTY);
delay(1500);
Serial.println(F("A brek - shaft berhenti terus"));
brake(ENA, IN1, IN2);
delay(1200);
Serial.println(F("A undur penuh, B depan separuh - dua-dua bridge serentak"));
drive(ENA, IN1, IN2, false, MAX_DUTY);
drive(ENB, IN3, IN4, true, 128);
delay(2000);
Serial.println(F("A dan B coast - dua-dua shaft berputar bebas sampai berhenti"));
coast(ENA);
coast(ENB);
delay(2500);
}
Bandingkan brek dengan coast yang menutup setiap gelung: brek memberhentikan shaft dalam pecahan satu pusingan, coast pula membiarkannya perlahan-lahan berhenti dalam sesaat dua.
Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Corak yang paling kerap sampai kepada kami dengan L298N ialah motor yang tersekat pada satu kelajuan β sketch betul, wayar D10 betul, cap enable masih terpasang. Diikuti rapat oleh driver yang langsung tidak mengendahkan Arduino, yang hampir selalunya cuma ground sepunya yang tertinggal dan bukan board yang rosak.
Kemudian motor yang berdengung tanpa berpusing pada angka yang rendah: di bawah lebih kurang analogWrite(110) di sini, puratanya jatuh di bawah minimum 1.5V motor itu sendiri, jadi kick seketika kemudian turun semula itulah penyelesaiannya, bukan bekalan yang lebih besar. Dan yang mahal β adaptor 12V dibeli semata-mata sebab terminal itu ada silkscreen +12V. Label itu menamakan kes yang biasa, bukan satu siling dan bukan satu arahan: pin itu sebenarnya input bekalan motor β ia menerima apa sahaja dari 5V hingga 35V β dan angka yang menentukan adaptor anda ialah rating motor anda campur susutan bridge.
Soalan lazim tentang L298N
Kenapa L298N saya berpusing laju penuh walau apa pun saya tulis ke ENA?
Cap shorting hitam di atas ENA masih terpasang. Ia merapatkan pin enable kepada satah +5V board, memegang bridge hidup kekal, jadi analogWrite() tiada apa lagi hendak disuis. Tanggalkannya, dan tanggalkan ENB juga kalau anda guna saluran kedua.
Boleh tak saya PWM pada IN1 dan bukan ENA?
Motor memang bergerak, tetapi itu kawalan yang lain: IN1 yang turun ke LOW semasa IN2 pun LOW menjadikan kedua-dua input sama, dan itu brek, bukan coast. Ia juga terbalik bila anda songsangkan arah, sebab dengan IN2 HIGH hirisan HIGH pula yang jadi brek.
Berapa banyak voltan yang L298N hilangkan?
Arus melalui dua peringkat Darlington secara sesiri, satu source dan satu sink. ST menetapkan jumlah susutan sebagai minimum 1.80V dan maksimum 3.2V pada 1A. Pada arus miliampere tahap hobi ia lebih hampir kepada 1.5β2V, jadi pilih bekalan kira-kira dua volt di atas rating motor.
Perlukah saya tanggalkan jumper 5V pada module?
Tanggalkan setiap kali bekalan motor di bawah kira-kira 7V: 78M05 tidak boleh menghasilkan 5V daripada input 5V, dan bekalan logik L298 perlukan sekurang-kurangnya 4.5V. Terminal +5V kemudian menjadi input yang anda bekalkan daripada Arduino. Biarkan ia terpasang untuk rel 9V atau 12V, tetapi jangan jauh melebihi itu: 78M05 membakar setiap volt perbezaan sebagai haba, jadi rel 24V dengan 200mA ditarik daripada terminal itu bermakna hampir empat watt di dalam sebuah regulator surface-mount kecil yang tiada heatsinknya sendiri.
Boleh tak L298N pegang motor pada kelajuan yang tepat?
Tak boleh β analogWrite() menetapkan duty cycle, bukan RPM, jadi motor perlahan bila dibebani dan tiada apa-apa memberitahu Arduino. Menutup gelung itu perlukan motor yang melaporkan putarannya sendiri, seperti motor gear TT dengan encoder kami, yang ekor JST enam-halanya mahukan header yang sepadan dan bukan wayar jumper. Tentang driver pula: satu arah sahaja cuma perlukan satu MOSFET, stepper unipolar mahukan array Darlington, dan board inilah hab di dalam panduan robot line follower kami.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



L298N Motor Driver Module Arduino Compatible Dual H Bridge Dual DC Motor Control Arduino Robotic Car
DC Solar Motor DC 1.5V 3V 3.3V 5V Mini Round DC Motor For Arduino IOT Solar Project
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Sensor Shield V5.0 Arduino Uno R3 Shield For Arduino Protoype Application
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE F-F 20CM
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 30CM
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (5V2A)
5.5x2.1mm DC Power Male Connector Plug Jack Adapter for Arduino DIY Electronics Projects - 5.5x2.1 DC CONNECTOR (F)
XL830L Digital Multimeter with backlight Portable Multimeter Electronics Project