Arduino Due Arbitrary Waveform Generator
เอาต์พุตแอนะล็อกบริสุทธิ์: Arbitrary Waveform Generator
Arduino Uno ทั่วไปไม่เหมาะกับการสร้างเสียงเลย มันจะส่ง "Square Wave PWM" ออกมา ซึ่งเป็นพัลส์ที่รุนแรงและเป็นบล็อกขนาด 5V หรือ 0V ส่วน Arbitrary Waveform Generator นี้จะต้องใช้ Arduino Due ที่ขับเคลื่อนด้วย ARM แบบ 32-bit โดยอาศัยขุมพลังที่ซ่อนอยู่ของมัน นั่นคือ True Analog Digital-to-Analog Converter (DAC)

ข้อดีของ Hardware DAC
Arduino Due มีขา DAC เฉพาะสองขา
- แตกต่างจาก PWM ของ Uno ที่จะปล่อยพัลส์ 5V อย่างรวดเร็วเพื่อ "หลอก" ให้ได้แรงดันไฟฟ้าที่ต่ำกว่า
DACของ Due จะส่งเอาต์พุตแรงดันไฟฟ้าที่เป็นจริง, เรียบเนียน และปรับค่าได้!- หากคุณพิมพ์
analogWrite(DAC0, 100);Due จะส่งเอาต์พุต1.2 VoltsDC ที่ราบเรียบและสะอาดหมดจด - หากคุณเชื่อมต่อสิ่งนี้เข้ากับ oscilloscope คุณจะเห็นเส้นที่ไร้ที่ติ แทนที่จะเป็นบล็อกพัลส์ที่หยักและมีสัญญาณรบกวน
การสร้างด้วย Direct Memory Access (DMA)
ในการวาด "Sine Wave" ที่สมบูรณ์แบบบน oscilloscope คุณจะต้องเปลี่ยนแรงดันไฟฟ้าของ DAC นับพันครั้งต่อวินาที (เช่น 0.1V -> 0.2V -> ... -> 3.3V -> 3.2V)
- การทำเช่นนี้ด้วย
forloop ทั่วไปใน C++ นั้นช้าเกินไปและจะสร้างคลื่น Sine Wave ที่หยัก - คุณต้องใช้ Lookup Tables โดยคุณจะคำนวณจุดแรงดันไฟฟ้า 256 จุดของ Sine Wave ล่วงหน้าและจัดเก็บไว้ใน array ในหน่วยความจำ
- คุณกำหนดค่า DMA Controller ภายในชิป ARM เพื่อให้ข้ามการทำงานของโปรเซสเซอร์หลักโดยสิ้นเชิง โดยจะส่งจุด array ทั้ง 256 จุดนั้นไปยังชิป
DACโดยตรงโดยอัตโนมัติถึง 44,000 ครั้งต่อวินาที!
ฮาร์ดแวร์ทางวิศวกรรมที่จำเป็น
- Arduino Due (32-bit ARM Cortex-M3): Uno หรือ Nano 8-bit ทั่วไปไม่สามารถทำโปรเจกต์นี้ได้โดยตรง หากไม่ซื้อชิป I2C DAC ภายนอก!
- An Oscilloscope: เพื่อตรวจสอบความสมบูรณ์แบบของคลื่นที่คุณสร้างขึ้นด้วยสายตา
- Op-Amps (เช่น LM358) หากคุณต้องการขยายคลื่น 3.3V ของ Due ให้สูงถึงมาตรฐาน 12V ของ synthesizer!