以前、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で設計しました。
シミュレーション結果
回路図
8次MFB用で単電源でも使える用にした基板パターンなので、ジャンパ線をはって不要な部分をバイパスしています。
測定結果
周波数特性
過渡応答 (@1kHz ±1V)
Core基板とFilter基板を接続
サイン波拡大画像
フィルターを掛けない場合(青色)階段状の波形です。製作したフィルターを掛けると(黄色)平滑化されます。
ノコギリ波(下降)トップ
オーバーシュートが出ています。アナログ発振器でもオーバーシュートは発生します。アナログ発振器の場合さらに急激なオーバーシュートになることが多いです。
ノコギリ波(上昇)ボトム
下側にもオーバーシュートが出ます。
矩形波トップ
一番なじみがあると思います。ベッセル特性の応答です。
矩形波ボトム
アンダーシュートがなくノイズが載っています。MCP4922からの出力の最小値はGNDなのでGNDのノイズでしょうか。
0 件のコメント:
コメントを投稿