Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48

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

Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 1 ตัวมอเตอร์ที่ใช้ในการทดลอง (ด้านหน้า)
Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 2 ตัวมอเตอร์ที่ใช้ในการทดลอง (ด้านหลัง)
Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 3 ลักษณะของการต่อวงจรเพื่อทดลองสเต็ปปิ้งมอเตอร์

สำหรับรูปที่ 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); เพื่อใช้ในระบบควบคุมได้ภายหลัง

Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 4 การแสดงผลของบอร์ดขับมอเตอร์

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

Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 5 ทดลองวัดสัญญาณขับตัวสเต็ปปิ้งมอเตอร์ 2 ช่อง

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

Arduino Control 4 Phase Wire Stepper Motor 28BYJ-48
รูปที่ 6 ลักษณะของการทดลองสเต็ปปิ้งมอเตอร์ (28BYJ-48)

สำหรับการทดลองควบคุมการหมุนสเต็ปปิ้งมอเตอร์โดยใช้บอร์ด Arduino UNO นั้น จะมีเนื้อหาให้เราค้นคว้าในอินเตอร์เน็ตมากมายครับ แต่ทั้งนี้แอดมินเองยังไม่เคยทดลองใช้มอเตอร์รุ่นนี้ (28BYJ-48) จึงซื้อมาทดลองเพิ่มเติมเพื่อสังเกตการทำงานและคิดว่าจะนำมาทดลองและแชร์การทดลองให้กับผู้อ่านที่สนใจการควบคุมมอเตอร์แบบนนี้กัน ซึ่งการควบคุมที่นำเสนอนี้จะเป็นรูปแบบหนึ่งของการขับตัวมอเตอร์เท่านั้น ส่วนหนึ่งหวังให้เนื้อหาเป็นข้อมูลเบื้องต้น สำหรับนำไปใช้ในระบบควบคุมต่างๆ ที่ต้องการต่อไปครับ.

Reference

  1. http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
  2. https://www.makerguides.com/28byj-48-stepper-motor-arduino-tutorial/
  3. https://simple-circuit.com/arduino-unipolar-stepper-motor-control/
  4. https://www.aranacorp.com/en/control-a-stepper-motor-with-arduino/
  5. http://users.ece.utexas.edu/~valvano/Datasheets/Stepper_ST.pdf
  6. https://www.orientalmotor.com/products/pdfs/opmanuals/HP-7421-7E.pdf
  7. https://www.orientalmotor.co.th/file/products/steppingmotors.pdf
  8. http://www.t-es-t.hu/download/microchip/an907a.pdf