ジタルボリュームの製作(PGA2310+PIC12F675)

2006.9.27 プログラムのバグ修正
2006.9.6 公開

はじめに

初めて私が製作したヘッドホンアンプは携帯型のCmoyタイプ、そしてその次に作ったのが据え置き型のSAITAMA-HA7(改)でした。
このHA7はさいたまAUDIO氏が設計したOPアンプ+トランジスタバッファアンプで、作りやすくしかも音が良いと評判の素晴らしいアンプ回路です。
あちこち手を入れてだいぶオリジナルから変わってしまったので「改(悪?)」ですけれども。
当初はアルプスの2連ミニデテントVRを使っていましたが、微妙な小音量の位置でギャングエラー(左右の音量ズレ)がありました。
それほど酷くはなかったので、この手の問題は気にしないのが一番…とはいっても、ちょうど良く使う音量位置で起きているため気になり出すともうどーにもならないくらい我慢できなくなっちゃうのです。
そこでちょっと奮発して東京光音のプラスチック抵抗VRに交換してみましたところ、残念ながらこれにもズレが。しかもこっちのほうがアンバランスが酷いってのはどうなんでしょう…

いい加減諦めていたところ、ヤフオクにてPGA2310という電子ボリュームICが出品されているのを見つけました。
調べてみると自作例もあり、3線シリアルで制御できて性能も良さそうなので早速落札してボリューム基板を製作してみることにしました。

回路図



コントローラにPIC12F675を使用。
PICのピンが余ったので、PGA2310制御のほかにアンプ出力の遅延ミュート解除(リレー制御)を組み込みました。
電源はアナログ(オーディオ側)で±12V(最大±15.5V)、デジタル側で+5Vの2系統が必要です。
+12Vからレギュレータで+5Vを作ってVddに供給しましたが特に問題ないようです。念のためデジタルGNDとアナログGND間、Vddラインにそれぞれフェライトビーズを入れました。



接続例です。PWRSENSは電源のON/OFFに応じてHi/Loが入力されるようにします。OFF遅延が出ないようにカプラ発光側の平滑コンデンサは小容量にしておきます。
Cの容量によってはパラのブリーダー抵抗は無くてもOKです。定数は実際の電源電圧やフォトカプラの仕様に従って。
ミュートリレー制御が必要なければPWRSENSはプルアップ(Vddに接続)しておけばOK。

プログラム

ソース+HEX(d_vr3.zip)5kb
注:アセンブリソースはCVASM16用です。
バグがありましたので修正しました・・・(2006.9.27)

ボリュームは全128ステップ、各位置毎に-∞,-95.5dB〜+31.5dBの間で任意の値を指定できます(ただし0.5db刻み)。
VR位置をAD変換する際、境界位置にあると変換毎に値がふらついて厄介なので、内部的にはVR位置を256ステップで扱っておき、以前のVR位置から±2ステップ以上動いた時だけPGA2310のボリューム設定を送信するようにしています。なので実質128ステップとなります。
各ステップ(0〜127)に対応する音量値は、プログラム中の変換テーブルでステップに対する音量値として記述しています。
今回は既存のヘッドホンアンプのプリで入れる形なのであまりゲインを取る必要もなく小音量時の調整範囲を広く取るつもりで、設定範囲は最小∞,-95.5db〜最大4.0db程度としました。

なんで操作系にロータリーエンコーダを使わずにアナログボリュームを使ったかというと
・ぱっと見でツマミの角度がわかる
・操作感の好み
・部品が安い
といった点があげられます。まあ最近の機器はリモコンで操作するものが多いんで本体からツマミを無くすというのもアリかと思いますが、見ただけでボリュームがわかるというのは結構大事だと思うんですよね。

んで、そのVRのA/D変換とPGA2310へのシリアル通信は十分高速に行っていますけど処理が追いつかないほどVRを急激に回すとか、あるいは変換テーブルの隣接設定値が大きくかけ離れていたとしても、音量は常に0.5dB単位でヌル〜っと(?)変化するようにプログラムしています。
これはなかなか良く出来てんじゃないかと自画自賛(笑

少し使ってみてBカーブのVRとゲインをリニアに対応すると音量の増え方が少々不自然に感じたので、常用域がVRの9時〜12時くらいで今まで使っていたアンプのVRっぽくなるように私の好みでテーブルを設定し直しました。
本プログラムのデフォルト変換テーブルは下図のような設定となります。(注):BカーブVRを使用の場合


ソースを見ていただくとわかりますが、リニア変換テーブルもコメント化されて記述していますのでお好きなほうをどうぞです。

ちなみに設定ボリューム値(N)とゲイン(db)の関係は
 ゲイン(db) = 31.5 - [0.5 * (255 - N)]
となります。

おまけの機能ですが、電源投入直後は-∞db(ミュート状態)で、約1.5秒後にミュートリレー出力がON、そして約2.5秒後に-95.5dbから現在のVR位置(の音量)までスムースUPするようにしています。間違ってボリュームを大きくした状態で何か再生しながらアンプの電源をONにしても、じわ〜っと音量が上がってくるので心臓には優しいと思います(笑

写真

今回デジタルボリュームを組み込むSAITAMA-HA7(改)
ちなみにアンプ基板の裏表

トランジスタは基板の裏側に取り付け、ケース底面にネジ止めすることで放熱しています。
で、現在はこんな姿で。

アンプ基板の上にボリューム&ミュート基板が重なっています。

VRは安物の薄型Bカーブにしました。

さいごに

VR単品を買うよりも高くついてしまいますが、それでも作る価値はあると思います。
PGA2310を通した音については人による好みもあるでしょうし、私の作り方にも因るのですけど・・・自分としてはかなり良いと感じました。
なにより、ずっと気になっていたギャングエラーが無くなったというだけでかなり幸せであります。
製作後、2ヶ月以上連続使用していますが、特に問題はないみたいです(といいつつPICのファームはちょくちょく弄ってますが)。

追記:
無信号時にVRを回すと、特定の位置を通過するときだけ微少なプチッというノイズが発生します。どこに原因があるのかよくわかっていませんが、リスニング中は頻繁にVRを回すこともしませんし、音声が出ている時はまったく気付かないレベルなので放置しておきます(^^;

追記2:
ブログに書きましたけど、ボリュームを回したときに出るグリッジノイズはアンプ側のゲインが必要以上に高かったために目立っていたという感じです。
アンプ側のゲインを下げてボリューム値設定テーブルを修正して再調整したところ、グリッジはほとんど聞こえなくなりました。また、微妙に感じていたホワイトノイズと出力のオフセットもぐっと減りました。このくらいの設定が本来の使い方だったのかなと思います。

戻る