Getting Started With Stepper Motor 28BYJ-48
โปรเจกต์นี้เป็นการแนะนำ Stepper Motor แบบง่าย ๆ โดยมีจุดประสงค์เพื่อแนะนำ Stepper Motor และ Driver ของมันให้กับผู้เริ่มต้นที่ไม่มีพื้นฐานเลย
โปรเจกต์นี้ใช้ Stepper Motor รุ่น 28BYJ-48 และ Stepper Motor Driver รุ่น ULN-2003
โปรเจกต์นี้ใช้ Microprocessor ของ Arduino UNO เป็นหลัก
ผังวงจร

ทำตามผังวงจรที่ให้ไว้ด้านบน การเชื่อมต่อมีดังนี้:
Stepper Motor :
โดยปกติแล้ว Female Header Pins ของมอเตอร์จะถูกจัดกลุ่มและเชื่อมต่อเข้ากับพอร์ตที่เกี่ยวข้องบน ULN-2003 แต่ก็อาจมีข้อยกเว้น ให้ทำตามไดอะแกรมด้านบน (ดูแบบขยายจะช่วยได้มาก!)
Arduino และ Driver:
สามารถเชื่อมต่อ Digital Pins ใด ๆ ที่คุณเลือกเข้ากับ Driver ได้ โดยเริ่มจากซ้ายสำหรับ Coil A, B, C, D นอกจากนี้ยังมี Pins สำหรับ E, F และ G ด้วย แต่เราจะไม่ได้ใช้ Pins เหล่านี้สำหรับโปรเจกต์นี้
เชื่อมต่อพอร์ต + เข้ากับพอร์ต 5V ของ Arduino (ถ้าคุณต้องการ คุณสามารถเชื่อมต่อกับ 3.3V ได้เช่นกัน) และพอร์ต - เข้ากับพอร์ต GND ของ Arduino (มีพอร์ต GND หลายพอร์ต เลือกพอร์ตใดพอร์ตหนึ่งก็ได้)
หลักการทำงานของ Stepper Motor
Stepper Motor ทำงานโดยการจ่ายพัลส์กระแสไฟฟ้าไปยังแต่ละ Coil ของมอเตอร์ ซึ่งแต่ละพัลส์จะทำให้ Stepper Motor เคลื่อนที่ไปทีละก้าวเล็ก ๆ การใช้ลำดับนี้ซ้ำ ๆ จะสร้างการเคลื่อนที่ที่สามารถตรวจสอบได้อย่างแม่นยำอย่างเหลือเชื่อโดยไม่ต้องใช้เอาต์พุต PWM
ในที่นี้เราใช้โมเดล Eight-Phase ซึ่งจะจ่ายพลังงานให้กับแต่ละ Coil ตามลำดับ บางครั้งก็จ่ายพร้อมกันสอง Coil ไม่จำเป็นต้องใช้เอาต์พุต PWM ที่นี่ เนื่องจากพัลส์เป็น Digital 1 หรือ 0
ลำดับที่เราจ่ายไฟมีผลต่อทิศทางของมอเตอร์ หากเราจ่ายไฟตามลำดับจาก A ไป D มอเตอร์จะหมุนตามเข็มนาฬิกา ในขณะที่ถ้าเราจ่ายไฟตามลำดับจาก D ไป A มอเตอร์จะหมุนทวนเข็มนาฬิกา
โค้ด
#define A 2
#define B 3
#define C 4
#define D 5
#define NUMBER_OF_STEPS_PER_REV 512
ส่วนนี้กำหนด Pins ที่เชื่อมต่อกับแต่ละ Coil
เรากำลังใช้ 512 Steps ต่อการหมุนหนึ่งรอบสำหรับ Stepper Motor นี้
เปลี่ยนตัวเลขนี้ให้เป็นค่าที่ตรงกับ Stepper Motor ของคุณ
void setup(){
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
}
ส่วนนี้กำหนดให้แต่ละ Pin เป็น Output Pin
void write(int a,int b,int c,int d){
digitalWrite(A,a);
digitalWrite(B,b);
digitalWrite(C,c);
digitalWrite(D,d);
}
void onestep(){
write(1,0,0,0);
delay(5);
write(1,1,0,0);
delay(5);
write(0,1,0,0);
delay(5);
write(0,1,1,0);
delay(5);
write(0,0,1,0);
delay(5);
write(0,0,1,1);
delay(5);
write(0,0,0,1);
delay(5);
write(1,0,0,1);
delay(5);
}
ส่วนนี้ทำหน้าที่หลักทั้งหมด ฟังก์ชัน `onestep` จะจ่ายพลังงานให้กับแต่ละ Coil ตามลำดับเพื่อสร้างการเคลื่อนที่ ค่า Delay ที่อยู่ระหว่างนั้นเป็นตัวกำหนดความเร็วของ `onestep`
void loop(){
int i;
i=0;
while(i<NUMBER_OF_STEPS_PER_REV){
onestep();
i++;
}
ส่วนนี้จะหมุนมอเตอร์ครบหนึ่งรอบ (ตามเข็มนาฬิกา)
รายละเอียดทางเทคนิคเพิ่มเติม
ศูนย์ควบคุมการเคลื่อนที่ที่มีความแม่นยำสูง
คู่มือนี้มีพิมพ์เขียวทางเทคนิคสำหรับการบรรลุความแม่นยำในการหมุนระดับ Sub-Degree โดยใช้ Geared Stepper Motor รุ่น 28BYJ-48 ที่มีราคาประหยัด
- การจัดลำดับแบบ 4-Phase Unipolar: Arduino จัดการ Input ทั้งสี่ของ ULN2003 Driver เฟิร์มแวร์ใช้การจัดลำดับแบบ "Half-Step" ซึ่งให้ 4096 Steps ต่อการหมุน 360 องศาเต็มรอบของเพลาเกียร์ภายใน
- เคอร์เนลชดเชย Backlash: Geared Stepper มักมี "Slop" ทางกลไก Arduino มี Routine ซอฟต์แวร์ที่เพิ่ม Steps พิเศษเล็กน้อยเมื่อใดก็ตามที่มอเตอร์เปลี่ยนทิศทาง เพื่อรักษาการจัดตำแหน่งที่สมบูรณ์แบบสำหรับ CNCs หรือ Telescopes ขนาดเล็ก
ฮาร์ดแวร์
- การจับคู่ Driver แบบบูรณาการ: รายละเอียดการเดินสายทางกายภาพระหว่าง Digital Pins ของ Arduino และ Pins IN1-IN4 ของโมดูล ULN2003 โดยมีแหล่งจ่ายไฟภายนอก 5V-12V เพื่อป้องกัน Arduino