LGT8F328PのDACを使ってみる

Spread the love

LGT8F328PのDACを使ってみました。ATmega328Pの互換MCUであるLGT8F328Pには、機能追加が施されています。追加された機能の一つがDACです。分解能は8ビットで、高性能とは言えません。しかし、簡易な信号発生器としては使えると思います。

今回は、LGT8F328Pを搭載したArduino NANO互換機で、DACを使用するスケッチを描いて、動かしてみます。

ボードマネージャーについて

スケッチを作るために、Arduino IDEを使用します。しかし、素のArduino IDEでは、LGT8F328P用のスケッチを作ることはできません。そこで、LGT8F328P用のボードマネージャーを追加する必要があります。

LGT8F328Pのボードマネージャーは複数あります。LGT8F328P製造元が配布しているボードマネージャーもあります。しかし、ここではArduinoとの互換性が高い、GitHubのLGT8Fxプロジェクトのものを使用します。

LGT8F328PのDACを使用するための基礎知識:基準電圧

DACを使うには、基準電圧について知っておく必要があります。DACを使用する場合、フルスケールでの出力電圧を決めなければなりません。LGT8F328P内蔵DACは8ビットです。つまり、16進数で0x0~0xFF(10進数で0~255)を出力することができます。

DACポートをフルスケール(255)にした時に、出力ピンが何ボルトになるのかを決めるのが基準電圧です。LGT8F328Pは、3つの基準電圧を内蔵しています。その他、リファレンスピンの電圧を使う方法と、電源電圧(VCC)を基準電圧とする方法が用意されています。

スケッチ上では、あらかじめ用意されたキーワードを、analogReference関数の引数に設定するだけです。あらかじめ用意されたキーワードと、基準電圧の対応は以下のとおりです。

定義済みキーワード基準電圧
DEFAULTVCC(通常は5Vです)
EXTERNALREFピンに印加した電圧
INTERNAL1V0241.024V
INTERNAL1V1LGT8F328Pでは使用不可
INTERNAL2V0482.048V
INTERNAL2V56LGT8F328Pでは使用不可
INTERNAL4V0964.096V

LGT8F328PのDACを使用するための基礎知識:DACの出力ピン

LGT8F328P搭載Arduino互換機での、DAC出力ピンはD4ピンです。通常、D4ピンはデジタル出力ピンです。そのため、DAC出力ピンとして使用するためには、pinMode関数でのモード設定が必要です。

ピンモード設定は以下の様にします。

pinMode(DAC0,ANALOG);

pinMode関数に与えるピン番号には、D4ではなくDAC0と記述しますので、注意してください。

階段波を出力するスケッチ

試しに、LGT8F328PのDACを使用して、階段波を出力するスケッチを作成してみました。

#define SAMPLES 10
byte table[SAMPLES];

void setup(){
  int step=256/(SAMPLES-1);
  for (byte i=0;i<SAMPLES;i++){
    table[i]=step*i;
  }
  analogReference(EXTERNAL);
  // analogReference(EXTERNAL);      // REF PIN voltage 
  // analogReference(DEFAULT);       // VCC Voltage
  // analogReference(EXTERNAL);      // REF PIN Voltage
  // analogReference(INTERNAL4V096); // 4.096V
  // analogReference(INTERNAL2V048); // 2.048V
  // analogReference(INTERNAL1V024); // 1.024V
  pinMode(DAC0,ANALOG);
}

void loop() {
  // put your main code here, to run repeatedly:
  byte i;
  for(i=0;i<10;i++){
    analogWrite(DAC0,table[i]);
    delay(1);
  }
}

LGT8F328Pからの出力波形

出来上がったスケッチを書き込み、出力波形を見てみましょう。

出力波形の観察は、こんな感じで行いました。

LGT8F328Pからの出力波形観察
LGT8F328Pからの出力波形観察

出てきた波形がこれです。

LGT8F328PのDAC出力波形

出力電圧を10段階に変化させ、各段の出力電圧を1ミリ秒保持するスケッチを描きました。そのため、1サイクル10ミリ秒で実行されます。その結果、100Hzの階段波が出力されています。

基準電圧をEXTERNALとし、3.3VのピンとREFピンをショートしましたので、最大振幅は3.3Vになるはずでした。しかし、測定結果を見ると、最大振幅は3.18Vでした。本来3.3Vになるはずです。しかし、数値の丸め誤差により最大値が252/255となっています。また、NANO互換機の3.3Vレギュレーター出力は、実測3.26Vでした。これら、二つの要因により、出力はすこし低めとなっています。

ちなみに、内蔵の基準電圧で実施した結果を見てみましょう。基準電源の設定をINTRTNAL4V049に変更して測定してみました。

内蔵基準電圧使用時の出力波形
内蔵基準電圧使用時の出力波形

測定結果を見る限り、内蔵基準電圧を使用した方が正確なようです。

LGT8F328P内蔵DACは使い物になるか?

色々と試してみましたが、内蔵の基準電圧が思っていた以上に正確でした。しかし、DACのピット数は限定的です。また、DACの動作速度は、あまり速くありません。そのため、高速動作時に歪が大きくなる傾向が見られました。したがって、音声信号の出力には向いていないと思います。

しかし、アナログ入力と組み合わせて、簡易なマルチメーターを作ることができるかもしれません。その他、FETと組み合わせて、電子ボリュームなんかも作れそうです。色々と応用できそうです。

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.