電音の歩み

電子楽器を中心とし、ものづくり関係も含めて紹介していきます。

Synth Scope その3 内部構成について

Synth Scopeは、シンセの波形を手軽に表示するモジュールです。

測定器としての精度は重要でないので(と考えて)、マイコンのソフトで実現しています。

 

マイコンは、AliExpressで安価に買えるSTM32搭載のMaple互換(模倣)ボードであるBluePillを使っています。このボードは日本語の情報も豊富で、ブートローダを入れるとArduinoIDEで開発できます。STM32duinoと呼ばれています。

 

Displayは。0.96"の128*64画素のOLEDを使います。これもAliで購入。I2Cのは遅いのでSPIを選びました。 入荷に時間がかかったので複数ショップから購入したところ、わずかに形状・寸法が異なるものが何種類もありました。要注意です。SSD1306のライブラリ<Adafruit_SSD1306.h>が使えますので便利です。

 

信号入力は、AC入力はごく簡単なLPFを通して単電源OPアンプで受け、DC側もOPアンプで受け別のアナログ入力につないでいます。A/Dが豊富にあるのでアナログでの切り替えが省略できす。ラインレベル(1Vpp)とシンセレベル(10Vpp)の切り替えは、ソフトでゲインをかけて切り替えます。

EXTtrig入力はバッファリングも省略しています。

 

また、ミニジャックは、ステレオ/モノラルの両ケーブルを繋げるようにステレオジャックを使います。

 

mode SWは、オーデオ(lineレベル)、オーデオ(シンセレベル)、LFO(シンセレベル)、EG(シンセレベル)の4モードを切り替えます。

Trig SWは、Trigなし、内部Trig、外部Trigを切り替えます。

 

ソフトウエア構成は、Timer4で 70.312KHz ( 72MHz/1024 )のタイマー割り込みを構成し、

この中でオーディオ信号を128byte表示バッファへ取り込んでいます。サンプリングレートの変換やアンチエイリアシング、トリガ処理はタイマー割り込み内で行います。

 

OLEDディスプレイへの表示はAdafruitのライブラリを使います。

バッファをSSD1306へ転送するのに7msほどかかりますので、表示ループは10msで回します。

ここでの注意点は、analogRead関数の実行中にタイマー割り込みがかかり、その中で別のanalogReadをすると、analogReadがフリーズするようなので、排他制御を行っています。

 

低速が重要なLFOモードとEGモードは、10msのループ内でサンプリングしています。

 

またデモ用として、回路図の左上のコネクタにVRとSWを接続した小基板をつなぐと、ソフト的に発生する正弦波と、SWでゲートを与えて発生するEG波形を表示することができるので、

信号源につながなくても、SynthScopeの動作のデモが可能です。

 

f:id:hhh_yama:20200630214828p:plain