บทที่ 17: การเขียนโปรแกรมควบคุมสเต็ปปิ้งมอเตอร์ (Stepping Motor)

UTEN BOONLIAM Avatar
บทที่ 17 / 26

บทที่ 17: การเขียนโปรแกรมควบคุมสเต็ปปิ้งมอเตอร์ (Stepping Motor)

สเต็ปปิ้งมอเตอร์ เป็นมอเตอร์ไฟฟ้าที่ขับเคลื่อนด้วยสัญญาณพัลส์ มีลักษณะการขับเคลื่อนโดยการหมุนรอบแกน 360 องศา แต่มีลักษณะไม่ต่อเนื่องจะเคลื่อนไปเป็นสเต็ป โดยแต่ละสเต็ปจะขับเคลื่อนได้ 1, 1.5, 1.8 หรือ 2 องศา ซึ่งจะขึ้นอยู่กับแต่ละโครงสร้างของมอเตอร์ ข้อดีของมอเตอร์ประเภทนี้คือ สามารถกำหนดตำแหน่งของการหมุนได้อย่างแม่นยำด้วยองศาหรือระยะทาง โดยการใช้งานสเต็ปปิ้งมอเตอร์นั้น ไม่สามารถใช้งานหรือทำงานได้เองต้องมีอุปกรณ์ที่ช่วยในการขับเคลื่อนมอเตอร์นั้นคือ Stepping Motor Drive และตัวคอนโทรลเลอร์

โดยทั่วไปงานที่จะนำมอเตอร์ประเภทนี้ ไปใช้งานจะเป็นงานที่ต้องการตำแหน่งที่มีความแม่นยำสูง เช่น ระบบขับเคลื่อนหัวแม่พิมพ์ในเครื่องพิมพ์ (PRINTER) ซึ่งจะมีสเต็ปปิ้งมอเตอร์ในการเลื่อนตำแหน่งของหัวพิมพ์, ระบบขับเคลื่อนหัวอ่านในเครื่องอ่านบันทึกเหล็ก, ระบบขับเคลื่อนตำแหน่งของปากกาใน X-Y PLOTER, หุ่นยนต์ที่ต้องการความแม่นยำในการหยิบจับ เป็นต้น

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

บอร์ด Arduino Learning Kit มีวงจรขับสเต๊ปปิ้งมอเตอร์อยู่บนบอร์ดเรียบร้อยแล้ว โดยใช้ไอซีเบอร์ ULN2003 เป็นตัวขับ ซึ่งในการใช้งานจะต้องเปิด DIP Switch ให้กับตัวสเต๊ปปิ้งมอเตอร์เสียก่อน เพราะอย่างที่เคยได้กล่าวไว้ข้างต้น ขาสั่งงานรีเลย์โมดูลกับขาสั่งงานสเต๊ปปิ้งมอเตอร์จะใช้ขาร่วมกันอยู่ ถ้าไม่ปิด DIP Switch ของรีเลย์โมดูล อาจจะเกิดการรบกวนของสัญญาณได้

สำหรับขาที่ใช้เชื่อมต่อกับสเต็ปปิ้งมอเตอร์ดูได้จากตารางด้านล่าง

P1 P2 P3 P4
Arduino Uno 7 8 12 13
Arduino Nano 12 13 A0 A1
ESP32(ESP-WROM-32) 14 12 13 15

ตารางที่ 17. 1 ขาที่ต่อใช้งานกับสเต๊ปปิ้งมอเตอร์

การเขียนโปรแกรมสั่งงานสเต็ปปิ้งมอเตอร์

  1. ทำการตัวต่อสเต็ปปิ้งมอเตอร์เข้ากับคอนเนคเตอร์ตามรูปด้านล่าง

  1. ทำการเขียนโค้ดตามตัวอย่างด้านล่าง จากนั้น upload โปรแกรมเข้า Arduino เสร็จแล้วเปิดหน้าต่าง Serial Monitor ขึ้นมา

  1. ทดลองป้อนค่า 1, 2 และ 0 ตามลำดับ สังเกตดูการหมุนของสเต็ปปิ้งมอเตอร์

อธิบายการทำงานของโค้ด

  • บรรทัดที่ 1 – 5 เป็นการประกาศขาที่ติดต่อกับสเต็ปปิ้งมอเตอร์ และความเร็วในการเปลี่ยนสเต็ปของสัญญาณพัลส์

  • บรรทัดที่ 7 – 8 เป็นการประกาศฟังก์ชันเพื่อให้ฟังก์ชัน loop มองเห็นฟังก์

  • บรรทัดที่ 15 – 18 เป็นการกำหนดหน้าที่ให้กับขาของ Arduino ว่าให้เป็นเอาต์พุต

  • บรรทัดที่ 20 – 24 เป็นการพิมพ์ข้อความออกทางหน้าจอ Serial Monitor ว่า

    • ถ้าป้อนค่า 0 สเต็ปปิ้งมอเตอร์จะหยุดหมุน

    • ถ้าป้อนค่า 1 สเต็ปปิ้งมอเตอร์จะหมุนตามเข็มนาฬิกา

    • ถ้าป้อนค่า 2 สเต็ปปิ้งมอเตอร์จะหมุนทวนเข็มนาฬิกา

  • บรรทัดที่ 28 เป็นการประกาศตัวแปร _val_int เพื่อนำมารับค่าที่ป้อนมาจาก Serial Monitor

  • บรรทัดที่ 34 – 68 เป็นการตรวจสอบค่าที่รับมาจาก Serial Monitor

    • ถ้าเป็นค่า 1 ให้ไปเรียกฟังก์ชัน clockwise() ซึ่งจะสั่งงานให้สเต็ปปิ้งมอเตอร์หมุนในทิศทางตามเข็มนาฬิกา

    • ถ้าเป็นค่า 2 ให้ไปเรียกฟังก์ชัน counterclockwise () ซึ่งจะสั่งงานให้สเต็ปปิ้งมอเตอร์หมุนในทิศทางทวนเข็มนาฬิกา

    • ถ้าเป็นค่า 0 จะสั่งงานให้สเต็ปปิ้งมอเตอร์หมุนหยุดการหมุน

    • บรรทัดที่ 71 – 119 เป็นฟังก์ชัน clockwise() ซึ่งจะสั่งงานให้สเต็ปปิ้งมอเตอร์หมุนในทิศทางตามเข็มนาฬิกา

    • บรรทัดที่ 121 – 169 เป็นฟังก์ชัน counterclockwise () ซึ่งจะสั่งงานให้สเต็ปปิ้งมอเตอร์หมุนในทิศทางทวนเข็มนาฬิกา

แบบฝึกหัดสำหรับทบทวนความเข้าใจ

  1. ทดลองเปลี่ยนความเร็วในการเปลี่ยนสเต็ปของสัญญาณพัลส์ที่โปรแกรมบรรทัด 5 แล้วดูการเปลี่ยนแปลงของการหมุน ว่าเป็นเช่นไร

 

 

 

  1. เขียนโปรแกรมให้ VR1 เป็นตัวปรับความเร็วให้กับสเต็ปปิ้งมอเตอร์ แล้วให้แสดงสถานะออกทางหน้าจอ LCD16x2

    • บรรทัดแรกแสดงทิศทางการหมุนของมอเตอร์

    • บรรทัดที่สองแสดงความเร็วของมอเตอร์ โดยเริ่มจาก 0 ถึง 100

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *