ไดรเวอร์นี้ต้องการแรงดันไฟฟ้าลอจิกเพื่อขับเคลื่อนมอเตอร์ ซึ่งใช้ตัวควบคุมแรงดันไฟฟ้า 5 โวลต์เพื่อแก้ปัญหาการจ่ายไฟลอจิก โมดูลนี้มีคุณสมบัติดังนี้:
- แรงดันไฟฟ้าสูงสุดในการทำงาน: 46 โวลต์ DC
- กระแสไฟฟ้าเอาต์พุตสูงสุด: 2 แอมแปร์ (สูงสุดชั่วคราว 3 แอมแปร์)
- กำลังไฟฟ้า: 25 วัตต์
- ระดับแรงดันไฟฟ้าอินพุต: 5 โวลต์
- อุณหภูมิการทำงาน: -25 ถึง 130 องศาเซลเซียส
คุณสมบัติเหล่านี้สำคัญในการเลือกใช้โมดูล L298N:
- สามารถรองรับแรงดันไฟฟ้าได้สูงถึง 46 โวลต์ DC ทำให้เหมาะกับมอเตอร์หลายชนิด
- สามารถจ่ายกระแสไฟฟ้าได้สูงถึง 2 แอมแปร์ต่อเนื่อง หรือ 3 แอมแปร์ในช่วงสั้นๆ ซึ่งเพียงพอสำหรับมอเตอร์ขนาดเล็กถึงขนาดกลาง
- ต้องการแรงดันไฟฟ้าลอจิก 5 โวลต์ ซึ่งทำงานได้ดีกับ Arduino และไมโครคอนโทรลเลอร์อื่นๆ
- ทนทานต่ออุณหภูมิได้ดี สามารถทำงานได้ในสภาพแวดล้อมที่หลากหลาย ตั้งแต่อุณหภูมิต่ำกว่าศูนย์องศาจนถึงอุณหภูมิสูงมาก
การมีตัวควบคุมแรงดันไฟฟ้า 5 โวลต์บนบอร์ดเป็นคุณสมบัติที่ดี เพราะช่วยลดความยุ่งยากในการจัดหาแหล่งจ่ายไฟลอจิกแยกต่างหาก คุณสามารถใช้แหล่งจ่ายไฟเดียวกับที่ใช้กับมอเตอร์ (ตราบใดที่มีแรงดันไฟฟ้าเพียงพอ) เพื่อจ่ายไฟให้ทั้งมอเตอร์และวงจรลอจิก
การกำหนดขาของโมดูล L298N คุณอาจพบโมดูล L298N หลายรูปแบบ แต่ทั้งหมดทำงานในลักษณะเดียวกัน โมดูลประกอบด้วย L298N ที่ติดตั้งบนแผ่นระบายความร้อน, ตัวควบคุมแรงดันไฟฟ้า 5 โวลต์ เพื่อจ่ายไฟให้วงจรลอจิก (ทางเลือกเสริม), ไดโอดและตัวเก็บประจุสนับสนุน และขั้วต่อต่างๆ ดังนี้:
- อินพุตลอจิกสำหรับวงจร H-Bridge แต่ละตัว
- อินพุตแหล่งจ่ายไฟสำหรับมอเตอร์
- อินพุตไฟ 5 โวลต์ (ทางเลือกเสริม) สำหรับวงจรลอจิก
- เอาต์พุตสำหรับมอเตอร์กระแสตรง (DC) แต่ละตัว
โมดูล L298N ทั่วไปแสดงไว้ในรูปนี้

คุณจะสังเกตว่าบนโมดูลมีจัมเปอร์หลายตัว โดยทั่วไปคุณจะปล่อยไว้ตามเดิม ยกเว้นหนึ่งตัว ดังนี้:
- CSA - นี่คือฟังก์ชัน "ตรวจจับกระแสไฟฟ้า" สำหรับมอเตอร์ A ถ้าจัมเปอร์อยู่ในตำแหน่ง ฟังก์ชันนี้จะถูกละเว้น โดยทั่วไปคุณจะปล่อยจัมเปอร์นี้ไว้ตามเดิม
- CSB - ฟังก์ชัน "ตรวจจับกระแสไฟฟ้า" สำหรับมอเตอร์ B อีกครั้ง โดยปกติคุณจะปล่อยไว้ตามเดิมเพื่อปิดใช้งานฟังก์ชันนี้
- U1 - ตัวต้านทานพุลอัพสำหรับอินพุต 1 โดยทั่วไปคุณจะปล่อยไว้ตามเดิม ซึ่งเปิดใช้งานตัวต้านทาน 10k โอห์มสำหรับอินพุต
- U2 - ตัวต้านทานพุลอัพสำหรับอินพุต 2
- U3 - ตัวต้านทานพุลอัพสำหรับอินพุต 3
- U4 - ตัวต้านทานพุลอัพสำหรับอินพุต 4
- 5v-EN - นี่คือจัมเปอร์เดียวที่คุณต้องให้ความสำคัญจริงๆ เมื่อจัมเปอร์นี้อยู่ในตำแหน่ง มันจะเปิดใช้งานตัวควบคุมแรงดันไฟฟ้า 5 โวลต์ภายในบอร์ด (78M05) จ่ายไฟลอจิกจากแหล่งจ่ายไฟมอเตอร์ เมื่อจัมเปอร์นี้เปิดใช้งาน คุณจะไม่ต้องจ่ายไฟ 5 โวลต์เข้าขั้วอินพุต 5 โวลต์ แต่เมื่อถอดจัมเปอร์ออก คุณต้องจ่ายไฟ 5 โวลต์เข้าขั้วอินพุต 5 โวลต์
หากคุณใช้ตัวควบคุมแรงดันไฟฟ้าภายใน คุณต้องจ่ายไฟให้แหล่งจ่ายไฟมอเตอร์อย่างน้อย 7.5 โวลต์
พูดถึงแหล่งจ่ายไฟมอเตอร์ มันต้องมีแรงดันไฟฟ้าสูงกว่าความต้องการของมอเตอร์จริงเล็กน้อย เนื่องจากการลดแรงดันไฟฟ้าภายในทรานซิสเตอร์ที่ทำให้เกิดวงจร H-Bridge การลดแรงดันไฟฟ้ารวมคือ 1.4 โวลต์ ดังนั้นหากคุณใช้มอเตอร์ 6 โวลต์ คุณต้องจ่ายไฟ 7.4 โวลต์ให้บอร์ด ถ้าคุณมีมอเตอร์ 12 โวลต์ แรงดันไฟฟ้าสำหรับมอเตอร์จะต้องเป็น 13.4 โวลต์
บอร์ดมีขั้วอินพุตสี่ขั้วและขั้วเปิดใช้งานสองขั้ว คุณจะใช้ขั้วเหล่านี้ควบคุมทั้งทิศทางและความเร็วของมอเตอร์แต่ละตัว ดังนี้:
- IN1 - อินพุต 1 สำหรับมอเตอร์ A
- IN2 - อินพุต 2 สำหรับมอเตอร์ A
- IN3 - อินพุต 3 สำหรับมอเตอร์ B
- IN4 - อินพุต 4 สำหรับมอเตอร์ B
- EN1 - สายเปิดใช้งานสำหรับมอเตอร์ A
- EN2 - สายเปิดใช้งานสำหรับมอเตอร์ B
เพื่อให้เข้าใจง่ายขึ้น ฉันจะพูดถึงอินพุตและการเปิดใช้งานของมอเตอร์ A เท่านั้น มอเตอร์ B ทำงานเหมือนกัน
สายอินพุตสองเส้นควบคุมทิศทางการหมุนของมอเตอร์ ฉันจะเรียกทิศทางหนึ่งว่า "ไปข้างหน้า" และอีกทิศทางว่า "ถอยหลัง" ถ้าเข้าใจง่ายกว่า คุณสามารถแทนที่ด้วย "ตามเข็มนาฬิกา" และ "ทวนเข็มนาฬิกา"
คุณควบคุมทิศทางมอเตอร์โดยใช้ลอจิก 1 (5 โวลต์) หรือลอจิก 0 (กราวด์) กับอินพุต ตารางนี้แสดงวิธีการทำ
INPUT 1
|
INPUT 2 |
DIRECTION
|
Ground (0)
|
Ground (0) |
Motor Off |
5 Volts (1)
|
Ground (0)
|
Forward
|
Ground (0)
|
5 Volts (1)
|
Reverse
|
5 Volts (1) |
5 Volts (1) |
Not Used
|
ดังที่คุณเห็น มีเพียงสองรูปแบบเท่านั้นที่ใช้จริงในการควบคุมทิศทางการหมุนของมอเตอร์
สายเปิดใช้งาน (Enable line) สามารถใช้เปิดมอเตอร์ ปิดมอเตอร์ และควบคุมความเร็วได้ เมื่อสายเปิดใช้งานอยู่ที่ 5 โวลต์ (1) มอเตอร์จะเปิด การต่อสายเปิดใช้งานลงกราวด์ (0) จะปิดมอเตอร์
เพื่อควบคุมความเร็วของมอเตอร์ คุณจะใช้สัญญาณ PWM (Pulse Width Modulation หรือ การกำหนดความกว้างพัลส์) กับสายเปิดใช้งาน ยิ่งความกว้างของพัลส์สั้นลง มอเตอร์จะหมุนช้าลง
หมายเหตุ: คุณไม่ได้แนบตารางที่อ้างถึง แต่โดยทั่วไปสำหรับการควบคุมทิศทางมอเตอร์ด้วย L298N จะเป็นดังนี้:
- ไปข้างหน้า (หรือตามเข็มนาฬิกา): IN1 = 1 (5V), IN2 = 0 (GND)
- ถอยหลัง (หรือทวนเข็มนาฬิกา): IN1 = 0 (GND), IN2 = 1 (5V)
- หยุด: IN1 = 0 (GND), IN2 = 0 (GND) หรือ IN1 = 1 (5V), IN2 = 1 (5V)
ทั้งนี้ขึ้นอยู่กับการต่อสายของคุณว่าเป็นแบบไหนที่ทำให้มอเตอร์หมุนไปข้างหน้าหรือถอยหลัง
การใช้ Arduino กับ L298N
การนำ Arduino หรือไมโครคอนโทรลเลอร์ที่คล้ายกันเข้ามาในภาพ ช่วยให้เราสามารถควบคุมทั้งทิศทางและความเร็วของมอเตอร์แต่ละตัวได้ ฉันจะแสดงวิธีการทำสิ่งนี้โดยใช้ Arduino Uno แต่คุณสามารถทำสิ่งเดียวกันได้กับ Mega, Nano หรือคอนโทรลเลอร์ที่เข้ากันได้กับ Arduino อื่นๆ
Arduino Uno มีขาดิจิทัล I/O (อินพุต/เอาต์พุต) 14 ขา ซึ่งหกขาสามารถจ่ายสัญญาณ PWM ได้ แผนภาพต่อไปนี้แสดงวิธีที่ฉันเชื่อมต่อ Arduino Uno กับบอร์ด L298N
หมายเหตุ: คุณไม่ได้แนบแผนภาพที่อ้างถึง ดังนั้นฉันจะอธิบายการเชื่อมต่อทั่วไปที่ใช้กับ Arduino Uno และ L298N:
- ขา 9 (PWM) ของ Arduino -> ขา EN1 (เปิดใช้งานมอเตอร์ A) ของ L298N
- ขา 10 (PWM) ของ Arduino -> ขา EN2 (เปิดใช้งานมอเตอร์ B) ของ L298N
- ขา 8 ของ Arduino -> ขา IN1 (อินพุต 1 สำหรับมอเตอร์ A) ของ L298N
- ขา 7 ของ Arduino -> ขา IN2 (อินพุต 2 สำหรับมอเตอร์ A) ของ L298N
- ขา 5 ของ Arduino -> ขา IN3 (อินพุต 3 สำหรับมอเตอร์ B) ของ L298N
- ขา 4 ของ Arduino -> ขา IN4 (อินพุต 4 สำหรับมอเตอร์ B) ของ L298N
นอกจากนี้:
- ถ้าคุณใช้ตัวควบคุมแรงดันไฟฟ้าภายในของ L298N (จัมเปอร์ 5v-EN อยู่ในตำแหน่ง) คุณไม่จำเป็นต้องต่ออะไรเข้ากับขา 5V ของ L298N
- ถ้าคุณถอดจัมเปอร์ 5v-EN ออก คุณต้องต่อขา 5V ของ Arduino เข้ากับขา 5V ของ L298N และต่อกราวด์ของ Arduino เข้ากับกราวด์ของ L298N
- คุณต้องจ่ายไฟจากแบตเตอรี่หรือแหล่งจ่ายไฟภายนอกเข้าที่ขาจ่ายไฟมอเตอร์ของ L298N (แรงดันที่เหมาะสมสำหรับมอเตอร์ของคุณ บวกกับ 1.4V)
การเชื่อมต่อแบบนี้ช่วยให้คุณควบคุมทิศทางของมอเตอร์แต่ละตัวผ่านขาดิจิทัล และควบคุมความเร็วผ่านสัญญาณ PWM

/*
L298N Motor Demonstration
L298N-Motor-Demo.ino
Demonstrates functions of L298N Motor Controller
*/
// Motor A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoOne()
{
// This function will run the motors in both directions at a fixed speed
// Turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set speed to 200 out of possible range 0~255
analogWrite(enA, 200);
// Turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// Set speed to 200 out of possible range 0~255
analogWrite(enB, 200);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void demoTwo()
{
// This function will run the motors across the range of possible speeds
// Note that maximum speed is determined by the motor itself and the operating voltage
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
demoOne();
delay(1000);
demoTwo();
delay(1000);
}