โค้ด Arduino สำหรับโมดูลควบคุมมอเตอร์ DC คู่ L9110
ในบทช่วยสอนนี้ เราจะสำรวจวิธีการควบคุมมอเตอร์ DC สองตัวโดยใช้โมดูลควบคุมมอเตอร์คู่ L9110 ร่วมกับ Arduino โปรเจกต์นี้จะช่วยให้คุณจัดการทิศทางและความเร็วของมอเตอร์แต่ละตัวได้ ทำให้สามารถนำไปประยุกต์ใช้ได้หลากหลาย เช่น หุ่นยนต์และระบบอัตโนมัติ เมื่อจบคำแนะนำนี้ คุณจะเข้าใจวิธีการเชื่อมต่ออุปกรณ์และเขียนโค้ดที่จำเป็นเพื่อให้มอเตอร์ทำงานได้อย่างราบรื่น หากต้องการคำอธิบายเพิ่มเติม โปรดดูวิดีโอ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
โมดูลควบคุมมอเตอร์ DC คู่ L9110 ช่วยให้คุณควบคุมมอเตอร์สองตัวพร้อมกันได้ โดยมีวงจร H-bridge สองชุด ซึ่งช่วยให้คุณกลับขั้วแรงดันไฟฟ้าของมอเตอร์ได้ ซึ่งหมายความว่าคุณสามารถเปลี่ยนทิศทางของมอเตอร์แต่ละตัวได้ง่ายๆ โดยการสลับสถานะของพินควบคุม โมดูลนี้มีพินหลักสี่พิน: สองพินสำหรับมอเตอร์แต่ละตัวเพื่อควบคุมทิศทางการหมุน เมื่อคุณตั้งพินหนึ่งเป็น HIGH และอีกพินเป็น LOW มอเตอร์จะหมุนในทิศทางหนึ่ง การกลับสถานะพินจะทำให้มอเตอร์หมุนในทิศทางตรงกันข้าม ความยืดหยุ่นนี้จำเป็นสำหรับการใช้งานเช่นหุ่นยนต์ ซึ่งคุณต้องการการควบคุมการเคลื่อนที่ของมอเตอร์อย่างแม่นยำรายละเอียดจาก Datasheet
| ผู้ผลิต | STMicroelectronics |
|---|---|
| หมายเลขชิ้นส่วน | L9110 |
| แรงดันไฟฟ้าลอจิก/IO | 2.5–5.5 V |
| แรงดันไฟฟ้าจ่าย | 2.5–12 V |
| กระแสเอาต์พุต (ต่อช่อง) | 1 A |
| กระแสสูงสุด (ต่อช่อง) | 2 A |
| คำแนะนำความถี่ PWM | 10 kHz |
| เกณฑ์ลอจิกอินพุต | 0.8 V (ต่ำ), 2.0 V (สูง) |
| แรงดันตก / RDS(on) / ความอิ่มตัว | 0.3 V ที่ 1 A |
| ขีดจำกัดความร้อน | 150 °C |
| แพ็คเกจ | DIP-16 |
| หมายเหตุ / รุ่นต่างๆ | นิยมใช้ในโปรเจกต์หุ่นยนต์ขนาดเล็ก |
- ตรวจสอบให้แน่ใจว่ามีการระบายความร้อนที่เหมาะสมสำหรับการทำงานต่อเนื่อง
- รักษาสัญญาณ PWM ให้ต่ำกว่า 10 kHz เพื่อประสิทธิภาพที่ดีที่สุด
- ใช้ตัวเก็บประจุแยกสัญญาณใกล้กับขั้วจ่ายไฟเพื่อลดสัญญาณรบกวน
- ระวังการต่อขั้วกลับด้าน ซึ่งอาจทำให้โมดูลเสียหายได้
- ตรวจสอบขีดจำกัดกระแสที่กำหนดเสมอเพื่อหลีกเลี่ยงความร้อนสูงเกินไป
คำแนะนำการเดินสายไฟ
ในการเชื่อมต่อโมดูลควบคุมมอเตอร์คู่ L9110 กับ Arduino ให้เริ่มต้นด้วยการเชื่อมต่อพินจ่ายไฟ เชื่อมต่อพิน VCC บน L9110 เข้ากับเอาต์พุต 5V บน Arduino และเชื่อมต่อพิน GND เข้ากับพินกราวด์หนึ่งตัวของ Arduino จากนั้น สำหรับมอเตอร์ A ให้เชื่อมต่อพิน A1A เข้ากับดิจิทัลพิน 2 บน Arduino และพิน A1B เข้ากับดิจิทัลพิน 3 จากนั้น สำหรับมอเตอร์ B ให้เชื่อมต่อพิน B1A เข้ากับดิจิทัลพิน 8 และพิน B1B เข้ากับดิจิทัลพิน 9 ตรวจสอบให้แน่ใจว่ามอเตอร์เชื่อมต่อกับเอาต์พุตที่เกี่ยวข้องบนโมดูล L9110 อย่างถูกต้อง
ตัวอย่างโค้ดและคำอธิบาย
ในฟังก์ชัน setup เราจำเป็นต้องกำหนดพินควบคุมเป็นเอาต์พุต ซึ่งจำเป็นสำหรับ Arduino ในการควบคุมทิศทางมอเตอร์อย่างมีประสิทธิภาพ:void setup() {
pinMode(B1A,OUTPUT);// กำหนดพินเป็นเอาต์พุต
pinMode(B1B,OUTPUT);
pinMode(A1A,OUTPUT);
pinMode(A1B,OUTPUT);
delay(3000);
}
โค้ดส่วนนี้ตั้งค่าพินควบคุมมอเตอร์ เพื่อให้แน่ใจว่า Arduino สามารถส่งสัญญาณไปยังโมดูล L9110 ได้
ลูปหลักของโปรแกรมควบคุมมอเตอร์โดยเรียกใช้ฟังก์ชัน `motorA` และ `motorB` ด้วยพารามิเตอร์ต่างๆ เพื่อเปลี่ยนทิศทาง:
void loop() {
motorA('R');// หมุนมอเตอร์ A ไปทางขวา
delay(2000);
motorA('L');// หมุนมอเตอร์ A ไปทางซ้าย
delay(2000);
motorA('O');// ปิดมอเตอร์ A
delay(2000);
...
}
ในส่วนนี้ มอเตอร์จะถูกทำให้หมุนไปทางขวาและซ้าย โดยมีดีเลย์คั่นเพื่อสังเกตการเปลี่ยนแปลงทิศทาง
ฟังก์ชัน `motorA` ถูกกำหนดขึ้นเพื่อควบคุมมอเตอร์ A ตามทิศทางที่ป้อนเข้า:
void motorA(char d) {
if(d =='R'){
digitalWrite(A1A,LOW);
digitalWrite(A1B,HIGH);
} else if (d =='L'){
digitalWrite(A1A,HIGH);
digitalWrite(A1B,LOW);
} else {
digitalWrite(A1A,LOW);
digitalWrite(A1B,LOW);
}
}
ฟังก์ชันนี้ตรวจสอบทิศทางที่กำหนดและตั้งค่าพินควบคุมตามนั้นเพื่อหมุนมอเตอร์ในทิศทางที่ต้องการหรือปิดมอเตอร์
การสาธิต / สิ่งที่คาดหวัง
เมื่อคุณรันโค้ด คุณควรเห็นมอเตอร์สลับระหว่างการหมุนซ้ายและขวา ดีเลย์ช่วยให้คุณสังเกตการเปลี่ยนแปลงทิศทางได้ชัดเจน ระวังข้อผิดพลาดทั่วไป เช่น การต่อขั้วกลับด้าน ซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดหรือความเสียหายต่ออุปกรณ์ นอกจากนี้ ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟเพียงพอสำหรับมอเตอร์ที่คุณใช้ (ในวิดีโอที่ 00:00)
107-Arduino code for an L9110 dual DC motor controller module
ภาษา: C++
/*
* Display number on a seven-segment display with Arduino
* Written by Ahmad Shamshiri for Robojax.com
Date modified: Jun 11, 2018 at 17:20 in Ajax, Ontario, Canada
Watch video instructions for this code: https://youtu.be/-g6Q9lSHDzg
Code is provided for free AS IS without warranty.
You can share this code as long as you keep the above note intact.
*/
const int A1A = 2;//define pin 2 for A1A
const int A1B = 3;//define pin 3 for A1B
const int B1A = 8;//define pin 8 for B1A
const int B1B = 9;//define pin 9 for B1B
void setup() {
pinMode(B1A,OUTPUT);// define pin as output
pinMode(B1B,OUTPUT);
pinMode(A1A,OUTPUT);
pinMode(A1B,OUTPUT);
delay(3000);
}
void loop() {
motorA('R');// Turn motor A to RIGHT
delay(2000);
motorA('L');// Turn motor A to LEFT
delay(2000);
motorA('O');// Turn motor A OFF
delay(2000);
motorB('R');// Turn motor B to RIGHT
delay(2000);
motorB('L');// Turn motor B to LEFT
delay(2000);
motorB('O');// Turn motor B OFF
delay(2000);
motorA('R');// Turn motor A to RIGHT
motorB('R'); // Turn motor A to RIGHT
delay(2000);
motorA('L');// Turn motor A to LEFT
motorB('L');// Turn motor B to LEFT
delay(3000);
motorA('O');// Turn motor A OFF
motorB('O');// Turn motor B OFF
delay(5000);
}
/*
* @motorA
* Activation rotation of motor A
* d is the direction
* R = Right
* L = Left
*/
void motorA(char d)
{
if(d =='R'){
digitalWrite(A1A,LOW);
digitalWrite(A1B,HIGH);
}else if (d =='L'){
digitalWrite(A1A,HIGH);
digitalWrite(A1B,LOW);
}else{
//Robojax.com L9110 Motor Tutorial
// Turn motor OFF
digitalWrite(A1A,LOW);
digitalWrite(A1B,LOW);
}
}// motorA end
/*
* @motorB
* Activation rotation of motor B
* d is the direction
* R = Right
* L = Left
*/
void motorB(char d)
{
if(d =='R'){
digitalWrite(B1A,LOW);
digitalWrite(B1B,HIGH);
}else if(d =='L'){
digitalWrite(B1A,HIGH);
digitalWrite(B1B,LOW);
}else{
//Robojax.com L9110 Motor Tutorial
// Turn motor OFF
digitalWrite(B1A,LOW);
digitalWrite(B1B,LOW);
}
}// motorB end
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อีเบย์
-
อาลีเอ็กซ์เพรสPurchase L9110 motor driver from AliExpress-2s.click.aliexpress.com
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
แผ่นข้อมูล (pdf)
-
L9110 Motor driver module datasheetL9110 motor driver module datasheet covering pinout, specifications, and application circuit for driving DC motors.
robojax_L9110_datasheet.pdf0.20 MB
ไฟล์ Fritzing
-
L9110 H-bridge Motor driver module
L9110 H-bridge module.fzpz0.04 MB