前回製作したBlue Pillディレイと接続して、5個までのエフェクトクトパラメーターを記憶、呼び出しできるプログラムコントローラーを作りました。
機能
・5プログラムチェンジ(2~5可変)
・タップテンポ設定(オマケ)
今回はBlue Pillマイコンボードとスイッチ、LED+α程度の簡単な回路です。小型の1590Aのケースに作り込むのがちょっとしんどいかもしれませんが、近年の高密度自作エフェクターに比べればまだ楽な方だと思います。
パーツレイアウト
Blue Pill ディレイと同じようにピンソケットで基板とBlue Pillを接続する2枚重ね構造です。
片面基板で作りました。LEDとタクトスイッチはパターン面にハンダ付けします。
秋月にあった基板用ネジ端子をPCB-54L(左用)とPCB-54R(右用)を使ってケースに固定しました。
ファームウェア
https://drive.google.com/open?id=1eFTMash2MlLW_PHGQXClt5JZJXUdhGoA
マイコン間の通信
Blue Pillのシリアル通信機能(UART)を使ってエフェクターをコントロールします。プログラムコントローラーはコマンドメッセージを送信するだけで、エフェクトパラメータの記憶や読み出しは各エフェクター側で行われます。
コントロールのホールド
プログラムコントローラーを使ってエフェクトパラメーターをチェンジ(プログラムチェンジ)すると、エフェクター側の全てのボリュームとトグルスイッチのスキャンを一時停止しホールド状態にしなければなりません。これはアナログ風コントロールの宿命的な問題です。外部から設定されたエフェクトパラメーターとボリューム/スイッチの状態を連動させるには、モーターなどを使って機械的に動かすしか方法はありませんが、そんなことは出来ないのでホールド状態にして一時的に切り離すしかありません。ホールド状態から復帰するには、ボリュームを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均で売っているミニステレオケーブルが細くて良いです。
機能
・5プログラムチェンジ(2~5可変)
・タップテンポ設定(オマケ)
今回はBlue Pillマイコンボードとスイッチ、LED+α程度の簡単な回路です。小型の1590Aのケースに作り込むのがちょっとしんどいかもしれませんが、近年の高密度自作エフェクターに比べればまだ楽な方だと思います。
パーツレイアウト
片面基板で作りました。LEDとタクトスイッチはパターン面にハンダ付けします。
秋月にあった基板用ネジ端子をPCB-54L(左用)とPCB-54R(右用)を使ってケースに固定しました。
基板用ネジ端子とぶつかるのでピンヘッダは片側20ピン、もう片側が16ピンにしてハンダ付けします。ピンソケットも20ピン用と16ピン用を用意します。
タクトスイッチはシャフトの少し長め(6mm)のものを使います。フットスイッチはモーメンタリー(押している時だけオン)タイプです。
テスト段階ではUSBシリアルモジュールを使って通信していたのですが、通信の度に凄いノイズが出て、とてもE.ギターアンプに繋げられるようなものではありませんでした。「これは失敗かな?」と思っていたのですが、Blue Pill同士の通信はとても静かで、通信ノイズはほとんど聞こえません。
回路図
テスト段階では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程度の電解コンデンサを強引に直付けする等で対処してください。
プリント基板
電源のデカップリングコンデンサと逆電圧保護ダイオードは付けられませんでした。SMDにすれば乗せられそうですけど、スルーホールではこれ以上は無理っぽいです。今回は音声信号は扱わないのでデカップリングは無しでも大丈夫でしょう。ウチのパワーサプライでは特に不安定になるようなことはありませんでしたが、他の条件ではどうなるかは分かりません。もし動作が不安定になるようなら、C7,C8の容量を増やすとか、DCジャックに100uF程度の電解コンデンサを強引に直付けする等で対処してください。
プリント基板
https://drive.google.com/open?id=1o0Qq9ZZ3fs8eyN08QsP-L5Pu7hwZa2af
パネルレイアウト
https://drive.google.com/open?id=1mLZhIT5MdK2uzDOD2Uke3YJ4gkxz-Jew
パネルレイアウト
https://drive.google.com/open?id=1mLZhIT5MdK2uzDOD2Uke3YJ4gkxz-Jew
プログラムコントローラー 操作マニュアル
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均で売っているミニステレオケーブルが細くて良いです。
コメント
コメントを投稿