AK4495SEQ  DualMono のDACを作ってみる

# 概要

eBayにてAK4495SEQのDualMonoを注文したら「ごめーん、今作っていないの。」と言われたので、AK4495SEQ DualMono I2S-DAC を基板から作ります。
パーツ選定、PCBメーカ選定とかからスタートしています。

## 全体システム完成イメージ図

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/4bbd922d-8d4d-43af-4780-4c3226806362.png)

# ① 大雑把な完成イメージを作る

### 基本コンセプト

- AK4495SEQ を Dual Mono で
- NanoPi-NEO2 に接続する。
- DACの制御は、I2CでNanoPi-NEO2から実施する。

### 基板サイズ

- 100㎜ x 100㎜
- PCB発注したときに値段が安い範囲。
- eBayで売っているDACもこのサイズが多い？
- 取付穴は ~~90㎜ x 90㎜~~ 92mm x 92mm
- そして何よりケース加工済みのため

### 外部電源

外部電源をどうするか？ですね。
今回はLR共通で、3系統に分けてみています。
この場合、eBayで適合するトランスが入手しやすいです。

以下、想定消費電流です。

|電圧|系統|消費電流|
|:--|:--|--:|
|±15v|オペアンプx2| 10mA x2|
|+6~9v|DACアナログ部|42mA x4 + 2mA x2|
|+5v|DACデジタル部|23mA~ x2|

# ② 大雑把なパーツ候補を決める

AK4495EQのデータシートと眺めながら方針決めてみます。

- DVDDは、LR独立給電
- AVDDは、LR独立給電
- VDDは、LR独立給電
- VREFだけ、LR共通給電

※「出力電圧は(VREFHL/R - VREFLL/R)の電圧に比例します。」と書いてありますので、左右差を排除するために、あえてVREFだけLR共通にしてみています。
また、VREFの消費電力は1mA程度のようです。

※ AK4497のデータシートを見ますと、VREFには2200uFを接続してください。とか書いてありますがVDDと共通給電の場合にVREF変動を抑えるために必要と思われます。逆に考えますと、VDDの消費電流変動が大きいとも読み取れ、電源を分離した方がよさそうな部分となります。
また、AK4497評価ボードの回路では470uFとなりVREF/VDD独立供給となっております。
さらにまた、評価ボード側の資料では、VREFに接続するコンデンサ容量と歪率の関係が記載されており、容量が多い方が歪率少ない結果となっております。ただし、これは接続した電源ICにも依存する部分と考えられます。


## 電源レギュレータ

有名どころを纏めてみる。
データシート値を転記しただけですので、測定条件・環境とかはまちまちです。

|型番|最大出力電流|RMSノイズ|PSRR(100Hz)|PSRR(1MHz)|値段|コメント|
|:--|--:|--:|--:|--:|--:|:--|
|LT3042|200mA|0.8μV|118db|79db|¥629|ノイズ最小。出力電圧可変タイプ|
|ADM7150|800mA|1.0μV|86db|70dB|¥1029|出力電圧固定タイプ|
|ADP150|150mA|9.0uV|68db|38db|¥120||
|NJM2863|100mA|12uV|76db|48db|¥25|出力電圧固定タイプ。安い!|
|LT1763|500mA|20μV|63db|23db|¥557|出力電圧固定タイプ|

RohmのAudio用レギュレータというのもあります。
http://www.rohm.co.jp/web/japan/news-detail?news-title=2018-03-13_news_audio&defaultGroupId=false

LT3042の出力電圧は、100uAの定電流出力に外部抵抗を繋ぎ、基準電圧を生成し調整する模様。
ノイズ自体は最良なのですが、そのノイズ量のままで実装できるか？といえば、難しいかもしれません。

また、電源レギュレータ選定は難しいもので、ノイズ特性をとるか、出力インピーダンス特性をとるか？の問題があります。

例えば、水晶用ですと、ノイズ特性＞インピーダンス の優先順位で問題ないようですが、消費電力が変動するものは、消費電力変動がそのままノイズ(=電圧変動)になりますので、インピーダンス特性を重要視した方が良い結果を得られやすいかもしれません。

インピーダンス特性は、公開されているものが少なかったりしますので、「Load Transient Response」あたりから判断したりします。

今回は ADM7150 で行きます。

## 抵抗

2012サイズで作ってみます。
2012より1608のほうが音が良いらしいですが、実装都合で2012を選択しています。

チップ抵抗の有名どころだと
Vishay Thin Film PAT 2012 や
進RG
あたりみたいです。

## コンデンサ

表面実装コンデンサを容量・サイズ・耐圧で纏めてみた

### MLCC(積セラ)のX7R

※結構雑に纏めています。大雑把な目安程度で。

|容量|1608|2012|3216|4532|
|--:|--:|--:|--:|--:|
|10uF|-|10v|35v|50v|
|4.7uF|-|35v|50v|50v|
|1uF|50v|50v|100v|100v|
|0.1uF|50v|100v|100v|100v|

 
### PMLCAP

PMLCAP も良さそうなので、秋月取り扱い品を纏めると以下のサイズ感になってました。

|容量|2012|3216|3225|4532|5750|
|--:|--:|--:|--:|--:|--:|
|10uF|-|-|-|16v|25v|
|4.7uF|-|-|-|35v|-|
|2.2uF|-|-|25v|-|-|
|1uF|-|25v|-|-|-|
|0.1uF|※1|50v|-|-|-|
|0.01uF|※1|100v|-|-|-|
|0.001uF|※1|100v|-|-|-|

※1はシリーズ品あり、秋月未取り扱いです。

### コンデンサ関係まとめ

MLCCの場合は、

- DCバイアス特性あるので、最低、実電圧の5倍。出来れば10倍以上。できるだけ耐圧の高いもの。
- C0G特性優先、X7Rは次点として、それ以外は使わない。

の採用方針で、PMLCAPと合わせて最終的に以下のサイズ感で行きました。

|容量|サイズ|
|:--|--:|
|10uF, 4.7uF|4332|
|1uF, 0.1uF|3216|
|それ以下|2012|

※具体的なDCバイアス特性は、各データシートとにらめっこで。
例えば、2012 X7R 4.7uF 35v だと、[こんな感じ](https://product.tdk.com/ja/search/capacitor/ceramic/mlcc/info?part_no=C2012X7R1V475K125AC)です。

# ③ 基板メーカー選定

基板メーカによりデザインルールが変わるので、最初に決めておきます。
条件によっては、製造原価も上がってしまいます。

とりあえず、安い2社で決めていきます。
https://www.fusionpcb.jp/fusion_pcb.html
https://www.elecrow.com/pcb-manufacturing.html

※表は安い範囲で書いてますので、価格との兼ね合いでパラメータは変わります。

|ルール|Elecrow|FusionPCB 1oz基板|FusionPCB 2oz基板|
|:--|--:|--:|--:|
|最小パターン幅|6mil (0.1524 mm)|6mil (0.1524 mm)|10mil (0.254 mm)|
|最小パターン間隔|6mil (0.1524 mm)|6mil (0.1524 mm)|10mil (0.254 mm)|
|最小穴径|0.3 mm|0.3 mm|0.3 mm|
|最小レジスト幅|0.2 mm|0.4 mm|0.4 mm|

とりあえず、8～10milで作るのが安心のようです。
KiCadの標準値が0.2㎜なので、そのまま行きます。

# ④回路図と基板レイアウトを作る

KiCadで作ってみました。
流れとしては、大雑把には以下の感じになります。

1) 新規プロジェクトを作成

2) 回路図エディタ

- 回路図を書く。
- コンポーネント無ければ、定義する。
- 回路図上で、フットプリントを割り当てる。
- フットプリントが無ければ、フットプリントを作る。
- 一通り出来たら「ネットリストを生成」し基板エディタへ移行する。
 
3) 基板エディタ

- デザインルールを設定する。
- 「ネットリストを読み込み」にて作成した回路図からパーツ情報・結線情報を取り込む。
- 各種コンポーネントを移動・配置しながら、結線していく。

4) プリント基板発注

- 基板エディタのプロットメニューより、ガーバーデータ出力してプリント基板メーカーへ発注する。


## 回路図(抜粋)

### AK4495の結線

I2C制御なので以下で結線してみます。

|PinName||
|:--|:--|
|PDN		|※１|
|SSLOW/WCK	|GND|
|SMUTE/CSN	|GND|
|SD/CCLK/SCL	|PinHeader: SCL(I2C)|
|SLOW/CDTI/SDA	|PinHeader: SDA(I2C)|
|DIF0/DZFL	|NC|
|DIF1/DZFR	|NC|
|DIF2/CAD0	|Lch:GND, Rch:DVDD ※２|
|PSN		|GND|
|I2C		|DVDD|
|DEM0		|GND|
|DEM1		|GND|
|ACKS/CAD1	|GND|

※１
PDNは電源投入後 150ns以上の間”L”とする必要があるので、RC回路でDelayさせます。
R=10k, C=10uF程度が目安でしょうか。
あるいは、GPIO制御としてまうほうが楽かもしれません。

→ 実装結果：RC回路によるDelayはうまく動かず、GPIO制御になりました。

※２
CAD0をL,Rで設定を変え、Lch,Rchで異なるI2Cアドレスに割り当てます。

### I2C関係

NanoPi-NEO2接続の場合、Pull-up が必要になります。
1k~2k程度の抵抗で、DVDDとI2C信号線を繋いでPull-upします。

RaspberryPiの場合は、1.8kがSBC側で実装されているようです。

### I2S関係

ダンピング抵抗を入れます。
例えばNanoHat-PCM5102aの場合33Ωが直列接続されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/ac69aad3-c1a8-5b57-b4e7-6d0b61b9a28b.png)


### オペアンプ関係

念のために、100Ω程度の出力電流制限抵抗を入れておきます。
AK4495のLPF回路例にも入っています。

#### LPF部

DACの出力は、

- P or N 単体： 2.8Vp-p (2.5Vを中心に ± 1.4V の振幅)
- PN差動合成 ： 5.6Vp-p (± 2.8V の振幅)

なので、下記回路の場合1:1出力のため、最終的に

- 5.6 Vp-p (± 2.8V)
- 2.0 Vrms

出力になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/f8407961-4a30-b49c-1019-66d8123b63b3.png)


出力電圧が高く使いにくい場合は LTSpiceでシミュレーションしながら定数を変更してみます。
とりあえず、インパルス応答でシミュレーションさせてみます。

■ 回路図のまま実施 → 5.6Vp-p (2Vrms)出力

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/1400e3a0-8d79-0fa4-f890-178209d0e1e2.png)

■定数調整 → 2.8Vp-p (1Vrms)出力

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/338c112c-9cd9-97fe-aa19-461d709f5361.png)

## 基板レイアウト

無理やり詰め込みました。
100㎜ x 100㎜ なので、かなりカツカツになってしまいました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/23967450-a37a-1989-650e-42a4c5824dab.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/e4bf2dd2-36f8-45dd-3f52-a145fd6afeb4.png)

### デバッグ用パターンの準備

Low/High系の固定制御線は、接続間違った際にリカバリーできるように特殊フットプリント作ると、良いかもしれません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/baa5b2ca-645d-315f-63f3-f09ac220796d.png)

### ベタGND

アナログ信号1点GND、デジタル信号のベタGNDが理想とされているようですが、賛否両論あるようです。
少なくとも、デジタル信号系はベタGNDの共通見解のようです。

また、AK4497のデータシートでは、インピーダンス低下のためにアナログ側もベタGNDが推奨されています。

# ⑤BOMにまとめてパーツ発注

|型番|個数|値段|
|:--|--:|--:|
|[AK4495SEQ](https://www.digikey.jp/product-detail/ja/akm-semiconductor-inc/AK4495SEQ/974-1143-ND/6235384)|2|¥1,974 x2|
|[ADM7150-3.3](https://www.digikey.jp/product-detail/ja/analog-devices-inc/ADM7150ARDZ-3.3/ADM7150ARDZ-3.3-ND/4504756)|4|¥999 x4|
|[ADM7250-5.0](https://www.digikey.jp/product-detail/ja/analog-devices-inc/ADM7150ARDZ-5.0/ADM7150ARDZ-5.0-ND/4504757)|3|¥999 x3|
|[Stereo RCA jack](https://www.digikey.jp/product-detail/ja/cui-inc/RCJ-2121/CP-1430-ND/408517)|1|¥189|

抵抗・コンデンサ類は割愛。

一通りそろったら、プリント基板デザインを原寸大で印刷して、フットプリントサイズや、ハンダ付け作業に無理が無いか確認するのがベターです。

# ⑤基板発注

## AK4495SEQ DualMono rev1

FusionPCBへ発注
枚数：5枚
値段：$7.99 送料込み。
配送：Singapore post

|Date|Event|
|--:|:--|
|2018/3/29|発注|
|2018/4/4|製造完了、発送|
|2018/4/11|Hand over to airline.|
|2018/4/27|Item status not found in the system. → 追跡不可に。何が起きた？|
||到着|

完全に行方不明です。

## AK4495SEQ DualMono rev2

Elecrowへ発注

枚数：10枚
値段：＄9.5 + ＄13.66(送料)
配送：OCS/ANA Express(2-3 Business Days)

|Date|Event|
|--:|:--|
|2018/4/19|発注|
|2018/4/24？|製造完了、発送|
|2018/4/25|配送業者受領|
|2018/4/27|到着|


## NanoHat-AK4495SEQ

FusionPCBへ発注
枚数：5枚
値段：$7.99 送料込み。
配送：Singapore post

|Date|Event|
|--:|:--|
|2018/4/10|発注|
|2018/4/19|製造完了、発送|
|2018/4/24|Hand over to airline.|
|2018/5/1|到着|

こっちはちゃんと届きました。

# ⑥実装

## 必要な工具

- 温度調整式ハンダごて (やはり便利)
- ハンダごての、こて先。[T18-D16](http://ec.hakko.com/goodsdetail.php?goodsid=029516)
- ピンセット (先が曲がっているやつが使いやすい)
- フラックス
- フラックスクリーナ
- 検査用虫眼鏡 x10 程度～
- LEDスタンドライト (暗いと作業できない)
- 爪楊枝 (SMDの仮固定に使用)
- 爪楊枝を押さえるなにか。 (SMDの仮固定に使用)
- 3～4mm幅のマスキングテープ (ICの仮固定に使用)

ハンダごての小手先は、細い奴R0.125とかは、熱容量不足気味でハンダ付け作業性が非常に悪かったです。
[T18-D16](http://ec.hakko.com/goodsdetail.php?goodsid=029516)だけで1608まで結構いけます。

### 使わなかった工具

- [スタンドルーペ](https://www.amazon.co.jp/gp/product/B071YMBTR8/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1)

一見便利そうなのですが、作業の邪魔になったため結局使いませんでした。

## SMDの実装

- SMDパーツを置く。
- 「爪楊枝」と「爪楊枝を押さえるなにか。」を使用し、SMDパーツを仮固定。
- フラックスを塗る
- ハンダごてのこて先に、ハンダを付ける。
- ハンダごてをSMDパーツにあてる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/dcb7be82-4f82-483c-f427-27a84f03ddc5.png)

## IC関係

- 向き確認。
- 3~4mm幅、長さ6㎝くらいのマスキングテープ真ん中で、ICをPick!
- 位置決めして、マスキングテープで基板に固定。
- フラックス塗る
- ハンダごてのこて先に、ハンダを付ける。
- ハンダ付け。追いハンダは必要に応じて。

## 洗浄

コネクタ類などを付ける前に、

- フラックスクリーナで洗浄。
- 乾燥
- おかえり綺麗な基板♪

その後、各種コネクタ等大型パーツをハンダ付け。

## 実装完了

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/868dabea-7c73-f033-0cc3-a9b059f637f7.png)

# ⑦I2C制御

apt install i2c-tools
i2cdetect -r -y 0

でI2C通信ができているかを確認。
最終的に以下のコマンドを、rc.localに組み込み。

```console:/etc/rc.local
echo 203 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio203/direction
echo 0 > /sys/class/gpio/gpio203/value
echo 0 > /sys/class/gpio/gpio203/value
echo 0 > /sys/class/gpio/gpio203/value
echo 1 > /sys/class/gpio/gpio203/value

i2cset -y 0 0x10 0x02 0x08
i2cset -y 0 0x11 0x02 0x0A

i2cset -y 0 0x10 0x00 0x8F
i2cset -y 0 0x11 0x00 0x8F
```

# ⑧出力チェック

アナログ出力 Lch, Rch にオシロスコープを接続して、波形レベルで確認します。

Lch正側、Rch負側のインパルス信号データを使うと非常に良いです。
この波形で確認できることは、

- Lch, Rch のチャンネル反転有無
- Lch, Rch の位相ズレ有無確認

が一気にできます。
また、DualMonoの場合、正しく動作できていないと、正負打ち消しあい無音になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/f7ccc7d5-4a29-a1b4-186e-ee3cc5aca54d.png)

# スピンオフ作品

## NanoHat-AK4495SEQ

1608, 2012, 3216 で詰め込み、なおかつ、フットプリントも面積の都合上リフロー用。
そのため、ハンダ付け難易度 S クラス。

これでも、こて先 [T18-D16](http://ec.hakko.com/goodsdetail.php?goodsid=029516) で十分いけました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/2ada3e1e-1722-0c56-7e49-9fc249fe4115.png)

# 終わりに

- 基板レイアウトは、かなり大変。
- BOM作って、パーツ選択・調達　も結構大変。
- SMD積セラをDigikeyで注文しようとすると、前日あった在庫が、今日は売り切れの事態が多数発生。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/187531/2db6ea45-0cca-a21e-4f97-4d21fd370f50.png)