2024年10月21日月曜日

ArLFO Arduino(ATMega328P)とSPI DAC(MCP4922)を使ったLFOの構想

以前、Arduino NanoとMCP4922を使ったLFOを製作しました。

電池駆動のガジェットタイプのモジュールで、Eurorackでは多少使いにくく、基本コンセプトはそのままにEurorackモジュールとして製作することにしました。

踏襲する要件

  • Arduinoを使ってMCP4922を駆動
  • サイン波、三角波、ノコギリ波(上昇)、ノコギリ波(下降)、矩形波(PW可変)
  • サイン波はDDSで生成
  • MCP4922は12bit DACなので出力にフィルターを掛けデジタルノイズを低減する(定数見直し)
  • Sync入力で位相をリセット

新たに設ける要件

  • Eurorackモジュールとして製作する
  • Arduino nanoではなく、ATMega328Pをそのまま使ってArduino IDEでプログラミング可能とする
  • 出力はGND~+5Vの単電源波形と-5V~GND~+5V両電源波形を出力する
  • 出力周波数は最大20Hzと最大200Hzを切り替え
  • LFOの出力レベルインジケータLEDを付ける
  • Arduinoのスケッチでユーザー定義の波形を出力を可能とする

テスト基板の製作


フィルター以外を1枚の基板でテスト実装しました。

回路図

結果


Arduino IDEからプログラミング

USB Serial変換モジュールを使ってArduino IDEからプログラミングできました。

DTRは回路図のように10kΩで+5Vにプルアップ、DTRからAVRのRESET(1PIN)に0.1uFのコンデンサでカップリングする必要があります。TX、RXはAVR側とUSB Serialモジュール側とで入れ替えてTX→RX、RX→TXとします。

VCC(電源)はUSB Serial変換モジュールから供給するとややこしくなるので配線しないでおきます。

使ったUSB Serialモジュール


DTR、UART TX、UART RXが出力できるモジュールなら使えると思います。写真はCH340のモジュールですがFT232RLのモジュールでも同様にプログラミングできます。

Arduino IDEからATMega328PをプログラミングするにはあらかじめArduinoとして使うブートローダを書き込んでおく必要があります。Arduino Unoがあれば多少の追加投資で書き込みできます。「Arduino UNO のブートローダ書き込み」の「3 Arduino UNO をプログラマにして、Atmega328 に書き込む」を参考にしてください。

MCP4922の出力の両電源波形化

回路図のOPアンプU1Aの回路で、MCP4922のGND~+5Vの単電源波形を-5V~GND~+5Vの両電源波形に変換できました。

LTSpiceのシミュレーション結果を示します。



実際の回路の出力を示します。


出力フィルタの製作

以前8次MFB(多重帰還)LPF用の基板を作っていたので、小細工して4次用に実装しました。定数はベッセル特性、カットオフ周波数6.25kHz、4次MFBで設計しました。

シミュレーション結果

AC解析

過渡解析(@1kHz ±1V)

回路図

8次MFB用で単電源でも使える用にした基板パターンなので、ジャンパ線をはって不要な部分をバイパスしています。


測定結果

周波数特性

過渡応答 (@1kHz ±1V)


Core基板とFilter基板を接続


サイン波拡大画像


フィルターを掛けない場合(青色)階段状の波形です。製作したフィルターを掛けると(黄色)平滑化されます。

ノコギリ波(下降)トップ


オーバーシュートが出ています。アナログ発振器でもオーバーシュートは発生します。アナログ発振器の場合さらに急激なオーバーシュートになることが多いです。


ノコギリ波(上昇)ボトム


下側にもオーバーシュートが出ます。


矩形波トップ


一番なじみがあると思います。ベッセル特性の応答です。

矩形波ボトム


アンダーシュートがなくノイズが載っています。MCP4922からの出力の最小値はGNDなのでGNDのノイズでしょうか。


0 件のコメント:

コメントを投稿