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

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程度で入手できます。

 回路図 


回路はPT2399ディレイのようにアナログ回路で原音とデジタルエフェクトをミックスする構成になっています。そもそもBlue Pillマイコンは汎用のプロセッサで、信号処理に特化したDSPではありません。搭載されているADCは解像度が12ビットしなかく、流石に原音までサンプリングして出力するのは無理があります。そこでエフェクト音だけデジタル処理にして、アナログ回路で原音とミックスすることで性能不足を補っています。

リバースディレイはPT2399と差別化するという狙いで付けましたが、最長ディレイタイムが400ms程度では短すぎるかもしれません。タップテンポやメモリー機能なども付けられますが、それは今後の課題になります。

 パーツレイアウト 


※トグルスイッチはON-ON-ON(3ポジション)タイプを使います。ショートハンドルタイプはギャレットオーディオにあります。ハンドルが長いタイプは秋月に置いてあります。

 プリント基板(pdf) 

 ファームウェア(プログラムファイル.hex) 

https://drive.google.com/open?id=1Ly3im-i2B6MXuq2SMYLcoPFA1G2U7_xy



ピンヘッダの取り付け方向に注意します。ピンヘッダはMCU側に取り付けます。注)こちら側にピンヘッダを付けてしまうと、もうブレッドボードには刺さらなくなります(ソケットを介せば刺さります)。


基板からはみ出ているピンはケースに接触するので短くカットします。


片面基板で作れます。Blue Pillボードとは20Pピンソケット x2で接続します。下図の様に使わないピンを抜いてからハンダ付けします。


ピンソケットは秋月、マルツなどで購入できます。


基板は2枚重ねになります。Blue Pillボードの下にも電子パーツが配置されるので、コンデンサは出来るだけ高さの低いタイプを選んで下さい。フィルムコンデンサは低背のボックス型、電解コンデンサは高さ5mmのニチコンのMWシリーズと小型の高分子ポリマーコンデンサを使いました。電源周りに使われているデカップリングコンデンサは高分子ポリマーを使って下さい。

 サンプリングレート周波数の確認 

マイコンボードのPC13ピンはサンプリングレートと同じ周波数(約40KHz)でオンオフしています。PC13ピンはボード上のユーザーLEDに繋がっているのでユーザーLEDが点灯している状態が正常に動作している状態になります。40kHzですから点滅を目で確認することはできません。もしオシロスコープまたは周波数カウンターがあればPC13ピンの周波数を確認してみてください。

 内蔵ADCの性能 

汎用ADCの限界というかS/Nは余り良くありません。S/Nを稼ぐためにクリップしない程度で出来るだけ高いレベルの信号を入れてください。小さな入力信号で使うとS/Nが極端に悪くなります。いわゆる「LSBの低い所で使うのは良くない」というヤツです。例えば古いデジタルエフェクターって必ず入力にゲインコントロールが付いていましたよね?(知らない?orz)。今のオーディオコーデックはメチャクチャS/Nが良いので、もう入力ゲインコントロールとかは必要なくなってしまいましたけど、S/Nの良くないマシンは入力レベルに気を使わないといけません。クリーンサウンドで使う際は、E.ギターを直接入力するのは良くありません。ブースターなどで信号レベルを上げてから入力するのがベターです。コンプレッサー/リミッターを掛ければ更に良いです。

 ディレイタイムとサンプリングレート 

メモリとディレイタイムの関係はサンプリングレートが20kHzで、1サンプルのデータサイズが2バイト(16ビット)とすると

17000バイト ÷ 2バイト ÷ 20000Hz = 0.425(秒)

ディレイタイムが425msと短かいのは内蔵SRAMが20kバイトしかない為です。約17kバイトをディレイメモリとして使っています。モードによってディレイタイムが微妙に異なるのはプログラムによってメモリの使用量が異なる所為で、できるだけディレイタイムを稼ぐために細かく調節した結果です。

サンプリングレートが20kHzなので周波数特性は10kHzですが、LPFのカットオフを少し低目の7kHz(-6db)にしてるので少し籠った感があります。最初は10kHzでアクティブフィルタを入れていたのですが、何度も作り直しているウチに面倒臭くなってきて簡単なRCフィルタへ変更しました。パッシブのLPFだけでもそんなに悪くなかったので、これでヨシとしました。

 サブサンプリングとディレイタイム 

ADCのサンプリングレートは40kHzですがエフェクトプログムはダウンサンプリングして20kHzで処理しています。こうゆう手法を海外のフォーラムではサブサンプリングと呼んでいたので、ここでもそう呼ぶことにします。ノーマルエフェクトとリバースディレイは1/2サブサンプリングで20kHz、アナログディレイは1/4サブサンプリングで10kHzで処理しています。サブサンプリングすると周波数特性が落ちますがディレイタイムが伸びるのでアナログディレイモードではディレイタイムが800msになります。

 オーバーサンプリング 

ADCのサンプリングレートは40kHzですが、ADCのS/Nを稼ぐためにオーバークロックして50倍オーバーサンプリングを行っています。実際のADCサンプリングレートは2MHzです。CubeMXの設定でADC駆動用タイマーが2MHzになっているのが分かると思います。

残念なことにSTM32F103のADCはサンプリングレートの上限が1MHzまでしかありません。そこで無理矢理ADCクロックを上げてADCサンプリングレートを引き上げています。これは完全なオーバースペックなので、CubeMXでコードを生成する度に警告が出ます。元が12ビットのADCですから、そこまでやらないとノイズが凄いです。それでもPT2399と同程度のS/Nしかありませんが。

 疑似DAC 

疑似DACはキャリアがシステムクロック72MHz÷256=281.25kHzなので思ったほど悪い音ではありません。出力をオシロスコープで見ると僅かに281kHzのノイズが出ていますが、人間の耳には聞こえないので大丈夫でしょう。

 ソースコード 

今回のソースコードです。これはプログラミングしない人は要らないものです。開発環境はSTM32CubeIDEです。
https://drive.google.com/open?id=1lJ0OPfYAnAXqBuVzT6HzhuQy4UOJ0Wv1

次はBlue Pillでディレイ・エフェクトの外部コントローラーを作る予定です。

コメント

このブログの人気の投稿

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

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

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(接続)ボタンを押す直前にマイコンボードのリセットするという約束があるので