พื้นฐานการใช้งาน A4988 ขับสเต็ปมอเตอร์ด้วย Arduino
พื้นฐานการใช้งาน A4988 ขับสเต็ปมอเตอร์ด้วย Arduino
บทความนี้จะอธิบายพื้นฐานการใช้งาน A4988 Stepper Motor Driver Module กับ Arduino ตั้งแต่การทำงานของไอซี การต่อวงจร การปรับกระแสให้เหมาะกับมอเตอร์ ไปจนถึงการเขียนโค้ดควบคุมการหมุน
รู้จักกับไอซี A4988
A4988 เป็นไอซี DMOS Microstepping Driver with Translator ผลิตโดย Allegro MicroSystem มีคุณสมบัติเด่นดังนี้
- รองรับสัญญาณลอจิกได้ทั้ง 3.3V และ 5V
- มีวงจรป้องกันหลายแบบ ได้แก่ ตัดการทำงานเมื่ออุณหภูมิสูงเกิน (Thermal Shutdown) ป้องกัน Short-to-Ground และป้องกัน Short-Load
- รองรับ Step Mode ได้ครบ 5 แบบ ได้แก่ Full Step, Half Step, 1/4, 1/8 และ 1/16
- ขับมอเตอร์ได้สูงสุด 2A และรองรับแรงดันได้สูงสุด 35V (บนโมดูล)
เนื่องจากตัวถังไอซีมีขนาดเพียง 5×5 mm แบบ QFN 28 Contact จึงไม่สะดวกที่จะเสียบลง Protoboard โดยตรง ดังนั้นการใช้งานจึงนิยมใช้ในรูปแบบ A4988 Stepper Motor Driver Module ที่จัดวงจรและขาต่อมาให้เรียบร้อยแล้ว
การต่อแหล่งจ่ายไฟให้ A4988
โมดูล A4988 ต้องการแหล่งจ่ายไฟ 2 ชุด
ชุดที่ 1 - ไฟเลี้ยงลอจิก (Low Voltage)
- ต่อที่ VDD และ GND (มุมล่างขวาของโมดูล)
- ใช้ไฟ 3-5V สำหรับเลี้ยงวงจรภายในไอซี
- ต่อจากขา 5V และ GND ของ Arduino ได้เลย
ชุดที่ 2 - ไฟขับมอเตอร์ (Motor Voltage)
- ต่อที่ VMOT และ GND (มุมบนขวาของโมดูล)
- ใช้ไฟตามแรงดันของมอเตอร์ที่ต้องการ (เช่น 12V สำหรับมอเตอร์ 12V)
- สำคัญ ต้องใช้อแดปเตอร์ที่จ่ายกระแสได้เพียงพอ แนะนำ 12V 5A ขึ้นไป
ข้อควรระวัง แม้สเป็คไอซีจะระบุ 37V แต่ตัวเก็บประจุบนโมดูลทนได้แค่ 35V การใช้แรงดันเกินจะทำให้โมดูลเสียหาย
ขาควบคุมหลักของ A4988
STEP และ DIR
นี่คือสองขาที่จำเป็นต้องใช้งานตลอดเวลา ห้ามปล่อยให้ลอย (Floating)
- STEP - รับ Pulse จาก Arduino ส่ง HIGH มา 1 ลูก มอเตอร์จะขยับ 1 สเต็ปตาม Step Mode ที่ตั้งไว้ ยิ่งส่ง Pulse เร็ว มอเตอร์ก็หมุนเร็ว
- DIR - ควบคุมทิศทางการหมุน HIGH = หมุนตามเข็มนาฬิกา, LOW = หมุนทวนเข็มนาฬิกา
ENABLE, RESET, SLEEP
ขาทั้งสามนี้เป็น Active LOW หมายความว่าทำงานเมื่อได้รับสัญญาณ LOW
- ENABLE - เปิด/ปิดการทำงานของไอซี เมื่อ LOW ไอซีจะทำงานและขับมอเตอร์ได้
- RESET - รีเซ็ตการทำงานของไอซี เมื่อ LOW จะหยุดทำงานทุกอย่างจนกว่าจะได้รับ HIGH
- SLEEP - เข้าโหมด Sleep เพื่อประหยัดพลังงานเมื่อไม่ได้ใช้งานมอเตอร์
เคล็ดไม่ลับ ต่อขา SLEEP เข้ากับ RESET ได้เลย จะทำให้ RESET มีสถานะ HIGH ตลอดและวงจรทำงานต่อเนื่อง
ขาต่อมอเตอร์ (Output)
ขา Output มี 2 คู่ สำหรับต่อเข้ากับขดลวดของสเต็ปมอเตอร์
- 1A, 1B - ควบคุมคอยล์ที่ 1
- 2A, 2B - ควบคุมคอยล์ที่ 2
การปรับ Current Limiting
สำคัญมาก ก่อนใช้งานต้องปรับกระแสให้เหมาะกับมอเตอร์เสมอ ไม่งั้นมอเตอร์จะเสียหาย
ขั้นตอนการปรับ
-
ดู Rated Current ของมอเตอร์ - ดูจาก Datasheet ของมอเตอร์ เช่น NEMA17 บางตัว 1A บางตัว 1.2A หรือ 1.5A
-
คำนวณ Vref - ใช้สูตร:
Current Limit = Vref × 2.5
เช่น ต้องการกระแส 1.2A → Vref = 1.2 / 2.5 = 0.48V
-
ตั้งค่า Full Step Mode - ต่อ M1, M2, M3 เข้า GND ทั้งหมด
-
วัดและปรับ Vref - นำมัลติมิเตอร์จิ้มที่ตัว Trimmer เทียบ GND ค่อยๆ หมุนจนได้ค่าตามที่คำนวณ
วิธีที่สอง วัดกระแสโดยต่อแอมป์มิเตอร์คั่นระหว่างโมดูลกับมอเตอร์ แล้วปรับจนได้กระแสตาม Rated Current
[image: ภาพแสดงตำแหน่งตัว Trimmer บนโมดูล A4988 พร้อมลูกศรชี้จุดวัด Vref เทียบกราวด์]
การต่อวงจร Arduino + A4988 + สเต็ปมอเตอร์
รายการอุปกรณ์
- Arduino UNO R3
- A4988 Stepper Motor Driver Module + Heatsink
- NEMA17 Stepper Motor (12V, เช่น 17HS3401)
- Power Adapter 12V 5A
- Breadboard MB-102 830 Point
- สายจัมเปอร์ผู้-ผู้, ผู้-เมีย
การต่อสาย
| Arduino | → | A4988 |
|---|---|---|
| 5V | → | VDD |
| GND | → | GND |
| ขา 2 | → | DIR |
| ขา 3 | → | STEP |
| A4988 | → | มอเตอร์ |
|---|---|---|
| B1 | → | B+ (สายแดง) |
| A1 | → | A- (สายเขียว) |
| A2 | → | B- (สายน้ำเงิน) |
| B2 | → | A+ (สายดำ) |
| Adapter 12V | → | A4988 |
|---|---|---|
| ขั้วบวก | → | VMOT |
| ขั้วลบ | → | GND |
จัมเปอร์ SLEEP → RESET
[image: วงจรสมบูรณ์แสดงการต่อ Arduino UNO กับ A4988 บน Breadboard พร้อมแหล่งจ่ายไฟ 12V และสเต็ปมอเตอร์]
อย่าลืม ติด Heatsink บนตัวไอซี A4988 เสมอ เพราะการทำงานที่กระแสสูงจะทำให้ไอซีร้อนมาก อาจทำให้วงจรป้องกันทำงานหรือไอซีเสียหายได้
โค้ด Arduino ควบคุม A4988
วิธีที่ 1 - เขียนโค้ดเองโดยไม่ใช้ Library
// กำหนดขาที่ใช้งาน
const int dirPin = 2; // ขา DIR
const int stepPin = 3; // ขา STEP
void setup() {
// กำหนดขาทั้งสองเป็น Output
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
}
void loop() {
// หมุนตามเข็มนาฬิกา 200 สเต็ป (1 รอบสำหรับ Full Step)
digitalWrite(dirPin, HIGH);
for (int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000); // ปรับความเร็วได้ที่นี่
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // หยุด 1 วินาที
// หมุนทวนเข็มนาฬิกา 200 สเต็ป
digitalWrite(dirPin, LOW);
for (int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // หยุด 1 วินาที
}
วิธีที่ 2 - ใช้ Library AccelStepper
#include <AccelStepper.h>
// กำหนดขาที่ใช้งาน (DIR, STEP)
AccelStepper stepper(1, 3, 2);
void setup() {
// ตั้งค่าความเร็วและความเร่ง
stepper.setMaxSpeed(1000); // ความเร็วสูงสุด (สเต็ป/วินาที)
stepper.setAcceleration(500); // ความเร่ง (สเต็ป/วินาที²)
// ตำแหน่งเริ่มต้น
stepper.setCurrentPosition(0);
}
void loop() {
// เคลื่อนที่ไปตำแหน่ง 800 สเต็ป
stepper.moveTo(800);
// ทำให้มอเตอร์เคลื่อนที่ไปยังตำแหน่งเป้าหมาย
while (stepper.distanceToGo() != 0) {
stepper.run();
}
delay(1000);
// เคลื่อนที่กลับไปตำแหน่ง 0
stepper.moveTo(0);
while (stepper.distanceToGo() != 0) {
stepper.run();
}
delay(1000);
}
หมายเหตุ ถ้าใช้ Library AccelStepper ต้องติดตั้งผ่าน Arduino IDE: Sketch → Include Library → Manage Libraries แล้วค้นหา “AccelStepper”
วิดีโออ้างอิง
สรุป
การใช้งาน A4988 กับ Arduino ไม่ได้ยุ่งยากอย่างที่คิด สิ่งที่ต้องระวังคือ:
- ปรับกระแสให้เหมาะกับมอเตอร์ - ด้วยการคำนวณ Vref = Current / 2.5
- จัมเปอร์ SLEEP กับ RESET - เพื่อให้วงจรทำงานต่อเนื่อง
- ติดตั้ง Heatsink - ป้องกันความร้อนสูงเกิน
- ใช้แหล่งจ่ายไฟที่เพียงพอ - แนะนำ 12V 5A ขึ้นไป
เมื่อต่อวงจรและอัปโหลดโค้ดเรียบร้อย มอเตอร์จะหมุนตามเข็มนาฬิกาหนึ่งรอบ หยุด 1 วินาที แล้วหมุนทวนเข็มนาฬิกาหนึ่งรอบ วนซ้ำไปเรื่อยๆ
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย