ในบทความนี้จะเป็นการทดสอบการวัดค่าสัญญาณ PWM บนบอร์ด Arduino UNO R3 โดยจะใช้เครื่องมือวัดแบบพกพาอย่าง Hantek รุ่น DSO1202E สามารถพกพาไปไหนได้อย่างสะดวก เหมาะอย่างยิ่งกับการทดลองที่ต้องเคลื่อนย้ายที่ไปมา ซึ่งในการทดลองจะทำการสร้างสัญญาณ PWM จากบอร์ด Arduino UNO R3 ในความถี่ต่าง ๆ และใช้ DSO1202E วัดสัญญาณเพื่อทดลองดูรูปแบบสัญญาณและความถี่ที่ได้ว่าเป็นไปตามที่คำนวณได้ถูกต้องหรือไม่
คุณสมบัติ Hantek DSO1202E เบื้องต้น
· มี 2 ช่องสัญญาณให้ใช้งาน
· สามารถใช้วัดสัญญาณ Bandwidth สูงสุดถึง 200MHz
· มีอัตราสุ่มตัวอย่าง (Sample rate) 1GS/s
· มีโหมดสำหรับการคำนวณสัญญาณ อาทิ การบวก ลบ คูณ และ FFT
· นอกจากจะมีฟังก์ชัน Oscilloscope ให้ใช้งานแล้วยังมีฟังก์ชัน Digital Multimeter ให้ใช้งานได้อีกด้วย
· สามารถบันทึกข้อมูลสัญญาณต่าง ๆ ไปยัง Flash Drive ผ่านช่อง USB ได้
ช่องสัญญาณ PWM บนบอร์ด Arduino UNO R3
บอร์ด Arduino UNO R3 จะใช้ไมโครคอนโทรลเลอร์ AVR Atmega328P โดยบนบอร์ด Arduino จะมีสัญลักษณ์บ่งชี้ถึงช่องสัญญาณ PWM โดยใช้สัญลักษณ์เป็น “~” ซึ่งจะมีด้วยกัน 6 ช่อง ประกอบไปด้วย Pin 3, 5, 6, 9, 10 และ 11
AVR Atmega328P จะเป็นไมโครคอนโทรลเลอร์ขนาด 8-bit และมี flash program memory ขนาด 32Kbytes และชิปมีขา 32 ขาโดยขา PWM ของบอร์ด Arduino UNO R3 กับ map กันกับชิปไมโครคอลโทรลเลอร์ได้ดังนี้ Arudino Pin3 จะต่อกับขา PD3, Pin 5 ต่อกับขา PD5, Pin 6 ต่อกับขา PD6, Pin 9 ต่อกับขา PB1, Pin 10 ต่อกับขา PB2 และ Pin 11 ต่อกับขา PB3
ทั้ง 6 ช่องจะมี register ด้วยกันดังต่อไปนี้ OC0A (PD6), OC0B (PD5), OC1A (PB1), OC1B (PB2), OC2A (PB3) และ OC2B (PB1) ซึ่ง register ดังกล่าวจะนำไปใช้ในการเขียนโปรแกรม
การกำหนดค่า register และการคำนวณ
ในบทความนี้จะทดสอบโดยใช้โหมด Fast PWM (สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ datasheet หน้า 112) โดยจะเลือกใช้ Pin 3 และ 11 ของบอร์ด Arduino UNO ซึ่งจะมี register สำคัญที่ต้องใช้ในโหมดนี้คือ TCCR2A (Timer/Counter Control Register A), TCCR2B, OCR2A และ OCR2B โดยจะต้องกำหนดตามรูปแบบดังนี้ สำหรับ TCCR2A
TCCR2A จำเป็นต้องกำหนดค่า register ตามบิตต่าง ๆ ตามที่กำหนดดังรูปด้านบน ประกอบไปด้วย COM2A1, COM2A0, COM2B1, COM2B0, WGM21 และ WGM20 ตามลำดับ โดยบิตที่ 2 และ 3 ไม่ต้องกำหนดโดยค่าดังเดิมมีค่าเป็น 0 โดยใน register นี้จะกำหนด COM2A1, COM2B1, WGM21 และ WGM20 ให้เป็นค่า 1 ซึ่งเป็นโหมด Fast PWM
TCCR2B จำเป็นต้องกำหนดค่า register ตามบิตต่าง ๆ เช่นเดียวกันกับ TTCR2A ซึ่งในการทดลองนี้จำหนดให้ CS22 เป็น 1 และให้ register ตัวอื่น ๆ เป็นค่าเดิมคือ 0 ซึ่งการกำหนดดังนี้กล่าวคือเป็นการเลือกความถี่ Prescaler เท่ากับ 64
สำหรับ register OCR2B และ OCR2A จะเป็นการกำหนดค่า duty cycle ให้กับขา 3 และ 11 ตามลำดับ
จากการตั้งค่าดังกล่าวสามารถคำนวณหาความถี่ PWM ได้ดังต่อไปนี้
PWM Frequency: 16MHz / 64 / 256 = 976.5625Hz
ตัวอย่างโค้ดโปรแกรม Arduino
1 |
void setup() { pinMode(3, OUTPUT); pinMode(11, OUTPUT); TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); TCCR2B = _BV(CS22); OCR2A = 180; // pin 11 OCR2B = 50; // pin 3 }
void loop() { } |
การวัดสัญญาณโดยใช้ Hantek รุ่น DSO1202E
การทดลองวัดสัญญาณจะใช้ DSO1202E ทั้ง 2 ช่อง โดยให้ Pin 11 วัดสัญญาณที่ช่อง 1 และ Pin 3 วัดสัญญาณที่ช่อง 2 เพื่อทดสอบดูว่าความถี่ที่วัดได้กับที่คำนวณตรงกันหรือไม่ แสดงดังรูปด้านล่าง
จากรูปด้านบนที่ได้จากการวัดด้วย Hantek รุ่น DSO1202E จะเห็นได้ว่าความถี่ที่ได้เท่ากับ 977.5Hz ซึ่งใกล้เคียงกับที่คำนวณ และจะสังเกตได้ว่าที่เส้นสีเหลืองคือสัญญาณจาก Pin 11 จะมีค่าคาบเวลาที่ยาวกว่าเส้นสีฟ้าเนื่องจากในโค้ดโปรแกรมกำหนดให้ค่า OCR2A มีค่า duty cycle เท่ากับ 180 และ OCR2B เท่ากับ 50 ซึ่งมีค่าน้อยกว่า
สรุป
เราสามารถใช้เครื่องมือวัดอย่าง Hantek รุ่น DSO1202E ในการดูหรือวิเคราะห์สัญญาณ PWM ที่ได้จากการสร้างโดยใช้บอร์ด Arduino UNO R3 ได้ ซึ่งผลที่ได้ใกล้เคียงกับที่คำนวณได้ ซึ่งในเราสามารถนำไปใช้งานจริงได้เมื่อผลลัพธ์จากการทดลองเป็นไปตามที่เราต้องการได้ โดยใช้เครื่องมือวัดมาตรวจสอบอีกครั้ง และ Hantek รุ่น DSO1202E นี้ยังช่วยให้เราพกพาไปไหนมาไหนได้อย่างสะดวก หากเราจำเป็นต้องเคลื่อนย้ายวงจรที่เราต้องการวัดสัญญาณเครื่องมือวัดรุ่นนี้ก็จะตอบโจทย์เป็นอย่างมาก อีกทั้งยังสามารถบันทึกค่าจากสัญญาณต่าง ๆ ที่แสดงผลอยู่ได้ลงไปใน Flash Drive ผ่านช่อง USB ได้อีกด้วย
สนใจสั่งซื้อหรือสอบถามข้อมูลเพิ่มเติม
- เว็บไซต์ www.hantekthailand.com
- อีเมล hantekthailand@gmail.com
- โทร 02-591-5244
- มือถือ 082-003-5789
- ไลน์ @hantekthailand
- เฟสบุ๊คเพจ www.facebook.com/hantekthailand