Seeeduino XIAO Microcontroller (LAB4)

สำหรับการทดลองที่ 4 เป็นการใช้รีจิสเตอร์เปลี่ยนสัญญาณดิจิตอลให้เป็นสัญญาณอะนาลอก (Digital to Analog Converter : DAC) ในตัวบอร์ด Seeeduino XIAO จะมีให้ใช้งานได้ 1 ช่องที่่ตำแหน่งขา D0/A0 โดยเราจะมาเขียนโปรแกรมให้ขา D0 สร้างสัญญาณฟันเลื่อย (Sawtooth waveform) จากนั้นเราก็จะนำสัญาณที่ได้มาขยายเพิ่มขึ้นด้วยออปแอมป์ เพื่อให้เราสามารถนำไปใช้งานได้เหมาะสม ซึ่งในตัวอย่างจะเป็นพื้นฐานสำหรับนำไปประยุกต์ใช้งานในด้านอื่นต่อไป

รูปที่ 1 โปรแกรมที่ใช้ในการทดลองนั้นจะเขียนให้น้อยที่สุด เพื่อให้บอร์ด Seeeduino XIAO สร้างสัญญาณขึ้นมาได้แบบง่าย และเราสามารถทดลองปรับปรุงแก้ไขสำหรับเรียนรู้ได้ง่าย รวมทั้งเข้าใจการใช้คำสั่งที่สำคัญเบื้องต้นก่อน
/* Seeeduino XIAO Microcontroller LAB4 Simple Sawtooth waveform generator by register DAC Date : 3-6-64 */ int i = 0; int Delay = 1; void setup() { Serial.begin(115200); analogWriteResolution(12); // set the analog output resolution to 12 bit } void loop() { // Delay = analogRead(A1); analogWrite(A0,i); i++; // Serial.print(" Data = "); // Serial.println(i); if(i == 500) // Reset the counter to repeat the wave i = 0; delayMicroseconds(Delay); }
อธิบายการทำงานของโปรแกรมเบื้องต้นคือ เริ่มต้นด้วยการประกาศค่าตัวแปรขึ้น 2 ตัว คือ i และ Delay จากนั้น (void setup) จะมากำหนดการใช้คำสั่ง analogWriteResolution(12); เพื่อใช้งานรีจิสเตอร์ DAC ภายในตัวบอร์ด โดยจะกำหนดความละเอียดที่ 12 บิต ต่อมาในลูปโปรแกรมหลัก (void loop) ที่คำสั่ง analogWrite(A0,i); จะเป็นการนำค่าตัวแปร i เข้ามากำหนดค่าแรงดันที่รีจิสเตอร์ DAC โดยเราจะสังเกตว่าตัวแปร i จะถูกเพิ่มค่าขึ้นเรื่อยๆ ด้วยลูปคำสั่ง if(i == 500) ในบรรทัดถัดลงมาด้วยคำสั่ง i++; และเมื่อค่าที่เพิ่มขึ้นเมื่อถึง 500 แลัวจะถูกกำหนดเป็น 0 อีกครั้ง เป็นลักษณะนี้โดยตลอด ซึ่งคำสั่ง delayMicroseconds(Delay); เป็นการหน่วงเวลาในรอบการเพิ่มค่าซึ่งจะมีผลต่อความถี่ของสัญญาณที่เราสร้างขึ้นนั้นเอง

รูปที่ 2 การต่อวงจรของบอร์ด Seeeduino XIAO ร่วมกับออปแอมป์สำหรับขยายสัญญาณบนเบรดบอร์ดเดียวกัน สามารถวัดสัญญาณ, ปรับปรุงแก้ไขและจ่ายไฟเลี้ยงให้กับวงจรได้ง่ายและสะดวกเพิ่มขึ้น

รูปที่ 3 เป็นลักษณะสัญญาณที่เกิดขึ้นจากการใช้โปรแกรมข้างบน โดยเราจะเห็นว่าสัญญาณที่เกิดขึ้นจะมี 2 ส่วนคือ ที่ CH1 สัญญาณรูปบนจะเป็นสัญญาณเอาต์พุตที่ถูกขยายแล้วขนาด 17.4Vp-p และสัญญาณข้างล่าง CH2 จะเป็นสัญญาณที่ได้จากบอร์ด Seeeduino XIAO สร้างขึ้นขนาด 1.68Vp-p โดยอัตราการขยายจะอยู่ที่ประมาณ 10 เท่า ที่ความถี่ 340 Hz

รูปที่ 4 วงจรสำหรับต่อใช้งานของ Seeeduino XIAO และวงจรขยายสัญญาณด้วยออปแอมป์ โดยใช้เบอร์ LM358 ที่สามารถหาซื้อได้ง่าย และต่อวงจรแบบขยายสัญญาณแบบไม่กลับเฟส (Non-inverting amplifier) ด้วยการรับสัญญาณอินพุตเข้าที่ขา 3 และส่งสัญญาณเอาต์พุตออกที่ขา 1 ซึ่งสัญญาณเอาต์พุตที่ได้เราสามารถนำไปเป็นสัญญาณขับเบื้องตันให้กับเพาเวอร์ทรานซิสเตอร์หรือเพาเวอร์มอสเฟตต่อไป

รูปที่ 5 เป็นลักษณะของการทดลองโครงงานแบบง่าย ซึ่งจะใช้แหล่งจ่ายไฟเลี้ยงเพิ่มขึ้น 1 ตัวขนาด 20V/2A สำหรับจ่ายให้กับออปแอมป์และออสซิลโลสโคปสำหรับวัดสัญญาณที่ได้ เพื่อเปรียบเทียบกันระหว่างสัญญาณอินพุตและเอาต์พุตได้ถูกต้อง
การทดลองที่ 4 ครั้งนี้จะเป็นพื้นฐานให้เราสามารถนำโปรแกรมคำสั่งไปใช้งานเบื้องต้น และในส่วนการขยายสัญญาณด้วยออปแอมป์ครับ โดนเราสามารถเขียนโปรแกรมเพื่อสร้างเป็นสัญญาณต่างๆ ได้เพิ่มเติม เช่น สัญญาณไซน์เวฟ, สัญญาณรูปสามเหลี่ยม หรือนำไปใช้เป็นแหล่งจ่ายไฟเลี้ยงกระแสตรงแบบโปรแกรมได้ก็เป็นอีกรูปแบบหนึ่งครับ.
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
- ArduPicLab: How to modify analog output range of Arduino Due
- https://forum.seeedstudio.com/