Arduino UNO R4 WiFi Digital-to-Analog Converter (DAC)

Started by tha, October 30, 2023, 03:44:48 PM

Previous topic - Next topic

tha

https://docs.arduino.cc/tutorials/uno-r4-wifi/dac

Arduino UNO R4 WiFi Digital-to-Analog Converter (DAC)

เรียนรู้วิธีสร้างรูปคลื่นและเอาต์พุตพวกมันบน a piezo, โดยใช้ the DAC บน the UNO R4 WiFi board.

AUTHOR: Jacob Hylén

The Arduino UNO R4 WiFi มี a built in DAC (Digital-to-analog Converter) ซึ่งถูกใช้เพื่อแปลง a digital signal ไปเป็น an analog. คุณสมบัตินี้สามารถใช้เพื่อสร้างโปรเจ็กต์เสียงสนุกๆ มากมาย แต่ยังใช้เป็นอุปกรณ์ห้องปฏิบัติการระดับมืออาชีพ เป็น เครื่องกำเนิดฟังก์ชันราคาถูก เป็นต้น.

Goals

ในบทความนี้ คุณจะได้เรียนรู้:

  •  เกี่ยวกับ the DAC feature บนบอร์ด the UNO R4 WiFi,
  •  ความแตกต่างระหว่าง PWM and DAC techniques,
  •  วิธีสร้าง a waveform (sine),
  •  วิธีส่งออก waveform นี้ไปยัง a piezo speaker.

Hardware & Software Needed

หากต้องการติดตามบทความนี้ คุณจะต้องมีฮาร์ดแวร์ต่อไปนี้:

  •  Arduino UNO R4 WiFi
  •  Piezo buzzer
  •  Potentiometer
  •  Jumper wires

tha

Circuit

วงจรที่จำเป็นสำหรับบทช่วยสอนนี้อยู่ในแผนภาพด้านล่าง:


tha

Analog Output vs PWM

สำหรับกรณีการใช้งานจำนวนมากเมื่อ analog output ถูกต้องการ, การใช้ PWM (Pulse Width Modulation) แทน genuine analog output จะให้ผลลัพธ์ที่เหมือนกันโดยพื้นฐาน. A digital output pin สามารถเป็นเต็ม on (HIGH) หรือเต็ม off (LOW) อย่างใดอย่างหนึ่งเท่านั้น, แต่โดยการเปิดและปิดอย่างรวดเร็วด้วยการกำหนดเวลาที่แม่นยำ, the average voltage สามารถถูกควบคุมและ an analog output. วิธีการนี้เรียกว่า PWM.

ตัวอย่างเช่น เมื่อหรี่ไฟ LED คุณสามารถใช้ a PWM enabled digital pin เป็น an analog output pin ได้อย่างอิสระ และ LED จะหรี่แสงเหมือนกับที่คุณใช้ a DAC output.

อย่างไรก็ตาม อาจไม่เป็นเช่นนั้นเสมอไป และสำหรับการใช้งานหลายอย่าง คุณจะต้องใช้ a genuine analog output เพื่อให้ได้ผลลัพธ์ที่ต้องการ ตัวอย่างกรณีหนึ่งคือใน audio purposes, โดยที่เอาต์พุต PWM จะให้คุณภาพเสียงไม่เหมือนกับ a genuine analog output, และจำเป็นต้องอาศัยการเล่นซอเล็กน้อยจึงจะทำงานได้ตั้งแต่แรก


tha

Code

The code สำหรับบทช่วยสอนนี้แบ่งออกเป็นสองส่วน, main sketch ส่วนหนึ่งและ a header file ที่บรรจุ a pre-generated sawtooth-waveform.

ด้วย sketch นี้, เราได้สร้าง a sine waveform ไว้ล่วงหน้า. คุณสามารถสร้างมันแบบไดนามิกได้ทั้งที่จุดเริ่มต้นของ sketch ของคุณหรือที่กลางทาง, แต่การทำเช่นนี้จะมีประสิทธิภาพน้อยลงหากไม่ได้การดำเนินการใดๆ.  ดังนั้นการไปเส้นทางนี้จึงเป็นแนวทางปฏิบัติที่ดีที่สุด.

The waveform จะถูกจัดเก็บไว้เป็น samples ใน an array, และด้วยทุกลูปของ the sketch เราจะอัฟเดต the DACs output value ไปยังค่าถัดไปใน the array.

เปิด sketch ใหม่และวางโค้ดต่อไปนี้ลงใน window ของคุณ

Code Source on Github


tha

Testing It Out

เมื่อคุณอัปโหลดโค้ดไปยังบอร์ดแล้ว มันควรเริ่มสร้าง a sine wave oscillation บน DAC ซึ่งขึ้นอยู่กับความถี่ที่สามารถถูกนำมาใช้เพื่อสร้างเสียงบน a piezo buzzer หรือลำโพงได้ หากคุณมีออสซิลโลสโคปอยู่ในมือ การเชื่อมต่อโพรบเข้ากับเอาต์พุต DAC อาจเป็นแบบฝึกหัดที่น่าสนใจ ดังนั้นลองดูว่าคลื่นจะเป็นอย่างไร

ตอนนี้ให้ลองบิดตัวต้านทานปรับค่าได้, แล้วฟังว่าเสียงเปลี่ยนแปลงไปอย่างไร

tha

Analog Wave Types

The sketch ข้างบนสร้างสิ่งที่เรียกว่า a sine wave. มันถูกเรียกว่า a sine wave เพราะถ้าคุณพล็อต the voltage เทียบกับเวลา คุณจะสังเกตเห็นว่าเส้นนั้นดูเหมือน a sine function.

มีประเภทอื่นๆของ analog waves ที่จะสร้างเสียงที่แตกต่างอย่างชัดเจนเมื่อเทียบกับคลื่นไซน์ ไลบรารีที่เราใช้ใน sketch นี้ยังช่วยให้คุณสร้างฟันเลื่อยและคลื่นสี่เหลี่ยมได้ด้วย คลื่นประเภทเหล่านี้ยังได้ชื่อของพวกมันมาจากลักษณะที่ปรากฏเมื่อแรงดันไฟฟ้าถูกพล็อตเทียบกับเวลา

ลองเปลี่ยนประเภทของคลื่นและฟังว่ามันเปลี่ยนความรู้สึกของเสียงอย่างไร

เปลี่ยนคลื่นโดยการแทนที่บรรทัด 18 ใน the sketch "wave.sine(freq);" ด้วยอย่างใดอย่างหนึ่ง



ตอนนี้คุณทราบแล้วว่าการตั้งค่าของคุณใช้งานได้ คุณสามารถทดลองเพิ่มเติมด้วยตัวอย่างต่างๆ และดูว่าคุณสามารถใช้ DAC ของ UNO R4 เพื่อสร้างเสียงและแม้แต่ท่วงทำนองได้อย่างไร

หมายเหตุ: ในการตั้งค่านี้ เราใช้เพียง a piezo buzzer, คุณอาจสังเกตเห็นว่าเสียงที่ดังขึ้นค่อนข้างแผ่วเบา หากต้องการแก้ไขปัญหานี้ คุณจะต้องมีลำโพง 4 หรือ 8 โอห์ม และเครื่องขยายเสียง คุณจะพบโมดูลเครื่องขยายสัญญาณแบบแยกส่วนจำนวนมากที่ใช้งานง่ายทางออนไลน์

tha

Frere Jacques

ตัวอย่างอันนี้เล่นทำนองของ Frere Jacques:

Code Source on Github





tha

MIDI Piano Notes

sketch จะแบ่ง the potentiometer input ออกเป็นขั้นๆ, ซึ่งจะถูกแปลไปเป็น the 88 MIDI notes ที่เป็นตัวแทน the keys ต่างๆบน a piano.

Code Source on Github