ハイレゾアンプを作ってみたら音が良すぎました。
Amazon Music HD が始まって早一年。今のところ、大いに普及しているとは言えないかもしれませんが、手軽にハイレゾ音源が聴ける時代になって、そのうち作るかもくらいに考えていたハイレゾアンプの自作にようやく手をつけた形です。
そして時間はかかりましたが、ほぼ満足のいくものとなりました。
意味不明ですが、名付けて「うさぎアンプ」とします。https://amanero.com/
自作プラシーボの効果もあるかも知れませんが、このAK4499とアンプから出てくる音は、市販の高級アンプにも全く引けを取らない良音だと感じています。
もう、価格.comや製品ページを見ても市販のアンプが欲しいとは思わなくなりました。ケースだけはかなわんな・・そんな印象しか受けないです。
タカチのケースでカスタム加工を依頼。加工は何度かあるのですが、今回初めて印刷も依頼してみました。
小型化を優先したので、内部構造の都合で少しバランスは良くないですが、製品じゃないので全然OK。
デザインセンスはともかく、自作機ならではのマニアックな情報も表示します。
中央部分のケーブルの多くはDACへのチャンネルごとのパラレル電源配線。
今やソコソコの性能で安価なDACやらアンプやらが巷に溢れかえっている世の中ですが、そんな中で自作に挑もうとする勇者様のご参考になれば幸いです。
ハイレゾアンプ自作回路
そもそもハイレゾアンプを自作するにはどうすればいい?
日本オーディオ協会によるハイレゾの定義の中で「アナログ信号に関わること」の部分では、「アンプ高域再生性能: 40kHz以上が可能であること」とあります。
まあ、これは「ハイレゾオーディオロゴ対応機器」の資格を与える基準に過ぎないのですが、これを目安とするならは、アンプ単体では、40kHz以上が再生できればハイレゾアンプになることになります。自作アンプでも、よほどショボい回路や理由でもない限り、40kHzくらいは普通に達成できますので、結構ハードルは低いと言えます。
でも、それだけじゃ面白くないし、メーカー製のアンプならもっと付加価値を付けないとライバルに負けてしまうので、なんちゃらテクノロジーとか付いてるんですね。
ちなみに、DACを扱う場合は、I2S(PCM) 96kHz/24bit、DSD 2.8MHz/5.6MHz が可能であることが条件になります。本作はDAC内蔵ですが十分クリアしています。
自作ハイレゾアンプの回路例
最近のアンプの自作でよく見るのは、電流帰還アンプや無帰還系、トランスリニアバイアスの応用などではないかと思います。ここらからハイレゾアンプの回路を検討しました。
次の6つの回路は、検討はしたものの本作では見送った回路です。
Class-D以外はLTSpiceで試して動くことまでは確認していますが、叩き台なのでトランジスタの品種や動作点など、最適化するまではやっていません。また、実際に動作するかも試していませんが、自作ハイレゾアンプの回路検討の参考にはなると思います。
※Class-D以外は、ユニティーゲインで設計しています。
- 電流帰還アンプ(JFET入力)
- 電流帰還アンプ(トランジスタ入力)
- トランスリニアバイアス(バイアス回路への応用)
- トランスリニアバイアス(出力段への応用)
- ダイアモンドバッファ(ハイレゾヘッドホンアンプ)
- Class-Dアンプ
電流帰還アンプ(JFET入力)
10年以上前から現在に至るまで、自作でもよく見られる電流帰還型アンプの基本形です。電流帰還というと(別のタイプと)誤解しそうですが、低インピーダンス帰還であることからこの名が付いたと言われているようです。特に高周波特性が良く、広帯域オペアンプ等でも使われています。
初段のFETにはエンハンスメント型ではなくデプレッション型のFETを用います。電圧利得があるため、オペアンプを使わずとも負帰還をかけることができ、この回路ではユニティーゲインで動作させています。なお、後段がインバーテッドダーリントンになっている点は、電流帰還とは関係ありません。
負帰還として、出力をJFETのソースに戻していますが、これはFET増幅回路の基本形の一つであるゲート接地型の応用なので、特に目新しいものではないです。
高周波特性がウリのこの回路、オーディオアンプに用いる意味がどのくらいあるのかという所がポイントになりますね。
電流帰還アンプ(トランジスタ入力)
JFETによる基本型をトランジスタ入力に変えたもので、自作の電流帰還型アンプで恐らく最もよく見られるパターンではないかと思います。
トランジスタはバイアス電圧を与えないと電流が流れないので、バイアス電圧を作るための初段を加えています。ついでに、初段のエミッタ抵抗を、JFETを使った定電流回路に置き換えてゲインを上げています。こちらも100%帰還でユニティーゲインですが、JFETの基本型よりオープンループゲインが高いので、特性はこちらの方が上になります。
ただ、この回路で理解しておくべき点は、JFETを用いた基本型と違って、初段のトランジスタが負帰還ループに含まれていないという点です。初段で発生した歪はそのまま出力に出てくるので、動作点についてはしっかりと検討する必要があります。特に電圧ゲインを持たせる場合には要注意ですね。
トランジスタの場合は、エミッタに出力を戻して負帰還としていますが、これも大昔からあるベース接地型増幅回路の応用です。
電流帰還型の回路は、差動回路に比べると厳密なペア組みも必要なく拡張もやりやすいので、ディスクリートアンプとして取り上げられやすいのかも知れません。
トランスリニアバイアス(バイアス回路への応用)
出力トランジスタがOFFしてカットオフが生じないように終段のバイアスを調整する回路で、トランスリニア原理を応用した疑似A級の一種です。AB級はA級とB級が切り替わりますが、これは切り替わらず常にバイアス電流が流れるように動作します。
A級に近いためクロスオーバー歪が少なく、それでいて発熱が少ないのが特徴です。
トランスリニア原理を応用したパワーアンプは、こちらで詳しく解析されています。
赤で囲った部分が、トランスリニア回路のコア部分になります。
一般的には終段で電流を検出する回路が多いですが、この回路ではインバーテッドダーリントン後段のVbeから電流を検出する形にしてみました。これにより、終段の電流検出抵抗を無くせると同時に、電流検出用にパワートランジスタを使わなくても済むようになっています。(但し、音質的には同じなのか、どちらが有利なのかは分かりません)
上の回路のLTSpice結果です。
トランスリニアバイアスでは、上側と下側の終段トランジスタの電流はこのようになります。緑が上側、青が下側、赤が出力。
トランジスタはOFFになることはありませんが、0に近づくにつれて電流の変化が小さくなります。AB級ではありませんが、まさにA級とB級の中間にある感じです。
抵抗を追加して指数的に変化するのを弱める、つまり、最小値付近がもう少しなだらかに変化するようにすると、A級に近づきますが、発熱とのトレードオフになります。
トランスリニアバイアス(出力段への応用)
本作でのもう一つの最終候補がこの回路でした。前段におなじみダイアモンドバッファを用いて、トランスリニア回路を終段として追加しています。ウィルソン形カレントミラー回路のプッシュプル版のような形です。
この回路はわりとシンプルな疑似A級のため、自作にオススメの回路と思います。
トランスリニア回路を終段で使うと、終段のエミッタ抵抗が不要になるというメリットもあります。欠点としては、同じ品種のパワトラが3×2個必要になるという点でしょうか。
この回路の終段トランジスタの電流波形は、上のLTSpiceの結果と同じですが、最低バイアス電流を約50mA程度に増やしている点が異なります。
本作での採用を見送った理由としては、パワトラが6個必要なこと(BLTだと24個必要でセットの小型化ができない)と、最終的に疑似A級ではなく純A級の回路にしようと決めたことがあげられます。
この回路はどこかで紹介されていたものではないので、実際に作ったらどんな音が出るのかとても気になります。どなたか試してみませんか?(人にやらすという…)
ちなみに、これよりもシンプルに構成したトランスリニアバイアス方式のバッファアンプを搭載した作例を公開しています。
より詳しく⇒USBAudio2.0 DACの自作!BD34301EKV搭載
ダイアモンドバッファ(ハイレゾヘッドホンアンプ)
今更ながらですが、ダイアモンドバッファは特にヘッドホンアンプでよく使われる、電子工作の間では定番の回路ですね。初心者さんにも扱いやすいです。
本作では、当初ヘッドホンアンプは別に存在していて、バランスではなくシングルエンドで考えていた時もあったんですが、その時に検討していた回路がこれです。
この回路は、基本型に対して自作ハイレゾアンプとしての2つの工夫を加えた回路です。
1つは、オペアンプに INA1620 を使っていること、もう1つは、初段のエミッタ抵抗をカレントミラーによる定電流回路に置き換えている所です。
入力はDACからのバランス(差動)信号ですが、これを INA1620 でシングルエンドへ変換します。INA1620 は、歪み率0.000018%で、精度0.004%以内の高精度な簿膜抵抗を内蔵しており、これを利用することで高いCMRRを実現できるため、超高性能なシングルエンドバッファを作ることができます。回路中の4つの1K抵抗がそれに該当します。
そして、定電流回路を使うことで、バイアス電流の調整がやりにくいダイアモンドバッファの欠点を補うとともに、電流増幅率を上げています。バイアス電流量は、JFETのソース抵抗(560Ω)で設定します。
Class-Dアンプ
当方はデジアンの音が好きなので、これも考えてみました。
TI社の、低歪み率が特徴のClass-Dアンプ TPA3250 を使ったパワーアンプです。
デジタルアンプの問題の一つに、出力フィルタのコイルによる歪み率の悪化があります。この回路では、それを抑制するためのポストフィルターフィードバック(負帰還)を設けているのが特徴です。また、クロックは内蔵発振器を使うのではなくて、外部から低ジッターのクロックを供給するつもりでした。
Class-D(のチップ)は、利得を0dB(1倍)にできる品種が少ないです。この TPA3250 もパワーステージに与える電圧を推奨値の最小にしても、2倍を超える利得となります。
本作の基本設計と思想
なんて書くとお硬いですが、こういう考えで作りましたという所です。
なお、このページでは持論も交えて書いています。間違ったことを書いているかも知れませんし、絶対正しいとか、他の主観を否定したりするつもりもありませんので、どうかご寛容にお願いします。
本作のポイント
このアンプの仕様面での特徴はだいたいこんな感じです。
>全体ブロック図
次は、製作面での補足情報です。
- 基板は全13種15枚使用。KiCadで設計しFusionPCBで製造。
- 基板は2層、部品は表面実装が基本。
- 基板間は全てコネクタケーブル配線。
- PICマイコンを8個使用。
- PIC除くIC 49個使用。
- トランジスタ/FET 42個使用。
- コンデンサ 約280個使用。
- 抵抗 約400個使用。
Amanero Combo384 によるUSBオーディオ入力
Amanero Combo384は、PCM(I2S)では32kHz~384kHz、DSDでは64~512 まで、32bitで出力できるオーディオボードです。2013年発売ですから、もう7年くらい経っていて、オーディオ自作の世界ではよく知られているようです。
ファームウェアのバージョンによっては、DSD256以上が再生できないなど、いくつか制約がある模様。ファームウェアを更新すればなんとかなるようですが、当方はDSDにはあまり興味がなくて、今のところ音源も少なく常用できるものでもないので、最後に動作確認してみる程度にします。→結果的に、互換品で特に問題ありませんでした。
Combo384 には安価な互換品も出ていて、お試しのつもりで買った互換品に問題がなかったので、最終的にはこれをそのまま使っています。
Combo384互換DDボード Combo384と互換のUSBオーディオインターフェースボード。I2S 32bit 384KHz、DSD512を出力可能。USB-Bがゴールド色で高級っぽい?のも特徴です。 |
combo384 をちょっと試したいというのであれば、ハイレゾ音源を再生できる安価なDACボードをつないで試すことができます。
もちろん、安物のDACボードなので音質はそれなりですが、動作確認や再生可能なフォーマットを調べたりできます。
32bit 384kHz DAC PCM5102A搭載のDAC完成基板。DC4.2V~12Vを供給する必要がありますが、ヘッドホンジャックも付いているのでピンヘッダ接続ケーブルでつなげばすぐ聴けます。 |
他に類似しているものとしてXMOSを使ったものもあって、こちらも同様に使えそうですが、DSDの再生をするにはひと手間必要なようです。
XMOS XU208ドーターカード I2S 32bit 384KHzを出力できます。書かれてはいませんがDSDの再生もできるとのこと。基板のサイズは Combo384と同じですが出力ピンの仕様は異なります。 |
世界トップレベル DAC AK4499EQ 搭載
旭化成エレクトロニクスのフラッグシップDACで、ダイナミックレンジなどスペック的には現時点で世界No1のDACです。日本メーカーなので応援したくなりますね。
高性能DACとしては、他にESS社の ES9038PRO というDACが有名です。ESSは過去に ES9018S という、それまでにないレベルの高性能DACを発表して有名になりました。
他にも、バーブラウンやロームなどにも高性能DACのラインナップがありますが、現在は、旭化成の AK4499EQ と、ESSの ES9038PRO がハイエンドDACのトップ争いをしているような構図となっていて、どちらもそれぞれの持ち味があって評価が高いです。
驚異のS/N 140dB“極限を超えた”旭化成エレの新DAC「AK4499」の秘密
“音も最高、スペックも最高” のAKM新フラグシップDAC「AK4499」
AK4499EQ 製品ページ
超低ジッター LMK04832 ジッタクリーナー内蔵
TI社の LMK04832 は、54fs RMSジッタ(12kHz~20MHz)、64fs RMSジッタ(100Hz~20MHz) と、驚異の性能を誇るジッタクリーナーで、現時点ではこれに勝るものは他にないのではないかと思います。
ちなみに、過去には Si5317 などを使った作例も見たので調べてみましたが、やはり後発ということもあり LMK04832 には多くの面でメリットがあります。
54fsというのは、ps(ピコ秒)より小さいフェムト、つまり0.054psになります。
今は分かりませんが、少し前まではTCXOなどでも100psであれば超低ジッターとか言われていたくらいですから、54fsというのがどんだけスゴいのかがわかると思います。
これでDACへ供給するMCLKをクリーンするわけですが、ただ、このスペックは最も条件の良い場合の話。その条件の中に恐らくは「LVDSとかPECLとかで差動出力した場合」というのが入っているのではないかと推測します。
DACのMCLK入力は差動ではなく、普通はシングルエンドのLVCMOSですから、ここまで高い低ジッターは多分実現できないと思います。
でもですね、オーディオの世界ですから、もうこれ以上ジッタを小さくしても、とても知覚できるものではなく意味がないのではないかと思うのです。それに、そもそも録音してデータ出力する機材にもジッターがあるわけで、いくら再生側でジッターを小さくしてもしょうがないのではないかと・・・
とは言え、これで限界付近まで低ジッターを実現できるわけで、憂いはなくなりますね。
ちなみに、I2Sでは他にもBICKやLRCKもあるので、どれをクリーンすればよいのか?という議論が一部あるようです。一般にはMCLKのみが音質に影響すると言われていますが、これについて念のため旭化成エレクトロニクスに対して問い合わせてみたところ、MCLKだけで良いとの回答を得ました。
あと、クリーン後のMCLKの位相ですが、LMK04832 では、入力と位相を合わせることもズレ具合を調整することも可能。AK4499EQ ではMCLKは他のクロックと同期している必要はあるが、位相は合わせる必要はないとデータシートに明記されています。
本作では、一応位相を合わせたクリーンなMCLKを供給します。
DACから出力まで完全バランス伝送
DACの出力は差動(バランス)出力になっています。これをシングルエンドに変換することなくスピーカーやヘッドホンまで伝達します。必然的にアンプはBTL出力になり、ヘッドホンはバランスヘッドホン・ケーブルが必要になります。
特にバランスヘッドホンはコストは高くなりますが、音質改善効果が出やすいということで、今更ですがぜひ試してみたいと思いました。
ソニー XBA-N1 ハイレゾ対応カナル型ヘッドホンの一つ。このようなケーブル脱着式のヘッドホンのケーブルをバランスケーブルに交換します。 |
KBX4904 バランスケーブル MMCX 4.4mm 5極プラグが付いた、純度99.99%の純銀バランスケーブル。わりと安価なものですが品質は良いです。 |
全段バランス化するということは、とても効果的なノイズ対策にもなります。
今回のアンプはできるだけ小型にしたかったので、電源やデジタル回路、アナログ回路を狭い空間に詰め込むことになります。シングルエンドだとノイズが乗りやすく対策が難しいのですが、バランスだとそのリスクも少なくなります。
また、再生に伴うグランドノイズもキャンセルされるため、音が濁りません。
アナログボリュームレス
アナログボリュームは、ブラシの接触と抵抗膜によって音が悪くなると言われています。マニアの間では高価なボリュームを求める向きもありますが、少なくとも百円くらいの安かろう品種は使いたくないですね。
高音質なボリュームのメーカーとしては、東京光音が有名で、例えば 2CP-601 という品種はよく聞きます。
2CP-601 A10K 東京光音のプラスチック抵抗ボリウムCPシリーズ。音の良さで有名です。同社ではこの他にも色々なボリュームを出してます。 |
しかし、本作ではそもそも完全バランス伝送を目指しています。バランス伝送では、L+, L-, R+, R- の4chが必要になるうえ、ポジティブ側とネガティブ側でレベルの差があってはなりません。ここでアナログボリュームを使うとなると、そのギャングエラーが大きすぎて、せっかくのバランス伝送も台無しになってしまいます。
抵抗膜やギャングエラーがイヤなら電子ボリュームを採用する手もあります。ただ、電子ボリュームは半導体でできていますので、音質の劣化が問題になります。
オーディオ工作の間では、JRC MUSESブランドの MUSES72320 がよく知られていますが、実はこれ、それほどでもなくイマイチだという辛口評価も散見します。
現時点で、最も音質劣化が少ないと思われる電子ボリュームは、シーラスロジックの CS3318 ではないかと思います。これには8チャンネルのボリュームが内蔵されていますが、パラレルで使うとノイズも減り特性が良くなるので、ステレオの場合、片チャンネルあたり4パラレルで使うと良さそうです。
ところで、AK4499EQ 含めハイエンドDACには、通常デジタルボリュームが内蔵されています。デジタルボリュームは数値化された電圧を演算によって減らすので、理論上は全く劣化しません。しかし、実際にはビット落ちという問題が生じます。
これは、例えば10の音量を1/4にしたら2.5になるが、再現できるのは整数部分だけなので少数の0.5は捨てられることになり、それが音楽情報の喪失となるという問題です。
しかし、AK4499EQ は32bitなので、この落ちる部分がかなり少なくなります。音の大きい領域では、ほぼ無視しても良いくらいのレベルです。
そこで本作では、アナログボリュームも電子ボリュームも使わず、AK4499EQ に内蔵されているデジタルボリュームと、3レンジのリレー切替式アナログアッテネータを組み合わせたものとすることにしました。
まず、普段最もよく聴く音量を、スピーカーやヘッドホンで実際に聴きながら調査します。その音量付近で、DACのデジタルボリュームによる減衰が全く無い(0dB)状態にしたとき、アナログアッテネータでどのくらい減衰させればよいかを見積もります。
つまり、普段の音量付近でビット落ちが全くない(デジタルボリューム0dB)状態で聴けるようにするわけです。
ただ、アッテネータの減衰量が1パターンしかないと、それ以上音量を上げることができませんから、減衰量を3パターン用意し、適切なポイントで切り替えながら使うようにします。これによって、ビット落ちが全無いポイントが3箇所できることになり、ブラシや抵抗膜もないので、音質劣化がほとんど無いボリュームになるハズです。
ボリュームを回していくとリレーがカチカチと切り替わりますので、切り替えノイズが気になるところですが、実際にはほぼ気にならないレベルになりました。
オートバイアスコントロール純A級低出力バランスアンプ
数ヶ月に渡ってあれこれ検討して、結局たどり着いたのはこれでした。
その中身はなんと、オペアンプとSEEPを組み合わせただけという、なんともつまらない方式です。そんなんでイイのか?と疑問に感じてしまうと思います。
一昔前までは、アンプと言えばやっぱりディスクリートじゃないと良い音は出せない、シリコンの塊(オペアンプ)ではノイズが多い、などというのが一般論だったと思います。当方も古いので、どちらかというとその派です。
しかし、現代のHi-Fiオペアンプの性能はどうでしょう。例えば、本作全般で採用している OPA1612。歪み率 0.000015%、オープンループゲイン130dB、ノイズ1.1nV√Hz。
そんな性能、ディスクリートじゃあ絶対ムリです。
いや!スペックでは現れないディスクリートならではの音があるんだ!って、つまり、実際に聴いたところで勝負するわけですが、それをやろうとするとそりゃ大変です。
回路を変え、部品を変え、電流を変え、試聴を繰り返し、気分や体調に影響されないように頑張る! → ホントにいいかこれ?わからんくなってきた・・てな感じでしょうか。
まあ、OPA1612 も、パワーステージを追加した時点でそこまで低歪で動作するわけではないとは思いますが、今どきの高性能オペアンプをなるべくシンプルに使い、直接スピーカーを駆動するのに近いような形にしようと考えました。
本作パワーアンプ部の特徴をまとめると、
- 純A級+BTL
- 0dB(ユニティーゲイン)
- オートバイアスコントロール
- パラレルインバーテッドダーリントン
- 低出力の2.25W(8Ω)x2
純A級+BTLだと電源負荷が変動しないという特徴も出ますが、それは次項で述べます。
今更ですが、A級はクロスオーバー歪がなく、スループットがB級の約2倍になるというメリットもあります。しかし、消費電力が大きすぎるので、その時の再生音量に必要な最小限のバイアス電流に調整するためのオートバイアスコントロールを設けました。
これは、設定値を下回らないようにマイコンでバイアスを上げ下げするものです。ただ、厳密に調整できるものではないので、ある程度のムダな発熱はどうしても生じますが、普段の音楽再生においては、制御しない場合に比べて断然低発熱となります。
このアイデアは、オーディオ全盛期の頃からあって、確か昔のマランツのアンプでそんなのがあったように覚えています。
ちなみに、これをアナログ的に実現したような、いわゆる疑似A級の類も検討しましたが、効率はともかく、やはり+側と-側の電流が完全にシンメトリックで協業している純A級には及ばないため、原点に戻りました。
そして、低出力というのも大きなポイント。
高級アンプでは50Wとか100Wとかありますけど、一般的な室内ではそんな大音量で聴くことはまずありません。また、最大出力を上げると、歪み率の測定結果を小さく見せることができるのですが、自作なので歪み率の低さをカタログで誇示する必要もありません。
しかし、大出力だと電源に余裕ができて良音につながるわけですが、本作では小出力であるがゆえに、パワーアンプは超低ノイズ安定化電源でドライブできて逆に有利です。しかも、純A級+BTLによる効果で、そもそもの電源の電圧変動すら起きません。
最大出力内では、数百ワット級のアンプを凌ぐ低インピーダンス電源です。
低出力というのは、他にもいろんなメリットが出ます。電圧増幅が不要になる、小型化できる、配線長の短距離化につながる、低コスト化など。
また、最大出力は2.25W x2ですが、家では連続で鳴らすと近所や家族から苦情が来るレベルですので、連続再生は想定しません。高出力アンプのような、実際には不要な放熱容量を確保する必要もないので、そのぶん小型で製作も楽になります。
パワーアンプ電圧変動キャンセリング
これは、何かしらキャンセルするような回路を付けたわけではなくて、純A級アンプをBTLで使った場合に生まれる嬉しい副作用のことです。B級では生じません。
それは、純A級のBTLでは、ポジティブ側とネガティブ側の消費電流の位相が180°反転しているため、これを混ぜ合わせるとAC成分はキャンセルされて直流になるという事実です。つまり、無音だろうが大音量だろうが、トランスからアンプまでつながる電源ラインには、常に一定の直流電流が流れていて、AC成分は含まれていません。
これが何を意味するかというと、電源のインピーダンスには全く影響を受けなくなるということです。一定の直流電流しか流れないので、電源ラインに再生信号ノイズは生じません。インピーダンスゼロの電源を搭載したのも同じことです。
ただ、実際にはAC成分は完全には0になりません。なぜなら、ポジティブとネガティブ間のドライバ段の増幅率に差があるためで、その分だけわずかにAC成分が発生します。
この作用を効果的に活かすため、実際の配線ではポジティブ側とネガティブ側のパワートランジスタの電源ライン同士をなるべく短距離で接続します。その接続したところでAC成分はキャンセルされるので、そのポイントから各部へ電源を引くようにします。
超低ノイズ LT3045/LT3094 全アナログ電源
高性能なレギュレータを贅沢に使ったアナログ電源です。アナデバのサイトで密かに見つけて得した気分になっていたのですが、最近あちこちで見かけるようになりました。
これは、LT3045 の電源リップル除去比。
2MHz付近まで80dB近くのリプルを除去する能力があります。ちょっとした高周波フィルタ並みです。
ただ、ここまで性能を引き出すためには基板パターンの工夫も必要です。
超低ノイズなのはもちろん、負電源の LT3094 が用意されているのも採用のポイントになりました。
これまでも低ノイズをウリにしたレギュレータは多くありましたが、出力にセラミックイヤホンをつないで聴いてみると、小さく「サー」といったホワイトノイズが聴こえるのが普通でした。(もちろん全てを試した訳ではありません)
でも、こやつらはそのようなノイズは全く聴こえません。電池につないでいるようです。
本作では、これを全てのアナログ電源に使用します。DAC用の電源はもちろん、パワーアンプの電源にも4パラレルx2で使用します。
ただ、パッケージが小さいので発熱対策が重要になってきます。
徹底したアイソレーションとノイズ対策
本作はUSBオーディオ入力なので、PCからのノイズ侵入を防ぐために、当初はUSBアイソレータを検討しました。しかし、USBアイソレータは途中で再生が途切れたりするなどリスクがあるとのことで断念し、USB後の回路とアイソレーションすることにしました。
ちょうど、Combo384 のデータシートにもアイソレータを使用する例が載っています。その他にも、I2C通信ラインのいくつかのポイントでアイソレータを使用します。
本作では、AC電源からのノイズはもちろんですが、デジタルオーディオ信号を扱うので、20MHz以上の高周波ノイズを中心に注意を払います。
また、I2C(100kHz~400kHz)も、オーディオ回路内で使用する場合には注意が必要です。もちろん、400kHzが直接聴こえるわけではなくて、断続的な通信の始まりと終わりの周期が、可聴ノイズとして想像以上に入りやすいんです。
20MHzオーダーのノイズも甘く見てはいけません。そんな高周波でも、波形の上下で打ち消されない分が可聴ノイズとして聴こえることがあります。見た目はキレイな正弦波だったとしても、オペアンプなどの半導体を通過する際に検波されることで、復調された可聴成分が聴こえる可能性があります。ホワイトノイズとして聴こえることが多いですが、ツーとかチーなんて場合もあります。AMラジオと同じ原理です。
また、高周波になるとコモンモードノイズとディファレンシャルノイズは、回路内のあちこちで相互に化けながら伝搬しますので、両方とも注意が必要です。
本作では、回路全体を通して次のような工夫を行います。・要所要所にコモンモードチョークを挿入する。
・フィールドスルーコンデンサ(エミフィル)の活用。
・フェライトビーズの活用。
・高周波ラインにはダンピング抵抗の挿入とリターンパスを用意。
・グランドループになる経路には少値抵抗を挿入する。
オートボリュームコントロール
これは当方念願の機能です。夜中BGMを聞いていると、特にピアノ系なんかは急に音が大きくなることがあって家族によく怒られますので、その対策になります。
ボリューム後のアナログ信号レベルを読み取って、なるべく一定の音量となるようにゆっくりとボリュームを制御します。
静かにBGMを流したいリスナーに、なかなかおすすめの機能ですよ。
バスブースト
別に珍しくもなんともない機能なんですが、これもぜひとも欲しいです。特に小型スピーカーの場合に有効ですね。
一応ラウドネス曲線を参考にして、120Hz辺りで+2dB程度アップするようにします。
DACリアルタイム設定や各種ステータス表示
AK4499EQ は、DACのゲイン(72.8mApp/45.5mApp)や、デジタルフィルタを設定できますが、それをリアルタイムに行えるようにします。
それから、表示デバイスには見やすい400×240のフルカラーLCDを採用。
再生中のオーディオフォーマットを始めとして、LMK04832 のPLLロック表示とか、バイアスコントロールの電流値などのマニアックな情報も表示します。
I2Sの場合は、サンプリング周波数だけでなく量子化ビット数、DSDの場合はベースサンプリング周波数まで表示できるのもポイントです。
ワンタッチ起動と再生
ハイレゾを再生するのって面倒だと思いませんか?
ピュアオーディオではない?AIスピーカーの類は論外として・・です。
聴こうと思っても、パソコンを立ち上げてプレイヤーを起動して、必要あらばUSBつないでDACの電源を入れ、アンプの電源を入れる、ようやく再生・・・
面倒ですよね。もっとこう、簡単にできんの?
そこで、リモコンを一度だけ押せば、電源が入って勝手に再生が始まる、そんな仕組みを持つアンプにしたいと考えました。
まず、フォトカプラを使った接点を外に出して、パソコンの電源スイッチを操作します。パソコン側での改造が必要ですが、これでリモコン操作でパソコンの連携起動が可能。
そして、絶縁型USBシリアルモジュールを介して、パソコン上の制御アプリとPIC間で通信し、リモコン操作でパソコン上のプレイヤーを操作できるようにします。そのために、自作のUSBハブ回路も内蔵して Combo384 とSUBシリアルへUSBを分配します。
パソコンは、音楽専用にミニPCを購入。音質は落ちるかも知れませんが、場合によってはBluetoothのワイヤレスヘッドホンも利用できます。
KODLIX GD41ミニPC Gemini Lake N4120クアッドコア, DDR4 8G, SSD 128G, サイズ13.6x12x4.6, TDP 6Wでファンレスで静音, コスパ最高です。 |
外部PCには Amazon Music Player もインストールして、制御アプリも開発します。ディスプレイは繋がないので、直接操作する場合はリモート操作を利用します。
パーツの選定
オペアンプ
本作では、全面的に OPA1612 を使用していますが、参考のため検討したオペアンプを挙げておきます。これらはどれもハイレゾアンプの自作に使える優秀なオペアンプです。
品種 | 歪率(THD+N) | ノイズ | 備考 |
---|---|---|---|
OPA1692 | 0.000045% | 4.2nV√Hz | 低消費電力 |
OPA1656 | 0.000029% | 4.3nV√Hz | FET入力 Burr-Brown |
OPA1642 | 0.00005% | 5.1nV√Hz | JFET入力 |
OPA1632 | 0.000022% | 1.3nV√Hz | 完全差動型 |
LME49724 | 0.00003% | 2.1nV√Hz | 完全差動型 |
INA1620 | 0.000018% | 2.8nV√Hz | 高精度抵抗内蔵 |
OPA1612 | 0.000015% | 1.1nV√Hz | 採用 |
AD797 | 0.0001% | 0.9nV√Hz | アナデバのオーディオ向け品種 |
これらのオペアンプは、最近の品種でスペックが良いという理由でリストしたものです。
あまり詳しくないのですが、マニアの間ではスペックよりも、実際に聴いた音で良しとされるオペアンプも多く存在しています。例えば、MUSES01 や OPA627などです。
当方は、体調や音楽ソースなどによって良し悪しが変わって聴こえますし、確かな耳を持っていないので、スペックで判断することとしています。
まあ、本作では、DACのI/V変換回路以外はユニティーゲインで使っているので、オペアンプの個性はそんなに出ないのではないかと思います。むしろ、ユニティーゲインなのにガラリと音が変わったら、寄生発振してるとか、何か不具合を疑ってしまいます。
コンデンサ
現代では、オーディオ用電解コンデンサの入手に困ることはないため、自作アンプにはオーディオ用を使うのが普通ですね。
しかし、本作ではオーディオ用と銘打つ電解コンデンサは使っていません。信号ラインのDCをカットするためのコンデンサならともかく、基本はDCアンプなので使い所としては電源ラインで使うことになるんですが、そこにオーディオ用電解を使うことのメリットが推し量れないからです。
「電源の電解コンデンサを指で押さえたら音が良くなった!恐らく共振が減ったせいだ」とかいう話は、高周波ノイズの関係か、大方プラシーボではないかと考えています。電源ラインはインピーダンスが低いので、発生するノイズを効果的に抑えるためにはESRの低さが重要です。今ではとても小型でESRの低い高分子コンデンサが容易に入手できますのでそれを主に使います。ただ、ESRが低すぎると共振ピークが大きくなる可能性がありますが、ここではさほど気にする必要はないと考えます。
また、小型ということは寄生インダクタンスも低くなりやすいと考えられます。
オーディオ用コンデンサでも、ESRを気にして作られている品種もあるかと思いますが、具体的な数値が公開されていなかったり、サイズが大きかったりします。
それから、一般にオーディオにセラミックコンデンサは、圧電効果や共振を懸念してNGとされます。電源ラインでは必ずしも影響が大きいとは言えない部分もあるのですが、精神的にも拒否反応が出ますので、そこはフィルムコンデンサを使うようにします。
トランス
本作では全ての電源が安定化電源なので、必要以上に電力の大きい電源を用意する意味はあまりありません。小型にするために標準的なトロイダルトランスを選びます。ただ、自由に電圧を選べるわけではないので、場合によってはトランスに合わせて回路の方を変更することも行います。
また、トロイダルは漏れ磁束が少ないとはいえ、近距離にアンプ回路を配置するのでシールド付きのものが良いのですが、そんな都合のいい品種はなかなか手に入らないですね。
多くのトロイダルトランスは、入力電圧が115Vとなっていて、日本の電圧より少し高めです。また、出力電圧は取り出す電流によって大きく変わるのですが、メーカによって表示する電圧の規定が異なるため、実際に使ってみると、思ったほど電圧が出ないといった事態になることがよくあります。
それを確実に避けるには、やはり実際に取り寄せて確認するしかありません。
DACのI/V変換など小電力部用に用意したトランス2種。左が採用した 70053K。
70053K のスペックは、
・一次側:115V
・二次側:30V(15V x 2)
・二次電流:500mA(シリアル)
これを元に、整流後の電圧を予測してみます。
30V × 1.41 × 100 ÷ 115 - 0.8 ≒ 36V
0.8Vは、ショットキーバリアのダイオードブリッジを使った時の想定。無負荷で36Vの予想になりますが、これが500mA流した時にどれだけ減るかが問題です。
無負荷の時で43.4V(±21.7V)出ています。
回路が要求する最大電流は250mAなので、手持ちの抵抗から220mA流してみたところ。
34.2V~34.8V と10V近く落ち込んでいます。半分にも満たない電流でコレですから、スペックにある500mAを鵜呑みにすると、間違いなく電圧不足に陥ります。
こちらはデジタル&パワーアンプ電源用のトランスの 1182Q9。
スペックでは18V 6.67Aです。要求する電源は18V 3Aなので過剰にも思えますが、整流後に3.1A~3.7Aを取り出してみると、18.5V~15.5Vの出力電圧となりました。本作には問題ないですが、スペックにある6.67A出力では、かなりの電圧降下が生ずることになります。
パワーアンプには連続して最大電流が流れるわけではありませんが、トランスの電圧降下によって最大出力時のピーク電圧を再現できないようなことがあってはなりません。
ブロック図
回路図と基板
回路は機能ごとに13のパートに分割しました。KiCadの階層シートを使って各機能を記述し、階層シートごとに基板を作る形としています。
各階層シート間の結線を記述したトップレベルの回路図です。
このように分割することで多少のオーバーヘッドは生じますが、各機能ごとに作業できますし、基板を小さくすることができるので、基板代を安くすることもできます。
ただ、注意点として電源ライン、特にグランドの引き回しに気を付けないと、ノイズが聞こえるアンプになってしまうので、一点アースポイントや各部の電位には特に注意しながら設計する必要があります。
各回路基板と外部との物理的な接続は、階層ラベルにコネクタのピンを割り当てることで実現しています。ところが、KiCadのバグだか仕様だかは良く分かりませんが、それで基板を作ると、どことも接続されないコネクタピンが出てくるので、そこはローカルラベルを介するとかして対処しました。
なお、PowerAmpはLchとRchで全く同じ回路でリファレンス(C12とかの番号の部分)が異なっているだけなので、Lchの回路から作った基板をRchでも使いました。
※抵抗値に「*」が付いている抵抗は、精度が 0.05% or 0.1% or 1% の抵抗です。
- 入力部(InputSection)
- ジッタクリーナー(JitterCleaner)
- DAC(DACSection)
- アナログ部(AnalogSection)
- パワーアンプ(PowerAmp)
- アンプ制御(AmpControl)
- 全体制御(MainControl)
- 表示制御(DisplayControl)
- 電源部1(PowerSection1)
- 電源部2(PowerSection2)
- 電源部3(PowerSection3)
- 電源部4(PowerSection4)
各デバイスの制御については 6.ソフトウェア に書いています。
入力部(InputSection)
USB2.0ハブ、Amanero Combo384絶縁型USBシリアル、Combo384 のIO出力と入力情報を検出するための PIC32MX120F032B を含んでいる回路です。
USB系統はアンプ本体側とは完全に絶縁していて、ノイズの侵入を防いでいます。
USBハブコントローラはAitendoで売っている FE1.1s です。多分、このチップが一番少ない外付け部品でUSBハブを作ることができます。そこから Combo384 とUSBシリアルモジュール(AE-FT234X-ISO)へUSBを伸ばしています。
USBの信号ライン(D+/D-)と、5V給電ライン(VBUS)にコモンモードチョーク(L1,L2)を挿入し、電源にはブロックエミフィル(EMF1)も入れてノイズの伝搬を抑えています。
Combo384 のデータシートでは、アイソレータとして ISO7640 が使われていますが、本作で使っている ISO7760 はそれの後継品種にあたります。
また、I2Cのアイソレータには、全体を通して ADUM1250 を使用しています。
PICで検出する入力情報は、PCMの場合は量子化ビット数、DSDの場合はサンプリング周波数です。これらは、AK4499EQ レジスタ設定やリファレンスクロックの切り替え、表示にも使います。
PICは高速処理が必要になった時のために念のため PIC32MX にしましたが、実際には遅くても検出できるようなので、PIC24 でも良いと思います。
それから、Combo384 のCP(1pin)とMUTE(11pin)信号は、素早くアンプ制御に伝えるためにアイソレータを介して直接外部に出力しています。
その他のF3~F0など、ゆっくりで良い情報は PIC32MX からI2C経由で渡します。
※この基板では、IC2(PIC32MX120F032)のpin12とpin26を、ジャンパー線で接続する必要があります。接続しないと、再生可能なDSDのベースサンプル周波数は44.1KHzのみとなります。本作で唯一の後付けジャンパー線です。
ジッタクリーナー(JitterCleaner)
LMK04832 を採用した超高性能なジッタクリーナー回路です。AK4499EQ へ供給するMCLKをクリーンします。
LMK04832 は少ない外付け部品で動作します。VCXOとループフィルタは必要ですが、その他はパスコンなど、ほぼ全てがノイズ対策部品になります。また、必要なクロック出力数はMCLK一本ですので、多くのピンは使いません。
ループフィルタは、LMK04832 内蔵VCXO用(C16, R20)と、外付けVCXO用(C7, C8, C9, R18)と2つあります。後述しますが、ループフィルタのCR定数は、テキサスインスツルメンツの PLLatinum Sim を使って算出しました。
リファレンス周波数は2系統(MCLK 22.5792MHz系と24.576MHz系の2つ)あるので、ループフィルタもそれぞれに必要かと思いますが、周波数が近いため1つにしても位相余裕度や帯域の面で特に問題なさそうだったので共有としています。
外付けVCXOからの出力は、LVDSで LMK04832 へ供給します。
また、LED3(緑)は、PLLがロックした時に光るように設定します。
ノイズ対策はFBの二重配置など、少し過剰では?と思われるかも知れませんが、評価ボードの回路でも同様のノイズ対策が行われています。LMK04832 は消費電流が多くクロックドライブ能力も高いので、このくらいやらないとノイズレベルが高いと思われます。
LMK04832 には、内部の機能ブロックごとに12本の電源ピンがありますが、使っているブロックの電源ピンについてはFBとエミフィルでノイズ対策しています。使っていないブロックはDVDDへ接続しているのみです。
電源ピンが使われているか使われていないかは、テキサスインスツルメンツの TICS Pro というツールの消費電流計算機能で判断できます。
なお、クリーンする前と後のMCLKの波形を 7.動作検証 で載せています。
スゴいVCXO!シリコンラボのSi566
使用しているシリコンラボのVCXO Si566 は、ジッタノイズが100fs RMS typical(12kHz–20MHz)という、これまた超低ジッターなVCXOで、しかもデュアル周波数という素晴らしいVCXOです。(Kv=60ppm/V品種の場合)
本作では、2系統のMCLK(22.5792/24.576MHz)に対応するために2つの基準周波数が必要なのですが、まさにこんな用途にピッタリ。周波数はFS(pin2)で切り替えます。
で、内部ブロック図を見ると、なんと周波数制御電圧(Vc)ピンがADCへ接続されていて、内部のPLLを制御する仕組みになっているではありませんか!
VCXOといえば、クリスタルの負荷コンデンサにバリキャップ用いて電圧で周波数を変化させるものと思っていましたが、今ではそんなアナログ的なものではなく、こんなデジタルな仕組みになっているんですね。
PLLのためのVCXOの中身がPLLになっているなんて、一体いつの間にこんな時代になったのでしょうか・・昔のアマチュア無線家が聞いたらひっくり返ることでしょう。
Si566 は様々な周波数に対応しているがゆえに、特定の周波数で販売されているわけではありません。希望の周波数やパッケージなどを指定してカスタムオーダーするようになっています。本作で使っている 566BFA001152ABG という品番は、112.896MHz/122.880MHz でカスタムオーダーした時に割り当てられた型番です。
>カスタムオーダー情報
DAC(DACSection)
基本的に AK4499EQ のデータシートと同じ回路です。
I/V変換に使うオペアンプですが、AK4499EQ の出力電流が72.8mAppであることを考えると、それほど多くの候補はありません。当方は OPA1612 が好みなのでデータシートと同じ選択となりました。
違う点は、I/V変換回路のゲインです。データシートでは360Ωが使われていますが、本作では約20Vppの出力を設定しているため270Ωにしています。I/V変換とはいっても結局は帰還抵抗なので、低出力アンプなら抵抗値は低い方が有利なのではないかと思います。
なお、ここの抵抗は電力消費が高くなるので注意が必要です。20Vppだとしてもピークで0.37Wの電力消費があるわけで、普通の感覚で1/8Wとかのチップ抵抗を使ってしまうと焼けるところまでは行かないまでも、温度特性などの面でよろしくないと思います。
この場所にふさわしい抵抗を探していたら、いいのを見つけました。電流ノイズの少ない金属薄膜抵抗で精度0.1%、0.4W、±25PPM/℃と温度安定性も高い高性能抵抗です。Digi-Keyで入手可能。
Type SMA-A series
そして並列するCですが、データシートでは180pFなので、270Ωに変更した場合、同じカットオフ周波数(2.456MHz)にしようとすると240pFとなります。しかし、240pFのフィルムコンデンサは入手できません。妥協して積セラを使う気にもなれず・・・
そもそも、データシートではなぜこのカットオフ周波数なのでしょうか。書かれていませんが、私的には必要以上に高い気がするので、220pFではなく270pFにしました。
Combo384 のDSD出力のLとRは、ツールを使ってDSD1(pin3)とDSD2(pin5)のどちらにでも割り当てることができるようですが、デフォルトはどっちがどっちなのか分からなかったので、DSDL1/DSDL2とDSDR1/DSDR2 の両方に接続するようにしています。これにより、万が一逆だったとしても、レジスタ設定で対応できます。→実際には反対だったのでレジスタ設定で対応しました。デフォルトはDSD1がRということになります。
それから、D1~D4のツェナーダイオード。データシートでは、I/V変換回路よりも先に AK4499EQ に電源供給を開始することができない場合には追加するように指示があります。電流が逆流して破壊してしまう恐れがあるそうです。
また、書かれてはいませんが、これは電源OFFの時も同じで、先にI/V変換回路の電源が落ちることを保証しなければなりませんね。
本作では、PICからアナログ電源のON/OFFを制御できるため、この順番を守ることはできるのですが、デバッグ時にやらかしてしまう可能性があるため入れています。
あと、VREFにFBを入れているとか、MCLK入力のダンピング抵抗をジッタクリーナー側に配置してリターンパスを設けているとか、細かい工夫をしています。
基板のパターンは、AK4499EQ とI/V変換回路がなるべく離れないような配置としました。後で見たら、(多分、旭化成さんの開発部の)リファレンスボードと似たような部品配置となっています。
アナログ部(AnalogSection)
DACから音声信号を入力し、パワーアンプへ出力するまでの回路です。低インピーダンス完全バランス(差動)伝送と、音声信号を汚さないための工夫をしているのが特徴です。
また、オートボリュームコントロールのための音量検出回路を含んでいます。
AK4499EQ の4チャンネルの出力を、L/Rそれぞれ2パラレルで使う構成としています。
DAC後のLPFは、パッシブ型の2nd Order LPFに留めています。インピーダンス変換のためにバッファ(OPA1612)を設けているので、厳密にはパッシブではないかもしれませんが、多重帰還型のようなアクティブフィルタよりは断然素直な特性でしょう。
入力から出力までバランス伝送ですが、あえて OPA1632 のような完全差動型のオペアンプを使った回路にはしませんでした。いくらオペアンプ単体の性能が良くても、実際に使用する抵抗値のばらつきによってCMRRが大幅に落ち込んでしまうからです。例えば、0.1%誤差の抵抗を用いたとしても(最悪の場合)CMRRは54dBとなります。
この回路のように、高性能の(オープンループゲインの高い)オペアンプをボルテージフォロアにしてポジティブとネガティブに配置する方が、抵抗の精度とは無縁になり簡単で良い結果を出しやすいです。→実際には1KHzで80dB程度以上のCMRRが得られました。
バッファの後には、結合コンデンサ、バスブーストとアナログアッテネータを配置しています。
DACのI/V変換回路の出力には2.5Vのオフセットがあるので、ここで22uF(C90…)のフィルムコンデンサでDCをカットします。
アッテネータの抵抗値は、普段良く聞く音量付近で AK4499EQ のデジタルボリュームによる減衰量が0dBになる(ビット落ちがなくなる)ようにエクセルを使って求めました。抵抗の精度は、0.05%と0.1%を使っています。
そして、これらの回路の切り替えには、信号が劣化するICのアナログスイッチは使わず、ラッチングリレーを使っています。
リレーの駆動には、トランジスタと還流ダイオードが、チップトランジスタと同じ形のパッケージに内蔵されている MDC3105 を使い、リレーの駆動電流がノイズ化しないように、念のため抵抗(3.3Ω)を挿入しました。
音量検出回路は、JFET入力である OPA1644 を使って信号ラインに影響を与えることなく外部回路と完全分離し、INA1620 を使って差動信号をシングルエンドへ変換して、アンプ制御部のピークホールド回路に送ります。
これらは、音量検出に使うには勿体ないほどのHiFiなオペアンプなんですが、あまり気を使わなくて良いので採用しました。例えば INA1620 は8本の高精度抵抗を内蔵しており、外付け抵抗なしでシングルエンド変換ができますので、その利便性を買っています。
パワーアンプ(PowerAmp)
パワーアンプはBTL(差動、バランス)出力です。1つのアンプ回路にポジティブ側とネガティブ側の同じ回路が2つ含まれています。LchとRchを合わせると、全部で同じ回路が4つ含まれることになります。ここではLchの回路を載せます。
この回路は、ポジティブ側とネガティブ側で共有する部分の回路です。バイアス設定用の半固定VRや、出力リレーなどが含まれます。
出力リレー TQ2H-5V は、スピーカーとヘッドホンで別々に用意しました。2回路ある接点はパラレルで使い、接触抵抗を下げることを優先しています。
よって、出力をOFFにしても±どちらか一方は出力と接続されたままなので、ケースなどにショートさせないよう十分注意する必要があります。
ちなみに、TQ2H-5V の接触抵抗は1接点あたり50mΩ以下です。
実際の配線では、電解コンデンサ(C223, C224)は、ポジティブ側とネガティブ側の出力段と短い距離で接続して、電源変動のキャンセリングポイントとします。そこから各部への電源を伸ばせば効果抜群ですね。
左側がパワーアンプ部分で、右側はバイアスコントロール部分です。
パワーアンプ部分
パワーアンプの回路はSEEP回路を基本としていて、後段が2パラレルのインバーテッドダーリントンで構成しているのが特徴です。
インバーテッドダーリントンは、後段が熱暴走のループに含まれないため熱結合の必要がありません。さらにこの回路では、インバーテッド初段(Q26, Q29)にデュアルトランジスタを使い、バイアスを生成するQ26AやQ29Aと完全に熱結合されているため、温度安定性の面でも優れた回路となっています。
デュアルトランジスタは、HN1A01F/HN1C01F を使っています。
これらは、2SC1815/ 2SC1015 とほぼ同じ特性の石で、hFEの直線性が良くオーディオ用途に向いています。
終段のトランジスタには、TTA008B/TTC015B を使っています。このトランジスタは、わりと近年発売された東芝の現役の石で、秋月電子などで取り扱われていることから電子工作の間でも知られるようになり、ヘッドホンアンプなどでよく使われています。
クラス的にはドライバ段のもので、パワーアンプの出力段としては少々物足りないのですが、hFEの直線性といい、Cobの小ささといい、大電力トランジスタにはない特性の良さを得るため、あえて採用しました。本作のような小出力アンプなら、パラレルで使えば問題ありません。
C265(0.1uF)は、発振防止用です。
また、このアンプでは出力短絡保護回路は設けておらず、最悪は安定化電源側の過電流保護(max.2A)にたよる形になりますので、ショートには十分気をつける必要があります。
それから、オペアンプ OPA1611 は、OPA1612 の1回路入りの品種です。ユニティーゲインで一番特性の良い状態で働いてもらっています。
なお、パワーアンプの正弦波と方形波の出力波形を 7.動作検証 に載せています。
バイアスコントロール部分
バイアス制御の動作としては、パワーアンプ出力段のエミッタ電流を監視し、設定値を下回らない必要最小限のバイアス電流となるよう、つまり、その時々の再生音量に応じて、なるべく少ない電流で純A級動作となるように、常時バイアス電流を調整します。
そのためのコアとなる回路は、PIC16F1705 内蔵のDACやオペアンプを使って、下図のように構成しています。
PICの内部は、このような接続となるようにレジスタを設定します。
また、アナログフォトカプラ(LCR0202)を使っているのもポイントです。
アナログフォトカプラは、LEDとCdsが内蔵されており、流す電流によってCdsの抵抗値を変える、つまり可変抵抗と同じように使うことができます。
バイアス電流はVR4で設定し、50mAとします。VR5は、アナログフォトカプラの特性のバラツキを吸収するためのV/I変換ゲインを設定します。※このVRを数十Ω以下にするとトランジスタ(Q27)が焼けるので注意が必要です。直列に抵抗を入れるべきでした。
OPA1652 を使ってパワーアンプの終段を流れる電流を検出し、PIC内臓のコンペアを使って設定電圧と比較、電流の下限リミットを下回ったら、すぐにバイアス電流を上げていきます。その後は、逆に下限に達するまで徐々に下げていきます。これの繰り返し。
バイアス電流の操作は、PICのDAC出力を、PIC内蔵オペアンプとQ27(2SC2712)を使ったV/I変換回路で電流へ変換して、アナログフォトカプラを制御することで行います。
アンプ側の回路では、アナログフォトカプラを JFETの 2SK209-BL(Q28) のソース抵抗として使い、外部からバイアス電流量を制御できるようにしてあります。
PICではこれらの他にも、ADCを使って現在の平均電流やバイアス設定値を読み取り、過電流検知でシャットダウンしたり、バイアス情報をI2C経由でアンプ制御へ送信したりする機能をプログラムします。
アンプ制御(AmpControl)
PIC24F32KA304 を使って AK4499EQ や LMK04832、リレーなどを制御します。
また、オートボリュームコントロールのためのピークホールド回路を含んでいます。
後述しますが、アンプ制御では簡単なステートマシン方式によって各デバイスを制御します。また、2つのI2C経路を使って、各デバイスからステータスを取得し、全体制御へ転送する処理を常時(200ms間隔で)行うため、PIC24F を内蔵FRC 8MHzで駆動します。
ピークホールド回路は、まずアナログ部から送られてきた音声信号を OPA1652 を使って半波整流を行い、GNDから上半分だけの波形を取り出します。
L/R信号は、R119(47K)とR120(47K)で加算しますが、次段はデジタルGNDとアナログGNDの電位差をキャンセルするための差動回路としており、入力抵抗が低い(14.7K)ため、加算というよりORに近い形となっています。ですが、音量検出としてはこれがちょうど良い感じで働くと考えています。
次に、フルスイングオペアンプである LME49726 を使って100uFのホールド用コンデンサ(C116)にチャージします。チャージ電流は結構鋭いので、ノイズ化しないように抵抗(10Ω)を挿入して突入電流を抑えています。
チャージした電圧を PIC24F のアナログポート(pin30)で読み込んで音量を把握します。
起動時のポップ電圧や、ボリューム設定を変更した時などは、このアナログポートを一時的にデジタルポートへ変更してLOレベルへと引き落とし、チャージ電圧を抜く処理も行います。R282(150Ω)は、その時の過電流防止のための抵抗です。
なお、ピークホールド回路の波形を 7.動作検証 に載せています。
この PIC24F32KA304 では、I2C1のSCLとSDAを代替ピン(ASCLとASDA)に割り当てることができます。本作では、次の全体制御でも代替ピンを使っているのですが、なんと!この設定をする I2C1SELビットの説明の所に「F」デバイスでは代替ピンは使えないと書かれてるではありませんか。PIC24「FV」じゃないと使えないと。ピン配置など他の箇所ではそんな事は書かれておらず、ここだけにシレッと書かれていても気づかない人が多くいると思われます。エラッタにも書いてないし。→幸い全く問題なく使えていますが、表面化しにくいバグでもあるのでしょうか。。いい加減にして欲しいです。
全体制御(MainControl)
主電源がONの間は常に電源が入っており、リモコンなどのユーザー操作を受け付けてアンプ回路の電源をON/FFするなど、全体的な制御を行います。
アンプ制御と同様 PIC24F を8MHz駆動で使いますが、リモコン受信を行うためセラロック(X2)を使って一応精度を高めています。(でもそこまでやらんでも大丈夫ですが…)
この回路は他の回路とは異なり、AC100電源から直接電源を得ています。そのため、そこからノイズが侵入しないよう、他の回路とは絶縁するようにしています。ただ、グランド電位が離れすぎるとグランド間でノイズが伝搬しますので、C117(0.01uF)を介して高周波的には接続するようにしています。
なお、2つのI2Cラインのうち、ASCL1(pin42)とASDA1(Pin41)の方のアイソレータは、表示制御側にあります。
ロータリーエンコーダーからの入力は、チャタリングを防ぐためにCRフィルタを設けています。部品点数は多くなりますが、ソフト側で対策しなくても快適な操作ができます。
また、ロータリーエンコーダの軸と取り付けたアルミ製ノブは、ケース本体(=アンプ本体のグランド)と接続して耐ノイズ性を高めています。
表示制御(DisplayControl)
PIC32MZ2048EFH064 を使って、400×240のLCDを高速にドライブします。
400×240なので表示速度が遅くならないように、また、フォントなど全ての表示データをPIC内に保持しておけるように、高速でメモリ量の多い PIC32MZ を選定しました。
Q1(IRLML6344TRPBFTR)は、バックライトLEDのスイッチとして働いています。R144(4.7Ω)は明るさ調整用のLEDで、実際に使ってみて場合によっては変更します。
この回路の電源には、コモンモードチョーク(L3)を挿入しています。また、全体制御とのI2Cラインにアイソレータを挿入し、他とは分離してノイズ低減を狙っています。
後述しますが、この PIC32MZ2048EFH064 には、I2Cが時々固まるという信じられないバグがあるため、実際にはI2Cでは通信していません。独自のI2Cもどきな「うさぎ式通信」により、400kHzのI2Cより高速な通信を行っています。
電源部1(PowerSection1)
AC100V入力のエントランスにあたる部分です。全体制御用に、AC100Vから直接3.3Vを得るトランスレス電源回路も含みます。
最初に20mHのコモンモードチョーク(L4)を使用したラインノイズフィルターを配置しています。
ACラインノイズフィルタは小型パッケージのものも売られていますが、コイルのインダクタンスが問題で、オーディオ装置にとっては大きい方が有利。自作すれば小型で効果の高いフィルタが作れます。
ただ、フィルタ効果が薄れないようにコイルやコンデンサの配置には注意が必要です。
Yコンデンサ(C137, C138)による中点は、一般にはケースに接続して、コモンモードノイズのリターンパスを与えることになりますが、経験上さまざまな要因により逆効果になることもあるので、接続を切り離すためのジャンパ(J1)を念のため用意しています。
アンプの電源は、ソリッドステートリレーの S108T02 を使ってON/OFFします。
コンデンサのリアクタンスを利用したトランスレス電源は、AC100Vから直接マイコン用の3.3Vを作れるので便利ですが、いくつか注意点があります。
リアクタンスを利用しているので、流れる電流が少なくなるほど、コンデンサ(C139, C140)通過後の電圧はAC100Vに近くなります。例えば、マイコンがスリープしたりして消費電流が少なくなると、レギュレーターが耐圧オーバーで破壊する恐れがあります。
これを防ぐために、6Vのツェナー(D9)を設けて無負荷とならないようにしています。
また、C139とC149には高電圧がチャージされるので、コンセントを抜いた後に触って感電しないように、ディスチャージ用の抵抗(R150)を設けています。
それから、リセッタブルヒューズを使う場合には、その耐圧に注意が必要です。負荷側で短絡してトリップすると、AC100Vがかかるためです。
一般にリセッタブルヒューズは耐圧が低いものが多いですが、この回路で使っているヒューズ(F2)は、AC100V対応の PTGL07AR820M9A51B0 です。これは、通常の状態でも82Ωの抵抗値がありますから、突入電流を抑える役割も持っています。
電源部2(PowerSection2)
トランスと整流回路です。この基板はメイントランスの接続端子台にもなっています。
一番上のDC2ラインですが、後段にてPICからON/OFFできるようにしてあるため、無負荷に近い状態になる場合があります。トランスは無負荷の状態と負荷のある状態では、出力電圧にかなりの開きが出るため、抵抗(R283, R284)を入れて常に一定の電流(9mA)を流すようにしてあります。
D17とD18は、電圧調整のために挿入できるようにしたものです。入手したトランスの実際の出力電圧を調査した結果、次段のレギュレータの絶対定格(22V)を超える恐れがあったため用意しました。が、先のバイアス電流による効果もあって大丈夫そうだったので、実際には入れていません。
使用している平滑用の電源コンデンサは全て低ESR品種。パワーアンプの電源ラインでは、あえてパラレルで使うようにしています。
電源部3(PowerSection3)
パワーアンプ以外の全ての電源をここで安定化します。
アンプの安定化電源というと発熱との戦いになりますね。
デジタル電源のDVDD(3.3V)は9.5V入力から作るため、シリーズレギュレータではチンチンになるはずです。そこで、変換効率の高いDCコンバータ(BP5293-33)を使うわけですが、代わりにノイズの問題が出てきます。
この回路では、前方にエミフィル(EMF21)、後方にFBx2個とフィールドスルーコンデンサを配置して対策しています。C152(330uF)も、9mΩという超低ESR品種です。
AK4499EQ に供給するアナログ電源5Vは、LT3045(IC27)を使って9.5Vから作るんですが、電流が多いのでこれも相当熱くなります。というか、計算上max.1Wを超えるので、あんな小さなパッケージでは危険領域に入ります。
そこで、前段としてツェナーダイオード(D10)とパワトラ(Q2)を利用した簡易安定化電源を配置することにしました。これにより、Q2で発熱を担当させることができて、電源リプルなども除去されるので一石二鳥です。
実際、Q2は想像以上にアツアツになっためヒートシンクを設けました。
LT3045 と LT3094 は、データシートで推奨されている通り、出力コンデンサをケルビン接続としています。これにより、動作安定性、電圧精度、超高周波域での特性が向上するとのことです。
電源部4(PowerSection4)
パワーアンプの安定化電源です。超低ノイズで知られる LT3045 と LT3094 をそれぞれ4パラレルで構成した贅沢電源です。
LT3045/LT3094 はパラレルで使うことでさらにRMSノイズが減りますが、ここでパラレルしている第一の理由は、最大電流として2Aを想定しているためです。ノイズ低減のためではありません。
でも、4パラレルだと、RMSノイズが√4で1/2に減るというオマケが付きます。
まぁ、パワーアンプの電源なので、低ノイズという点ではパラレルでなくとも十分です。そのノイズの違いで音が変わったとしたらプラシーボではないかと思います。
ちなみに、パラレル接続する場合は、出力同士を20mΩで接続して微妙な電圧のばらつきを吸収させる必要があるとのこと。データシートでは基板のパターンが持つ抵抗成分を利用する方法が書かれていますが、この回路では20mΩのDC抵抗を持つフェライトビーズ BLM31KN471SN1 を使っています。高周波のノイズカットもできて一石二鳥ですね。
そして、出力コンデンサはもちろんケルビン接続です。
それから、この基板の LT3045/LT3094 は結構発熱するので、チップの上に熱伝導のためのアルミバーを装着し、ケース天板へ熱を逃がすようにします。
パーツと入手先
機構部品も含めた全パーツリストです。※列[No1][No2]はソート用
今回はほとんど通販で揃えました。次は利用した全ての通販サイトです。
- MOUSER ※電子部品一般
- 秋月電子 ※電子部品一般
- Digi-Key ※電子部品一般
- RSコンポーネンツ ※電子部品一般
- Amazon※Combo384互換、機構関連
- シリコンラボ ※VCXO
- aitendo ※LCD、ヒートシンク
- フォルテシモ ※スピーカー端子
- マルツ ※機構関連
- 共立エレショップ ※機構関連
- コウイチロウ ※アルミ・銅板
- 山崎 ※ネジ類
- はざいや ※アクリル
より詳しく⇒電子工作パーツ入手先!おすすめの電子パーツ通販と店舗
主要パーツ
Amanero Combo384(テクソル)
USBオーディオでハイレゾを再生するときに使う定番のアイテムです。テクソルはAmanero社の日本総代理店。ファームウェアのDLもココ。
本家のサイトの Combo384 のページ:Amanero Technologies
ATSAM3U1C XC2C64A USB DDボード(amazon)
正規品の半額以下で手に入るAmanero互換のUSBオーディオボード。USB-Bコネクタがゴールド色なのでちょっと高級感があります。ドライバやファームウェアも正規品と同じものを使います。
AK4499EQ(Digi-Key)
旭化成のフラグシップDAC。あまり詳しくない人からすると、あの旭化成?と思うでしょう。日本メーカーというのが嬉しいですね。
製品ページ:VERITA AK4499EQ
LMK04832(MOUSER)
驚異の低ジッターを誇るトップクラスのジッタクリーナー。パッケージはWQFNでピンは出ていませんが、意外と簡単に手ハンダできます。
製品ページ:LMK04832
566BFA001152ABG(シリコンラボ)
超低ジッターなデュアル周波数VCXO。希望の周波数などを指定してカスタムオーダーします。サンプル品が送料とも無料でもらえました。
シリコンラボ万歳! 製品ページ:Si566
Part Number | 566BFA001152ABG |
Model Number | Si566 |
Frequency (MHz): | |
FS=0: | 112.896000 |
FS=1: | 122.880000 |
Output Format and Supply Voltage | LVDS: 1.8 V, 2.5 V, 3.3 V |
Temperature Stability | +/- 20 ppm |
Tuning Slope | 225 ppm/V |
OE Pin Location and Polarity | VC Pin1, FS Pin2, OE Always On |
Package Option | 5×7 mm |
Operating Temp Range (°C): | -40 to +85 |
OPA1612(MOUSER)
発売されてから5年以上経ちますが、いまだトップクラスの性能を誇るバイポーラオペアンプ。本作では1回路入りの OPA1611 も使います。
製品ページ:OPA1612
TQ2H-L2-5V(MOUSER)
パナソニックの小型なラッチングリレー。信号切り替えに便利です。スピーカーリレーには、ノンラッチングの TQ2H-5V を使います。
製品ページ:TQ2H-L2-5V
KRL3264E-C-R470-F-T1(MOUSER)
アンプの出力抵抗にチップ抵抗なんて音が悪そうというのは完全な誤解です。小型で2W、非磁性体、良好な温度安定性、短い配線、今どきのチップ抵抗は高性能。安価なオーディオ用セメント抵抗より良いです。
1182Q9(Digi-Key)
スペックは 9V+9V 6.67Aですが、入力が117Vなので整流後の電力はもう少し下がります。アナログ電源にも別のトロイダルを使います。
製品ページ:1182 Series
NBA1-24-001(Amazon)
ちょっと前までは、なかなか入手できなかったバランスヘッドホンジャックですが、最近は取り扱うところが増えてきました。
製品ページ:NBA1-24-001
SP1P-GO(フォルテシモ)
作りの良い金メッキスピーカー端子です。スピーカー端子は、音質もさることながら、一つのステータスになりますね。
製品ページ:SP1P-GO
M032C9326D8(aitendo)
本作の用途には十分なクォリティーの240×400のTFT液晶ディスプレイモジュール。モジュールというか基板に装着されているだけですね。
製品ページ:M032C9326D8
製作手順
基板の製作ですが、さすがに今回は全ての基板を自作するのは厳しかったので、FusionPCB でオーダメイドすることにしました。
より詳しく⇒プリント基板の自作!簡単にできる格安オーダーメイド法
届いた全ての基板は、わずかに小さなキズなど入ったものは少々あったものの、品質には全く問題なかったです。
オーダー時に提出したガーバーファイルを公開します。ただメイン基板は、ヘッドホンジャックの補助基板を含めて発注しました。
基板実装
入力部基板(InputSection)
入力部基板には、Combo384(の互換品)を実装するのでその下準備。まずは、USB Bメスコネクタを外します。
互換品のコネクタはゴールドっぽくて高級感があるので、再利用することにしました。この色のBメスってあんまし見ないですよね。
PICをハンダ付けし、Combo384 を実装する用意ができました。USBコネクタの部分にも2.54mmピッチのピンヘッダを使います。
後で思ったんですが、正規品などと交換できるようにソケットにしても良かったですね。
これは後日対応の様子です。IC2(PIC32MX120F032)のpin12とpin26を、このようにジャンパー線で接続する必要があります。接続しないと、再生可能なDSDのベースサンプル周波数は44.1KHzのみとなります。本作で唯一の後付けジャンパー線です。
USBシリアルモジュールは、USB-Aオス→microUSBオス 極小変換アダプタを使って、端子と基板を配線する形で接続します。
極小アダプタ KM-157 USB AオスをmicroUSBオスへ変換するアダプタ。これに配線をハンダ付けすればmicorUSBへの小型コネクタとなります。 |
Combo384 基板を固定するためのビス穴も用意しましたが、使いませんでした。
ジッタクリーナー基板(JitterCleaner)
ジッタクリーナー基板は、LMK04832 のハンダ付けが難関に思われますが、意外と簡単です。
まずは固定しないことにはハンダ付けできません。横着してこうやって押さえてみたんですが、ピンセットでちょっと傷が付きました。
仮止めしたら、側面のピン面と基板のパターンがズレていないか確認します。
ハンダをペチャペチャと付けていって、仕上げにフラックスを使います。
この時のコテの温度。温調コテならもう少し低くても大丈夫そうです。
裏面のエクスポーズドパッドのハンダ付けは、熱容量のあるコテか、温調が付いているコテでないとハンダ不良になりやすいです。共晶ハンダと温調コテの組み合わせが一番確実で早く作業できます。
両面プリント基板用はんだ SD-61 太洋電機産業(goot)の0.8mm共晶ハンダで融点が低くよく流れます。時々使うだけなので1本買っておけば結構長く使えます。 |
Quimat 温調ハンダゴテ デジタル温度表示付きで1℃単位で温度を調整可能。加熱が早く冷めにくいです。電源スイッチが付いている所もいいですね。 |
ハンダが冷えると真ん中が凹むので、大盛りにした方がいいですね。
インスペクションルーペ SL-54 電子工作、特に表面実装部品のハンダ付けに超オススメ!というか、本作ではこれがないと作れませんので必須アイテムになります。 |
DAC基板(DACSection)
AK4499EQ の端のピン同士は接続するようになっているので楽ですね。
最後はフラックスで仕上げると、ショートも防げてきれいに仕上がります。
プリント基板フラックス BS-75B ハンダ用品でおなじみgootのフラックス、無洗浄タイプです。フタの内側に小さなハケも付いていて使いやすいです。 |
基板用フラックス洗浄剤 フタに小さな筆が付いているので固くこびり付いたフラックスをピンポイントに洗浄できます。スプレータイプと併用すると良い。 |
ホーザン フラックスクリーナー アルコール主成分で、ノズルでシューーっと広範囲を洗い流せます。このたぐいの商品の中では最も安い部類に入ります。 |
I/V変換回路のハンダ付けは、出てくる音を想像するとなかなか楽しい作業ですな。
最後に電解コンデンサをハンダ付けです。
オーディオ用電解コンデンサではないので見栄えはイマイチ?ですが、低ESRのポリマーコンデンサに期待します。
アナログ部基板(AnalogSection)
それにしても、このフットプリント、確かKiCadに入っていたものだったと思うんですが、パッド部分にレジストが掛かっています。手ハンダなので穴を開けたのは当方ですが、穴がなかったらハンダ不良になるところですね。
ルビコンの22uFチップフィルム。
AK4499EQの2.5Vのオフセットをカットする、アナログ経路内の唯一のコンデンサです。
パワーアンプ基板(PowerAmp)
パワーアンプのアイソレータコイルを自作します。1mmのポリウレタン線と、Φ12mmの丸棒は何でも良い。
丸棒に10回巻いて作ります。コイルの外径は、Φ14.5mmくらいになります。
右巻き左巻きあるので注意。といいつつ、これは見事に間違った例なので、基板に入りません。反対ですね。
きれいに仕上げるコツは、巻く前にポリウレタン線をきつく絞った濡れ雑巾でつまんで、線が真っ直ぐになるように数回しごきます。失敗しても解いてしごけばまた真っ直ぐになります。
仕上げに、たっぷり溶かしたハンダに浸けて外被を焼きます。
LCRメーター LCR40 C:0.4pF-10000uF(±1.5%) L:1uH-10H(±1.5%) 但し、小さい値では精度は落ちます。 |
8つのパワートランジスタは、ケースに入れるまでの仮付けです。
アンプ制御基板(AmpControl)
あまり見せ場はないので端折ります。
全体制御基板(MainControl)
表示制御基板(DisplayControl)
手前にあるのは、I2Cアイソレーターと、コモンモードチョークコイル。
電源部1基板(PowerSection1)
ヒューズのシルクは1.5Aになってますが、実際には2Aを使います。
電源部2基板(PowerSection2)
低出力アンプだと、このコンパクトサイズで40000uFを載せられます。
電源部3基板(PowerSection3)
LT3045/LT3094 を四角に囲んであるシルクはヒートシンクスペースで、最後に小型ヒートシンクを貼り付けます。
電源部4基板(PowerSection4)
HPジャック補助基板
バランスヘッドホンジャック NBA1-24-001 の補助基板です。メイン基板の一部としてオーダーしましたが、面付け(Vカット入れ)だと追加料金がかかるので、面付けせずに自分でカットしました。
NBA1-24-001 の足は12本あって平たいので、基板の穴も長穴になります。
ミニカッティングテーブルソー 基板のカットが楽チンになる!木材やケースの加工にも使えるミニテーブルソー。この値段で品質もよくオススメ。 |
仮組み
ケースに組み込む前に、ケースに組み込むのと同じ配置で仮組みしてみて、配置に問題ないか確認したり、コネクタケーブルの長さを決めたり、動作検証をしたりします。
本番のシャーシと同じ大きさのアクリル板に、本番と同じ位置に穴あけします。
メイントランスは重いので基板に負担がかかって反りが出ます。そこで、電源部1と2の間に5mm厚のゴムシートを敷いて、そこに乗せる形にしました。
トランス一次側の配線には、日圧のVHコネクタを直接付けます。
ちなみに、アンプの電源トランスからの配線は、電流の行きと帰りの線でこのようなツイストペアにするのが鉄則です。両線間の面積が広くなるほど磁界が広くバラまかれ、ハムノイズの原因となります
トランス二次側の配線には、丸型端子(R2-4)をハンダ付けして、
電源部2の端子台へ接続します。もちろん、ここもツイストペア。
基板用ネジ端子台 大型のものならよく見ますが、小型なものは売っていそうであまり見かけないです。基板の電源用などに重宝します。 |
丸形端子 R2-4 丸型端子には規格があって、これはM4ビス用の太いケーブル用のものです。圧着せずともハンダ付けでOKです。 |
小型化と、配線を少なくするためにも、一部の基板はスタッキングするようにしました。これは、電源部2~4のスタッキングです。
電流の多い配線は、ロスが少なくなるようにピン1本ではなく、複数のピンを割り当てます。
次は、入力部基板、ジッタクリーナー基板、アンプ制御基板、DAC基板。
基板間で接続するピンヘッダは、オスメス間の距離を調整するために仮組みしながら、この時点でハンダ付けしました。
例えば、これはジッタクリーナー基板とDAC基板を接続するピンヘッダメス。MCLKとリターンパスです
いったんバラして、動作検証しながらアクリル板上に組み上げていきます。
この辺りから、コネクタケーブルを用意します。全部で30本以上ありますが、がまんして粛々と圧着していきます。
こちらは、1本作るのに30分以上かかった、バランス二股2芯シールド線。
本作くらいの実装密度になると、コネクタ接続無しではとても厳しいです。
より詳しく⇒コネクタの自作!電子工作の圧着工具と圧着方法
ソフト開発も同時進行なので、一通り動くようになるまでには結構時間がかかりました。
基板も何枚か作り直しています。
ケースへの組込み
ケースは、タカチのヒートシンクケース HYシリーズ HY70_28_23SS を使い、カスタム加工を行いました。このケースは、自作アンプの製作でよく見かけます。
今回は多分ファイナルアンプですので、フロントパネルに印刷を依頼することにしました。
加工図、印刷図は、jwcad を使ってDXFファイルで用意しました。また、印刷データは Inkscape というベクター画像作成ツールで作りました。
ちなみに印刷データは、ビットマップなどのラスター画像だと受け付けてもらえないので、ベクター画像で用意します。
参考のために、提出したデータファイルをダウンロードに置いておきます。
また、ケース本体だけでなく専用のシャーシ(アルミ取り付け板)HYC23-28 を利用し、これもカスタム加工を依頼しました。
これはビス穴開けだけなので自分でやろうと思えばできると思うのですが、バリが出るし、なんだか勢いで頼んでまえみたいな感じです。
先の、仮組みのアクリル板と同じ穴あけ加工を依頼し、タップは自分で切ります。
※一応加工図等も公開していますが、本作では小型化を優先しているため、作りやすさやメンテナンス性は犠牲にしています。そのため組み立ては大変です。全ての組み立て手順は公開しておりませんので、ご参考程度にどうぞ。
アルミカバー付ゴム足 本体の主要材質はプラスチックですがアルミ蒸着による化粧がされています。インシュレーターとしての機能もあります。 |
フロントパネルのディスプレイ部にスモークアクリル板をはめ込みます。穴とアクリルのサイズは全く同じ。アクリルを冷蔵庫で冷やすとハマります。
穴のサイズを0.1mm大きくして、すき間にアロンアルファを流し込むやり方でもできます。てか、その方がいいかもです。
フロントパネルのLED表示用の導光棒を作っています。アクリル丸棒をカットしてサンドペーパーで磨き、平たくしてつや消しする。
フロントパネルのLEDは秋月電子で売っているリード付きチップLED。ホットボンドで固定します。
アクリル板上に仮組みした基板を全てばらします。まるでガラクタ。。なんでこんなに沢山の基板が必要なのか不思議に思えてきます。
ミニヒートシンクを作ります。金属曲げ工具を使ってアルミ板を直角に折り曲げます。
金属曲げ工具 TV-40 しょっちゅう使うわけじゃありませんが、あれば助かるアイテムの一つ。ヒートシンクの自作など電子工作の幅が広がります。 |
ヒートシンクというか、ケースのヒートシンクに接続するジョイント板になります。
3M 熱伝導性両面テープ 熱伝導性テープは本物かどうかわかりにくいため、模造品が多いと聞いたことがありますが、これは3Mなので安心です。 |
PowerSection2 の LT3045/LT3094 にはミニヒートシンクを取り付ける。
パワーアンプの安定化電源の熱をケースのアルミ天板へ逃がすヒートバーを取り付けます。
まずアクリルバーに熱伝導両面テープを貼る。
チップと同じ高さ(1mm)の熱伝導性シートを貼り付けて、基板の銅箔からも熱を吸い取ります。
チップもろともヒートバーを貼り付ける。
ヒートバーと天板との間にも熱伝導シートを挟み込んで接続します。
コレがあるのと無いのとでは雲泥の差が出ます。
熱伝導性シリコンパッド 伝導性6.0 W/mkのやわらかいシリコンパッド。0.5/1.0/1.5mmの3種類の厚さが3枚づつ入っているので合わせやすい。 |
パワーアンプ基板の端子台と、スピーカーターミナルを接続する無酸素銅ケーブル。この短さで無酸素銅にしてもあまり意味ないと思いつつ使うのがアンプ自作Loverですかね。
パワートランジスタは、シリコングリスを塗ってケースのヒートシンクに押し付ける形にします。それでも十分機能します。
これは、その前に両面テープで仮止めしてハンダ付けしているところ。
シャーシへアースする丸型端子のハンダ付け。ツールクリッパーを使います。
ツールクリッパー TX303 パーツショップでよく見かけるTSKのツールクリッパー。電子工作では基板の固定やハンダ付けの時にとても重宝します。 |
赤外線受光モジュールはシールドに覆われているので、ケースと接触しないように熱収縮チューブを使って絶縁します。
熱収縮チューブセット 最近はこのようなセット物がお得です。これはつや消しタイプで、収縮率が結構高いのでオススメです。 |
AK4499EQ とI/V変換の OPA1612 にもヒートシンクを取り付けます。
AK4499EQ は結構熱くなります。
ケーブルが軽く天板に当たりますが、取り付けたら問題なしです。
銅板を取り付けます。これはノイズシールドの目的ではなくて、前面基板(MainControl)を後ろから支えるもの。押し込みスイッチ付きのロータリーエンコーダなので、念のため補強しています。
全て組み込んだ後のシャーシ裏面。トランスの下の部分に補強用のスペーサーを入れて、この上からケース底板を取り付けます。
トランスのせいもあって、これでも結構重たいです。4.8Kgくらいあります。
最後に外部PCの改造です。改造とは言っても、電源スイッチ(通常タクトスイッチ)の両端から線を引き出してきて3.5mmステレオプラグに接続するだけです。
外部PCの天板を開けたところ。ファンレスなのでヒートシンクが大きいです。
タクトスイッチのハンダ付け部分を確認。テスターを使ってスイッチを押すと短絡するピンを探します。このPCの場合、片方がGNDへ落ちていました。
このようにステレオプラグと接続し、熱収縮チューブで仕上げます。
接続先はフォトカプラなので極性があります。
これで、本機の電源を入れると外部PCの電源もONします。
KODLIX GD41ミニPC Gemini Lake N4120クアッドコア, DDR4 8G, SSD 128G, サイズ13.6x12x4.6, TDP 6Wでファンレスで静音, コスパ最高です。 |
ソフトウェア
本作では、5種類(8個)のPICが稼働しています。
回路図 | PIC | 駆動クロック | |
---|---|---|---|
InputSection | PIC32MX120F032B | 内蔵FRC | 2MHz |
AmpControl | PIC24F32KA304 | 内蔵FRC | 8MHz |
PowerAmp | PIC16F1705 | INTOSC | 8MHz |
MainControl | PIC24F32KA304 | セラミック(HS) | 8MHz |
DisplayControl | PIC32MZ2048EFH064 | 内蔵FRC | 200MHz |
公開ソースは、全てのPICのMPLAB Xプロジェクトを含んでいます。また、外部PCの制御アプリ(ControlApp)のVisualStudio 2015プロジェクトも含んでいます。
※当方の環境で一通りは問題なく動作していますが、まだ十分な使い込みができていないため、今後バージョンアップする可能性もあります。
まず、解凍して出てきたプロジェクトを適当な場所にコピーします。MPLAB Xでプロジェクトを開くと、多分 main.c などのソースは見つからない状態(黄色のアイコン)になっていると思いますので、手動でプロジェクトに追加してビルドすれば通るはずです。
なお、ビルドに必要な外部ライブラリなどはありません。
※InputSectionは、以前あったXC32のplibを使っていますが、必要な部分だけをコピーしてきて含めていますので、別途インストールする必要はありません。
使用したIDEのバージョンは下記の通り。2020/9 頃の最新版です。
・MPLAB X IDE:v5.40
・XC8:v2.20
・XC16:v1.50
・XC32:v2.41
以前はフリー版のコンパイラでは最適化ができませんでしたが、現在ではレベル2までの最適化ができるようになっていますので、フリーで可能な最大の最適化レベルに設定しています。
なお、DisplayControl では画像データをプログラムに含めていてサイズが大きいため、PickKit3では書き込みに1分以上の時間がかかります。デバッグ開始もかなり遅い。PickKit4を使えば早くなるので、だいぶ楽になります。
PICkit4 PICkit3より色々拡張されていますが、速度が早くなったのが一番のメリットで、特にPIC32で本領を発揮します。PICkit3に代わるこれからのスタンダードです。 |
外部PCの制御アプリは、C# Windowsフォームアプリです。
VisualStudioは、Community 2015 Version 14.0.23107.0 です。
通信経路図
各PIC間の通信経路です。うさぎ式以外はI2C通信です。
入力部(InputSection)
- I2S量子化ビット数の検出
- DSDベースサンプリング周波数の検出
- Combo384 の各IO出力の取得
- スレーブI2C通信
I2S量子化ビット数の検出について
PICに内蔵のI2S(SPI)モジュールを利用してI2S信号を受信し、その内容から16/24/32ビットのうちどれなのかを判断します。
次の3つは Combo384 が実際に送出するI2S波形です。なお、I2Sモジュールのデフォルトの設定では、受信したデータの値は、信号がLOの時「1」になります。
16ビット時
24ビット時
32ビット時
受信データレジスタ長は32bitですので、例えば16bitフォーマットの場合は、LSB側(下位側)に「1」がパディングされ「0x????FFFF」になります。そのパティング部分の長さを見て判断しています。
信号の切り替え時などに断続的に乱れることがあるので、一つのフレームだけからは判断できません。そこで、それぞれのパターンが観測された回数をカウントし(同時に他候補は減らす)所定のしきい値(256)を超えたらコレだ!という具合に判定しています。
必ずしも受信データ全てを調べる必要はありません。受信モジュールではオーバーフローが発生しますが、それは無視してゆっくりした周期で調べます。早く動かしても消費電力が上がるだけで、結果は同じでした。
また、再生中に時々誤検知する事がありますが、そこは Combo384 の信号切替え(MUTEピンがHI)が発生するまでは、現在の判定結果を維持するなどして回避します。
DSDベースサンプリング周波数の検出について
次の表は、AK4499EQ のデータシートにあるテーブル(Table 18)の一部です。
普通は、このベース周波数(32/44.1/48kHz)は、気にしなくても AK4499EQ 側で勝手に受け付けてくれるので問題ありませんが、本作では、ジッタクリーナのVCXO周波数(MCLK)を、22.5792MHz系と24.5760MHz系で切り替える必要があるため、これを知る必要があります。
ベース周波数は、上の表で分かるようにDCLKの周波数から判断できますので、PIC のTimer1の非同期モードを利用して周波数を測定します。他のTimer2や3などは同期モードしかサポートしていないため使えません。
余談ですが、PICは昔からTimer0や1だけが非同期モード可能なんですが、なぜなんでしょうかね。他のタイマーでもサポートしてくれれば便利なのにと思ったことが何度もあります。そんなに大変なんでしょうか。。
アンプ制御(AmpControl)
- ILMK04832 の制御
- AK4499EQ の制御
- ステートマシン処理
- リレーの制御
- ボリューム制御
- 各デバイスの情報収集
- マスターI2C通信
- スレーブI2C通信
LMK04832 の制御について
LMK04832 は、基本的にリアルタイムの制御は必要なく、レジスタの設定を行うだけです。レジスタは120個以上ありますが、TI社の出しているTICS Pro というツールを使うと、わりと楽に作れます。また、データシート以外に詳しい情報がユーザーガイドに載っています。
下は、TICS Pro のPLL設定画面です。
ただ、このツールは LMK04832 の初期のチップバージョンで作られていて更新されていないため、現在の LMK04832 のデータシートとは一部レジスタ(0x162等)の内容が異なりますが、データシートの方が正解になります。
LMK04832 では基本となる動作モデルがいくつか用意されていて、本作では「Dual Loop With Nested 0-Delay」というモードを利用しています。
このモードは、PLLを2つ使うDual Loopの1つで、遅延ゼロ(入出力の位相ズレがない)で動作させることができ、入力と出力の間で帰還ループを形成している点が特徴です。
本作では、MCLKが22.5792MHz系と24.5760MHz系の2つが必要ですが、これらは相容れない周波数同士なので、VCXOの周波数やデバイダの設定などがそれぞれに必要になります。そのため、2パターンのレジスタ設定を用意しておき、PLL1の外部VCXOにはデュアル周波数タイプを利用して周波数を切り替えています。
PLLデュアルループで、周波数が2パターンあるということは、PLLのループフィルタは4つ必要になります。最初は切替え式のLPFにしようかとも考えましたが、周波数が近いため1つで済ませることはできないかシュミレータで検証した所、特に問題なさそうだったので共有することにしました。
シュミレータは、同じくTI社の PLLatinum Sim を使いました。
2つの周波数のLPFが共有ということは、両者の特性に違いが出ることになりますが、特に気にしなくても良いレベルです。
項目\周波数 | 22.5792MHz時 | 24.5760MHz時 |
---|---|---|
バンド幅 | 14.56Hz | 14.48Hz |
位相余裕度 | 58.78deg | 58.76deg |
項目\周波数 | 22.5792MHz時 | 24.5760MHz時 |
---|---|---|
バンド幅 | 210.6kHz | 221.5kHz |
位相余裕度 | 64.23deg | 63.78deg |
LPFのバンド幅ですが、PLL1では約14Hzと低く、PLL2では200kHz超えと高く、無線機などで使うPLLからすると異常に見えますが、これが LMK04832 のデュアルPLLによる超低ジッタ特性の種明かしになります。
なお、PLLがロックされていなくても音は普通に聴こえますので、ミュートはしません。
最後に、LMK04832 の主要な設定値についてまとめておきます。
AK4499EQ の制御について
制御方法としては特に変わった仕様はなく、必要に応じてレジスタを設定するのみです。ただ、再生フォーマットが変わった場合など、一部のレジスタを変更した場合はリセットが必要といったことはあります。
AK4499EQ にはPCM(I2S)とDSDの自動切り替え機能が付いています。しかし、切り替えに必要な要件として、入力クロックに特定のパターンが必要なため、切り替わらないというトラブルが出るかも知れません。本作では、切り替えに必要な情報が入力部から得られるため、手動切替えとしています。
I2Sのサンプリング周波数設定は、自動検出(fs Auto Detect mode)としました。また、DSDのモード設定には自動切替えがないので、手動で切り替えます。
下表は、各フォーマットにおける各周波数や設定レジスタについてまとめたものです。
なお、Combo384 から32KHzベースのDSDが出てくるかどうかは分かりません。
もし出てくるとすれば、MCLKは24.576MHzのハズなので、DCKSを「1」(=768Fs)にセットします。
それから、本作では AK4499EQ の4チャンネルの出力を、L/Rそれぞれ2パラレルで使う構成としています。そのために、DSDPATH=”1″ とした上で、次のように設定します(Combo384 と AK4499EQ の接続を回路図の通りとした場合)。
Combo384 では、DSD出力のLとRを、DSD1(pin3)とDSD2(pin5)のどちらに割り当てるかをツールで設定できるようですが、そのデフォルト設定が、残念ながら想定していたものとは逆になっていたため、PCMの場合とは反対に設定しています。
ステートマシン処理について
アンプ制御では、LMK04832 と AK4499EQ を設定するために、簡単なステートマシン処理を行ってます。ソフトウェアにおけるステートマシンとは、状態とイベントに応じて処理を振り分けるようなプログラミング技法で、組込みなどで良く使われています。
下表は、その状態遷移図です。
実際のコーディングでは、パターンが多い時は関数ポインタを使ったりしますが、ここでは少ないので switch/case と if文 を使います。
LMK04832 は、電源を入れた直後はPowerDown状態ですが、一度でも信号入力があった後は、USBが抜かれても、ホールドオーバー機能によって AK4499EQ へクロックを供給し続けるように動作します。
ボリューム制御について
本作のボリュームは、DACのデジタルボリュームとアナログアッテネータを併用したものです。アナログアッテネータは、「-0dB」「-12dB」「-24dB」の3レンジあり、ボリュームステップに応じて切り替えます。
下表は、ボリューム値に対する、デジタルボリュームとアッテネータの減衰量です。
一部(ボリューム40以上)だけの表ですが、DAC側とアナログアッテネータ側(ATT)の減衰量の関係を示します。
ボリューム47と59を中心にATTを切り替えています。また、上げて行く時と下げていく時で、切り替えポイントを2ステップだけズラしてヒステリシスを持たせています。
ボリューム値は、スピーカーとヘッドホンで別々に管理するようにしていますが、両者では良く使う範囲が異なります。そのため、ヘッドホンの時の最大は62までとしたり、スピーカーの場合、30未満は2ステップづつ変化したりといった工夫をしています。
DACが-0dBのポイントは、デジタルボリュームによるビット落ちは全くありません。さらに AK4499EQ は32bitなので、その位置から幾分減衰したとしても、ビット落ちを気にする必要はほとんどないでしょう。
後、オートボリュームについてです。設定した音量を維持するためにボリュームを制御する機能です。これを実現るために、アンプ制御ではピークホールド回路からの電圧をADCで読み取り、30秒間に渡って150サンプルした値の平均値を持っています。
そして、この値を元に、ボリュームをゆっくりと上げ下げします。
設定音量を変えたい場合は、ボリュームを回して好みの音量にするだけです。ボリュームが回されると設定値をリセットすると共に、平均値の再取得を開始して、取得が完了した時点の音量を設定値として保存します。
なお、スピーカーとヘッドホンを切り替えたり、DACのゲインを変えた場合も、平均値の再取得を開始しますが、これらの場合は設定音量はリセットしません。
バイアス制御(PowerAmp)
- バイアス制御
- 電流情報の取得
- スレーブI2C通信
バイアス制御について
パワーアンプの終段トランジスタのエミッタ電流が、設定値(50mA)を下回ったらDACの値を素早く上げて、上回っている時はゆっくり下げていくという動作が基本です。
このやり方だと、無音で出力0の状態では、設定値付近で上げて下げてを繰り返すようになります。ゆっくりした動作なのでそれでも特に問題ないのですが、設定値近くになったらそれ以上は下げしないようにして、スタンバイ状態とすることにしました。
設定値に少し上乗せする値を、スタンバイマージンとして与えます。
設定:50mA
マージン:10mA
での例
アナログフォトカプラの感度特性により、DAC値が小さい領域では、DAC値「1」に対してバイアス電流は5mA~7mA程度のステップとなりますので、実際にはマージンは9mAにしてあります。
このようにして、パワートランジスタが、なるべく少ない消費電流でA級動作するようにします。
ただ、急激にボリュームを上げたり、大幅なピークアップが音声信号に混じっていると、一瞬だけトランジスタがOFFしてしまう、つまりB級になってしまうことは考えられますが、BGM程度の音量で実際の再生中の動作をオシロで観察してみると、そういう状況はあまり見られませんでした。
バイアス設定値を上げれば、さらに確率は減るでしょうが、発熱は大きくなります。
なお、設定値との比較は、DACで読み取った値で比較するわけではなくコンペアを使います。その方が、確実にリミットアンダーを捉えることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // バイアス制御 if (WaitDetect(s_nLowerInterval)) { // 指示値より低下を検知 →バイアスを上げる if (DAC1CON1bits.DAC1R < 0xFF) ++DAC1CON1bits.DAC1R; // 出力コンデンサがあるためすぐには上がらない s_nLowerInterval = LOWER_INTERVAL_MAX; s_nState = STATE_NORMAL; DelayMs(RAISE_INTERVAL); // 出力が上がってからフラグクリア C1IF = 0; C2IF = 0; DelayMs(1); } else { // 指示値より高い可能性 →バイアスを下げる if (s_nAvgCurrent >= (s_nLowerLimit + LOWER_MARGIN)) { // バイアスを下げる if (DAC1CON1bits.DAC1R > 0x00) { --DAC1CON1bits.DAC1R; // 下げる間隔を短くしていく if (s_nLowerInterval > LOWER_INTERVAL_MIN) { s_nLowerInterval -= (s_nLowerInterval * LOWER_RATE) / 100; if (s_nLowerInterval < LOWER_INTERVAL_MIN) s_nLowerInterval = LOWER_INTERVAL_MIN; } } else { // DAC0出力にしたのに下限に達しない s_nLowerInterval = LOWER_INTERVAL_MAX; s_nState = STATE_WARNING; } } else { // これ以上は下げない→スタンバイ状態 s_nLowerInterval = LOWER_INTERVAL_MAX; s_nState = STATE_STANDBY; } } |
全体制御(MainControl)
- ユーザーインターフェース
- 外部PCの制御(COM通信)
- うさぎ式通信(送信)
- スレーブI2C通信
ユーザーインターフェース
ロータリーエンコーダと赤外線リモコンからの操作を受けて、電源のON/OFFを行ったり、アンプ制御にコマンドを発行します。
今回選んだリモコンの OLYMPUS RM-1です。これは、カメラの遠隔操作用の小型リモコンなんですが、シンプルなのが気に入りました。
下表のリモコン操作は、これを前提にしたものです。
操作 | 内容 |
---|---|
ボリュームノブ回転 | ボリューム UP/DOWN |
ボリュームノブ押下 | オートボリューム ON/OFF |
ファンクション回転 | ・出力切替え ・バスブースト設定 ・DACゲイン設定 ・PCMフィルタ設定 ・DSDフィルタ設定 ・ステータス表示 ・ミュート ・ホーム画面に戻る |
ファンクション押下 | 設定実行・ホームに戻る・電源OFF |
リモコン ENTERキー | 電源OFF |
リモコン W | アウトプット切替え・次のジャンル* |
リモコン T | ミュート・次のプレイリスト* |
リモコン ±キー | ボリューム UP/DOWN |
*外部PC接続時
外部PCの制御について
外部PCを接続している場合は、USBシリアル通信によるコマンド送信を行います。接続していない場合は、その制御は行わずに通常通り動作します。
・ボーレート:9600
・データ:8bit
・パリティー:無し
・ストップ:1bit
・フロー制御:無し
コマンド文字列はASCIIで、最後に改行(<CR><LF>)を付与します。
うさぎ式通信について
表示制御の PIC32MZ2048EFH064 とのI2C通信が時々固まることがあって、いろいろやっても分からず、どうしたもんかと途方に暮れていた時、何気にエラッタを見てみると、なんと!I2Cモジュールにその固まるバグがあると書いてあるじゃありませんか。
そこにはソフトウェアでの回避方法も書かれていますが、試してみてもダメでした。なんか、Revision「B2」で修正されているようにも書かれていますが、PICはLCDの裏にハンダ付けしてあるため、確認することもできず。。
もう、なんだか面倒になってきて、オリジナルの通信でなんとかすることにしました。
今回は、単方向通信だったので、全体制御がマスターになりポートをバタつかせる方法でなんとかできました。元のI2CのSCLとSDAの2つのOpenDrainラインを使い、受信側はSCLを使って送信側にBusyを伝えることもできるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | static void SendComm(const UINT8* pData, int nCount) { const UINT8* p = pData; // Busy解除待ち while(!COM_CLK); COM_CLK_TRIS = 0; Nop(); int i; for(i = 0; i < nCount; i++, p++) { UINT8 data = *p; COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 0; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 1; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 2; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 3; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 4; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 5; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 6; COM_CLK_TRIS = 1; Nop(); COM_CLK_TRIS = 0; COM_DAT_TRIS = data >> 7; COM_CLK_TRIS = 1; } } |
これで、I2C(400kHz)と同じくらいか、それ以上の速さで通信できます。
I2Cがマイコンに載るようになったのは大昔。今どき、こんな基本的なところでバグなんて出さないで欲しいですね。
表示制御(DisplayControl)
- LCD制御
- うさぎ式通信(受信)
LCD制御について
LCDのコントローラは、ILI9326 です。aitendoからサンプルコードがダウンロードできたのですが、データシートに記載されている初期化手順と一部が違っています。多分、それでも問題ないのでしょうが、サンプルコードは汚いので流用せず、データシートを正として一から作りました。しかし、逆にサンプルコードには、データシートには載っていない謎のレジスタへの設定が含まれているので、その部分は取り入れました。
描画方法は特に難しくありません。タイミングチャートに従い、ポートを操作してGRAMへデータを書き込んでいくだけです。
このコントローラは動画用のI/Fも持っており、超高速ではないにしろ、そこそこ高速に描画できるので、本作のような用途では十分使えます。
画像データ生成ツールについて
フォントのイメージを含む表示画像は、pngファイルで約110ファイル、約200KByteあります。これを、C言語のバイト配列の初期化コードに変換してソースコード上に記述することで、PICのプログラムメモリに埋め込んでいます。
PIC32MZ2048EFH064 のプログラムメモリは2MByteですが、使用量は最終的に74%になりました。
今回は、この変換するツールも自作しました。複数のpngファイルを読み込んで、ビットマップ構造体を記述するソースコードを生成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // 画像データ typedef struct { int w; int h; const BYTE* p; } SBitmap; // dig_w14_1.png const BYTE _dig_w14_1[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x17,0x17,0x17,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x4F,0x4F,0x4F,0xAC,0xAC,0xAC,0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x8F,0x8F, 0xF2,0xF2,0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x89,0x89,0x89, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xC7,0xC7,0xC7,0xC1,0xC1,0xC1,0x50,0x50,0x50,0x5C,0x5C,0x5C,0xFF,0xFF,0xFF, 0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x5C,0x5C, 0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x5C,0x5C,0x5C,0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5C,0x5C,0x5C,0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x5C,0x5C,0xFF,0xFF,0xFF,0x89,0x89,0x89, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x5C,0x5C,0xFF,0xFF,0xFF, 0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x5C,0x5C, 0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x5B,0x5B,0x5B,0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x59,0x59,0x59,0xFF,0xFF,0xFF,0x89,0x89,0x89,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x57,0x57,0xFF,0xFF,0xFF,0x89,0x89,0x89, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x56,0x56,0xFF,0xFF,0xFF, 0x89,0x89,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; SBitmap bm_dig_w14_1 = { 11, 15, _dig_w14_1 }; |
こんな感じで生成されるので、コピペしてソースコードに貼り付けます。
しかし、量が多くなってくると、MPLAB X で開くと重すぎて固まってしまいますので、テキストエディタで編集するようにします。余計な機能はたくさん付いてるのに、こういう肝心な部分では使えないという・・・
トータルで10万行くらいあるので、4つのファイルに分けています。
画面表示
10画面あります。エンジニアリング的なテイストが強いデザインですが。。これでもスモークアクリルパネル越しに見ると、結構落ち着いた感じで見えます。
・PLLロック状態
・外部PCアイコン
・オーディオフォーマット
・ボリューム情報
・オートボリュームコントロール
・バイアス制御ゲージ
・パワーステージ平均電流
・音量ピーク検出ADC値
・バスブースト表示
上部の現在の状態表示は、他に「NO USB」「USB OK」「ERROR!」があります。
バイアス制御ゲージとは、バイアス電流を決めるDACの8bit値をゲージで表示したもので、現在のバイアス量の目安にするためのものです。左のインジケーターは、緑はスタンバイ状態、黄はノーマル状態。L+/L-/R+/R-の各4つ分あります。
また、パワーステージ平均電流は、エミッタ抵抗の0.47Ω抵抗の両端電圧から割り出した電流値で、+側と-側の平均値です。PICのADCで適当なタイミングで読み取った値なので大雑把な値になりますが、無音の時はまあまあの精度と思います。
ボリューム円の灰●は0位置、白●は現在値で円周沿いに移動します。ミュートしている時は非表示になります。三角関数でせっせと座標計算してます。
以下は設定画面です。ファンクションノブをクルクルと回して目的の項目を選び、ノブを押し込むと決定して「Done」と表示します。
AK4499EQ の最大出力を、72.8mAppと45.5mAppの間で切り替えます。
ヘッドホンの時は、ボリュームを絞るよりLowにする方がいいかもです。
AK4499EQ では6種類のデジタルフィルタを設定できます。ノブを回すと、5種類の設定対象が次々に切り替わります。
ちなみに、当方のお気に入りは「Short Delay Slow Roll-Off Filter」です。
AK4499EQ のデータシートでは、GC/DSDD/DSDFレジスタの値によってはポップノイズが出るとあります。(そう言えばまだ試してません)
・State:アンプ制御状態
・VCXO:周波数選択
・AdvValue:現在の検出音量値
(Validになると*が付く)
・AvcAV_0/1:オートボリューム
設定値(HP/SP)
・Detected:入力部の検出結果
・Format:再生中フォーマット
・その他:Combo384 IO値
LMK04832 のレジスタ値の一部を表示しています。
PLL_LD_LOSTは過去1分以内にLockロストしたら1になります。
なお、見てた範囲ではUSBケーブルを抜くとかしない限り、ロストしたことはないです。
・Status:バイアス制御状態
・DacVal:バイアス制御値
・AvgCur:出力段の電流(mA)
・SetCur:バイアス設定値(mA)
外部PC制御(ControlApp)
- Amazon Mulic Player の制御
- PCのシャットダウン
- 全体制御とのCOM通信
- 設定編集機能
主な機能
外部PCの起動と同時に自動起動して Amazon Mulic Player を捕捉し、マウスイベントを飛ばすなどしてプレイリストの再生を行います。※2023/03/12 バージョンアップ
動作は、簡単なスクリプトをテキストファイルに記述する方式としました。スクリプトの構文等の詳細は、説明ボタンで表示されます。
Amazon Mulic Player の仕様が変わった場合はスクリプトも変更する必要があるかもしれません。なので、再設定が簡単に行えるように、マウスの位置やピクセルの色を編集ボックスに挿入したり、ちょっとしたテスト用の機能も付けています。
アップデートなどで動作時間が長引いたり、通常は表示されないメッセージが表示されるなど、普段とは違った動きをした場合は、途中で止まることもありますが、そういう場合はリモートデスクトップで入って面倒を見ます。
Amazon Mulic Player の制御について
主に、次のような制御を行っています。
- 起動時に、前回終了時のプレイリストの再生を開始する。
- プレイリストの再生が終わったら、次のプレイリストの再生を行う。
- 全体制御からのコマンドに応じて、プレイリストやジャンルの切替えを行う。
- 全体制御からのコマンドに応じて、PCのシャットダウンを行う。
Amazon Mulic Player 側で必要な設定は特にありません。
また、ジャンルを設けて、各プレイリストをジャンルに割り当てることができるようにしました。設定ファイルで「01-G1: 1」といった具合に記述すると、1行目のプレイリストはジャンル1に属すると認識されます。
行末に有効無効の設定(0or1)を設けており、無効ならスキップします。
※写真は古いバージョンでの表示です。
この例では、設定ファイルと同じタイトルをプレイリストに付けていますが、Amazon Mulic Player 側とは表示順だけで関連付けられ、文字列には依存しないので、好きなタイトルを付けることができます
外部PCの設定について
音楽専用として、なるべく余計なものは外したいところですが、全部調べるのも面倒なので大まかに設定しました。
- 制御アプリのスタートアップ(自動起動)
- 電源ボタンを押した時の動作を変更 → 何もしないにする
- Windows Defender のリアルタイム保護 → OFF
- Windows Defender のクラウド提供の保護 → OFF
- Windows Defender のサンプルの自動送信 → OFF
- システムサウンド無し
- 余計なスタートアップを無効化
- リモートデスクトップを有効化
- ファイル共有を有効化
- Amazon Mulic Playerの自動起動
- ディスプレイサイズ 1280×1024
使用感について
Amazon Mulic Player は動きが重いので、アンプ本体の電源をONにしてから再生音が流れ出すまでに30秒とか、結構時間がかかります。また、早送りなどの操作も3~10秒くらいの時間がかかります。
使っているPCの起動時間も関わるので、なるべく早く再生したい場合は、ハイパフォーマンスなPCを使うしかありませんが、ファンの音や消費電力も気になるところです。
とはいえ、リモコンを押して電源を入れるだけでハイレゾの再生が開始されるし、プレイリストを切り替えるのもワンタッチなので、普段のリスニングは快適です。
動作検証
残念ながら、当方は高精度な歪み率計を持っていないので、そこだけは調べられません。
とりあえず、200MHzのオシロでわかるものと、測定限界下の微細信号は、クリスタル(セラミック)イヤホンを使った感覚で判断しました。
ジッタクリーナー
本当にジッタがなくなっているのかを検証しました。結果は大成功です。
ジッタクリーナーに入力する前と後のMCLKを比較しました。回路図中の、TP2(MCLK_I) と TP3(MCLK_O) の位置になります。
重要なのは、トリガーはSingleでなくALTにすることです。Singleだと波形のブレは相対的なものなので、どちらが汚れているかわかりにくいからですね。
入力はブレていてジッタがあることがわかりますが、出力はきれいになってます。最初にこの波形を見た時には感激しました。
こちらも同じです。
これらが聴感にどれだけ影響するかですね。
次はSingleで、トリガーを入力(MCLK_I)にしてみた波形です。
LMK04832 は、0-Delayモードで動かしているので位相ズレはないものと思っていましたが、3ns程の遅延が見られます。このズレの分がチャージポンプ駆動源になる?データシートには何も書かれていませんが、こんなものなのかもしれません。
パワーアンプ
まず、1KHzと100KHzの6Vppの正弦波、負荷ありなしのケースです。
回路図中では、TP24(AOUT) の位置で、BTLではなく片出力での計測です。片出力なので、負荷は8Ωではなく4Ωのセメント抵抗を使いました。
どこまで歪みなく再生できるのか調べるために周波数を上げていきました。
700KHzまでは見た目はきれいで、800KHzになると歪が見えだしました。十分な性能です。
次に、方形波です。
方形波の立ち上がりを拡大してスループットを調べます。
無負荷で見てもあまり意味ないかもしれませんが、この時のスループットは、
5.97V ÷ 358ns ✕ 1000 = 16.67V/us
になります。
4Ω負荷の時は
6.11 ÷ 522ns ✕ 1000 = 11.7V/us
になりました。
本作の仕様は、BLT 8Ωで最大2.25W。スループット 11.7V/us という数字は、理論上はフルパワーで正弦波を621KHzまで出せる計算になるので十分といえます。
実験中に、A級動作(両トランジスタON)時と、B級動作(片方だけON)時の、スループットの変化が撮れましたので、参考までに載せておきます。
B級動作時は立ち上がりが遅く、A級動作点へ切り替わった所から立ち上がりが早くなっていることがわかります。
一人よりも二人のほうが楽ということですね。
なお、このパワーアンプは、試作も含めて全部で4台作りましたが、ほぼ同じ結果となりました。シンプルなので再現性の高い回路ではないかと思います。
XDS3202A 最大1GS/s 14bitAD 200MHzバンド幅のデジタルオシロスコープ。タッチ式スクリーンは広くて見やすいです。 |
バイアス制御
実際の音楽を再生している時に、期待通りにバイアス制御されているかを見てみました。
出力段の0.47Ωの両端の電圧を計測します。
この一瞬だけ見てもハッキリわからないのですが、この状態で長く見ていると、バイアス下限45mA(aの位置、21mV/0.47Ω=44.6mA)を下回ったところで、バイアスを上げるように働いていることが確認できました。
ピークホールド
ピークホールド回路の波形を載せておきます。
音声入力:SENS_L
整流後:LME49726の1pin出力
片ch分の整流後の波形。オペアンプを使った半波整流回路なので正確です。
整流後:LME49726の1pin出力
ピーク出力:TP26 ANLV
最終的にピーク電圧が出力されています。
音声入力:SENS_L
チャージ電圧:LME49726の7pin出力
チャージコンデンサ(C116)へのチャージ電圧です。結構鋭いです。
出力ノイズ
可聴域ノイズ
ハムノイズやホワイトノイズが無いかを確認します。ただ、無入力ではなくDACを稼働させた状態でチェックします。プレイヤーで再生を一時停止している状態ですね。そうでないと、デジタル回路が稼働している状態でのノイズを見逃してしまう可能性があります。
高感度のヘッドホンを使えばすぐに分かります。結果、本機では全く何も聴こえません。なので、本機の電源が入っているのか入っていないのかも区別が付きません。
ヘッドホンでないと聴こえませんが、出力リレーON/OFF時に、わずかに「チッ」となることがあります。でも小さくて気にならないレベルです。
なお、DCレベルは、ほぼ0V(テスターでは測定不可、1mVに満たない変動)で安定しています。ユニティーゲインだとDCサーボがなくても大丈夫ですね。
高周波ノイズ
スピーカー端子にオシロをつないで、聴こえない高周波ノイズをチェックします。
こちらも、プレイヤーで再生を一時停止している状態でチェック。
数十MHzオーダーの高周波ノイズが主で10mVpp程度あります。DACからの量子化ノイズの漏れも含んでいますので、十分な低ノイズと言えます。比べても仕方ないですが、デジアンではとてもマネのできないレベルです。
電源チェック
安定化電源は作りっぱなしは良くないです。テスターで電圧を診るのは当然として、発振してないかもチェックします。
条件としては、無負荷ではなく音声再生中の状態にしたり、見積もった最大電流を流してチェックします。ただ、パワーアンプは最大音量でも連続再生は想定していないので、発熱についてはある程度は寛容します。
さらに、アナログ電源については、セラミックイヤホンを使って、ホワイトノイズも含め、ノイズ全般が全く無いことも確認します。
- CVDD(3.3V/55mA) →問題なし
- AVCC(±15V/0.25A) →問題なし、ノイズ全く無し
- DVDD(3.3V/0.8A) →問題なし
- DVDD(5V/0.1A) →問題なし
- TVDD(3.3V/80mA) →問題なし
- AVDD(5V/0.3A) →問題なし、ノイズ全く無し
- PVCC(±8.8V/2A) →問題なし、ノイズ全く無し
電圧変動キャンセリング効果
本当にその効果が出ているのか、一応チェックします。
負荷抵抗として8Ωを接続し、適当な音量で実際の音声や正弦波を流します。セラミックイヤホンを、図のA、Bの位置の両端に当ててみて、音を試聴します。
0.5mVppの信号でも聴けるイヤホンでさえも、A点ではほとんど聴こえません。ものすごく小さな音がするのはわかりますが、これは+側と-側の特性のばらつきにより生じる漏れ成分ですね。
つまり、期待通りに機能していることになります。
Bの位置はAC成分が普通に流れているところで、それなりの音量でハッキリ音が聴こえます。
Cはスピーカーケーブルです。長さにもよりますが、かなり太いケーブルでも結構大きな音で聴こえることがわかります。
発熱チェック
組み立て後のケースの温度を確認しました。BGM程度の音量でハイレゾ再生を開始して、2時間程度で全体的に温かくなる感じなので、特に問題ないです。
再生フォーマット
Combo384(の互換品)で再生が確認できたフォーマットです。一部は音源がなく必要性もあまりないので確認していません。再生できなかったというのはありませんでした。
PCM(I2S)
基本的にはWindowsのテスト再生にて確認しましたが、一部はファイル再生やストリーミング再生でも確認できています。
Freq\Bit | 16bit | 24bit | 32bit |
---|---|---|---|
32kHz | |||
44.1kHz | ○ | ○ | ○ |
48kHz | ○ | ○ | ○ |
88.2kHz | ○ | ○ | ○ |
96kHz | ○ | ○ | ○ |
176.4kHz | ○ | ○ | ○ |
192kHz | ○ | ○ | ○ |
352.8kHz | ○ | ○ | ○ |
384kHz | ○ | ○ | ○ |
DSD
Combo384 は、ファームウェアのバージョンによっては再生できなかったり、ノイズが乗ったりとかあるようですが、本作で使った互換品(2019年購入)では、そういった問題はなくあっさりと再生することができました。発売されて7年たつので、もう昔の話なのかもしれません。
foobar2000を利用して、DSDファイル再生と、PCM→DSDリアルタイム変換にて確認しました。DSD512は変換のみでの確認です。
Mode\Base sampling | 32kHz | 44.1kHz | 48kHz |
---|---|---|---|
DSD64(2.82MHz) | ○ | ||
DSD128(5.64MHz) | ○ | ||
DSD256(11.29MHz) | ○ | ||
DSD512(22.58MHz) | ○ |
ハイレゾを聴く方法
どこからがハイレゾなのかは次の通りです。
【出典:日本オーディオ協会】
まず、この領域に入るレベルの音源を入手する必要があります。
音源ファイルのダウンロードや、ストリーミング再生サービスを使って再生します。
サービスとしては最強。でもプレイヤーがイケてない。
※追記(2021/06/21) なんと!追加料金無しでハイレゾが聴けるようになりました。
DSDファイルなど、サンプルのハイレゾ音源ファイルが無料でダウンロードできることで有名。右上のHiRes TestBenchからどうぞ。
これらは有名所ですが他にもあります。ただ、Amazon music HD が始まった影響で、今後淘汰されていくのかもしれません。
PCM(I2S)の再生方法
現在のWindows10では、44.1KHz~384KHz 16/24/32 bit でのPCM再生をサポートしているので、デバイスが対応してさえいれば、全てのフォーマットで再生可能です。
手っ取り早く試すには、Combo384 をUSB接続して、タスクバーのサウンドアイコン右クリックから「音量ミキサーを開く」を選び、デジタル出力(Combo384のこと)のアイコンをクリックして表示されるダイアログの詳細タブからテスト再生が行えます。
普通のメディアプレイヤーを使ってファイル再生したり、Amazon Music HDなどで簡単に再生できます。
DSDの再生方法
現在のところ、DSDを再生するには、対応プレイヤー探しやら何やらと、ひと手間必要です。ネット上では、フリーのメディアプレイヤー foobar2000 を使った方法が一般的なようで、当方でもこれを使いました。
本作で使ったバージョンでのセットアップ概要を書いておきます。
Download foobar2000
単体ではDSD再生できません。下の追加コンポーネントが必要です。
なお、DSDを再生可能にすることと、PCMをDSDへ変換できるようにすることとは別物です。ネット上では、両者があまり区別されておらず、バージョンの違いなどもあって、混乱の元になっています。
PCMをDSDにリアルタイムに変換することができれば、DSDファイルがなくても、普通のAACファイルなどをDSD出力で再生することが可能になります。
ASIO suport
ASIO対応ドライバへのアクセスを可能にします。
上記ページ内の「Download」をクリック。ダウンロードしたら、foobar2000の、[File]→[Preferences]→[Components] → Installボタンから追加する。
Super Audio CD Decorder
DSD再生を可能にします。
解凍すると2つのコンポーネントが出てきます。
- foo_input_sacd.fb2k-component:SACD本体(1.0.11)
- foo_dsd_processor.fb2k-component:PCM→DSDの変換
両方とも、foobar2000の、[File]→[Preferences]→[Components] → Installボタンから追加する。
ちなみに、古いバージョンでは、DSD Processor ではなく、ASIOProxy が同梱されていて、これを追加すると出力デバイスに「foo_dsd_asio」というのが追加されるので、これを使ってPCM→DSD のリアルタイム変換を行うようになっていました。現在のバージョンでは「foo_dsd_asio」は不要になっています。(共存はできます)
DSD Transcoder
DSDネイティブ再生ができるようにします。Combo384には必要です。
ダウンロードしたら、普通にインストールします。
[File]→[Preferences]→[Components] で追加したコンポーネントを確認。
ASIOドライバの設定です。
オレンジは必須ではないですが、再生中にブラウザなどを操作すると「プツプツ」と聴こえたので「Run with high process priority」にチェックを入れたら出なくなりました。
それから、当方の環境では、ASIOドライバに、「Amanero ASIO Combo384」と「Combo 384 ASIO 1.03」の両方が入っているのですが、前者の方はドライバがない的なことを言われて使えません。
特に注意が必要なのは、「DSD Transcorderの設定」ダイアログで、前者を選んで設定を完了してしまうと、二度とダイアログを開くことができなくなってしまいます。こうなるとレジストリエディタで設定を戻すしか方法がなくなります。(プラグインのバグ)
出力デバイスの選択です。
デフォルトは 16-bitだったと思うのですが、32-bitにしても多分何も変わらない??
DSD Processor の設定です
各入力ごとに任意のOutputを選択できます。ConverterにはtypeA~Dまでありますが、根本的な違いはないものの、音質が微妙に違うらしいという話もどこかで見ました。
SACD の設定です。
以上で、DSDのファイル再生時は当然DSDで、AACファイルなどPCMを再生すると(上の設定の場合では)DSD256で再生されます。
PC側のボリュームに注意
重要な点に、PC側のボリュームは最大(100%)にしておくということがあります。小さくするとビット落ちしてしまい、再生機器の性能を活かすことができません。
また、Amazon Music プレイヤーの「ラウドネスノーマライゼーション」設定も、OFFにした方が良いのではないかと思います。
課題・注意点
本作をそのまま作る人はいないと思いますが、一部流用された時のために注意点や、改善すべき点などを書いておきます。
なお、回路的には意図した非公開情報はないので、仮に全く同じ部品を使ってPICのソフトウェアも同じものを書き込んだとしたら、本作と全く同じものになるはずです。
InputSection
JitterCleaner
AnalogSection
PowerAmp
AmpControl
MainControl
DisplayControl
PowerSection1
PowerSection2
PowerSection4
その他
ダウンロード・ツール
製作に使用した全ファイルです。無断で二次配布することはご遠慮ください。ご紹介いただく場合は当記事へのリンクを張ってください。連絡は不要です。