外部I2C制御のシンプルなDACを検討してみる!の巻き 2024.9.15

ことのはじめ
現在DIV5142の統合コントローラタイムアライメント機能を検討しているけれど、
接続するDACはどうするの?という課題が自分には残っています。
 手元にはDACは色々と、それも数多くありますが、DIV5142と接続するには
すこし(?)問題があります。というのも、必要なことはPCM入力(I2Sフォーマット)が
できるDACということになり、それらは多数ありますが、一部の例外を除いて、
すべてマイコン内蔵で表示器やスイッチを必要とするオールインタイプになっています。
そのため、統合コントローラから制御することがかなり難しいです。
もっとも、DAC機能のみを使って統合コントローラとは分離するという手もありますが、
そうなるとボリュームが固定になってしまいます。ボリューム固定になるということは、
出力にはコントロールアンプが必要になってきます。DACの電子ボリュームが使えれば
コントロールアンプを排することができ、とてもシンプルです。

そのため、外部からI2C制御できる単体DACがあると、色々と便利そうです。
いわゆるマイコンを搭載しないDACということになります。

外からマイコン等でI2C制御がなければ、なにも設定が変えられないことになりますが、
まあ、それは仕方ありません。ただ、リセット後はデフォルト設定になるので、
いわゆるI2Sフォーマット入力で、出力最大(ボリュームMAX)となるでしょうから、
マイコンを使わなければいわゆる普通のI2S接続のDACとして使えるでしょう。

候補のDAC素子は?

やはり、あまり高くなくて気楽に使えるものがいいです。
高くても1000円台程度がいいです。

候補1 AK4493S
  旭化成の32BitDACです。AK4493SはDIGIKEYで1500円程度です。
  この上のクラスのAK4499になると、とたんに価格が跳ね上がりますし、
  現在はAK4499EXになって、AK4191と組み合わせが必要で、必要な電源も
  多数あって気楽というにはほど遠いです。そういえば、AK4499EX+AK4191
  組み合わせは検討中だったけど、ほとんど寝ているなあ〜。

候補2 BD34352
  ROHMの32BitDACです。BD34301はかなり高いですがBD34352なら国内で1500円程度で入手
 できます。そういえば、BD34352をつかって外部からI2C制御できる基板(DAC343XX-S)がありました。
 PICをすこし書き換えて、電源投入シーケンスが終わったらPICをSLEEPさせるように変更したら
 良さそうです。ということで、候補には上げましたが、ここでは検討する必要はないでしょう。

候補3 PCM179X
  TI社(もとはBB社)の24〜32BitDACです。I2C制御できるものは色々とあり、DIGIKEYで
 1000円前後で手にはいります。このDACは今までに色々使ったこともあります。

候補4 M9000(CS4398コンパチ)
  秋月で売っているCOOLAUDIO社の24BitDACです。550円と安価です。
 中身はシーラスロジックのCS4398と同じのようです。これについても
 以前にDAC4398とのコードネームで開発したことがありますが、作るとすれば
 ポストアンプ付にしないといけないですね。

ほかにも色々とありそうだけど、まずが候補1,3あたりでまずは考えましょう。

課題は色々あるなあ〜
 最初に考えたのは下記のような構成です。
 一応DACのRESETも加えました。おそらくパワーオンリセットはあるでしょうけど、
 AK4493Sはないとダメなような記載があったので、入れておきました。
 これで、問題がないような気がしていたのですが・・・・・


 もっともシンプルな形です。これでは課題が残ります。

 考えてみると、課題大ありです。これで、動くことは問題ありませんが、
 リセット直後はほぼすべてのDAC素子でデフォルトであるボリューム最大になります。
 ということは、このままパワーアンプに接続していれば、スピーカは逝ってしまいます。
 そのため、立ち上がりのときにはDACのボリュームはミニマム(MUTE)になっている
 必要があります。

そのためにはどうすればいいかの対応案が必要です。

対応案その1
 小さいPICでも搭載してI2C信号にパラに挿入です。そして、電源投入時にMUTEをかけておいて、
 あとはPICからはI2Cラインを開放する方法です。案外スマートにできそうな感じがありましたが、
 PICからの制御と他のコントローラからの制御が衝突する可能性がどうしても残ります。そのため
 他のコントローラからの制御は、PICからの制御が十分に終わったあと判断した後(例えば数秒)に
 行う必要があります。これって、待ち時間が結構多くなってしまいます。
  それに、DACが別の筐体(電源が別系統)だったりしたら、使えません。電源投入の順番を
 間違えでもしたら、悲劇がまっています。

対応案その2
 すこし面倒ですが、外部からのI2C信号でAMP出力のMUTEを解除する素子を追加します。
 すなわちI/Oエキスパンダを追加して、それでアンプ出力のMUTE制御を行います。
 ついでなので、DACのリセットコントロールも行えばいいでしょう。
  ちょうど下記のような感じです。

 外部制御のソフト負荷は増えますが、この方がいいでしょう。

こうすれば、制御負荷は大きくなりますが、安全にコントロールできます。

回路図を書いてみましょう

2種類書いてみましたが、要はDACの部分が異なるだけなので、ほとんどがコピペです。
しかしI/Oエキスパンダですが、16ポートもあるのに、2ポートしか使わないのは勿体ないなあ〜。





ちょっと悩むのは電源

電源部分についてはちょっと悩みます。
DACで必要となるのは、主に下記の電源ラインです。

OPアンプ用(±12〜15V)
DACアナログ用(5V) ※AK4493では3.3Vも必要
デジタル用(3.3V)

横着するなら、OPアンプ用電源のみ供給して、そこから降圧して5V、さらに降圧して3..3Vを得るというパターンがあります。
もうちょっと分離するなら、OPアンプ用電源とデジタル用電源の2系統を用意して、DACアナログ電源はOPアンプ用電源
から降圧するというパターン。さらに分離するなら、すべて分離して3系統にするというパターンもあります。
いずれのパターンにも対応できるようにしておけば、電源の準備が楽になるでしょう。


電源部分については、色々な給電パターンに対応できるような形がいいかもです。


DACに必要な電流はPCM1795の場合はディジタル、アナログとも多くて30mA程度です。
AK4493の場合はディジタルが35mA、アナログで50mA程度です。
レギュレータを考えた場合は、小型のものでも済みそうですが、5Vレギュレータは
OPアンプ用の電源から降圧させると10Vの電圧差になりますから、100mA程度は必要と考えると、
熱容量は1Wになります。ある程度パッケージの大きなものが必要でしょう。
ただし、3.3Vレギュレータは5Vからの降圧なので電位差は1.7Vしかありませんから、
SOT-23のような小さいもので十分でしょう。



5Vのレギュレータはこのくらいのものが最低必要でしょう
標準基板サイズなら消費電力1Wでも大丈夫です。


3.3Vのレギュレータはこんなものでも十分でしょう。


でも、5Vレギュレータとサイズを合わせるならこちらかなあ〜?

基板のアートワークも書いてみましょう 2024.9.16

電源とポストアンプなどの共通部分を明確にしておいて、DAC部分のみパターンを変更して
作成です。PCM179Xの場合は部品が少ないので余裕がありますが、AK4493Sの場合は
すこし窮屈になってしまいました。


PCM179X用とAK4493S用のパターンです。電源とポストアンプ部の回路は共通です。

高くなったなあ〜 2024.9.18

MUTE制御には機械式のリレーを使います。
MOSFETリレーという手もあり、無接点ということでちょっと魅かれますが、
なんといっても結構高価であるということと、高域では結構音漏れもします。
ということもあり、機械式リレーがやはりこういった面では便利です。

下記はよくつかう12Vリレーです。以前は1個100円で購入できましたが、
いまは150円ですね。高くなったなあ〜。
といっても、国内メーカのものを買おうとおもったら、1個400〜500円はしますから、
それに比べると随分安いです。まあ、信頼性はよくわかりませんが。
以前には中華製のリードリレーの動作不良でえらい目にあったしなあ〜。
まあ、命に関わる部分の部品ではないので、安いものを選択しましょう。




いつもつかう12Vのリレーです。動作電流も12mA(12V)と小さく扱いやすいです。

こんなリレーもあるなあ〜

秋月のサイトで12Vリレーで探してみると、こんなリレーもありました。
NECなので良さそうです。といっても、かなり製造年は古いでしょう。
ただ、価格は80円と安いです。それになんといっても、高さが低いです。
そのため、基板の高さを低く抑えたい場合はこういったリレーが適するかもしれません。



こういったリレーをつかうと基板の高さも抑えられるでしょう。

両用パターンにしましょう

折角なので、どちらのリレーも使えるようなパターンに変更しておきましょう。

どちらのリレーも使えるようにパターンを変更です。

とりあえず、完成 2024.9.24


dac179x-i2c.pdf


dac4493-i2c.pdf


印刷シルクおよび部品面パターン i2c1795b_top.pdf


半田面パターン i2c1795b_bot.pdf

さて、他の基板CADも仕上げていきましょう。

基板ができてきました。 2024.11.11

基板ができたけど、いつ手がつけられるだろう?

組んでいきましょう! 2024.11.24

秋の夜長に組んで行きましょう。

とりあえずここまで組みました。アナログ部分はまだ未着手です。

回路定数は

出力が2Vrmsでフィルタのカットオフが50kHz程度になるように設定です。
といっても、手持ちの部品にない定数値では困るので、よくある値、というか
持っているものを前提に設計です。

PCM1795は電流出力で4mAppですから、それに基づいて設計です。
IV抵抗に並列に入れるコンデンサは割愛しました。

DAC1795-I2C用のポストアンプ回路


DAC1795-I2C用のポストアンプのフィルター特性

AK4493の出力は2.8Vppなので、それにあわせて設計です。
といっても、回路定数としてはほぼ上記(DAC1795-I2C)と同じです。


DAC4493-I2C用のポストアンプ回路

一応、完成

動かすには外部制御が必要ですが、とりあえずお出かけ用の写真を撮っておきましょう。


DAC179X-I2Cです。


DAC4493-I2Cです。

まずはDAC179X-I2Cから動かしてみましょう。 2024.12.1

実装しているDACはPCM1795です。久しぶりに動かすので、どんな中身だったのか
ほぼ忘れています。ということで、まずはデータシートを眺めてみました。
pcm1795.pdf

あと、使うICはI/OエキスパンダのPCA9539です。こちらも、すぐ使い方忘れるので
同じくデータシートをDLしておきました。
PCA9539_PCA9539R.pdf

PCM1795ってシンプルだったのね

設定レジスターをみると、Register16から23まで8個だけです。
普通弄るところといったらボリュームと入力フォーマットくらいでしょう。
あとはフィルターの設定くらいかな。



あと、助かるのはデフォルト設定すなわちマイコンを接続しない状態でも、音はでるようです。
このとき、入力はI2S-24Bitでボリュームは最大、フィルターはシャープです。
まずは、マイコン制御なしで動かしてみましょう。


プログラム無しで動かしてみます。MUTEリレーがあると音が出ないので、リレーは外してあります
(というか、まだ付けていません)。


ムギュムギュ!

正弦波の信号を入れて出力を観測しますが、両チャンネルともおかしい(笑。
IV変換部分の出力は正常だったので、差動合成の部分に問題がありました。
 
片チャンネルは出力が飽和している〜。    もう一方はゼロ点がかなりズレています。

ああ〜、いきなり修正です。パターンと回路図を見比べて、間違い探しです。

修正しよう
両方のチャンネルで同じようなところを間違ていました。
修正には2箇所の切断と、2箇所のジャンパーを行いました。

パターンの切断(黄色線)が2箇所と、ジャンパー(赤色線)が2箇所です。


切断箇所です。部品が取りついてからなので、切れるとこを切りました。


ジャンパーは半田面から行いました。
部品面からの方がわかりやすいです。


ついでなので、DAC4493-I2Cも同じパターンなので同様に修正です。
DAC4493-I2Cもマイコンレスで動かせればよかったのですが、生憎のところ
AK4493Sではプログラムでリセット状態を解除する必要があるので、
プログラムが必須になっています。

一難去ってまた一難!リレーが動かない?

DAC1795-I2Cを制御するとためにコントローラとI2C接続です。

コントローラとI2C接続して動作テストです。


リレーは通信用の小型のものを使いました。

簡単なプログラムを組んで、動かしてみますがリレーが動きません。
I/Oエキスパンダの出力をみても、電圧がでていません。なぜだろう?
パターンを調べてみると、I/OエキスパンダのGND接続が抜けています。
普通、ICのGND接続なんて絶対確認するよね〜?
回路図でもGNDが抜けていましたが、なんか抜けているようです。
秋旅行に行く前に、パターン書いていたから気が抜けていたのかな?


回路図上からもI/OエキスパンダのGND接続が抜けていました。
いや、そういう問題ではないのだけど。



IC4のPin12はGNDに接続する必要があります。さて、どうやって接続しようか?

修正しましょう!

IC4のPin12をGNDに接続する必要があります。SSOPですが端ピンなのでジャンパー線の接続
は可能ですが、他のGNDラインまですこし遠いです。
そこで、運よく隣のピン(Pin11)は使うかもしれないと配線を伸ばしていたこともあり、
それを活用することにしました。

まずはPin12と隣のPin11を半田ジャンパーです。

Pin12とPin11を半田ジャンパーです。ちなみに、さらに隣のPin10までジャンパーしても
問題ありません。というのも、使っていないですから。


次は、半田面に移ってジャンパー線を飛ばします。

ジャンパーを飛ばす前の状態です。


ジャンパー線を飛ばします。

これで修正完了です。ついでに、DAC4493-I2Cも同じパターンなので直しておきます。
これで、リレーの動作ならびにPCM1795とのI2C通信も確認できました。

次はDAC4493-I2Cで動作確認。ああ、また一難 2024.12.2

こんどは、DAC4493-I2Cの動作確認を行います。
基板の動作を一通り確認しておけば、あとはソフト作成だけになるので机の上もかたずけて
作業ができますからね。

次はDAC4493-I2Cでの動作確認です。


リレーはいつもつかっている秋月の12Vリレーを使いました。
最近100円から150円に値上がりしました。


AK4493はソフトでリセットモードを解除する必要があるのと、デフォルトの入力フォーマットが
不思議なことに前詰め32Bit(Left Justified)になっているので、これをI2Sに変更します。
いづれにしてもプログラムは必要です。
さて、動くかなあ〜

左チャンネルが無音?

右チャンネルからは正常な信号が出ましたが、左チャンネルが無音です。GNDに張り付いたまま。
AK4493の直後の出力を観測すると、問題なく出力されているので、どうやらアンプ部分に問題が
ありそうです。DAC1795-I2Cでは修正があったけど、まだバグが残っているの〜、あああ。

とはいえ、アンプ部分であれば修正はさほど難しくないでしょう。
調べると、AK4493からの出力直後の抵抗端がGNDに接続されていることがわかりました。
パターンを見ると、たしかにベタ面(GND)に接続されています。
でも、接続の様子からして、間違えたというより、ベタ面を塗るときに誤ってパターンを
曳いたような感じです。

矢印の部分がGND(ベタ面)に接続されているようです。


パターンを確認すると、ベタ面に接続されています。おそらく手が滑ったのかな?

修正方法は.,Φ3mm程度のドリルでぐりぐりと削って半田面のパッドを削りとります.,
パターンが部品面だけで助かりました。この修正ですが、部品を取りつける前におこなうと簡単です。
一度半田を入れてしまうと、部品を外して、さらに半田を吸い取ってからでないと半田が邪魔して
削りにくいです。なお、ドリルビットは優しく手で回します。横着して電動で回そうものなら、
一気に基板を貫通してしまいます。

Φ3mmのドリルをぐりぐりとパターンを削ります。これで修正完了!

DAC4493-I2Cも無事動作


動作確認です.出力レベルも設計通りです。

これで、今回製作した基板群の動作確認は一通り完了かなあ〜!
あ、あと一枚残っていました。ついでだから、先にやっておこうかな〜。
でも、結構大変かも。


これの動作確認がまだ残っていました。

高精度DELAY基板との接続にはリセットが必要 2024.12.4

高精度DELAY基板の動作確認ができたのですが、
DACのアナログ出力って、LRクロックと同期しているわけではないようです。
そのため、LRクロックをわずかに遅延させただけでは、アナログ出力は遅延しません。
対策として遅延量を設定したらDACをリセットして、初期状態に戻す必要があるかも
しれませんので、確認してみました。

1.DAC1795-I2Cの場合
(1)PCM1795を連続動作させた場合(リセットなし)
PCM1795では、ほぼスムーズにLRクロックに追従するようです。「ほぼ」というのは、
プログラムでLRクロックの1/64分割で増加させていますが、PCM1795の出力は8分割毎
に位相がずれていきます。すなわち分解能は1/8LRクロックです(8BCK毎です)。
8という数値は8倍オーバサンプリングと何か関係するかもしれません。
リセットをかけると500usほど音が途切れますので、調整時にすこしプチ音がでるでしょう。

(注意点)PCM1795をI2Cでリセットする場合。
PCM1795でI2Cでリセットコマンドを送ると、即座にリセットがかかるみたいでI2Cのアクノリッジが
返ってきません。そのため、通常のI2Cルーチンをつかうと、リセットコマンドを送った瞬間フリーズです。
I2Cでリセットする場合は、アクノリッジを無視する必要があります。

(2)LR遅延設定後にRESETパルス(外部あるいは内部)を挿入した場合
 基本的にはLRクロックの遅延にあわせてスムーズにアナログ信号もずれていきます。
「基本的」と書いたのはたまに、アナログ信号の遅延が微妙に不連続に動く場合があります。
どうもリセット後の処理時間にバラつきがあるようなのですが、ばらつく頻度が小さいので
LRクロックとの兼ね合いがあるのかもしれません。LRクロックを監視して、リセットのタイミングを
見計らえれば解決するかもしれません(ハード上ではできるので、プログラム次第です)。

高精度DELAY基板とDAC1795-I2Cと接続してのテストです。

2.DAC4493-I2Cの場合
(1)連続動作時(リセットなし)
 LRクロックを遅延させると、ある遅延量でいきなり1LRクロック分の不連続な遅延が発生します。
連続動作時には遅延量の設定は無理っぽいです。この現象はAK4497でも同じです。

(2)LR遅延設定後にRESETパルスを挿入
 AK4493は外部リセットがないので、内部リセットを使います。結果としてはLRクロックの遅延に
あわせてスムーズに遅延するようです。リセットの期間は200us程度かかりますが1/64LRクロック分解能が
活きそうです。

高精度DELAY基板とDAC4493-I2Cと接続してのテストです。
(つづくかな?)