Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48

มอเตอร์แบบสเต็ปปิ้ง (Stepping Motor) เป็นมอเตอร์อีกแบบหนึ่งที่นิยมใช้งานทั่วไป ทั้งในตัวหุ่นยนต์ สายพานลำเรียงสิ่งของ หรือเครื่องจักร ซีเอ็นซี เป็นต้น ทั้งนี้ตัวมอเตอร์จะให้ความแม่นยำของการหมุนที่ดี โดยไม่ต้องใช้ในส่วนของเอ็นโค้ดเดอร์ (Encoder) เป็นส่วนควบคุมก็ได้ ทั้งนี้เราสามารถใช้จำนวนพัลซ์ที่เป็นสัญญาณขับ เพื่อคำนวณตำแหน่งของการหมุนมอเตอร์ แต่จุดด้อยของตัวมอเตอร์คือความเร็วรอบของการหมุนอาจจะไม่สูงมากนัก และในการทดลองนี้จะนำสเต็ปปิ้งมอเตอร์ขนาดเล็กมาเรียนรู้และควบคุมการหมุนตัวมอเตอร์ครับ



สำหรับรูปที่ 1 และรูปที่ 2 แสดงลักษณะและขนาดของตัวสเต็ปปิ้งมอเตอร์ที่ใช้ในการทดลองโครงงาน ซึ่งเป็นมอเตอร์ขนาดเล็กและใช้แรงดันไฟเลี้ยงที่ 5V โดยลักษณะการต่อวงจรร่วมกับบอร์ด Arduino UNO และตัวต้านทานปรับค่าสำหรับทดลองมอเตอร์ดังในรูปที่ 3
/*
Arduino Control 4 Phase Swire Stepper Motor 28BYJ-48
Code Program by : http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-
Wire_%26_ULN2003_Driver_Board_for_Arduino
MCU : Arduino UNO
AdjSpeed POT : ADC CH0
+Vcc : 5V
*/
int Pin0 = 11; // to IN4
int Pin1 = 10; // to IN3
int Pin2 = 9; // to IN2
int Pin3 = 8; // to IN1
int _step = 0;
int adjspeed = 0;
boolean dir = true; // gre
void setup()
{
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
}
void loop()
{
switch(_step){
case 0:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
if(dir){
_step++;
}else{
_step--;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
adjspeed = analogRead(A0); // ADC pin A0
adjspeed = (adjspeed/10);
if (adjspeed<1) {adjspeed = 1;}
delay(adjspeed);
}
ในส่วนโปรแกรมการทดลองมอเตอร์ข้างบน โดยส่วนใหญ่จะคงไว้ตามโปรแกรมเดิมที่อ้างอิงมา แต่จะมาเพิ่มเติมในส่วนของคำสั่ง adjspeed = analogRead(A0); และคำสั่งข้างเพิ่มเติม ทั้งนี้เพื่อให้เราสามารถปรับความเร็วการหมุนของตัวมอเตอร์ได้เพิ่มขึ้น ซึ่งเราสามารถปรับเปลี่ยนค่าตัวแปรในคำสั่ง delay(adjspeed); เพื่อใช้ในระบบควบคุมได้ภายหลัง

ในรูปที่ 4 เป็นบอร์ดสำหรับขับมอเตอร์ โดยจะมีแอลอีดีแสดงผลให้ทราบการขับสัญญาณในแต่ละเฟสและสามารถตรวจสอบความถูกต้องของสัญญาณขับที่ส่งมาจากบอร์ดประมวลผล Arduino UNO ได้อีกด้วย

รูปที่ 5 เป็นการทดลองวัดสัญญาณที่เกิดขึ้นบนบอร์ดขับมอเตอร์ โดยในการทดลองจะใช้ไฟเลี้ยงให้กับตัวบอร์ดที่ 5V ทั้งนี้จะสัเกตเห็นว่าสัญญาณที่เกิดขึ้นจะมีการเลี่อนเฟสเล็กน้อย ซึ่งเป็นรูปแบบของการขับสเต็ปปิ้งมอเตอร์แบบนี้

สำหรับการทดลองควบคุมการหมุนสเต็ปปิ้งมอเตอร์โดยใช้บอร์ด Arduino UNO นั้น จะมีเนื้อหาให้เราค้นคว้าในอินเตอร์เน็ตมากมายครับ แต่ทั้งนี้แอดมินเองยังไม่เคยทดลองใช้มอเตอร์รุ่นนี้ (28BYJ-48) จึงซื้อมาทดลองเพิ่มเติมเพื่อสังเกตการทำงานและคิดว่าจะนำมาทดลองและแชร์การทดลองให้กับผู้อ่านที่สนใจการควบคุมมอเตอร์แบบนนี้กัน ซึ่งการควบคุมที่นำเสนอนี้จะเป็นรูปแบบหนึ่งของการขับตัวมอเตอร์เท่านั้น ส่วนหนึ่งหวังให้เนื้อหาเป็นข้อมูลเบื้องต้น สำหรับนำไปใช้ในระบบควบคุมต่างๆ ที่ต้องการต่อไปครับ.
Reference
- http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
- https://www.makerguides.com/28byj-48-stepper-motor-arduino-tutorial/
- https://simple-circuit.com/arduino-unipolar-stepper-motor-control/
- https://www.aranacorp.com/en/control-a-stepper-motor-with-arduino/
- http://users.ece.utexas.edu/~valvano/Datasheets/Stepper_ST.pdf
- https://www.orientalmotor.com/products/pdfs/opmanuals/HP-7421-7E.pdf
- https://www.orientalmotor.co.th/file/products/steppingmotors.pdf
- http://www.t-es-t.hu/download/microchip/an907a.pdf