TK80/BSの

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

その36

FPAGシンセ、パラメータ設定器の作製
2019年
3月9日
ヤフーのポイントの期限が来るので、ヤフオクで購入したトグルスイッチです。中点付き6Pです。8chアナログ/デジタルシンセのVCAの改造に使う予定です。


2個のレバーの動きが悪いので、分解して組み立て直しました。直りました。


3月10日
先週からの続きです。パラメータ設定器の表示部の基本部分がほぼ完成ました。ロータリスイッチの設定、ロータリエンコーダとトグルスイッチのパラメータを7セグLEDLCDに表示するメインループ部です。まだ、表示のみで、FPGAにデータ送信はしていません。


ローチパッド上のMSP430の電源はデバッガ側と切り離したため、デバッガ側の電源が入っていないと、常時リセットが掛かって起動しません。いちいちボード上のショートバーを設定するのは面倒なので、デバッガ信号のSBW_TSTSBW_RSTを上記の6Pスイッチで切り離なせるようにしました。これでデバッガ側の電源入っていなくても起動するようになりました。


久しぶりのFPGAシンセの本体です。ゲート用信号を追加したLFOの動作確認を行う予定でしたが、波形変換ロジックの動作か未確認だったため、先にこれを確認します。


波形変換ロジックはDDS−DCOが出力した512倍クロックから、ノコギリ波とPW、基本周波数の1/2と2倍のデューティ50%、または25%の矩形波を生成します。初めにデューティ50%です。左下がPW波、上が2倍矩形波です。右下がPW波、上が1/2倍矩形波です。また、PW波は閾値によってーティが変わることを確認しました。


続いて、ーティ25%す。左下がPW波、上が2倍矩形波です。右下がPW波、上が1/2倍の矩形波です。


続いてノコギリ波とーティ25%の矩形波です。



3月15日
会社のPCにはCCS のVer.8.3が入っています。パラメータ設定器のプログラムをビルドしてみました。リンク時に割り込みハンドラ内に解決できないシンボルがあ るというエラーが出ます。プログラムを作っていると、良く遭遇するエラーですが、エラーのシンボル名が”__int128::*”と表示されていて、コード内にこのシンボルは無く、エラーを探すこともできないため、非常に困りました。


コードを少しづつ削って原因のシンボルを見つけました。問題のシンボルは割り込みハンドラの”Mod”でした。メインプログラムで”Mode”と宣言されていて、割り込みハンドラの上部で間違えてextern Mod”となっていました。


これを修正したところ、正常にビルドできました。


因みに、上部で”extern Mode”とし、プログラム内で”Mod”を使った時はMod”がエラー表示されます。


3月16日
上記と同じプロジェクトをガレージのCCSのVer.7.3でビルドすると、普通に”Mod”がエラーと表示されます。Ver.8.3の不具合のようです。


3月17日
ロータリエンコーダのプッシュボタンの2重押しで、チャンネルのパラメータに付いている8文字長の音色名エディットするプログラムを作成します。6個あるロータリエンコーダの内、右側のP5を押しながらP6を押すとエディットモードに入りP6を押しながらP5を押すとエディットモードを抜けます。エディット自体の操作もP5とP6のエンコーダを使います。P5でを選択し、P6で文字インクリメントデクリメントて選択する方法です。エディットは面倒で時間も掛かりますが、フルキーボードが無い時には、この方法しかありません。音色名は7セグLEDに表示するため、使用できる文字を0〜9アルファベットA〜Z、記号スペースに限定しました。この場合、文字コードが連続しないため、プログラム内で次に使える文字までスキップさせる必要があります。


土曜の午後と日曜の丸1日使って、音色名エディット動くようになりました(笑)。画像をクリックすると、64Mバイト動画ダウンロードします。7セグが明るいので見にくいですが、LCDの2行目にも音色名を表示しています。操作感はエンコーダのクリックが軽いため、プッシュボタンの2重押し時に1クリック分動いてしまうことがあり、いまいちです。使用しているエンコーダは1回転あたり、50パルスですが、半分の25パルスの方が良かったです。また、変更対象の桁マーカに’’を使っていますが、文字としても’’が入力できるので、分別できません。



3月23日
パラメータ設定器の続きです。ユーザインターフェースの細かい不具合を修正し、RAM上の8ch分のパラメータ(512バイト)をフラッシュセーブするプログラム、逆にフラッシュからRAMにリストアするプログラムを追加しました。また、電源投入時にP1のロータリエンコーダが押されていた場合はフラッシュから8ch分のパラメータをRAMにコピーするのをスキップできるようにしました。これで、RAM初期化された値を残すか、フラッシュにセーブした値を上書きするか選択できるようになりました。


3月24日
パラメータ設定器からSPIFPGAにパラメータを送信するプログラムを追加します。電源投入時は8ch分の8ファンクションのパラメータ(8*8*7)=448バイト)を送信し、その後、パラメータが変更されるたびにチャンネルファンクションで設定されるパラメータ(P7〜P1)の7バイトを送信します。実際に送信するデータは先頭にプリアンブルチャンネル/ファンクションコード、後ろにポストアンブルの3バイトを足した合計10バイトです。その後、SPIとは別信号のラッチパルスを送って、FPGA内のSPIロジックからパラメータ記憶用のレジスタバンクに書き込み指示します。下はSPI信号ラッチパルスの波形です。HCT14を介して接続しているので信号は反転しています。


SPIのクロックはパラメータ設定器とFPGAシンセ間をケーブル接続するのて、LCDのSPIより落として、約200KHzに設定しました。10バイト+ラッチパルスを約550uSecで送信します。


後ろ側のラッチパルス部分を拡大してみます。ポストアンブルは0x5aです。ラッチパルスはSPIとは非同期のGPOでソフトウェアでタイミングとって出力します。


現在、FPGA本体側は2chのシンセサイザが実装されています。パラメータはXADC(FPGA内の12ビットADC)から入力した4個のアナログ値をボード上のスライドスイッチプッシュボタンで振り分けています。パラメータ設定器から設定できるように準備します。


XADCは12ビットですがノイズ分の2ビットを落として10ビットで使っています。パラメータ設定器からのデータは8ビットなので、10ビットで使用しているXADCのパラメータを8ビット縮小して動作確認をしました。ただ、この2chシンセサイザは去年の11月に開催されたアナログシンセビルダーズサミットのデモ用の”とあえず動く版”で設定範囲などが最適になっていません。たとえば、EGのリリースがアタックに比べてかなり短いなど、色々と問題があります。パラメータを8ビットに修正した、このロジックを元にして設定範囲を調整します。その後、パラメータ設定器を接続して、パラメータ設定器から設定できるようにします。最終的に8ch化し、ロジックに余裕があればチャンネルあたり、DCOLFO2個実装します。設定入力として使用しなくなったXADCはUSB−MIDIパラレル変換器から出力されるベロシティ入力する予定です。ここのブロック図を修正しました。



3月31日
パラメータをすべて10ビットから8ビットへ変更したので、EGの調整範囲の確認を行います。ADSR=0、0、FF、0です。この時エンベロープはゲート信号と同じ矩形になるはずでが、アタックが長くサスティーンレベル低いです。


ADSR=0、0、FF、FFです。リリースを最大にしても50mSecくらいしか変化していません。リリースの調整範囲が狭いです。


ADSR=0、0、0、0です。本来は細い矩形になるはずです。アタックが短くなれば改善できそうです。


ADSR=0、FF、0、0です。こちらも、アタックが短くなれば改善できます。


ADSR=FF、0、FF、0です。修正点はアタックの最小時に短く、リリースの調整範囲を大きくして、サスティーンレベルの最大値を合わせます。パラメータは8ビットの整数ですが、EGの各パラメータは整数部12ビット固定小数点部12ビットです。丁度良い範囲に再調整する必要があります。


VivadoのHLSに戻ってEGを確認します。ADSR=4.0、4.0、0.999、4.0です。まずまずです。


ADSR=1.1、4.0、0.999、4.0です。アタックは良いようです。


リリースを調整して確認します。1.1にして長くしてみます。ADSR=4.0、4.0、0.999、1.1です。


さらに1.02で、ADSR=4.0、4.0、0.999、1.02です。


さらに1.005ADSR=4.0、4.0、0.999、1.005です。


ゲート信号と合わせて、グラフ作成してみます。ADSR=1.2、1.2、0.5、1.2です。アタックとリリースが同じ1.2ですが、6倍くらいの差があります。元々、アタック、ディケイに比べて、リリース短いことが分かりました。これはパラメータ値を8ビットに変更したのとは無関係な不具合です。


以前にEGの動作確認を行ったときのグラフです。赤枠内を比較すると曲線が違います、以前は正しく動作していたようなので、デグレードしてしまったようです。







back