2009年11月02日

第二の基板が来てしまった

9月末までの p-ban.com の ワークサイズキャンペーン に合わせて発注した TLV320AIC23/DAC23 用ボード(DAC23)、と それにあわせた arduino っぽいボード DAC23-MEGA , オプションフィルタ基板 DAC23-ACTV3 が来た。.. というより来てしまった。

9 面付けして、各板 3 枚づつ。ちょうど良いのではあるが、感覚的には ちょっと寂しい。9/28 に発注して、ちゃんと 10/28 に発送された。ただ期間は 20 日コースのはずが、自動的に 30 日にされてた。

といっても、今は AT90USB162 ボードの SRT162 で遊んでいる。まだ LCD も バッテリーも 接続していない。当分は SRT162 の予定で、こっちは、気が向いたらボチボチ。

とりあえず、記念写真

DAC23:


DAC23-MEGA:


DAC23-ACTV3:



posted by すz at 17:53| Comment(1) | TrackBack(0) | DAC23

2009年09月27日

mega88系ボードの設計

SRT162 に合わせた TLV320AIC23/DAC23 用ボード(DAC23)は設計したものの、AT90USB162 には乗算命令がないので音源ソフトで遊んでみるには向いていない。それで、mega88系ボードも設計してみた。



FMmelody で遊んでみたいので、「FMmelody」ハードウェア解説の回路をベースにして、One-Chip Arduino ver. 2.0 で知った、USBaspLoaderの回路を追加。
ちなみに、USB は電源供給とブートローダのために付けている。割り込みが重いので、FMmelody を改造しても使えない。

リセットボタンを付け、ブートローダ用スイッチは、スライドSW にする。あと自分仕様ISP コネクタも付ける。シリアルも一応。

IDLE LED は CPUの負荷を知るのに重要。付け忘れるところだった。

そのうえで、DAC23 固有の MCLK, や ADC 用の DIN,LRCIN をアサインし、TWI(I2C) と共に配線。あまったピンには、ADC0-3 を割り当てる。

なんかピンがちょうど埋まった。

クロックは、16MHz 。3.3V レギュレータを入れて、3.3V 専用で動かす。データシートによると安定動作を保証できるのは、3.3V で 13.3 MHz までらしいが、まぁ大丈夫だろう。

回路図は、つぎのようになった。



EAGLE データは、halfc-dac23-007.zip

    注意:このデータで起こした DAC23-MEGA 基板の 動作は確認できた。が、いくつか注意点がある。

    (1) USB D- の 1.5k プルアップ
    これをVCC に直結してしまうと、ホストが 常にUSB を接続しようとしてしまう。それでは、USB を使いたくないときに困るので、
    1.5k を PC3(ADC3) に接続することにした。

    専用のブートローダ(+ mega328p 専用)を作成中なのだが、この変更を前提にしている。

    (2) LEDの電流制限抵抗
    マネして 1k Ωとしたが、3.3V 専用なので 赤は 470 Ωが良い。黄色などは、220 Ωでも少々暗目。

    追記:修正版を作成した → 後ろに追記

これで、47mm x 35mm の 1/2 C 基板サイズが、2種類。28mm x 15.24mm の小基板が 2種できた。9月末までの【キャンペーン】ワークサイズパッケージ に間に合うし発注しようかな。

120mm x 120mm だと、面付け入れて 約 7500 円。1/2 C 基板サイズが 6 枚。余白に小基板が ... 1mm 足りなくて 3 枚か ...

ぎりぎりなので修正は無理。

結局発注した。 データは、dac23-out.zip

  • シルク間違い
    SDA の横の SDK → SCL (表、裏)
    LED D1 → PWR


ピンアサイン



チェックを兼ねて、ピンアサイン表作成。



CONN3/4 RESET 1 28 PC5/SCL CONN1/3
CONN4/2 RXD/PD0 2 27 PC4/SDA CONN1/2
CONN4/3 TXD/PD1 3 26 PC3/ADC3 CONN2/6
D+ PD2 4 25 PC2/ADC2 CONN2/7
CONN1/5 LR OC2B/PD3 5 24 PC1/ADC1 CONN2/8
D- PD4 6 23 PC0/ADC0 CONN2/9
VCC 7 22 GND
GND 8 21 AREF
XTAL1 9 20 AVCC
XTAL2 10 19 PB5/SCK PWR LED/BCK CONN1/4
CONN1/8(LRIN) PD5 11 18 PB4/MISO (DIN) CONN1/7
CONN1/9 MCK OC0A/PD6 12 17 PB3/MOSI DOUT CONN1/6
BOOTLOADER PD7 13 16 PB2/SS CONN3/4
IDLE LED PB0 14 15 PB1/OC1A PWM CONN2/4

XTAL: 16MHz
AREF --- 0.1uF --- GND

CONN1/1
CONN1/2 PC4/SDA
CONN1/3 PC5/SCL
CONN1/4 PB5/SCK BCK
CONN1/5 PD3/OC2B LR
CONN1/6 PB3/MOSI DOUT
CONN1/7 PB4/MISO (DIN)
CONN1/8 PD5 (LRIN)
CONN1/9 PD6/OC0A MCK
CONN1/10 GND

CONN2/1 3V3(OUT)
CONN2/2 GND
CONN2/3
CONN2/4 PB1/OC1A PWM
CONN2/5
CONN2/6 PC3/ADC3
CONN2/7 PC2/ADC2
CONN2/8 PC1/ADC1
CONN2/9 PC0/ADC0
CONN2/10 GND

CONN3/1 PB4/MISO
CONN3/2 PB5/SCK
CONN3/3 PB3/MOSI
CONN3/4 RESET@PGM , PB2/SS
CONN3/6 GND

CONN4/1 3V3(OUT)
CONN4/2 PD0/RXD
CONN4/3 PD1/TXD
CONN4/4 GND

MINI-B/1 5V(IN)
MINI-B/2 D- ... PD4
MINI-B/3 D+ ... PD2
MINI-B/4 GND
MINI-B/5 GND


コメントとかメモとか:

AREF に 0.1 uF を接続している。基準電圧に AVCC を 使う場合でも、1.1V 内部基準電圧を使う場合でも デカップリング コンデンサになる。

DAC23 を使う場合、LR と MCK 用に OC2B と OC0A を使う。PWM 用は OC1A で全部別のタイマーを割り当てている。

FMmelody を使う場合、CPUCLOCK が 16Mhz なので、CLKPK を設定して 8MHz にする改造がまず必要。DAC23 を使うには、I2C を使って DAC23 の レジスタを初期化する必要がある。PWM の場合も LINEIN を 使えるように初期化しないといけない。それに先立ち MCLK を PWM で出力しておく必要もある。

Arduino として使う場合 Metaboardのページによると hardware/boards.txt を編集しないといけないらしい。

    例:
    ##############################################################

    metaboard.name=Metaboard

    metaboard.upload.protocol=usbasp
    metaboard.upload.maximum_size=14336
    metaboard.upload.speed=19200

    metaboard.build.mcu=atmega168
    metaboard.build.f_cpu=16000000L
    metaboard.build.core=arduino

    ##############################################################


FMmelody の回路と違い LR をプルアップして「いない」のは、ISP は基本使わない or DAC23 を初期化して なおかつ MCLK を供給しなければ DAC から異音が出力されないというのが理由。

追記:修正版 DAC23-MEGA-R2
eagle データ: dac23-mega2-04.zip
Fusion PCB 提出用 dac23-mega2-04-fusion.zip
(スルーホールまで レジストしないよう修正)

eagle データ: dac23-mega2-03.zip
    変更点
  • ?

eagle データ: dac23-mega2-02.zip

    変更点
  • USB D- の 1.5k プルアップ
    1.5k を PC3(ADC3) に接続して、CONN2/6 は NC に。
  • LED パターン
    SEC2004 シリーズが付くように変更。
  • レギュレータを TAR5SB33 に変更
  • シルク
    SCL が SCK になっていたので修正



    R1,R2 22 (2012) : USB用
    R3 1.5K (2012) : USB プルアップ
    R4 33K (2012) : HWB 用
    R5 3.3K (2012) : HWB 用
    R6 470 (2012) : LED 左用 (SEC2764: 高輝度赤)
    R7 150 (2012) : LED 右用 (SEC2764: 黄)

    C1 10u (2012) : レギュレータ入力用
    C2 10u (2012) : レギュレータ出力用
    C3,C4 18p (2012) : 水晶用
    C5 0.1u (2012) : AVCC パスコン
    C6 0.1u (2012) : AREF 用
    C7 1u (1608-2012) : VCC 出力用
    C8 0.01u (2012) : レギュレータノイズ用

  • X1 FA238-16MHz
  • SW1 LS6J2M-T or TSKB-2JL
  • SW2 IS-2235
  • D1 SEC2764C
  • FUSE MICROSMD010
  • USB-MINI UX60A-MB-5ST
  • U2 TAR5SB33
  • ATmega328P-PU

チップ抵抗・コンデンサ以外は 秋月で揃うようになった。
posted by すz at 00:34| Comment(87) | TrackBack(0) | DAC23

2009年09月25日

Filter Pro を使ってみた



アクティブフィルタを自分で設計するのはどうにも大変そうなので、TI が出しているフリーソフトのFilter Pro を使ってみた。(参考:FilterProによるフィルタ回路設計入門)

File → New した状態から

  • Circuit Type → Sallen-Key
  • Filter Type → Bessel
  • Cutoff Freq. → 7.5k Hz
  • Cursor Frea. → 100k Hz
  • Gain → 2
  • Components Res. → Exact


に変更。

.. すると こんな回路図になった。



コンデンサで入手性が良いのは、0.01 uF。この値にしたい。

いろいろやってみたところ、
  • R1 Seed → 3.3k にして C2 を 10n (0.01u) に合わせる。
  • C1 → 10n にする。




これで、Section A の C1,C2 が 10n (0.01 uF) になった。

左の Real Pole Section は、ボルテージフォロワでインピーダンスを切り離している。インピーダンスを合わせるとコンデンサが自由にならないし、単なる RC フィルタと見て良く分かりやすい。--- R1 x C1 を同じ値にすれば良いから R1 = 16.0k , C1 = 10n 。

16kHz サンプリング用はこんな感じで良いのだろう。さて、24kHz とか 8kHz 用はどうするのか?

  • Cutoff Freq. → 11.5k や 3.75k に変更


どうも、左の Real Pole Section と R1,R2 だけが変わるようだ。

ここまでをまとめると ...


Cutoff | Real Pole Sect | Section A
-Freq. | R1 C1 | R1 R2 R3 R4 C1 C2
-------------------------------------------------------------------------
3.75k | 3.21k 10n | 2.03k 4.24k 3.30k 3.30k 10n 10n
5.75k | 2.09k 10n | 1.32k 2.77k 3.30k 3.30k 10n 10n
7.5k | 1.60k 10n | 1.01k 2.12k 3.30k 3.30k 10n 10n
11.5k | 1.05k 10n | 661 1.38k 3.30k 3.30k 10n 10n


次に、入力レベル。出力を 1Vp-p ぐらいにしたいのだが、PWM なので入力が 3.3Vp-p さらに Gain は 2。
... 1/6.6 にしないと。さらに、バイアスをかけてやらないとだめ。

そのため R1 を 入力 RI, プルアップ RU ,プルダウン RD に分ける。

まずはバイアス。LVM358 などに合わせるため、1/3 VCC にするとして、RU = RD * 2 。
で、RU,RD の合成抵抗値は 2/3 RD 。入力側 RI = 2/3 * (6.6 -1) RD 。
全部の合成抵抗値は 0.5656... RD 。

この計算を元に抵抗値を決定。


Cutoff | Real Pole Sect | Section A
-Freq. | RD RU RI C1 | R1 R2 R3,R4 C1,C2
-------------------------------------------------------------------------
3.75k | 5.6k 11k 22k 10n | 2.0k 4.3k 3.3k 10n
5.75k | 3.9k 7.5k 13k 10n | 1.3k 2.7k 3.3k 10n
7.5k | 2.7k 5.6k 11k 10n | 1.0k 2.2k 3.3k 10n
11.5k | 1.8k 3.9k 6.8k 10n | 680 1.5k 3.3k 10n


7.5k Hz の入力レベルを検算してみる。

LO レベル 0.279 VCC , HI レベル 0.421 VCC 。
ここから 平均レベル 0.350 VCC 。VCC = 3.3V のときの振幅 0.468 Vp-p。

... OK そうだ。



次に前記事の基板の更新。

まず、未使用だったアンプをボルテージフォロワとして入れた。次に、リード部品の選択を変更。一番値の選択が難しい 入力の プルアップ ,プルダウン をリード部品でも使えるようにした。

回路図は,こうなった。


オペアンプが 2つパラレルになっているように見えるが気のせい。R2' , R3' と同じく兼用部品。

カットオフ周波数は、C1=C2=C3 として 1 / ( 2 πR5 C3 ) で決まる。R4 は、 0.48 x R5 。R1,R2,R3 の合成抵抗値は、0.785 x R5 。今回のバランスだと、R1 = 5.18 x R5 , R2 = 1.39 x R5 , R3 = 2.78 x R5 。この値を目安にいったん仮決めしてから、合成抵抗値を合わせこむ。

とりあえず、eagle データ。dac23-actv3.zip
posted by すz at 23:22| Comment(101) | TrackBack(0) | DAC23

2009年09月24日

デジキーで チップ抵抗

デジキーで チップ抵抗が 思ったより安い値段で10 個〜 買えることを知って、いろいろ購入。

メインは、AT90USB162 と TLV320AIC23/DAC23 のつもりだったのだが、チップ抵抗とコンデンサがメインになってしまった。


  • チップ抵抗 MCR10系 1/8W ± 1% 0805 (2012サイズ)

    RHM560CRCT-ND(560) 〜 RHM100KCRCT-ND (100K) まで E24 系列
    + RHM220KCRCT-ND (220K) + RHM470KCRCT-ND (470K)
    57 種類 10 個 づつ ( 単価 3.9 円 ) 合計 2223 円

  • チップ抵抗 MCR10系 1/8W ± 5% 0805 (2012サイズ)

    RHM0.0ARCT-ND など 0.0 22 33 100 220 470 1.5K 2.2K 3.3K
    4.7K 10K 33K 47K
    13 種類 50 個づつ (単価 2.46 円) 合計 1599 円

  • チップ抵抗 MCR10系 1/4W ± 1% 0805 (2012サイズ)

    RHM.10MCT-ND(0.1) + RHM1.00CCT-ND(1.0)
    2 種類 10 個づつ (単価 14.6 円) 合計 292 円


    デジタル回路中心だと E24 系列は必要ないのだけれども、アナログ回路を少し試すだけで結構な種類必要になる。数K、数十K を中心に揃えておくことにした。

    あとは、よく使いそうなのを中心に 50 個づつ。あと電流測定に使えそうなのを 2 種類ほど あまった分で選択。

    全部 MCR10系。MCR10で検索して、デジキー型番のルールが分かったら、型番直打ちで発注書に登録した。


  • チップコンデンサ C0805C 系 (2012サイズ) その1

    399-1112-1-ND 18PF 50V NP0 単価 4.57@100個
    399-1147-1-ND 1000PF 50V X7R 単価 2.09@100個
    399-1158-1-ND 0.01UF 50V X7R 単価 2.02@100個

    100 個づつ 合計 868 円


  • チップコンデンサ C0805C 系 (2012サイズ) その2

    399-1123-1-ND 100PF 100V NP0 単価 7.00@10個
    399-1127-1-ND 220PF 50V NP0 単価 11.4@10個
    399-1130-1-ND 330PF 50V NP0 単価 5.7@10個
    399-1133-1-ND 470PF 50V NP0 単価 16.5@10個
    399-1135-1-ND 680PF 50V NP0 単価 11.4@10個
    399-1136-1-ND 1000PF 50V NP0 単価 8.80@10個
    399-1151-1-ND 2200PF 50V X7R 単価 3.80@10個
    399-1153-1-ND 3300PF 50V X7R 単価 4.80@10個
    399-1155-1-ND 4700PF 50V X7R 単価 4.40@10個
    399-1163-1-ND 0.022UF 50V X7R 単価 6.00@10個
    399-1164-1-ND 0.027UF 50V X7R 単価 6.90@10個
    399-1165-1-ND 0.033UF 50V X7R 単価 7.10@10個
    399-1166-1-ND 0.047UF 50V X7R 単価 6.30@10個
    399-5623-1-ND 0.068UF 50V X7R 単価 15.40@10個

    10 個づつ 合計 1155 円。


    NP0 , X7R は温度特性。... だが今回の発注の範囲では、NP0 = ± 5 % , X7R = ± 10 %。それと同時に波形が歪む傾向も示すらしい。NP0 だとフィルタに使えるが、X7R だと厳しいらしい。

    コンデンサの場合、デジキー型番のルールもよくわからないし、単価もばらばら。単価が安くなるのも 50 個〜じゃなくて 100 個〜。

    18PF は、AVR とかの水晶用。1000PF、0.01UF は、秋月で扱っているものの 2012 サイズではないので 多めにした。

    C0805C で検索して、安いのを発注書に登録した。


チップ抵抗とチップコンデンサの合計が 6137 円。勢いあまって 合計 100 種類近く買ってしまった。これに AT90USB162 x 8 と TLV320AIC23 1 個 、DAC23 2 個で 1 万円弱の買物。

チップ抵抗セットは、一通り揃えるなら、チップワンストップの R-6 2012チップ抵抗器キット10Ω-100kΩ(ROHM製)が安いようだ。97種類 x 50 個で 6980円。デジキーでバラ買いすれば、139 円@50個 x 97 = 13483 円にもなってしまう。だがバラ買いなら、欲しかったものを コンデンサも含めて 100 種類弱で6137 円という見方もできるわけで ... まぁ よしとしよう。

メモ -- 今回買い逃したもの




  • 精度の高い表面実装のコンデンサ。種類は多くなくて良い。

    セラコン系は無理。フィルムコン なら見つかった。たとえば、0.01uF の ECHU01103GX5 は、2012 で ± 2 % 。値段は 10個304円。あと、0.047uF の ECH-U1C473GX5 10個470円 これは、3216。

  • 耐圧の高い表面実装の X7R コンデンサ

    積層セラミックは、電圧が高くなると容量が減る特性らしい。そのため、波形が歪む。



    これは、YAGEO というメーカの X7R シリーズ積セラのデータシートの抜粋。

    確かにその通りだ。ただ、耐圧が高くなるとカーブが緩やかになる。耐圧の低いものを直列にしたものと同等ならそうなるのは当然のように思える。あと、低い電圧ならカーブが緩やか。

    このグラフを見ると、50V 耐圧品を 0V 付近で 1Vpp のレンジで使うのなら、容量変化は せいぜい 0.2 % ぐらいか。



    これは、温度特性。5 ℃〜 40℃で一定のように見える。 今回のような使い方なら 0.01uF を テスターで測って同じ値のものを 5〜6 個から 3 つ選別するとかでもいいかも。カットオフ周波数はずれるかも知れないが、グラフの形は変わらない。

      ちなみに、フィルタに使う場合、経年変化も考慮しないといけないらしい。→ 静電容量の経時変化のメカニズムについて(pdf)

      ハンダ付けすると容量が元にもどるので、買った状態より容量が増え カットオフ周波数が下がる。で、だんだん容量が減ってカットオフ周波数が上がってくる。... といっても X7R だと 1000 時間で 3%、10000 時間で 6% ぐらいか。

    さて、LINEIN のカップリングコンデンサには、0.47uF 程度の容量が必要だが そんな大容量で小型のフィルムコンは存在しない。小型を求めるなら、積セラで、せいぜい X7R 。ならば、できるだけ高耐圧のものを使いたい。

    探したところ、2012 で 100V 品があった。ムラタのGRM21BR72A474KA73L。ただ、10個717円もする。50V で済ますなら、GRM21BR71H474KA88L 10個338円。25V なら、YAGEO CC0805KKX7R8BB474 が 10個94円

    ここで、EDN Japan: コンデンサの選び方という記事を発見。これ見ると、25V でも十分そう。

    とりあえず、0.47uF の 25V 品を 100 個ぐらい。( 1uF は高くなるのでパス。)

  • MCR10 ± 1% 抵抗で、9.1K とか。なぜか値を間違って発注。

  • ± 5% 抵抗 50 個単位 1K(買い忘れ)、470(違うものが送られて来た)
posted by すz at 19:15| Comment(0) | TrackBack(0) | DAC23

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

2009年09月19日

NJU87xx

JRC の NJU87xx シリーズで、デジキーで買えそうなのを探してみた。前に探したときは、2000 個〜みたいなのばっかりだったのだが、結構1個〜買えるようになっている。

NJU87xx シリーズのなかで気になるものを紹介。


@1 @25
NJU8711V 261 217 2ch ドライバ 2.0V 〜 3.6V
NJU8713V 282 235 2ch ドライバ 1.7V 〜 2.7V
NJU8721V 434 361 DAC ステレオ STL
NJU8725V 651 542 DAC ステレオ BTL


NJU8711V と NJU8713V は、入力をそのまま出力するタイプ。PWM 出力のドライブに使う。クロックが必要。NJU8711V は、扱いやすそうだがドライバ用の電源が分かれていない。 NJU8713V は、分かれていて、ドライバ側は、4.0V まで上げられる。

これを使えば PWM を BTL にしたり、別電源で出力上げたりノイズ対策できそう。... ただちょっと高い気がする。

NJU8721V , NJU8725V は、DAC + D級アンプ。SPI で入力フォーマットを選んだり、音量コントロールができる。

気になったきっかけは、Make:Japan ArduinoでFM音源「FMmelody」ハードウェア解説

ちゃんとした出力を付けてやれば、いい音で鳴るのかな?と思ったため。

鈴商のBU9480FMC34119とかでも良さそうな気がするんだけど、デジキーに注文するときについでに買おうかと。

そういえば、TLV320AIC23B 。ADC としてしか注目してなかったけれども、DAC にヘッドホンアンプが付いているんだった。こっちを使えるように頑張ったほうがいいのかな? ただ高機能なだけに、荷が重いんだな。

    シンプルな BU9480F ではなくて NJU8721V , NJU8725V や TLV320AIC23B といった高機能な DAC を使う利点 -- ひとつは、音量制御がDAC 側で出来ること。

    AVRで音源を作る場合、メインボリュームの掛け算を減らせるのは負荷が減って嬉しいかも。

    あと フィルタ。オーバーサンプリングディジタルフィルタが効くので、外付けのフィルタの条件がゆるくなる。たぶん高い周波数のローパスフィルタ1種類で良い。PWM なんかだと サンプリング周波数を変えたらフィルタの時定数も変えないといけない。これは L,C の部品を換えるということで結構面倒。

    外付けのフィルタ回路で音が変わるとなると、ソフト自体を評価するとき困る。この点ですごく嬉しいかも。... まぁ本当の音がどういうものか知りたいので、ちゃんとサンプリング周波数に合わせたいけど。

    ちなみに、NJU8721V/NJU8725V は、8fs 。サンプリングレートの下限を 8KHz にする場合、普通はカットオフ周波数を 4KHz 以下にしないといけないが、8 倍の 32KHz とはいかなくても、20KHz とかにできるのかも。ちなみに L,C をいくつにすべきかについては、 NJU8721Vのアプリケーションノートに書いてあったりする。

    TLV320AIC23B になると、250 fs 以上になるので、普通フィルタは不要。... みたいなことがデータシートに書いてある。

    逆に これらの DAC は、MCLKが必要になる。 NJU8721V/NJU8725V は、256 fs 固定なので、8KHz サンプリングなら、2048 kHz と半端な周波数になる。水晶を 18.432 MHz とかにした上で、PWM とかで作らないと 8kHz に合わせられない。

    TLV320AIC23B だといくつか選択できて 250 fs/256 fs/272fs/384 fs の N 倍が選べる。ただし、選択できる N は限られる。250 fs があるので、12MHz とか きりの良い水晶が使える。

    あ、今調べたら TLV320AIC23 687円@1個 -- 無印というのがある。..というかこれしか在庫がない。ちょっとデータシートを見た限りでは、B となにが違うか分からない。

    あと、DAC専用の TLV320DAC23 があり、512円@1個と、こちらの方が安い。

    DAC23 ではサンプリング周波数が増えている。たとえば、 12 MHz USB モードで 8kHz,32kHz,... に加えて4KHz,16kHz,24kHz を選べるようになっている。


posted by すz at 23:55| Comment(0) | TrackBack(0) | DAC23