TK80/BSの
シンセシステムを復活/拡張したい〜
その65
DMAウェーブテーブルシンセ
2021年
9月30日
アパート作業です。Nexys Videoボードを使ったDMAウェーブテーブルシンセの続きです。以前に作成したブロック図を修正して、シンセの各モジュールにパラメータを渡す方法をAXIからSPI接続のシフトレジスタに変更しました。これは既存の8チャンネルHLSシンセと同じ方法です。DDS、DmaとFIFOのセットがDOCに相当し、DDR3から先頭部とリピート部のテーブルデータを転送できます。
上のブロック図の破線内のシンセ部を抜き出して、少し細かくブロック図を書きました。破線内を1つのIPとして作成します。MC80データラッチは1つのIPで8チャンネル分、DmaFIFOとHLSシンセは1つのIPで1チャンネル分です。また、ブロックの外部と接続する信号の本数を記入しています。ブロック図中のglueはVerilogで作ったグルーロジックです。
10月2日
バススイッチの続きです。赤枠にHC32を追加して、TK80BSと互換機選択の条件にUSB−パラレル変換機の電源ステータスを追加しました。また、MC80から出力されるテンポ信号(C7ポート)はTK80BSのLV245を通してから接続するようにしました。これにより、USB−パラレル変換機の電源が入っていない時に、なるべく外部から信号が入らないようにします。
修正後に確認を行いました。動作良好です。
バススイッチのブロック図を修正しました。
スリーステートバッファの入力端子のクランプ電流の絶対定格を見ると、入力のクランプダイオードの有無が分かります。初めに普段用してHCデバイスです。プラス、マイナス20mAとなっていて、デバイスへ入る、出るの方向が定義されています。これは入力端子のクランプダイオードがVCC、GND側の双方に付いていることを表しています。
続いて、今回使用したLVデバイスです。マイナス20mAとなっていて、デバイスから出る方向のみになっています。これは入力端子のVCC側へのクランプダイオードが無いことを表しています。これにより、入力信号からの電圧がクランプダイオードを通して電源に流れなくなり、TK80BS側とバススイッチの電源の投入順番を気にしなくても良くなります。
データシートには出ていませんが、HCとLVデバイスの入力のクランプダイオードは下図のようになっています。
10月9日
引っ越しに合わせて、自宅サーバをラズベリーパイにする予定です。秋月でラズベリーパイ4(8GB)とヒートシンクを購入しました。手持ちのSDにFreeBSD13を書き込んで持って来ました。
早速、ヒートシンクを組み立てます。サーバ用途なので、ファンレスを選びました。
こちらはアマゾンで購入のUSBイーサネット変換アダプタです。
こちらは別プロジェクト用のAitendoで購入した480x320のTFT液晶パネル、ユニバーサル基板と20ピンのSOP変換基板も到着しました。TFT液晶は現在作製中のFPGAウェーブテーブルシンセのパラメータ設定器に使う予定です。SPI接続でRGB666色出せます。
SOP変換基板に丸ピンを半田付けしました。LV245を実装して、USB−パラレル変換の下の赤枠のDIPのHCT245と交換する予定です。USB−パラレル変換が電源オフ時にTK80側から信号が来ても、中途半端に電源が入らないようにします。SOPのLV245はマルツに発注済みです。
ラズベリーパイ4にアパートで書き込んできたFreeBSD13のSDを入れてブートさせてみましたが、残念ながらブートしませんでした。赤枠のブートローダのバージョンが2020/3/19版で低く、未対応でした。
10月11日
アパート作業です。ラズベリーパイOSを使って、システムごと、ブートローダもバージョンアップすると、2021/4/29版になり、FreeBSD13がブートしました。USBイーサアダプタのue0も認識していることを確認しました。gennet0は内蔵イーサです。
10月12日
アパート作業です。ウェーブテーブルシンセの続きです。以前に途中経過のロジック使用量を出した時に、追加した信号線を外部に出すのを忘れていました。忘れないようにやり方を書いておきます。ブロックデザイン内で外部に繋がる信号線を追加/削除した場合はソースペインでBDを右クリックしてラッパを生成する時に、”Copy generation wrapper to allow user edits”の方を選びます。これでラッパが上書きされ、ブロックデザインとラッパが同期します。
ブロックデザインを少し変更しました。MC80バスのラッチ部とDDS部を分離しました。赤枠が1チャンネル分のDDSとRep_Dma、FIFOとデルタシグマ出力です。この部分をHLSシンセに変更すれば目的の機能になります。また、ベロシティの制御に使うXADCとグルーロジックを追加しました。
合成、インプリ後のデバイス図です。
スライスの使用容量は12.4%です。
10月13日
アパート作業です。サーバ用のラズベリーパイの続きです。ローダ機能によりUSBブートも可能とのことで、普通の8GのUSBメモリにFreeBSD13を入れて確認したところ、問題無くブートしました。一応、ラズベリーパイOSでブート順をUSB優先にしておきました。USB接続のSDDにシステム全体を入れれば、/varなどのテンポラリのパーティションもそのままで問題なさそうです。
10月16日
マルツに頼んでおいたLV245と不足していた2.5mmのジャックが到着しました。
LV245は先週作製しておいた、SOP変換に実装して、USBーパラレル変換機のHCT245と交換しました。
動作良好です。MC80バス側の入力ポートに信号が入っても、中途半端に電源が入らなくなりました。バススイッチの3.5mmジャックは2.5mmに交換しました。
こちらはアマゾンで購入のI2CのPWMとGPIO基板です。PWMに接続する連続回転のサーボモータもいっしょに購入しました。自宅サーバをラズベリーパイ4にすると、ラズベリーパイ2が余ってしまうので、ネットワーク接続のIOT用に購入しました。ラズベリーパイのFreeBSDはI2Cを有効にするだけで使えるようになるはずです。ラジコンのサーボを停止状態にするには1.5mmSecの幅のパルスを出し続ければ良いのですが、省電力のためには所定の位置まで回転後に電源を切るか脱力したいです。これはPWMボードが動作後に実験して確認します。
10月19日
アパート作業です。アマゾンで購入したI2CのGPIO基板の動作確認をラズベリーパイ2で行います。FreeBSD側のI2Cコントローラはiic0が1つ出てくるのが正解です。ボードのコントローラはmcp23017で、i2cコマンドでスキャンするとアドレス20が出てきます。
早速、ここのページを参考にポートAを出力、ポートBを入力に初期化し、ポートAに55を出力、ポートBから値を入力するプログラムを作成しました。入力はプルアップなので、何もしなければFFが読み出され、端子をGNDとショートすれば値が変わります。ポートAはテスタで確認し、動作良好です。
10月19日
アパート作業です。アマゾンで購入したI2CのPWM基板の動作確認をラズベリーパイ2で行います。i2cコマンドでスキャンすると、データシートの通りアドレス40が出てきます。ここにPIC用のサンプルコードがあるので参考にします。先日のmcp23017用のプログラムに参考ページの初期部をマージしてプログラムを作成しました。予めパルス幅が制御できることをアナログディスカバリで確認した後、実際に連続回転サーボモータを接続して動作確認しました。幅1.5mSecを中心にして、正転、逆転の回転数が制御できることを確認しました。