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

前へ

今から始める電子工作 ⑨ アナログ出力 その1 PWM

次へ

今から始める電子工作 ⑪ データを表示する その1 LEDマトリクス