スキップしてメイン コンテンツに移動

Blue Pill FX Projects~プログラムコントローラー~

前回製作したBlue Pillディレイと接続して、5個までのエフェクトクトパラメーターを記憶、呼び出しできるプログラムコントローラーを作りました。



 機能 

・5プログラムチェンジ(2~5可変)
・タップテンポ設定(オマケ)

今回はBlue Pillマイコンボードとスイッチ、LED+α程度の簡単な回路です。小型の1590Aのケースに作り込むのがちょっとしんどいかもしれませんが、近年の高密度自作エフェクターに比べればまだ楽な方だと思います。

 パーツレイアウト 



Blue Pill ディレイと同じようにピンソケットで基板とBlue Pillを接続する2枚重ね構造です。



片面基板で作りました。LEDとタクトスイッチはパターン面にハンダ付けします。



秋月にあった基板用ネジ端子をPCB-54L(左用)とPCB-54R(右用)を使ってケースに固定しました。





基板用ネジ端子とぶつかるのでピンヘッダは片側20ピン、もう片側が16ピンにしてハンダ付けします。ピンソケットも20ピン用と16ピン用を用意します。



タクトスイッチはシャフトの少し長め(6mm)のものを使います。フットスイッチはモーメンタリー(押している時だけオン)タイプです。


テスト段階ではUSBシリアルモジュールを使って通信していたのですが、通信の度に凄いノイズが出て、とてもE.ギターアンプに繋げられるようなものではありませんでした。「これは失敗かな?」と思っていたのですが、Blue Pill同士の通信はとても静かで、通信ノイズはほとんど聞こえません。

 回路図 


 LED抵抗の調節 

LED抵抗(R1~5は)とりあえず2.2kとしましたが、これは全て赤色のLEDを使用した時の抵抗値です。使用するLEDによって輝度が変わるので、抵抗値は各自で調節してください。1個づつ色違いにするなら同じ抵抗値では輝度は揃いません。ハンダ付けの前にブレボなどで1個づつLED抵抗値を調節します。
使用したLEDは中国サイトから購入したものですが、赤色LEDは2.2kでも輝度は十分でしたが、緑色は220Ωまで下げないと赤色と同じくらいの輝度にはなりませんでした。お陰で全灯時はLEDだけで電流が10mAになってしまいました。

電源のデカップリングコンデンサと逆電圧保護ダイオードは付けられませんでした。SMDにすれば乗せられそうですけど、スルーホールではこれ以上は無理っぽいです。今回は音声信号は扱わないのでデカップリングは無しでも大丈夫でしょう。ウチのパワーサプライでは特に不安定になるようなことはありませんでしたが、他の条件ではどうなるかは分かりません。もし動作が不安定になるようなら、C7,C8の容量を増やすとか、DCジャックに100uF程度の電解コンデンサを強引に直付けする等で対処してください。

プリント基板

プログラムコントローラー 操作マニュアル
https://drive.google.com/open?id=1ZhoTjOYnTuW6nUb1YCuBo65iw7n2X-5o

 ファームウェア 

https://drive.google.com/open?id=1eFTMash2MlLW_PHGQXClt5JZJXUdhGoA

 マイコン間の通信 

Blue Pillのシリアル通信機能(UART)を使ってエフェクターをコントロールします。プログラムコントローラーはコマンドメッセージを送信するだけで、エフェクトパラメータの記憶や読み出しは各エフェクター側で行われます。

通信速度はは9600bpsです。ちょっと遅めの通信速度ですが、速くする必要性が無いならできる限り遅くした方が対ノイズ性が良くなるのでは?という判断です。電子楽器のシリアル通信と言えばMIDIですが、今回の通信はMIDIとは全然違うモノなのでMIDI機器との接続は出来ません。MIDIの通信速度は31.25kHzですから、1/3ほどの通信速度しかありませんが、1回で送信するデータは数バイトくらいしかなく、MIDIのように大量にメッセージを送信することはないので、通信速度が遅くても大丈夫だと思います。

UART通信でバイナリデータを扱って初めて気が付いたんですが、UART通信ってバイナリデータを送れないんですねw。私はprintfデバッグなどでUART通信を日常的に使っていますが、漢字データの文字化けも滅多にないので、てっきりバイナリデータが送れるものと思い込んでいました。実際は8ビット目が上手く受信できずASCII文字コードの数値範囲0~127(7ビット)までしか送れません。ですから送信データの8ビット目は使わないことにして、7ビットでデータやコマンドを構成しています。7ビットに収まらないようなデータは複数に分割して送信します。

 コントロールのホールド 

プログラムコントローラーを使ってエフェクトパラメーターをチェンジ(プログラムチェンジ)すると、エフェクター側の全てのボリュームとトグルスイッチのスキャンを一時停止しホールド状態にしなければなりません。これはアナログ風コントロールの宿命的な問題です。外部から設定されたエフェクトパラメーターとボリューム/スイッチの状態を連動させるには、モーターなどを使って機械的に動かすしか方法はありませんが、そんなことは出来ないのでホールド状態にして一時的に切り離すしかありません。ホールド状態から復帰するには、ボリュームを10%以上回すか、スイッチを動かしてホールド状態を解除する必要があります。
アナログライクに操作できる反面、こういった方法では記憶したパラメータと実際のボリュームの位置が一致しないので、記憶したデータ(数値)を確認することが出来ないという問題が出てきます。プログラム次第ではデータを外へ吐き出すこともできますが、ディスプレイが無ければデータを確認することはできません。一々全部のボリュームを回してホールド状態から復帰させるのが面倒なので、簡単な対策としてホールド状態を一度に解除するリリースボタンを付けました。これで操作性は少しは良くなります。
現時点ではタップテンポはオマケです。Blue Pillディレイのディレイタイムが約400ms
しかないので、タップテンポを使うまでもない気がします。もう少しディレイタイムが長く取れるディレイを作ったら役に立ちそうです。

 ラッチアップ対策 

通信テストをしている際にBlue Pillボードを壊すミスをしてしまいました。半導体(の一部)には「電源電圧より高い入力電圧を掛けてはいけない(たとえ耐圧内であっても)」というルールがあります。コレを守らないと一部の半導体がサイリスタ化して電流が流れ続け、熱破壊してしまうのがラッチアップという現象だそうです。詳しい原理についてはネットで検索してください。ラッチアップで検索すると大変たくさん解説ページが見つかるので、とてもポピュラーな現象(事故)のようです。

UART通信線には常にプルアップ電圧3.3Vが掛かっています。例えばディレイエフェクターの電源が入っていて、後からプログラムコントローラーの電源を入れると瞬間的に「電源電圧より高い入力電圧が掛かってしまう」状態になります。

対策としてはMIDIのようにアイソレーション回路を入れれば完璧きなのでしょうけど、そんなスペースは取れないので、MOS-FETでUART信号線を遮断することにしました。自作エフェクターではお馴染みの2N7000(BS170でもOK)をスイッチとして使いました。電源投入後にMCUが時間差でMOS-FETをオンにしてUART信号線が後から接続されることを保証します。

 接続 

Blue Pillディレイにも通信用のジャックを取り付けます。ラッチアップ回避のためにコントロールされる側のエフェクターにも信号遮断用のMOS-FETを1個追加する必要があります。Blue Pillディレイとは3.5mmミニフォーンケーブルで接続します。100均で売っているミニステレオケーブルが細くて良いです。

コメント

このブログの人気の投稿

中国製ゲルマニウムトランジスタ

Aliexpressで購入したゲルマニウムトランジスタです。AC128のセカンドソース(らしきものw)です。最近の安い中華ゲルマエフェクターで使われているようです。10個で送料込み¥1000くらいでした。そもそもCANタイプのトランジスタは現行品でも高いので1個¥100ならお買い得でしょうか。 テスターでhfeを測定した結果 20,36,34,37,40,67,149,190,214,216, かなりのバラつき具合です。hfeが高いのも欲しかったので丁度良かったのですが・・・ 20とかは動くんでしょうか?

Blue Pill FX Projects~デジタルディレイ~

■$2の格安マイコンボードBlue Pill STM32を使って、E.ギター用のデジタルディレイを作りました。 モノラル-シングルエフェクトです。ノーマルディレイ、アナログディレイ、リバースディレイのどれか1つをトグルスイッチで切り替えられます。 ・最長ディレイタイム        ・ノーマルモード : 425ms (周波数特性:7kHz)       ・アナログモード : 800ms (周波数特性:1.5kHz)       ・リバースモード : 420ms (周波数特性:7kHz) ・消費電力 DC9V 55mA 音は普通のディレイです。ノーマルモードの周波数特性が7kHz(-6db)なのでBBDやPT2399よりはクリアな音です。S/NはPT2399ディレイと同じくらいです。 このデジタルエフェクターに使用した小型のマイコンボードです。海外のホビーマイコンユーザーの間でBlue Pill(青い錠剤)と呼ばれているものです。大きさ23mm x 55mmの基板でエフェクターケース(1590B/TD6-11-3)に余裕で入ります。Aliexpressなら$2(+送料)で手に入ります。日本国内ではAmazonやaitendoで取り扱いがあります。米国ではebayで見つかります。"STM32F103C8T6"で検索します。  マイコンボード のスペック   ■STMicroelectronics製STM32F103C8T6(Cortex-M3 32ビットARMマイコン) ■動作クロック 72MHz ■プログラムFlash 64k ■SRAM 20k ■ADC 12ビット 2系統 ■DACなし このMCUにはDACが内蔵されていません。そこでDual PWM DACという方法でアナログ信号を出力しています。疑似DACといったところでしょうか。2本の抵抗と1個のコンデンサでデジタル信号をアナログ信号へ変換する面白い回路です。 あと、このマイコンボードの他にプログラムを書き込む為のプログラムライターが必要になりますが、詳しくは別の記事で書いているので参照してください。プログラムライターもAliexpressでなら$2程度で入手できます。

Blue Pillマイコンボードへプログラムを書き込む (1)

 STM32CubeProgremmer  Blue Pillマイコンボードへブログラムを書き込むためには、まず書き込み用のソフトウェアが必要です。今回はSTマイクロ社の純正ソフトウェアSTM32CubeProgremmerを使います。このソフトウェアはSTマイクロ社のサイトからダウンロードできますが、ダウンロードする前にユーザー登録が必要になります。登録は無料です。利用についても全く無料ですが、ユーザー登録するとその後にちょこちょこと広告メールが送られてくるようになります。それが嫌な方は各自で対処してください。本音をいえばこの程度のソフトウェアはユーザー登録なしで公開して欲しいです。ちなみにフリーウェアではstm32flashというソフトウェアがあるのですが、今のところwin64版しかありません。 STM32CubeProgremmerのインストールは指示に従って行えば特に問題はないと思います。  プログラムの書き込む手順  Blue Pillマイコンボードのジャンパー設定をプログラム書き込みモードへ変更します。 USBシリアルモジュールとBlue Pillマイコンボードをケーブルで配線して、USBシリアルモジュールをパソコンと接続します。 STM32CubeProgrammerを起動してUARTとPortを設定します。 ・Prot番号(COM番号)はパソコンが自動で割り振るので上のスクショと同じ番号にはならないと思います。 ・パソコンでCOMポートを複数使用している場合は、ドロップダウンリストでPort番号を変更してください。 ・Portに"No COM...(No COM Detected)"と表示される場合は、USBシリアルモジュールがパソコンから認識されていないので、ドライバをインストールしてください。 ※充電専用のUSBケーブルは使用できません。100均で買ったUSBケーブルを使っている方は要注意です。 次にBlue Pillマイコンボードのリセットボタンを押してから、STM32CubeProgrammerのConnectボタンを押します。UART接続ではConnect(接続)ボタンを押す直前にマイコンボードのリセットするという約束があるので