Arduino Control Stepper Motor by using A3967 Module

โครงงานนี้เป็นการทดลองใช้โมดูลขับสเตปเปอร์มอเตอร์ A3967 และต่อใช้งานร่วมกับบอร์ดควบคุม Arduino UNO เพื่อศึกษาการใช้งานโมดูลและโครงสร้างภายในตัวไอซี A3967 ทั้งนี้ตัวโมดูลขับสเตปเปอร์มอเตอร์ A3967 เป็นอีกตัวหนึ่งที่สามารถรถนำมาใช้งานได้งานง่ายนอกจากโมดูลอื่นที่มีจะหน่ายอยู่ ช่วยให้ออกแบบในส่วนของการขับตัวสเตปเปอร์มอเตอร์ได้รวดเร็ว และเหมาะสำหรับนำไปขับมอเตอร์ขนาดเล็กทั่วไปและขนาดกลางเท่านั้น

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 1 ลักษณะของโมดูลขับสเตปเปอร์มอเตอร์ A3967

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 2 แสดงตำแหน่งขาต่างของไอซี A3967 [Picture by Ref.8]

Datasheet for A3967 Stepping Driver

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 3 บล๊อกไดอะแกรมวงจรภายในไอซี A3967 [Picture by Ref.8]

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

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 4 สเตปเปอร์มอเตอร์ที่ใช้ในการทดลอง
Arduino Control Stepper Motor by using A3967 Module
รูปที่ 5 ป้ายแสดงรุ่นของตัวมอเตอร์

รูปที่ 4 และรูปที่ 5 แสดงสเตปเปอร์มอเตอร์ที่ใช้ในการทดลองแบบไบโพล่าร์ (Bipolar Stepper Motor) จะมีสายไฟจำนวน 4 เส้นสำหรับควบคุม คือ สายไฟสีดำ น้ำตาล เหลือง และส้ม ในรูปที่ 5 เป็นเนมเพลตแสดงรุ่นของตัวมอเตอร์ที่ใช้ในการทดลอง

/*
Arduino Code Ref : https://www.sparkfun.com/tutorials/400
*/

int dirpin = 13;
int steppin = 3;
int i;

void setup() 
{
pinMode(dirpin, OUTPUT);
pinMode(steppin, OUTPUT);
}
void loop()
{
  digitalWrite(dirpin, LOW);     // Direction.
  delay(300);

  for (i = 0; i<3000; i++)       
  {
    digitalWrite(steppin, LOW);  
    delayMicroseconds(10); 
    digitalWrite(steppin, HIGH); 
    delayMicroseconds(300);      
  }                            

  digitalWrite(dirpin, HIGH);    // Direction.
  delay(300);

  for (i = 0; i<3000; i++)       
  {
    digitalWrite(steppin, LOW);  
    delayMicroseconds(10); 
    digitalWrite(steppin, HIGH); 
    delayMicroseconds(300);      
  }                              
}

สำหรับตัวอย่างโปรแกรมที่แสดงข้างบน เป็นการให้บอร์ดควบคุม Arduino UNO สร้างสัญญาณขับแบบพัลซ์วิดมอดูเลชั่นที่ขา D3 (Ton =300uS และ Toff =10uS) และที่ขา D13 จะทำหน้าที่กำหนดทิศทางการหมุนให้ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา โดยโปรแกรมจะวนลูปการทำงานสลับกัน

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 6 ลักษณะการต่อสเตปเปอร์มอเตอร์และโมดูล A3967

รูปที่ 6 แสดงลักษณะการต่อร่วมกันระหว่างสเตปเปอร์มอเตอร์และโมดูล A3967 โดยไฟเลี้ยงแรงดัน 5V สำหรับจ่ายให้โมดูลจะแยกออกจากบอร์ดควบคุม Arduino UNO เพื่อให้การทำงานแยกกันเป็นส่วน

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 7 แสดงการต่ออุปกรณ์ทั้งหมดสำหรับทดลองโครงงาน
Arduino Control Stepper Motor by using A3967 Module
รูปที่ 8 สัญญาณขับสเตปเปอร์มอเตอร์ DIR และ STER

สำหรับรูปที่ 8 เป็นการวัดสัญญาณขับสเตปเปอร์มอเตอร์ที่ขา D13 (DIR) และขา D3 (STER) ซึ่งสัญญาณจะมีค่าเท่ากับการเขียนโปรแกรมนั้นเอง คือ ที่ขา D3 จะสร้างสัญญาณพัลซ์บวกที่ 300uS และสัญญาณพัลซ์ลบที่ 10uS

Arduino Control Stepper Motor by using A3967 Module
รูปที่ 9 วงจรที่ใช้ในการทดลองและโมดูล A3967
Arduino Control Stepper Motor by using A3967 Module
รูปที่ 10 ลักษณะทั้วไปของการทดลองขับสเตปเปอร์มอเตอร์

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

Reference

  1. https://www.sparkfun.com/datasheets/Robotics/A3967.pdf
  2. https://www.allegromicro.com/en/products/motor-drivers/brush-dc-motor-drivers/a3967
  3. https://www.electronicoscaldas.com/datasheet/A3967-EDMOD_Manual.pdf
  4. https://www.digikey.com/en/datasheets/allegromicrosystemsllc/allegro-microsystems-llca3967datasheetashx
  5. https://electropeak.com/learn/interfacing-a3967-easydriver-stepper-motor-driver-with-arduino/
  6. https://forum.arduino.cc/t/bipolar-stepper-l298n-accelstepper-current-spikes-start-end-of-rotation/676715
  7. https://www.sparkfun.com/tutorials/400
  8. https://www.allegromicro.com/~/media/files/datasheets/a3967-datasheet.ashx