今から始める電子工作 ⑩ アナログ出力 その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);に変更しました。