2009年09月21日

TLV320DAC23 の検討

前の記事を書いていて、TLV320DAC23 という DAC を使いたくなってきた。

その理由を書くと

  • 外付けアンプがいらない。
  • LINEIN を出力でき、ただのPGA(電子ボリューム付き) ヘッドホンアンプとしても使える。
  • 外付けフィルタがいらない。
  • ADC 付きの TLV320AIC23 を使う練習になる。
  • 比較的安い。デジキーで 512円。
  • 125fs, 250fs モードがあり 8MHz,12MHz で使える。


回路図を描いてみた。



    この回路図は、修正版。ピん配置を変えたのと、TLV320AIC23 の ADC のテストが出来るように LRCOUT,DOUT を配線した。ちなみに DAC23 では LRCOUT,DOUT は、NC になっている。

    修正その2、アクティブフィルタを付けられるように電源ピンを足した。


なんというか、コンデンサをいくつか付けるだけで、DAC + アンプとしての機能が使える。

ちょっと工夫してみたところは、AVDD のところ。抵抗かインダクタを入れてて電源ノイズの対策をしようと思う。

これだけでは、もったいないので、LINEIN を使って、PWM が本来どんな音なのか聞けるようにしてみた。

まぁ、フィルタとレベル合わせだけなのだが、こんな風に設計した。

NJU8721 のアプリケーションノートをみると、16 Ωのインピーダンス用に 100uH + 0.22uF の LC フィルタを入れている。カットオフ周波数は、計算すると 34 KHz。ちなみに 4 Ωをドライブする場合は、L を 1/4 , C を 4 倍にする。(22uH + 1uF ぐらい)

これを 1/4 のカットオフにする場合、400uH + 0.88uF にする。
さらに、1mH を使うと、1mH + 0.352uF になり、インピーダンスは 40 Ω。40 Ωもドライブするのは大変なので、もっと上げたいのだが、小型で安価なインダクタ LAL03 の上限が 1mH 。

で、LHL06 を使うことにして 10mH に変更。10mH + 0.0352uF でインピーダンス 400 Ω。

0.0352uF では、カットオフ周波数が 8.5KHz と 8kHz を超えるので、10mH + 0.047uF に変更して、7.3 kHz に。 インピーダンス はどうせ概算なので 400 Ωということにする。ちなみに、10mH の場合 LHL06 自身の直流抵抗が 32Ωぐらいある。

さて、入力レベル。PWM では、電源ノイズがそのまま載るので、なんとかしたい。... ツェナーを入れたらどうだろう? 鈴商で、表面実装品を扱っているので 2.4V を入れてみることにした。

ホストが 3.3V なら電圧差 0.9V 。75 Ωを入れて H のとき 12mA の消費。あと、400 Ωに合わせるために、330 Ωを入れる。

    ここ間違いのような ... 390 Ωを入れる? ( 共立抵抗セットにはない から 680 + 910 の並列? )

さて、LINEIN 側。入力レベルは、1.0 VRMS 。2.4V を分圧して、1.08 V p-p に。最後にカップリングコンデンサ 1uF。
    カップリングコンデンサ は、積セラでも OK 。ただし X7R 耐圧 25V以上。

こんな感じでどうだろう?。ただあまり自信がない。フィルター部分を入れ替えられるようにしておきたい。


ついでに、基板も設計してみた。



一応、SRT162 に付けられるようにした。でも AT90USB162 は乗算がないので、音源を作っても限界が低く面白くない。
実際は、ATmega88P でやると思うが一応。

配置してみると、部品がでかい。それはいいとしても、背が結構ある。残念なのは LHL06 こいつが、φ 6.8 。インダクタは選択枝が少なくて困る。

小型のステレオジャックは、秋月で売っているやつを想定。マル信のMX-345GLB だと思う。穴の位置は正しいはずだが、径が分からない。あと LR が逆かも。


  • この基板は修正版。基板の画像は、裏面の銅箔が透けてみえるイメージで作成。修正しやすいようにベタパターンは裏だけにしたので、実際に作ったらこんな感じかも。

      画像を交換。銅箔が明るすぎ 。

    よく考えたら 高インピーダンスの LINEIN とかノイズ対策が必要そうだ。それ以上に IC 自体に対してもノイズ対策が必要。

    IC の裏のベタアースをちゃんとして、 LINEIN とデジタル信号が交差しないよう作りなおした。

  • フィルターの部分だけ抜き出した小基板。いろいろ試すのに使う。


    DAC ボードの パターンをカットして、これを載せる。無駄に広いのは、PCBCART の最小サイズ 1.5 inch に合わせたため。

    -- これ作るなら アクティブフィルターも作っておこうかな。

  • というわけで作ってみた。



    今回は表がベタアース。なので基板裏のイメージ。いろんな値のものを揃えたくないので、R,C は表面実装を減らしたい。... が全部は載らない。リード部品(表面実装兼用)は絞り込んで3つにした。

    回路図は、こんなの。



    「FMmelody」ハードウェア解説に書いてあるもの。R1,R2 の 30k,4.3k は、共立の抵抗セットにない。ちゃんと設計しないと、正しい値には出来ないし ... 困った。

    C2,C3 の0.01uF は表面実装品で済ますが、精度が必要 で 103Z はだめ 、最低でも 103K を選択すべし。.. 2012 にしたが、秋月では 3216 しか扱っていない。共立は 1608 or 3216 。しかも各社としか書いてない。(でも X7R 耐圧50V以上 なら たぶん OK) 。マルツは、2012 の ± 10% を扱っている。 ... とりあえず、3216 が載るようにしないと。

    「Filter Pro を使ってみた」に続く。

      2012/3216 で ± 10 % 品は容易に入手できるが それより精度が高いのは難しい。デジキーで探したら、2012 の フィルムコン ECH-U01103GX5 (± 2 %) が 10個 304 円 で見つかったものの、あまり選択枝はないようだ。

      追記:セラコンでは、波形が歪むのでダメらしい。できたらフィルムコンを使うべし。3216 になるが、0.047 uF の ECH-U1C473GX5 も 10 個 470 円で買える。カップリングにも安易につかうとだいなし。

    オペアンプは、秋月の LMV358を使う予定。0.65mm ピッチのパターンも入れようと思ったが、保留。

  • 結局、3216 対応したうえで、LMV358 のパターンを入れた。回路図をうまく作れなかったので、前のも残した。



    左下のでかいのが、3216 用パターン。推奨パターンをベースに隙間を、2012 と同じまで狭めている。

    0.65mm ピッチだとなんとか DIPの隙間に入る。ベタアースの部分もあまり崩れずいい感じ。(1.27mm ピッチだと横置きになるので、せっかく作ったベタアースがめちゃめちゃになる。)

  • あ、未使用のアンプの処理が間違っていた。ボルテージフォロワにして、0V 入力 にしないと。( OUT と (-) を接続して、(+) を GND) 。(修正済)

    ところで 、デジキーってチップ抵抗が 10 個〜買えてしかも安い。たとえば ± 1 % の MCR10EZHF3001 が 10 個 40 円、50 個 141 円。あ、チップコンデンサも安いのがある。 C0805C473で検索すると 10 個 63円、100 個 370 円 のやつとか。


最後にここまでのデータhalfc-dac23-007.zip



TLV320AIC23/DAC23 のサンプリングレート

データシートでは、このクロックでは、この設定 -- という感じで早見表みたいで規則性が分からなかった。形を変えた一覧表を
作ってみた。

 
USB/Normal BOSR SR3 SR2-0 fs Filter type
-----------------------------------------------------------------------
1 0 0 7 125 3
1 0 0 0 125x2 0
1 0 0 1 125x12 0 (AIC23: ADC 125x2)
1 0 0 2 125x2 0 (AIC23: ADC 125x12)
1 0 0 3 125x12 0
1 0 0 6 125x3 0 (DAC)
-----------------------------------------------------------------------
1 1 1 7 136 2
1 1 1 0 136x2 1
1 1 1 1 136x11 1 (AIC23: ADC 136x2)
1 1 1 2 136x2 1 (AIC23: ADC 136x11)
1 1 1 3 136x11 1
-----------------------------------------------------------------------
0 0 0 7 128 2
0 0 0 0 128x2 1
0 0 0 1 128x12 1 (AIC23: ADC 128x2)
0 0 0 2 128x2 1 (AIC23: ADC 128x12)
0 0 0 3 128x12 1
0 0 0 6 128x3 1 (DAC)
-----------------------------------------------------------------------
0 1 0 7 192 2
0 1 0 0 192x2 1
0 1 0 1 192x12 1 (AIC23: ADC 192x2)
0 1 0 2 192x2 1 (AIC23: ADC 192x12)
0 1 0 3 192x12 1
0 1 0 6 192x3 1 (DAC)
-----------------------------------------------------------------------
0 1 1 7 192 2
0 1 1 0 192x2 1
0 1 1 1 192x11 1 (AIC23: ADC 192x2)
0 1 1 2 192x2 1 (AIC23: ADC 192x11)
0 1 1 3 192x11 1
-----------------------------------------------------------------------
+ CLKIN 1 でサンプリングレート 1/2



USB/Normal と BOSR で、ベースとなる分周比が変わる。 低いサンプリングレートでは、さらに分周するわけだが、基本的な分周比を 2 組もっていて、SR2-0 が 0-3 の場合、ADC/DAC がそれぞれどちらを使うかの組み合わせが決まる。7 は特別で分周しない。さらに DAC 専用に 6 があって 3分周。

SR3 は低い方の分周比を、12 → 11 に変更する。

ーーなんか歴史がありそうな仕様だ。

フィルタの切り替えは、USB/Normal と SR2-0 が 7 かそうでないかで、4通り。

125 は奇数なので、考慮が必要なのだろう。分周しないケースもなにか理由があるのだろう。特性を最適化するというよりやむを得ない理由で分けた感じがする。

あと、CLKINというのがあり、さらに 2分周 することが出来る。2 倍のクロックを使うためかな?と思っていたがサンプリングレートを下げるのに使って良いらしい。

さて、8MHz の AVR で使うには、どうしたら良いのだろう?

とりあえず CPUCLK/2 は PWM でも作れそうだから MCLK=4MHz の場合を考えると、125fs x2 で 16kHz x3 で 12KHz。CLKIN を使えば 125 x4 の 8KHz も OK 。125 fs 固定で PWM で CPUCLK/4、CPUCLK/6 ... としても良さそうだ。

まぁ、12MHz 水晶を DAC 側に付ければ良いので、たいした問題ではないけど。

ちなみに、設定系の通信は、I2C か SPI 。参考にした回路図で I2C を使っていたので、それに倣っている。MCLK を外部入力にしているのも同じ理由。

TLV320AIC23/DAC23 の I2C通信

TLV320AIC23/DAC23 は、SPI と I2C をサポートしている。切り替えは MODE という端子があり、MODE=L で I2C , MODE=H で SPI。

I2C のときは、/CS で アドレスを2通りから選べる。/CS=L は、0x32, /CS=H で 0x33 。

DAC23 ボードでは、両方 L なので、I2C でアドレス 0x32 固定。

このアドレスに対して、レジスタのアドレスと値の組 2バイトを Write する。(Read 機能はない 。) レジスタのアドレスは、7bit , 値は 9bit なのに注意。

レジスタマップ

0x00 Left line input channel volume control
bit8 LRS
bit7 LIM Left input mute
bit4-0 LIV ボリューム値 ( 23 がデフォルト(0db) )
0x01 Right line input channel volume control
bit8 RLS
bit7 RIM Left input mute
bit4-0 RIV ボリューム値
0x02 Left channel headhone volume control
bit8 LRS
bit7 LZC Left channel zero-cross detect
bit6-0 LHV ボリューム値 (121 がデフォルト(0db))
0x03 Right channel headhone volume control
bit8 RLS
bit7 RZC Left channel zero-cross detect
bit6-0 RHV ボリューム値
0x04 Analog audio path control
0x05 Digital audio path control
0x06 Power down control
0x07 Digital audio interface format
0x08 Sample rate control
0x09 Digital interface activation
0x0f Reset register


面倒なので、全部は書かないが、意外と簡単みたい。

Digital audio interface format

4 つのモードから選択できる。

  • Right Justified Mode
  • Left Justified Mode
  • I2S Mode
  • DSP Mode


全モードで共通なのは、BCLK ↑でデータ取り込み、L → R の順番。

Right Justified Mode は、LRCIN の間 データ長(32,24,16bit) 以上のデータがあった場合に 最後のデータが LSB になる。LRCIN = H のとき Left-channel データ。

Left Justified Mode の場合には、最初のデータが MSB になる。

I2S Mode は、Left Justified Mode に近い。ダミーの 1 bit が MSB の前に入るのと、LRCIN = L のとき Left-channel データなのが違い。

DSP Mode は、LRCIN が Frame Sync の意味になり、1 CLK の H の後、L R を連続して送る。

ちなみに、MCLK と BCLK と ( SPI/I2C につかう) SCLK は非同期で良い。... と AIC23 の方には書いてある。

FMmelory で使っているBU9480F のフォーマットは、(データ長 16bitの) Right Justified Mode と同じ。いわゆる「標準フォーマット」というものらしい。
posted by すz at 16:25| Comment(1) | TrackBack(0) | DAC23
この記事へのコメント
こんにちは、takkun.です。
最近I2Sに興味を持ち、実際に使ってみようと思いtlv320dac23を検討しています。
このICにはDVCC,BVDD,AVDD,HPVDDの4つの電源がありますが、BVDDはどのような電源ですか?
IO電源のようなものなら、DVDDが1.5Vでも3.3Vで外部との通信が可能になるので、そうしたいのですが、違うのならすべて3.3Vに統一しようと思います。
ご回答よろしくお願いします。
Posted by takkun. at 2012年06月24日 17:12
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32298470
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック