Seeeduino XIAO Microcontroller (LAB4)

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

Seeeduino XIAO Microcontroller (LAB4)
รูปที่ 1 การเขียนโปรแกรมสำหรับโครงงาน

รูปที่ 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); เป็นการหน่วงเวลาในรอบการเพิ่มค่าซึ่งจะมีผลต่อความถี่ของสัญญาณที่เราสร้างขึ้นนั้นเอง

Seeeduino XIAO Microcontroller (LAB4)
รูปที่ 2 การต่อวงจรสำหรับการทดลองเบื้องต้น

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

Seeeduino XIAO Microcontroller (LAB4)
รูปที่ 3 สัญญาณฟันเลื่อยที่เกิดขึ้นจากการเขียนโปรแกรม

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

Seeeduino XIAO Microcontroller (LAB4)
รูปที่ 4 การต่อวงจรสำหรับขยายสัญญาณ

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

Seeeduino XIAO Microcontroller (LAB4)
รูปที่ 5 ลักษณะการทดลองและเครื่องมือและอุปกรณ์ที่ใช้

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

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

Reference

  1. Seeeduino XIAO – Seeed Wiki (seeedstudio.com)
  2. How to Add Seeed boards to Arduino IDE – Seeed Wiki (seeedstudio.com)
  3. Grove Shield for Seeeduino XIAO with embedded battery management chip – Seeed Wiki (seeedstudio.com)
  4. https://wiki.seeedstudio.com/Seeeduino-XIAO-CircuitPython/
  5. Seeeduino XIAO_v1.0_191112.sch (seeedstudio.com)
  6. Seeeduino XIAO Expansion board – Seeed Wiki (seeedstudio.com)
  7. https://www.seeedstudio.com/Seeeduino-XIAO-Pre-Soldered-p-4747.html
  8. https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html
  9. ArduPicLab: How to modify analog output range of Arduino Due
  10. https://forum.seeedstudio.com/