การขับ Step Motor และ RC Servo Motor

Download all demo files: stepper.7z

บทนำ

ในบทนี้กล่าวถึง การใช้งานและควบคุมอุปกรณ์ขับเคลื่อนต่างๆ เช่น สเต็ปเปอร์มอเตอร์ และ RC เซอร์โวมอเตอร์ โดยใช้ STM32F4DISCOVERY และ Waijung Blockset

รู้จักกับ Stepper Motor

สเต็ปเปอร์มอเตอร์ คือ มอเตอร์ที่มีการหมุนเป็นขั้นๆ โดยแกนของมอตอร์จะหมุนด้วยมุมค่าคงที่เมื่อมีสัญญาณ Pulse มากระตุ้น เช่น 0.9, 1.8, 5, 7.5, 15 หรือ 45 องศาต่อสเต็ป เนื่องจากการควบคุมสเต็ปเปอร์มอเตอร์สามารถใช้สัญญาณดิจิตอลควบคุมได้โดยตรง และสามารถบังคับทิศทางและความเร็วของแกนหมุนสเต็ปเปอร์มอเตอร์เป็นที่นิยมมาใช้ในงานควบคุมเช่น เครื่องปริ้นเตอร์, X-Y table โดยมีข้อดี ดังนี้

  • หมุนได้ครบ 360 องศา ต่อเนื่อง
  • การควบคุมตำแหน่งไม่ต้องอาศัยตัวตรวจจับการหมุน
  • ไม่ต้องใช้แปรงถ่านดังนั้นจึงทำให้ไม่มีส่วนที่สึกหรอ และปัญหาจากประกายไฟ (ที่เกิดจากหน้าสัมผัสของแปรงถ่านกับแหวนตัวนำในโรเตอร์ที่ทำให้เกิดสัญญาณรบกวน)
  • การควบคุมโดยทางวงจรดิจิตอลหรือไมโครคอนโทรลเลอร์ทำได้ง่าย และสะดวก

โดยทั่วไป สเต็ปเปอร์มอเตอร์ (Two-phase Stepper Motor) สามารถแบ่งได้ 2 ประเภท คือ Unipolar และ Bipolar ดังรูป 1-1 และรูป 1-2 ตามลำดับ ผู้ใช้สามารถสังเกตข้อแตกต่างได้จากจำนวนสายไฟ กล่าวคือ แบบ Unipolar จะมีสายไฟต่อ 5 (Common A และ Common B เชื่อมด้วยกัน) หรือ 6 เส้น และแบบ Bipolar จะมีสายไฟต่อ 4 เส้น เท่านั้น

รูป 1-1 ลักษณะภายนอกและโครงสร้างภายในของสเต็ปเปอร์มอเตอร์แบบ Unipolar

รูป 1-1 ลักษณะภายนอกและโครงสร้างภายในของสเต็ปเปอร์มอเตอร์แบบ Unipolar

รูป 1-2 โครงสร้างภายในและลักษณะภายนอกของสเต็ปเปอร์มอเตอร์แบบ Bipolar

รูป 1-2 โครงสร้างภายในและลักษณะภายนอกของสเต็ปเปอร์มอเตอร์แบบ Bipolar

การควบคุมการหมุนของสเต็ปเปอร์มอเตอร์แบบ Unipolar สามารถทำได้โดย ควบคุมกระแสไฟที่จ่ายให้กับขดลวดในแต่ละเฟส อย่างเป็นลำดับที่แน่นอน โดยถ้าหากเราต้องการให้กระแสไหลในเฟสใดๆ ก็จะทำให้สถานะของเฟสนั้นๆเป็นสถานะลอจิก “1”การควบคุมการหมุนของสเต็ปเปอร์มอเตอร์สามารถทำได้ 3 วิธีดังนี้

1.การควบคุมการหมุนแบบเฟสเดียว (Single Phase) หรือ Wave Drive

เป็นการป้อนกระแสไฟให้กับขดลวดของสเต็ปเปอร์มอเตอร์ทีละขด โดยจะป้อนกระแสเรียงตามลำดับกันไปตามตาราง 1-1 (ตัวเลข 1 หมายถึง มีการจ่ายแรงดันให้กับ ขดลวด 0 คือไม่จ่ายแรงดันให้กับขดลวด) ดังนั้นกระแสที่ไหลในขดลวดจะทำการไหลในทิศทางเดียวกันทุกขด ลักษณะเช่นนี้จึงทำให้แรงขับของสเต็ปปิ้งมอเตอร์มีน้อย จึงไม่เป็นที่นิยมใช้

ตาราง 1-1 ลำดับการป้อนกระแสแบบเฟสเดียว

ตาราง 1-1 ลำดับการป้อนกระแสแบบเฟสเดียว

2.การควบคุมการหมุนแบบสองเฟส(Two Phase) หรือ Full Step Drive
เป็นการป้อนกระแสไฟให้กับขดลวดของสเต็ปเปอร์มอเตอร์ทั้ง 2 ขด พร้อมๆ กันไป และป้อนกระแสเรียงตามลำดับกันไป ตามตาราง 1-2  ดังนั้นจึงมีกระแสไหลในขดลวดของมอเตอร์มากขึ้น และจะทำให้มอเตอร์มีแรงบิดมากขึ้น

ตาราง 1-2 ลำดับการป้อนกระแสแบบสองเฟส

ตาราง 1-2 ลำดับการป้อนกระแสแบบสองเฟส

3.การควบคุมการหมุนแบบครึ่งเฟส (Half Step)
เป็นการป้อนกระแสแบบ Two Phase และ Single Phase สลับการไป ตามตาราง 1-3 ซึ่งเป็นการเพิ่มความละเอียดของตำแหน่งในการหมุน

ตาราง 1-3 ลำดับการป้อนกระแสแบบครึ่งเฟส

ตาราง 1-3 ลำดับการป้อนกระแสแบบครึ่งเฟส

ความเร็วการหมุนของแกนสเต็ปเปอร์มอเตอร์ จะขึ้นอยู่กับการหน่วงเวลา (Time Delay) ในแต่ละลำดับ  ถ้า Time Delay มีค่าน้อย แกนจะหมุนเร็วขึ้น ถ้า Time Delay มีค่ามาก แกนจะหมุนช้าและหมุนไม่สม่ำเสมอ

รู้จักกับ RC Servo

RC Servo (คำว่า RC ย่อมาจาก Radio Control) เป็นชุดมอเตอร์ขนาดเล็กที่สามารถหมุนแกนไปยังตำแหน่ง (มุม) ต่างๆ ได้อย่างแน่นอน และโดยปกติสามารถตอบสนองได้เร็วกว่า สเต็ปเปอร์มอเตอร์ตามคำสั่งที่เป็นสัญญาณไฟฟ้าจากตัวรับสัญญาณวิทยุ รูป 1-3 แสดงส่วนประกอบหลักของ RC Servo

รูป 1-3 ส่วนประกอบภายในของ RC Servo

รูป 1-3 ส่วนประกอบภายในของ RC Servo

เนื่องจากมีขนาดเล็ก น้ำหนักเบา และมีแรงบิดสูง จึงเป็นที่นิยมใช้ในอุปกรณ์บังคับวิทยุ เช่นการปรับองศาของล้อหน้าในรถบังคับวิทยุ หรือการปรับมุมปีกและหางของเครื่องบินบังคับวิทยุ  อย่างไรก็ตามอุปกรณ์ชนิดนี้ ไม่สามารถหมุนได้ต่อเนื่องครบ 360 องศา จึงไม่เหมาะใช้งานขับเคลื่อนแบบล้อ

การทดลองควบคุมสเต็ปเปอร์มอเตอร์

อุปกรณ์ที่ใช้ในการทดลอง

การควบคุมอุปกรณ์ขับเคลื่อนเช่นสเต็ปเปอร์มอเตอร์ จะใช้กระแสขับสูงเพื่อสร้างแรงบิด จึงไม่สามารถต่อกับ Microcontroller ได้โดยตรง ดังนั้นต้องมีอุปกรณ์ขับกระแสเชื่อมต่อระหว่าง Microcontroller กับ สเต็ปเปอร์มอเตอร์ ยกตัวอย่างเช่น บอร์ด aMG Step Motor ใช้ IC ขับกระแสเบอร์ ULN2003 ซึ่งจ่ายกระแสสูงสุด 500 mAใช้สำหรับควบคุมสเต็ปเปอร์มอเตอร์แบบ Unipolar เท่านั้น

รูป 2-1 ลักษณะและคุณสมบัติของสเต็ปเปอร์มอเตอร์สำหรับใช้ในการทดลอง

รูป 2-1 ลักษณะและคุณสมบัติของสเต็ปเปอร์มอเตอร์สำหรับใช้ในการทดลอง

รูป 2-2 การใช้งาน Stepper Motor กับ STM32F4DISCOVERY

รูป 2-2 การใช้งาน Stepper Motor กับ STM32F4DISCOVERY

 

การทดลองควบคุมการหมุนแกนของสเต็ปเปอร์มอเตอร์

จุดประสงค์การทดลอง

  • เพื่อให้ผู้ใช้งานเรียนรู้โครงสร้างและควบคุมการหมุนแกนของStepper Motor แบบต่างๆ
  • เพื่อให้ผู้ใช้งานสร้างและใช้งาน Subsystem Block สำหรับควบคุม Stepper Motor
รูป 2-3 Simulink Model สำหรับควบคุมการหมุนของสเต็ปเปอร์มอเตอร์แบบเฟสเดียว

รูป 2-3 Simulink Model สำหรับควบคุมการหมุนของสเต็ปเปอร์มอเตอร์แบบเฟสเดียว

ตาราง 2-1 Simulink Block ที่ใช้ใน Model สำหรับควบคุมการหมุนของสเต็ปเปอร์มอเตอร์แบบเฟสเดียว

ตาราง 2-1 Simulink Block ที่ใช้ใน Model สำหรับควบคุมการหมุนของสเต็ปเปอร์มอเตอร์แบบเฟสเดียว

เมื่อผู้ใช้งาน Download Simulink Model ลงใน  STM32F4DISCOVERY  หลอดไฟ LED บน aMG F4 Connect และบอร์ด aMG Step Motor จะเหมือนไฟวิ่งเป็นลำดับ และแกนของสเต็ปเปอร์มอเตอร์จะหมุนด้วยความเร็วคงที่ (ทวนเข็มนาฬิกา) ถ้าต้องการให้แกนหมุนเร็วขึ้น ผู้ใช้งานสามารถปรับค่าของ Sampling time ใน Counter Limited Block ให้น้อยลง

ในส่วนนี้จะแนะนำวิธีสร้าง Subsystems Block ใน Simulink สำหรับใช้งานกับสเต็ปเปอร์มอเตอร์ หากเปรียบเทียบกับการเขียนในภาษาซี Subsystems Block เหมือนกับการเขียนเป็น Function ซึ่งผู้ใช้งานเพียงกำหนดจำนวน Input และ Output

การสร้างและใช้งานSubsystem Block สำหรับ Stepper Motor มีขั้นตอนดังนี้

1. วาง Subsystems Block ซึ่งอยู่ใน Library Simulink /Ports & Subsystems ไว้ใน Model ดังรูป 2-4
2. เมื่อ Double Click ที่ Subsystem Block จะมีหน้าต่างของ Subsystem ปรากฏขึ้น บนหน้าต่างจะมี In1 และ Out1 Blockซึ่งใช้เป็น Input / Output ของ Subsystem Block

รูป 2-4 การสร้าง Subsymstem Blocks ใน Simulink Model

รูป 2-4 การสร้าง Subsymstem Blocks ใน Simulink Model

3. สร้าง Simulink Model ดังรูป 2-5 ในหน้าต่าง Subsystem Block โดยให้มี 1 Input สำหรับรับค่าของ Step และ มี Output 4 Portสำหรับเชื่อมต่อกับ Digital Output ผู้ใช้งานสามารถเพิ่ม In1 และ Out1 Block ได้จาก Simulink/Ports & Subsystems Library

รูป 2-5 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบเฟสเดียว)

รูป 2-5 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบเฟสเดียว)

4. เมื่อต้องการใช้งาน เชื่อมต่อ Input Port ของ Subsystem Block กับ Counter Block เพื่อรับค่า Step ที่อยู่ช่วง 0 – 3 และเชื่อมต่อ Output Port ของ Subsystem Block กับ Digital Output รวมถึง Scope Block เพื่อดูผลจำลองการทำงาน ดังรูป 2-6

รูป 2-6 Simulink Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ด้วย Subsystem Block

รูป 2-6 Simulink Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ด้วย Subsystem Block

หากผู้ใช้ต้องการควบคุมการหมุนแบบสองเฟสสามารถทำได้โดยแก้ไขค่าของ Constant Block ดังรูป 2-7 ตามลำดับขั้นในตาราง 1-2

รูป 2-7 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบสองเฟส)

รูป 2-7 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบสองเฟส)

หากผู้ใช้ต้องการควบคุมการหมุนแบบครึ่งเฟสสามารถทำได้โดยเพิ่มจำนวน data ports ใน Multi-port Switch และแก้ไขค่าของ Constant Block ดังรูป 2-8 ตามลำดับขั้นในตาราง 1-3

รูป 2-8 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบครึ่งเฟส)

รูป 2-8 Subsystem Model สำหรับการควบคุมของสเต็ปเปอร์มอเตอร์ (แบบครึ่งเฟส)

ข้อดีของการใช้ Subsystems Block คือ ลดจำนวน Block ที่แสดงบนหน้าต่างจึงทำให้ Model ดูไม่ซับซ้อนนอกจากนี้ผู้ใช้งานสามารถเพิ่มจำนวน Subsystems Block ใน Model หลักได้ ในกรณีที่ต้องการควบคุม Stepper Motor หลายชุด

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

จุดประสงค์การทดลอง

  • เพื่อให้ผู้ใช้งานสามารถควบคุมการหมุนแกนของ Stepper Motor สวิตซ์แบบปุ่มกดโดยให้แกนหมุนตามเข็มนาฬิกา เมื่อกดสวิตซ์ SW1 และหมุนทวนเข็มนาฬิกา เมื่อกดสวิตซ์ SW2

การควบคุมทิศทางการหมุน สามารถทำได้โดยเปลี่ยนลำดับการจ่ายกระแสในขดลวด ยกตัวอย่างเช่น Step 1 → Step 2 → Step 3 → Step 4 → Step 1 สำหรับหมุนทวนเข็มนาฬิกาและ Step 1 → Step 4 → Step 3 → Step 2 → Step 1 สำหรับหมุนตามเข็มนาฬิกา เป็นต้น

ในเบื้องต้นให้ผู้ใช้งานสร้าง Subsystem Block สำหรับ Counter-Up/Down ชื่อ CntUpDown ดังรูป 2-9 โดยมี 3 Input Ports สำหรับกำหนดค่าการนับสูงสุด, นับเพิ่มหรือนับลด และมี 1 Output Port สำหรับส่งค่า Step ให้กับ StepperMotor Block ซึ่งวิธีการสร้างได้กล่าวถึงในบทที่แล้ว

รูป 2-9 Subsystem Model สำหรับ Counter Up/Down

รูป 2-9 Subsystem Model สำหรับ Counter Up/Down

สำหรับ Block ที่ส่วนสำคัญในการเพิ่มหรือลดจำนวน คือ Increment Real World และ Decrement Real World (Library Simulink / Additional Math & Discrete / Additional Math: Increment – Decrement)

จาก Simulink Model ดังรูป 2 10 กำหนดค่าของ Constant Block Value = 3 เพื่อให้ CntUpdownนับอยู่ในช่วง 0 – 3 (หมายเหตุ:ถ้าต้องการควบคุมแบบครึ่งเฟส ให้กำหนดค่า Value = 7) และกำหนด Sampling Time: 0.005

รูป 2-10 Simulink Model สำหรับการปรับทิศการหมุนของ Stepper Motor ด้วยสวิตซ์ปุ่มกด

รูป 2-10 Simulink Model สำหรับการปรับทิศการหมุนของ Stepper Motor ด้วยสวิตซ์ปุ่มกด

เมื่อDownload Model ลงใน STM32F4DISCOVERY แล้ว Digital Input Block จะอ่านสถานะโลจิกจากสวิตซ์ปุ่มกด SW1 และ SW2 (ซึ่งต่อกับขา PB2 และ PB15 ) ทุกๆ 100 ms แล้วส่งสัญญาณไปยัง CntUpDown Block เพื่อควบคุมทิศทางการหมุนโดยให้ผลลัพธ์ดังนี้

  • เมื่อกดสวิตซ์ SW1 ค้าง ค่าของ Counter จะลดลง จึงทำให้  StepperMotor หมุนตามเข็มนาฬิกา
  • เมื่อกดสวิตซ์ SW2 ค้าง ค่าของ Counter จะเพิ่มลง จึงทำให้  StepperMotor หมุนตามทวนนาฬิกา
  • เมื่อกดสวิตซ์หรือปล่อยสวิตซ์ทั้งสองพร้อมกัน ค่าของ Counter จะคงที่ และทำให้แกนของ Stepper Motor ล็อกที่ตำแหน่งเดิม เนื่องจากยังมีกระแสไฟจ่ายในขดลวดของ Motor
  • ผู้ใช้งานสามารถปรับความเร็วการหมุนได้จากการปรับค่า Sampling time ใน Constant Block

สามารถไปประยุกต์ใช้ เช่น Feeder แบบ Manual หรือ การปรับมุมกล้องนิรภัย เป็นต้น

การทดลองปรับความเร็วของแกนสเต็ปเปอร์มอเตอร์ด้วย DIP Switch

จุดประสงค์การทดลอง

  • เพื่อเรียนรู้โครงสร้างและปรับความเร็วของแกนสเต็ปเปอร์มอเตอร์ด้วย DIP Switch
  • เพื่อให้ผู้ใช้งานสร้างและใช้งาน Subsystem Block แบบ Trigger สำหรับควบคุมความเร็วของ Stepper Motor

ความเร็วการหมุนของแกนสเต็ปเปอร์มอเตอร์ สามารถทำได้โดยปรับการหน่วงเวลา (Time Delay) ในแต่ละ Step ข้อเสียของการใช้ Simulink Model คือ ผู้ใช้จะไม่สามารถปรับ Sample Time ของ Source Block ใน Model ได้ หลังจาก Download ลงใน STM32F4DISCOVERY

เราสามารถตั้งค่าของ Subsystem Block ให้เริ่มทำงานหรือ Execute โปรแกรมภายใน เมื่อมีสัญญาณภายนอก โดยวาง Trigger Block ใน Subsystem Model รูป 2-11

รูป 2-11 การเพิ่ม Trigger Block ใน Subsystem Model

รูป 2-11 การเพิ่ม Trigger Block ใน Subsystem Model

เพิ่ม Digital Input Block สำหรับอ่านสัญญาณจาก DIP Switch และ Multiport Switch สำหรับเลือกสัญญาณจาก Pulse GeneratorBlock ที่มีPulse Width 50% และตั้งค่าPeriod ต่างๆ ดังรูป 2-12

รูป 2-12 Simulink Model สำหรับการปรับความเร็วของแกนสเต็ปปิ้งมอเตอร์ด้วย DIP Switch

รูป 2-12 Simulink Model สำหรับการปรับความเร็วของแกนสเต็ปปิ้งมอเตอร์ด้วย DIP Switch

เมื่อผู้ใช้งานสามารถตั้ง DIP Switch ตามตารางในรูป 2-15 เพื่อปรับความเร็วของการหมุน ยกตัวอย่างเช่น เมื่อตั้งที่ตำแหน่ง OFF ทั้งหมด CntUpDown Block จะทำงานทุกๆ 0.005 วินาที (สัญญาณขอบขาขึ้นจะเกิดทุกๆ 0.005) และStepper Motor จะหมุนเมื่อกดปุ่ม SW1 ค้างไว้ เมื่อปรับ DIP Switch ที่ ON ทั้งหมด จะเข้าเงื่อนไข Default จึงทำให้ CntUpDownBlock จะทำงานทุกๆ 0.02 วินาที และทำให้ Stepper Motor หมุนได้ช้าลง

การทดลองควบคุมตำแหน่งของแกนสเต็ปเปอร์มอเตอร์ด้วยสวิตซ์ปุ่มกด

จุดประสงค์การทดลอง

  • เพื่อเรียนรู้โครงสร้างและควบคุมตำแหน่งของแกนสเต็ปเปอร์มอเตอร์ด้วยสวิตซ์แบบปุ่มกด โดยให้แกนหมุนตามเข็มนาฬิกา 90 องศา เมื่อกดสวิตซ์ SW1 และหมุนตามเข็มนาฬิกา 90 องศา เมื่อกดสวิตซ์ SW2

การควบคุมตำแหน่งแกนของ Stepper Motor เป็นแบบ Open Loop กล่าวคือ ไม่มีข้อมูลของเซนเซอร์ส่งกลับเข้า Microcontroller ดังนั้น ระบบสามารถรู้ตำแหน่งของแกนได้จาก จำนวนสเต็ปที่ส่งให้ Stepper Motor เพื่อให้ STM32F4DISCOVERY สามารถระบุตำแหน่งปัจจุบันของแกน Stepper Motor ผู้ใช้งานเพิ่มส่วนคำนวณหาตำแหน่งปัจจุบันไว้ใน CntUpDown Subsystem Block ดังรูป 2-13

รูป 2-13 Subsytem Model สำหรับนับจำนวน Step ที่ส่งให้ Stepper Motor

รูป 2-13 Subsytem Model สำหรับนับจำนวน Step ที่ส่งให้ Stepper Motor

การควบคุมตำแหน่งของแกน Stepper Motor มีขั้นตอนการทำงานดังนี้

  • กำหนดตำแหน่งที่ต้องการ (Desired Step) และตรวจสอบตำแหน่งปัจจุบัน (Current Step) ซึ่งได้มาจาก Subsystem ดังรูป 2-13 ในการทดลองนี้จะกำหนดให้ ทิศทวนเข็มเป็นทิศ + (บวก) และทิศตามเข็มเป็นทิศ – (ลบ)
  • เปรียบเทียบและคำนวณหาจำนวน StepToGoได้จากสมการ: StepToGo = Desired Step – Current Step
  • สั่ง StepperMotor ให้หมุน จนกว่า StepToGoจะมีค่าเท่ากับศูนย์

จากคุณสมบัติของ Stepper Motor ที่ใช้ในการทดลอง Step Angle: 5.625 องศา / 64 หมายความว่ามอเตอร์หมุน1 Step แกนจะหมุน 0.0879องศา ดังนั้น หากต้องการให้หมุน 90 องศา

Desired Step = 90 / 0.0879 = 1024Step

รูป 2-14 Simulink Model สำหรับการทดลองควบคุมตำแหน่งของแกน Stepper Motor

รูป 2-14 Simulink Model สำหรับการทดลองควบคุมตำแหน่งของแกน Stepper Motor

เมื่อ Download Simulink Model ลงใน STM32F4DISCOVERY แกนของมอเตอร์จะหมุนทวนเข็มไป 90 องศา หรือ +90 เมื่อกดปุ่ม Reset ตำแหน่งปัจจุบันที่อยู่ในหน่วยความจำจะถูกลบ จึงทำให้แกนของมอเตอร์จะหมุนอีกครั้ง เพื่อไปยังตำแหน่ง +90

รูป 2-15 Simulink Model สำหรับควบคุมตำแหน่งของแกน Stepper Motor ด้วยสวิตซ์แบบปุ่มกด

รูป 2-15 Simulink Model สำหรับควบคุมตำแหน่งของแกน Stepper Motor ด้วยสวิตซ์แบบปุ่มกด

การทดลองควบคุม RC Servo

อุปกรณ์ที่ใช้ในการทดลอง

รูป 3 1 การใช้งาน RCServo กับ STM32F4DISCOVERY

รูป 3-1 การใช้งาน RCServo กับ STM32F4DISCOVERY

RC Servo รับสัญญาณดิจิตอลเพื่อปรับมุมองศาของแกน โดยมีลักษณะของสัญญาณเรียกว่า Pulse Width Modulation (PWM) ชุดควบคุมตำแหน่งของ RC Servo จะตรวจสอบช่วงเวลาที่สัญญาณอยู่ในสถานะ ON­­ หรือ Pulse Width แล้วปรับตำแหน่งตามที่ผู้ผลิต RC Servo โปรแกรมไว้ ดังรูป 3‑2 แสดงความกว้างโดยประมาณของสัญญาณ ON สำหรับควบคุมตำแหน่งของ RC Servo รุ่น SG90 โดยมี Period ของสัญญาณมีค่า 20 ms หากใช้งาน RC Servo รุ่นอื่นๆ ผู้ใช้งานควรศึกษารายละเอียดเพิ่มเติมจาก Datasheet เช่นระดับแรงดันของสัญญาณ PWM และ ความกว้างของสัญญาณ

รูป 3 2 แสดงความกว้างของสัญญาณ ON หรือ %Duty Cycle สำหรับควบคุมตำแหน่งของ RC Servo

รูป 3-2 แสดงความกว้างของสัญญาณ ON หรือ %Duty Cycle สำหรับควบคุมตำแหน่งของ RC Servo

วิธีการใช้งาน Basic PWM Block

ในบท Digital Input/Output แสดงการใช้งาน Pulse Generator Block สำหรับสร้างสัญญาณ PWM ซึ่งผู้ใช้งานสามารถตั้งค่า %Duty Cycle ภายใน Block ได้เท่านั้น ในบทนี้จะกล่าวถึงวิธีใช้งาน Basic PWM Block ซึ่งทำหน้าที่สร้างสัญญาณ PWM โดยใช้ Timer ของ STM32F4DISCOVERY ผู้ใช้งานสามารถเลือกใช้งาน Timer และ Channel สำหรับส่งสัญญาณไปยังอุปกรณ์ภายนอก เช่น RC Servo หรือชุดควบคุม DC Motor และกำหนด %Duty Cycle ผ่าน Simulink Model ได้

สำหรับ Basic PWM Block อยู่ใน simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> TIM โดยมีลักษณะและคุณสมบัติดังนี้

รูป 3 3 ลักษณะและการตั้งค่าของ Basic PWM Block

รูป 3-3 ลักษณะและการตั้งค่าของ Basic PWM Block

การทดลองควบคุมตำแหน่ง RC Servo ด้วย Dip Switch

จุดประสงค์การทดลอง

  • เพื่อให้ผู้ใช้งานสามารถควบคุมตำแหน่งของ RC Servo โดยใช้ Basic PWM Block ได้
  • เพื่อให้ผู้ใช้เลือก %Duty Cycle ผ่าน Dip Switch ได้

    รูป 3 4 Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วยสวิตซ์แบบ Dip Switch

    รูป 3-4 Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วยสวิตซ์แบบ Dip Switch

จากรูป 3‑4 แสดง Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วย Dip Switch โดยใข้ Digital Input Block อ่านค่าสัญญาณจากสวิตซ์ Dip-SW1 และ Dip-SW2 ซึ่งต่อกับขา PE3 และ PE4 ตามลำดับ สัญญาณที่ได้จะแปลงเป็นเลขฐาน 10 (ระหว่าง 0 ถึง 3) Multiport Switch จะเลือกค่า %Duty Cycle ตาม Index และส่งไปยัง Basic PWM Block

เมื่อ Download โปรแกรมลงใน STM32F4DISCOVERY สัญญาณ PWM จะส่งไปยัง RC Servo จึงทำให้มอเตอร์หมุนไปยังตำแหน่งตาม %DutyCycle ของสัญญาณ PWM เมื่อ DIP-SW ทุกตัวอยู่ในตำแหน่ง OFF จะหมุนไปที่ตำแหน่ง -90 องศา  เมื่อ DIP-SW ทุกตัวอยู่ในตำแหน่ง ON จะหมุนไปที่ตำแหน่ง +90 องศา เมื่อ DIP-SW1 ที่ตำแหน่ง ON มอเตอร์จะหมุนไปที่ตำแหน่ง -45 องศา เมื่อ DIP-SW2 ที่ตำแหน่ง ON มอเตอร์จะหมุนไปที่ตำแหน่ง 0 องศา หรือจุดเริ่มต้น

ชวนคิด ต้องการให้ RC Servo อยู่ในตำแหน่ง 0 องศา (Pulse Width = 1.5ms) ควรส่งสัญญาณ PWM ด้วย %Duty Cycle เท่าไร หากสัญญาณ มีความถี่ 60 Hz

ตอบ สัญญาณมีความถี่ 60Hz หรือ Period = 16.67 ms ดังนั้น %Duty Cycle สามารถคำนวณได้ 1.5ms x 100/16.67ms = 9.0 %

รูป 3-5 การทดลองควบคุม RC Servo ด้วย Dip Switch

รูป 3-5 การทดลองควบคุม RC Servo ด้วย Dip Switch

การทดลองควบคุมตำแหน่ง RC Servo ด้วย Potentiometer

จุดประสงค์การทดลอง

  • เพื่อให้ผู้ใช้งานสามารถควบคุมตำแหน่งของ RC Servo โดยปรับ %Duty Cycle ด้วยตัวต้านทานปรับค่าได้ (Potentiometer)
รูป 3-6 Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วยตัวต้านทานปรับค่าได้

รูป 3-6 Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วยตัวต้านทานปรับค่าได้

จากรูป 3‑6 แสดง Simulink Model สำหรับควบคุมตำแหน่งของ RC Servo ด้วยตัวต้านทานปรับค่าได้ โดยให้ ADC Module อ่านค่าแรงดันไฟฟ้าที่ขา PA5 จากนั้น ค่าอ่านได้จากถูกแปลงเป็น %Duty Cycle ด้วยสมการความสัมพันธ์เชิงเส้นระหว่าง ADC Value (0 – 4095) กับ %Duty Cycle สามารถหาได้กราฟในรูป 3‑7

รูป 3-7 ความสัมพันธ์ระหว่าง ADC Value และ %Duty Cycle

รูป 3-7 ความสัมพันธ์ระหว่าง ADC Value และ %Duty Cycle

RC Servo จะหมุนไปยังตำแหน่งใดๆ ตามค่าแรงดันที่อ่านได้ เมื่อปรับตัวต้านทานไปที่ค่าแรงดันมีค่าเท่ากับ GND มอเตอร์จะหมุนไปยังตำแหน่ง -90 องศา (%Duty Cycle = 2.5) เมื่อปรับตัวต้านทานไปที่ค่าแรงดันมีค่าเท่ากับ VDD หรือ 3.3V มอเตอร์จะหมุนไปยังตำแหน่ง +90 องศา (%Duty Cycle = 12.5) รูป 3‑8 แสดงตำแหน่งของ RC Servo ตามค่าแรงดันที่อ่านได้จากขา A5

รูป 3-8 การทดลองควบคุม RC Servo ด้วย Potentiometer

รูป 3-8 การทดลองควบคุม RC Servo ด้วย Potentiometer

เอกสารอ้างอิง

  1. Kiatronics, “28BYJ-48 Stepper Motor,” [Online]. Available: http://www.sensors.co.nz/datasheet/28BYJ-48 Stepper Motor.pdf.
  2. I. The MathWorks, “Documentation Center,” The MathWorks, Inc., [Online]. Available: http://www.mathworks.com/help/simulink/ug/creating-subsystems.html
  3. R. Laidman, “Stepper Motors and Control, Part I – Unipolar Stepper Motor and Control,” 1999. [Online]. Available: http://www.stepperworld.com/Tutorials/pgUnipolarTutorial.htm.