TK80/BSの

シンセシステムを復活/拡張したい〜

その23

DDSのユーザインタフェース作製

ラダーフィルタの準備

TK80−>MSP430−>MIDI出力
2018年
6月9日
ここラダーフィルタデジタル化のページがあります。このページではVCFの代わりに計算機で係数の計算が簡単になるように、フィルタの式がまとめられています。上手く動作すればFPGA内に組み込めます。このページを参考にPCでプログラムを作成しました。式の構成は1次のIIRLPF4個直列に接続してフィードバックを掛けてレゾナンス制御します。サンプリング周波数は48KHzです。下のプログラムでは1次のLPFを4回呼んで、フィードバックを掛けています。ダイオードを使った実際のラダーフィルタは非線形になり、このフィルタとは特性が違います。このページの参考文献の中にダイオードラダーを使ったフィルタが載っています。後で気がつきましたが、x4の式が間違っています(笑)。


下は1次LPF部です。初期時N=0の時にN−1の時の値をにする必要があるため、少し工夫が必要です。


入力信号です。+−1.0V、デューティ比50%の方形波です。32個のデータ毎に交番するので周波数は750Hzです。波形はgnuplotで確認します。


カットオフ周波数20KHz、フィードバック無しの時の出力です。


カットオフ周波数5KHz、フィードバック無しの時の出力です


カットオフ周波数2KHz、フィードバック無しの時の出力です


カットオフ周波数2KHz、フィードバック係数3.0の時の出力ですフィードバックが掛かると、出力レベルは低くなります。


カットオフ周波数10KHz、フィードバック係数2.0の時の出力です


カットオフ周波数10KHz、フィードバック係数3.0の時の出力です


カットオフ周波数10KHz、フィードバック係数4.0の時の出力です。レベルは0.5VP−Pくらいになっています。


カットオフ周波数10KHz、フィードバック係数5.0の時の出力です自己発振始まりかけています。シミュレーションでは安定した振幅で自己発振することはできません。


上記の状態を続けていると、振幅は8000を超えて、どんどん大きくなっていきます。


先 週のVivadoのSDKの思った通りに動かない場合がある件ですが、FPGAへの書き込み時xx_hw_platform_xが選べることが分かりました。選択したxx_hw_platformがプログ ラムと結合されて、FPGAへの書き込まれます。xx_hw_platform_xを消すと欠番を埋めるように番号が使われるので、間違えないように、生成された時間を確認して、最新のものを選びます。


FPGA内のMicroBlazeでLCDスイッチを使って、DDSにユーザインターフェースを追加しました。設定項目はノートのオフセットCVの効き調整LCDのコントラストエラーLEDのクリアの簡単なユーザインターフェースです。オフセットやCVの効き調整は簡易IPのslv_reg[3:0]経由で制御します。スイッチ入力は割り込みではなくポーリングです。MSP430と違い、スイッチを早く動かすと反応しません(笑)。青色LEDのINFO1ハートビートで点灯します。赤LEDはERRORでオフセットでエラーが発生した時に点灯します。もう一つの青色LEDのINFO2未使用です。


友人Sから貰ったDR4MIDIインターフェースボードをDR4に組み込んでみました。DR4からMIDIインターフェースボードが認識されましたが、ボードに載っているH8のファームのバージョン1.06のため、メニュー項目が少ないようです。


6月9日
MSP430のUSB−MIDIのプログラムを少し修正しました。修正したのはノートのオフセットを予め設定された値にする機能です。設定スイッチは割り込み駆動のため、オフセットのスイッチ操作1回に半音づつしか可変できないため、大きくオフセットする時は面倒でした。また、TK80からのデータ出力中はMSP430は何もしていなので、ポートを入力に変えてMC80+バスをキャプチャし、UART−MIDIにデータ出力する機能を追加予定です。


上記オフセットですが、下はMSP430とDDSのブロック図です。元々はTK80とDCOのみのシステムにUSB−MIDIを追加したので、MSP430内で以前のTK80と合わせるためにマイナスにオフセットしています。そこにDDSが加わったため、オフセットをキャンセルする必要があります。また、DCOのトーンホイールテーブルは1オクターブ高いなど、煩雑です。


ソニーのリズム音源を組み込んだ旧リズムシーケンサですが、出力レベルが大きい(2.5Vp−p)ので、ボルカビーツと同じレベル(0.3Vp−p)位に調整しました。


リズムシーケンサにパターン・シーケンサにデータを書き込んで、久しぶりにTK80録音してみました。TK80−>MSP430−>DDS−>DCO(ROMテーブル)−>8chシンセの接続です。MP3はこれです。このソニーの音源の難点は各音源のレベルが個別に調整できないことです。


Vivadoが2018.1になったのでインストールしました。2018.1ではフリーのIPが増えていて、I2SSPDIFなど、デジタルシンセサイザに使えそうなものもあります。ただ、各IPはAXI−Streamバス経由で接続する必要があるようです。


2017.4で作成したDDSの論理は使用している各IPアップグレードして合成インプリできました。


ロジック使用率です。



6月17日
この週末は日曜のみの作業でした。MSP430のUSB−MIDIにTK80から音出し中にアドレス変化を検出して、ノートとゲート情報をMSP側に取り込み、MIDIに出力するコードを追加しました。



ハードウェアの修正を開始しましたが、5V−>3.3Vのレベル変換が必要でした。


今回の修正はMSP430とMC80+のレベル変換のHCT245MSP側にも向くようにDIRGPOで制御します。ただ、MSPは3.3Vなので、そのまま接続できません。赤点線内に5V−>3.3Vのレベル変換が必要です。


以前にDDS用に購入した8ビットのレベル変換が1枚余っていました。アドレス分の4ビットが足りません。WEBを調べていると、ここに情報がありました。ここによると、MSPの入力端子に付いているクランプダイオードの仕様を守って抵抗を直列に入れてもいいということです。これなら簡単です。




6月23日
先週の続きです。上記のページを参考に3Kオーム抵抗をデータとアドレスバスに入れて、5V−>3.3V変換します。


6月24日
TK80から音出しして、作成したMSP430のプログラムを介して、SC−88へMIDI出力します。


上手く動いてません。アナログディスカバリを接続してMC80+バスとUARTのタイミングを確認します。


まず、4ch出力時にアナログディスカバリのUARTプロトコルアナライザでMIDI出力データを取り込み、データをチャンネル毎に整理して、確認します。アナログディスカバリのボーレートプルダウンメニューに31.25Kはありませんが、直接値を入れれば設定できます。結果はノートON/ノートOFFが正常にが出力されていません。ノートONノートOFFは必ずセットで出現するはずです。


バスタイミングとMIDI出力関数の必要時間を確認します。MC80+バスを解析しながら順次MIDI出力する方法では処理が間に合っていないことが分かります。先頭で3バイトをMIDIで出力している間に、MC80+バスでは3チャンネル弱出力しています。デバッグ用のP1.5のDO1はMIDIの3バイト出力関数の先頭でHIGHにして終了時にLOWにしています。HIGH幅が3バイト出力するの必要な実時間です。MIDIの31.25Kbpsに比べると、2MHzの8080の音出しの方が断然早いです(笑)。


プログラムを修正してバスの解析MIDI出力の処理を分けるようにします。TK80の出力するバスは必ず8ch分出力する訳ではないので、単純にバスアクセスの終了が分かりません。ゲート検出でタイムアウトをセットして、タイムアウト発生で最後のゲート検出を検出します。下記のDO1の赤枠はタイムアウトが発生したところです。


タイムアウトが発生したところで、まとめてMIDI出力するようにプログラムを修正しました。これでも偶にイベント欠落することがあります。動作不良でノートOFFが出ないと、SC−88側で音が残ってしまい、不良が直ぐ分かります。ゲートの幅を測定し忘れましたが、下記のロジアナ波形から、大体2〜3μSecと思われます。MSP430は25MHzで動きますが、タイマ割り込みも動いているため、短いゲートの幅ではポーリングで取りこぼしているのかもしれません。次回、TK80側のプログラムを修正して、ゲートのタイミングを長くすると改善するか確認します。友人Sの作成した8chシーケンサプログラムバイナリしか残っていないため、逆アセンブルして解析しないといけません。


以前に作ったデジタルラダーフィルタの式が間違えていたので、修正して波形を出し直しました。カットオフ周波数10KHz、フィードバック係数の時の出力です


カットオフ周波数10KHz、フィードバック係数1.0の時の出力です


カットオフ周波数10KHz、フィードバック係数2.0の時の出力です


カットオフ周波数10KHz、フィードバック係数3.0の時の出力です


カットオフ周波数10KHz、フィードバック係数4.0の時の出力です


FPGA開発用のノートPCをアパートに持ってきて、Vivadoの新しいバージョン2018.2をインストールしました。ファイルが大きいのでテザリングでインストールする勇気はありません(笑)。つい、4週間くらい前は2018.1だったんですが。2017.4で作ったDDSの論理は合成、インプリメントできました。




back