今から始める電子工作 ⑩ アナログ出力 その2 D-Aコンバータ
マイコンにおけるアナログ出力は、多くの場合、D-Aコンバータを通すことが多いです。Arduinoの中でも、D-Aコンバータを利用できるマイコン・ボードがあり、Arduino UNO 4にも一つ搭載されています。
前回PWMによるアナログ出力を利用しました。、D-Aコンバータの出力も、階段状のディジタル出力です。PWMに比べて、とても細かに変化します。
ドキュメント;Arduino UNO R4 WiFi Digital-to-Analog Converter (DAC)
これは、波形発生のテュートリアルのようです。D-Aコンバータのライブラリのドキュメント自体は存在していないようです。例えば、1.01Vを出力したいというようなスケッチを描く方法が見つかりません。
2023/7のディスカッション https://forum.arduino.cc/t/arduino-analogwave-h-missing-library/1148647/3
●素直にanalogWrite
analogWrite(A0,XXX); という形で、出力してみます。デフォルトは8ビット、高解像度は12ビットです。
setup()内で12ビットに設定し、最大値と半分の電圧を出力します。
void setup() { Serial.begin(9600); while (!Serial) delay(10); analogWriteResolution(12); } void loop() { analogWrite(A0, pow(2,12)-1); delay(5000); analogWrite(A0, pow(2,12)/2); delay(5000); }
実行すると、4.50Vと2.250Vが交互に表示されました。
●sin波を出力
スケッチ例->AnalogWave->SinwWave を選択します。
実行します。
A0端子の波形を見ます。
A5端子には何もつないでいないので、適当な電圧を入力している形なので、周波数を1kHzに決めてしまいます。
#include "analogWave.h" // Include the library for analog waveform generation analogWave wave(DAC); // Create an instance of the analogWave class, using the DAC pin int freq = 10; // in hertz, change accordingly void setup() { Serial.begin(115200); // Initialize serial communication at a baud rate of 115200 wave.sine(freq); // Generate a sine wave with the initial frequency //analogWriteResolution(12); } void loop() { freq = 1000; // Print the updated frequency to the serial monitor Serial.println("Frequency is now " + String(freq) + " hz"); wave.freq(freq); // Set the frequency of the waveform generator to the updated value delay(1000); // Delay for one second before repeating }
実行しました。
10kHzにしました。20kHzは波形が出ませんでした。
wave.sine(freq); を wave.square(freq); に変更しました。方形波の発生は、最大周波数が10Hz付近のようです。
wave.saw(freq);に変更しました。