オーディオ/ミニアンプ0.3

Bluetooth入力もある小型スピーカー用の簡易ミキシングアンプです。入力は3系統あり、それぞれにレベルとバランスを調整可能で、レベルメータも付いています。パネルにはメインボリュームしか付いておらず、電源も自動オン/オフする、存在を意識しないですむ小物に仕上げました。

いわゆる「デジタルアンプ」ですが、DACを使わず直接スピーカをデジタル駆動しています。入力がBluetoothの場合、アナログ回路が介在しない真のフルデジタルアンプとなります。大部分をマイクロコントローラESP32の機能で実現できており、少ない汎用部品を使い製作も容易です。材料費は約6500円ぐらい、LTspiceやEagle、純正IDEなど、無料の開発ツールを利用して設計、製作しました。

説明書

機能

  • ライン・ヘッドフォン入力×2+Bluetooth×1、スピーカ出力は3W+3W級
  • 入力は全部ミキシング、レベル・バランス調整が可能、つまりミキサーです
  • 入力毎にピークホールド付きバーグラフ表示します
  • 操作はメインボリュームのみという潔さ
  • 電源操作不要、自動でスタンバイ&復帰、省電力設計
  • 部品数が少なく単純、調整が不要、製作しやすい
  • V0.2と外部仕様が同じですが、中身は全く違います

各部説明

<正面>
右側のつまみは、各種調整用の回転型のノブ
左側はレベルメータなどを表す自発光型のディスプレイです
スタンバイ時にはディスプレイは消灯します
上面の奥の緑色に光るのは電源ランプです
ノブを押し込むと、調整指示が出来ます
<背面>
下はスピーカー接続端子
左上はDCプラグ
右上にアナログ入力のミニジャック2つ(B,A)
電源スイッチはありません

仕様

使い方

ケーブル接続

 スピーカケーブルは、背面から見て、右側の赤黒を左用のスピーカに、左側の黒赤を右用のスピーカにつなげて下さい。BTL型なので黒同士は絶対ショートさせないでください。必要に応じて、入力側のケーブルを接続して下さい。
 最後に、AC-DCアダプタをコンセントにつなげない状態で、プラグをDCジャックに接続して下さい。

電源投入

 AC-DCアダプタをコンセントにつなげて下さい。2〜3秒で画面が表示されます。ボリューム位置は電源投入時には20%となりますので、A入力に信号があれば音が出るはずです。
 音がなくなってしばらくすると、自動的にスタンバイになり、画面表示が消えます。音声信号が入ると自動的にオン状態になりますので、特に操作はありません。つまみを回したり、ボタンを押したりしてもオンとなります。

スピーカ出力

入力信号があれば、スピーカは鳴ります。ボリューム操作は右のつまみを回してで行います。音量は”Vol”のゲージで示されます。また、下部にパーセントで数値表示されます。

入力信号はレベルメータ(棒グラフのような表示)にリアルタイムで表示されます。緑のレベル値の上の黄色い線はピーク値で、時間をかけてゆっくり降りてきますので、直近の最大レベルを確認する事ができます。横の黄色いゲージはレベル設定です。同様に、下のゲージはバランス設定を示します。系統の文字が暗くなっている場合は、無音が続いたので一時的に入力がカットされている事を表します。信号が入ると元に戻ります。

Bluetooth接続

基本的に、音源(スマートフォンやパソコン)側の操作で、小物側の設定操作などはありません。

スマートフォンやパソコンで、Bluetoothの設定を開いて下さい。しばらくすると未登録のデバイス「BTSP03」が出てくるので、追加登録して下さい。特に応答なく登録(ペアリング)が完了し、音が出るようになっているはずです。レベル調整はスマートフォンやパソコンのボリューム操作と連動します。

切断や再接続は、各スマートフォンやパソコンの操作方法をお調べ下さい。ペアリング情報は、電源が切れても残りますので、再ペアリングの必要はありません。

レベル/バランス調整

回転つまみ(ノブ)を押し込むとレベル/バランスのゲージの黄色い部分が1箇所だけ赤色に変化します。押すたびにその、場所が変わっていきます。その状態でつまみを回すと、そこの設定値を変更する事ができます。レベルは最大で+20[dB](10倍)から最小-20[dB](1/10倍)まで1[dB]単位で設定できます。中間位置が0[dB](1倍)です。最小から、さらに下げると-♾️[dB](カット)となります。バランスは最左位置で左200%右0%、中央位置で左100%右100%です。

初期値は、レベルはA入力が+6[dB](2倍)、B入力とBluetoothは0[dB]、バランスは全て0[%]です。これらの設定は電源切断で消えます。

電源切断

 特に操作はありません。3分間無音状態が続くと自動的にスタンバイ状態になります。スタンバイ時には表示が消えます。 手動でスタンバイにさせる事はできません。強制的に電源を切りたい場合は、DCプラグかAC-DCアダプタのコンセントを抜いて下さい。

設計図/設計書

この小物を再現するのに必要な、設計の結果情報です。

全体概要

ほぼマイクロコントローラ内の機能で実現します。Bluetooth入力は直接デジタルデータを受けられますが、ライン入力は内蔵/外付ADCでデジタル化します。ミキシングやボリューム調整は数値演算します。出力はPWMでスピーカを直接駆動するというのが大まかな流れです。

アナログ入力は、ADCでPCMデータに変換します。デジタル入力(Bluetooth/A2DP)は、マイクロコントローラの機能を利用して受信し、PCMデータを得ます。デジタル信号処理は、ミキシングとボリューム/バランス調整を行います。出力はPCMをPWM変調されたものを、電力スイッチングしてスピーカを駆動する事で、増幅された結果となります。

Bluetoothと、操作パネルにかかるコストを削減するために、マイクロコントローラとソフトウェアの力で実現するのが最良と考えました。ソフトウェアの変更は簡単なので、音声信号処理をいじったらどうなるか直ぐに耳で確認できるので、楽しいし学習/教育目的としても利用できます。通常は専用ICを採用するのでしょうが、それに惑わされず自作派には汎用部品で原理を理解するのも良いかと。

この小物の中で最も重要な部品であるマイクロコントローラは、Espressif Systems社のESP32を選択しました。Bluetooth機能を内蔵している事が一番の理由ですが、低コスト、入手性も良く、DIPタイプのモジュールなので、工作も楽ちんです。

ハードウェア

回路図

アナログA入力は、外付けのADCを使用しています。I2Sインターフェースのオーディオ用のデバイスを使っています。アナログB入力はマイクロコントローラ内蔵のADCを使うパターンで、前段にバンドパスフィルタ付きプリアンプ回路を付けています。

スピーカドライバは、FETによるフルブリッジ回路です。確実な動作を保証する目的で、ゲートドライバ回路を挟んでいます。これでFETの品種を気にする必要がなく(おおむね)、電源電圧を上げてのハイパワー化も可能です。

表示部は、マイクロコントローラのピン数の制約から、4線式のSPIで接続できるグラフィックLCDを使いました。回転つまみは抵抗ボリュームではなく、ロータリーエンコーダー式です。

回路図エディタeagle用のファイルです。下の部品表も入っていますが、ファイル形式はmacの表計算ソフトNumbersなのはご容赦下さい。それぞれにPDFが付いています。

部品表

入手しずらい部品は「ATM0177B3A」だと思われますが、グラフィックLCDは定番品という物がないので仕方ありません。しかし、同じサイズ・ドット数のZ180SN009かZ180SN1720が代替品として使えます。コンフィグを変更する必要はあります。

「PCM1808」も手に入れづらいかもしれません。I2S接続のADCなら使えるはずですので、丹念に探して下さい。

ESP32-DevkitCは、WROOM型でもWROVER型でも良いです。互換品のAE-ESP32-WROOM-32E-MINIでもいけます。ただ、シリアル接続のみとなりますので、別に変換ケーブルが必要になります。

実装

ユニバーサル基板で試作した時の様子です。実体配線図を作る時間はありませんでした、すいません。基本的には回路図から、実際の部品上で、どことどこを接続すれば良いか、判断できる方を想定していますので、細かい説明は省略させていただきます。

ソフトウェア

開発ツール、ライブラリ

PCでソフトウェア開発作業を行い、開発ボードをUSB接続してプログラムを書き込みする方法となります。IDEは、開発ボードの供給元であるEspressif Systems社の純正開発ツール「ESP-IDF」を使用します。開発時点での選択肢はないようですが、Windows, Linux, Mac等が使用できますので、特に支障はありません。コマンドラインでの操作ですので、好き好きがあるでしょう。Espressif Systems社のホームページに、インストール手順があり、簡単に導入できます。

ソースコードは各自好きな方法で編集し、ビルドから書き込みまではIDEが提供するスクリプトを実行するだけです。コンフィグスクリプトで機能の取捨選択や設定を行えます。豊富なサンプルソースコードがあり、これをコピーしてプロジェクトを始めるのが楽です。

今回必要となるライブラリは以下の通りです。

  • ペリフェラルライブラリ → ESP-IDF提供
  • Bluetoothスタック → ESP-IDF提供
  • グラフィックディスプレイライブラリ → 自家製

機能階層/関連図

メインタスクがアプリケーションプログラム本体となり、ESP-IDFのライブラリを呼び出したり、コールバックされたりする構成です。メインタスクの詳細は開発ドキュメントを参照して下さい。

ソースコード

BTSP03-20230430は初版、ESP-IDF V5.1+macOS 13環境下でビルド。

BTSP03-20240317はESP-IDF V5.2.1対応とレベル調整の使用感を向上しました。macOS 14.4環境下でビルドしています。v5.2ではBluetoothの再ペアリングの問題が解決されたようです。A入力の外部ADCの入力レンジが広いので、レベル設定範囲が0~200%リニアスケールであったものを、0~1000%対数スケール化(-20~+20dB)して調整範囲を拡大。B入力のノイズ削減が実用に至らなかったのでレベルの初期値を0に変更。ESP-IDFのバージョンアップに伴い、ROM領域がオーバフローするようになってしまったので、コンパイル最適化オプションを-Ogから-O2に変更(空き領域は21%に拡大)。

BTSP03-20240321は、アナログB入力のノイズ削減版です。ESP-IDF V5.2.1+macOS 13環境下でビルドしています。〜5KHzのソフトウェアローパスフィルタを付けてノイズレベルを大分マシにしました。音質はかなり低下(電話音質)しましたがノイズも大分減っています。それに伴い、B入力のレベルの初期値を0dBに戻しました。

プログラム書き込み

ESP-IDFでボードのFLASHにプログラムを書き込みします。

  • ESP-IDFの環境変数などの設定
  • BTSP03のディレクトリに移動
  • ESP-IDFのコマンドで書き込み

ESP-IDFの使い方となりますが、はじめに環境変数の設定を行います。ESP-IDFのディレクトリに移動しシェルスクリプトを実行します。これは、ターミナルを開いた時に一度だけ実行すれば良いものです。

source ~/esp/esp-idf/export.sh

ダウンロードしたファイルを解凍し、そこに移動します。

cd ~/Download
unzip BTSP03.zip
mv BTSP03 ~/esp 
cd ~/esp/BTSP03

ESP-IDFのスクリプトを実行してプログラム書き込みを行います。

idf.py -p /dev/cu.usbserial-xxx flash

-pオプションの引数は、USBシリアル変換器のデバイス名です。秋月電子のESP32-WROOM-32マイコンボードを使っている場合、ボード上のBOOTボタンを押しながらRESETボタンを押す必要があります。

使ったESP-IDFのライブラリでは、Bluetoothのペアリングと削除を繰り返していると、新たなペアリングが出来なくなりました。電源を入れ直しても解決しません。多分、ペアリング情報を持つテーブルがオーバフローしているのではないかと思われます。その時は、一度「erase-flash」オプションでFLASH全体をクリアし、電源を入れ直すと解決できるようです。

idf.py -p /dev/cu.usbserial-xxx erase-flash

カスタマイズ

以下のカスタマイズが可能です。

  • I/Oの一部のピン番号を変更
  • LCDモジュールの機種を変更
  • IDFの基本的なコンフィグ

ESP-IDFのmenuconfig機能で簡単に対応できます。idf.pyスクリプトでmenuconfigオプションを指定するとフルスクリーンのメニュー画面が出ます。ここで、設定を変更していきます。buildで反映されます。

細かい説明は割愛しますが、画面を見れば想像できる事と思います。これ以外にも、コンパイラの最適化レベルなど、基本的な設定の変更がmenuconfigで出来ます。LCDモジュールは、試作ではZ180SN009を使いましたので、設計図通りATM0177B3Aにした場合には、この作業が必要になります。

外装・ケース

 ケースはバージョン0.2と全く同じです。詳細はそちらを参照ください。今回は、シルバーで塗装したのが違いです。

開発情報

ここまで、設計の結果だけをまとめたものですが、開発時のなやましい状況などについては別ページに記録しています。興味がある方は以下を参照してください。

あとがき

オーディオアンプも3代目になってしまいました。ESP32を見つけてから、BTSPシリーズをかなり安い物にできると思ったのです。結果的には、あまり安くはならず、何の工夫もない単純な回路になってしまいました。結局コストや安定性を求めるとこうなるのですね。ESP32は良いデバイスだと思いますが、内蔵ADCは気難しかったです。

2024.3.9:他人に1年近く使ってもらっていますが、特に不満は出ていません。最初は、アナログ入力レベルが違う事に、かなりの違和感があったようです。入力ゲイン設定を上げれば同じレベルに出来るのですが、電源喪失すると設定も飛ぶので、この対応は止め、単純に慣れてもらう事にしました。設定値保存機能が必要かもしれません。

Copyright©2023-2024 Toyohiko TOGASHI


投稿日

カテゴリー:

,

投稿者:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です