Seeeduino XIAO Microcontroller (LAB3)

การทดลองที่ 3 เป็นการใช้คำสั่งพื้นฐานมาประยุกต์ใช้งานสำหรับการปรับความเร็วให้กับมอเตอร์กระแสตรง (DC Motor) โดยเราจะใช้เพาเวอร์มอสเฟตเป็นตัวขับกำลังให้กับมอเตอร์ รวมทั้งใช้ออปโต้คัปเปิ้ลในการรับสัญญาณควบคุมจากบอร์ด Seeeduino XIAO และทำหน้าปรับขนาดสัญญาณขับให้เหมาะสมสำหรับเพาเวอร์มอสเฟต

รูปที่ 1 เป็นลักษณะของมอเตอร์กระแสตรงที่ใช้ในการทดลองขนาด 12V/2A สำหรับปรับความเร็วรอบให้กับตัวมอเตอร์ ซึ่งสำหรับการทดลองนี้เราสามารถใช้มอเตอร์แบบอื่นๆ ได้ช่วง 12V-20V/5A เพื่อความยืดหยุ่นสำหรับเลือกใช้

รูปที่ 2 เป็นลักษณะของการเขียนโปรแกรมสำหรับควบคุมความเร็วรอบให้กับมอเตอร์ ซึ่งเป็นการทดสอบการใช้งานโปรแกรมและวงจรที่ออกแบบให้สามารถใช้งานร่วมกัน ว่าสามารถใช้งานได้อย่างถูกต้องและเราสามารถดูข้อมูลการควบคุมผ่าน Serial Monitor ได้อีกทางหนึ่ง
/* Seeeduino XIAO Microcontroller LAB3 DC Motor Speed Control Date : 31-5-64 */ int ledPin = 2; // D2 PWM Signal int sensorPin = A1; // D1 Pin ADC A1 void setup() { pinMode(ledPin, OUTPUT); SerialUSB.begin(115200); } void loop() { int sensorValue = analogRead(sensorPin); SerialUSB.print(" ADC Read = "); SerialUSB.println(sensorValue); analogWrite(ledPin,(sensorValue/4)); // fpwm = 733Hz delay(100); // pwm(ledPin, 3000, sensorValue); // 3kHz, Duty=50% Signal // delay(100); }
โปรแกรมการทำงานสามารถอธิบายการทำงานคร่าวๆ คือ 2 บรรทัดแรกเราจะกำหนดค่าตัวแปรสำหรับขารับสัญญาณอะนาลอกอินพุตที่ขา A1 (D1) และขาส่งสัญญาณพัลซ์วิดธ์มอดู เลตชั่นที่ขา D2 จากนั้นเราจะมากำหนดอัตราความเร็วของการสื่อสารไว้ที่ 115200 และกำหนดขา D2 ให้เป็นแบบเอาต์พุต
ถัดลงมาจะเป็นโปรแกรมหลัก (void loop) โดยบรรทัดแรกจะทำหน้ารับค่าสัญญาณอินพุตจากตัวต้านทานปรับค่าและค่าที่ได้ จะถูกเก็บไว้ที่ค่าตัวแปร sensorValue จากนั้นโปรแกรมก็ส่งค่าที่ได้ไปยังการแสดงผล Serial Monitor ด้วยคำสั่ง SerialUSB.println(sensorValue); เมื่อส่งค่าไปแสดงผลแล้วจะนำค่าเดิมนี้ไปกำหนดการสร้างสัญญาณพัลซ์วิดธ์มอดูเลตด้วยคำสั่ง analogWrite(ledPin,(sensorValue/4)); ซึ่งการสร้างสัญญาณพัลซ์วิดธ์มอดูเลตอาจจะใช้คำสั่งที่เพิ่มให้หลังคอมเม้น (//) 2 บรรทัดก็ได้ครับ

รูปที่ 3 เป็นวงจรที่ออกแบบขึ้นเพื่อใช้ในการทดลอง ซึ่งส่วนที่สำคัญหลักคือตัวออปโต้คัปเปิ้ล (PC817) และเพาเวอร์มอสเฟต (IRF3205) ทั้งนี้สัญญาณที่เราได้จากบอร์ดไมโครคอนโทรลเลอร์ Seeeduino XIAO จะมีค่าในช่วง 3.3Vp-p จึงต้องปรับขนาดสัญญาณใหม่ ด้วยตัวออปโต้คัปเปิ้ลและเป็นการแยกกันทางไฟฟ้า (Isolation) ระหว่างแหล่งจ่ายไฟเลี้ยงมอเตอร์และบอร์ดบอร์ดไมโครคอนโทรลเลอร์ ในส่วนของเพาเวอร์มอสเฟตจะสามารถขับกำลังมอเตอร์ได้โดยตรงและจ่ายกระแสได้สูงขึ้น

รูปที่ 4 แสดงลักษณะของสัญญาณพัลซ์วิดธ์มอดูเลตที่ขาเกต (Vgs) ของตัวเพาเวอร์มอสเฟตที่เราเขียนโปรแกรม โดยจะสังเกตเห็นว่าสัญญาณจะมีช่วงเวลาของการไต่ขึ้น (tr) และไต่ลง (tf) ค่อนข้างมาก เนื่องจากใช้วงจรขับสัญญาณแบบง่ายมาใช้ในการทดลอง

รูปที่ 4 และ 5 เป็นรูปแสดงสัญญาณขับที่ขาเกตให้กับเพาเวอร์มอสเฟตและการทดลองปรับความเร็วรอบให้กับมอเตอร์กระแสตรง โดยเราสามารถปรับความเร็วด้วยตัวต้านทานปรับค่าและวงจรส่วนอื่นจะประกอบกันอยู่บนเบรดบอร์ดใกล้ๆ เพื่อความสะดวกในการปรับปรุงแก้ไข
สำหรับการทดลองที่ 3 เป็นการใช้คำสั่งพื้นฐานทั่วไปมาประยุกต์ใช้งานในรูปแบบหนึ่ง ซึ่งเราสามารถนำแนวความคิดนี้ไปใช้สำหรับการทำโครงงานอื่นๆ ที่มีความซับซ้อนเพิ่มขึ้นและเลือกใช้คำสั่งกับโครงงานได้อย่างเหมาะสมครับ
Reference
- Seeeduino XIAO – Seeed Wiki (seeedstudio.com)
- How to Add Seeed boards to Arduino IDE – Seeed Wiki (seeedstudio.com)
- Grove Shield for Seeeduino XIAO with embedded battery management chip – Seeed Wiki (seeedstudio.com)
- https://wiki.seeedstudio.com/Seeeduino-XIAO-CircuitPython/
- Seeeduino XIAO_v1.0_191112.sch (seeedstudio.com)
- Seeeduino XIAO Expansion board – Seeed Wiki (seeedstudio.com)
- https://www.seeedstudio.com/Seeeduino-XIAO-Pre-Soldered-p-4747.html
- https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html
- https://forum.seeedstudio.com/