PCM2704 DAC Ver2 - DC直結・出力オペアンプレス

はてブ数 2021/08/05

PCM2704 DAC(Ver1)キットを再販にあたり、大幅強化してみました。

PCM2704-v2.jpg

概要

委託しているPCM2704DACが2019年2月から在庫切れになっていて悩んでいました。

初期設計(Ver1.0)から10年以上が経過し、ハイレゾが普及しつつあるこの時代にPCM2704はチップの制限上48KHz/16bitまでしか再生できません。再販するにはある程度まとまった数を作る必要がありますが*1、不良在庫を抱えたくありません(苦笑)

しかしながら再販の要望も複数頂いており、どうにか応えたい。

それならばいっそのこと「音質に全振りしたVer2を作ってしまおう」というので作られたのがこのDACです。

*1 : 少数ずつ作っていると原価が全く見合わなくなります

回路図と部品表

pcm2704-v2.png

部品記号部品名使用部品型番備考
U1,U2低ノイズ3端子レギュレータ(3.3V)ADP150AUJZ-3.32Ver1.4はADP150専用
U3USB DAC 16bit/48kHzPCM27041PCM2704Cでも可(確認済)
U4DCDC反転チャージポンプMAX889RESA1LTC660から変更
Q1, Q2低ノイズPNPトランジスタBC859C, 21522SA1015とかでも可
X112MHz TCXO 2.5ppmFT3HNBPK12.0-T1112MHz-TCXOなら何でも
L1コイル 100uH/40mA-12012チップ使用
R1-R9チップ抵抗各種-11608チップ使用
R51-R54薄膜チップ抵抗 1KΩ-4高音質チップ抵抗
R55-R56薄膜チップ抵抗 5.1KΩ-2高音質チップ抵抗
C1-C8積層セラコン 0.1uF-12012チップ使用(X7R)
C9積層セラコン 10uF-12012チップ使用(X7R)
C10-C18フィルムコン 0.1uF-92012/ECPU使用
C21-C32高分子コンデンサ 6.3V 820uFA750 or PSF12470uF以上
C51-C54PPSフィルムコン 1000pFECH-U1H102JX54高音質フィルムコン
J1USB Bメス基板コネクタ1-
J24極ステレオミニジャック-1-

設計方針と改良点

Ver1.4の問題点

Ver1.4の回路はある種の完成系で、これを改良するとなると大きな決断をせざる得ません。大きな決断というのは、何かを犠牲にしてでも音質を一番良くするということです。

Ver1.4の出力LPFにはいくつかの欠点がありました。

pcm2704-Ver1.4-LPF.png

  1. 出力抵抗がないため、使用できるオペアンプが限られる。
  2. 電源電圧が±4V程度しかないため、使用できるオペアンプが限られる。
  3. ベッセルフィルタ構成が良くない。*2

他にもオペアンプ電源が安定化されていないとか色々あるのですが、とにかくすべての原因は半ば強引にオペアンプでLPFを動作させていることにあります。ここは設計当時の「価格(回路規模)を抑えて音質を狙う」ために妥協した部分です。

Ver2.0での改良点

抵抗とコンデンサだけのシンプルなパッシブLPFのほうが(ほとんどのケースで)音質は良くなります。これは当たり前のことなのですが、なぜオペアンプが必要だったのでしょうか。

それはPCM2704の出力に含まれる出力オフセット(+1.64V)をキャンセルするためです。オフセットがなくなれば、音質低下の最大要因である出力カップリングコンを排除できます。このために多くのことが犠牲になっていました。

これをどうにか解決できないかと検討と試行錯誤を繰り返し、オペアンプを使わずに出力オフセットをキャンセルする方法を思いつきました。

pcm2704-v2-LPF.png

オフセット分をマイナス電圧で引き下げる作戦です。オフセットを+1.64V、マイナス電源を-4.2Vとすると、R56は次のように求められます。

{\rm R56} = \frac{{\rm R52}+{\rm R54}}{1.64} \times 4.2 = \frac{4.2(1+1)}{1.64} \fallingdotseq 5.12{\rm K\Omega}

この5.1KΩは音質に関わるので(RT0603等を持っていないと)簡単には変更できません。よって、出力オフセットはR3の値で調整するのですが(50Ω増やすと出力電圧が+20mVぐらい変化する)、左右同時にしか調整できません。

とはいえ、USB電源電圧が5.00~5.05V付近ならば、コンデンサのエージング後にオフセットは20mV程度に収まるかと思います。

Ver2の特徴

Ver2の欠点

音質は最大限進化させてものの、これはこれで欠点があります。

  • 出力電圧レベルが小さく、約1.3Vppしか出せない。

これが音質のために犠牲になった部分です。PCM2704は出力電圧範囲が元々小さめなところに、パッシブLPF&オフセットキャンセルの回路を詰め込んだことが原因です。これは諦めるしかありません。

1Vppあれば最低限問題は起こらないと思いますが、そういうものだとご理解ください。

音質比較

手持ちのDACと比べてみました。

セルフ魔改造PCM2702 DACとの比較

常用している魔改造PCM2702ですが、今回のPCM2704-v2の圧勝という悲しい結末になりました……。

慌ててPCM2702を再改造するものの、再改造してもこのPCM2704-v2のほうが良いようです。*3

msBerryDACとの比較

去年まで頒布していたラズパイ用 384kHz/32bit DACです。PCM2704-v2の勝ちでした……。

「それはさすがにまずい」ので、msBerryDACを改造して C1/C2 を 10nF→1nF に変更しました。

C1/C2改造msBereyDAC > PCM2704-v2 > ノーマルmsBerryDAC

というわけで、DACはチップの性能もさることながら回路設計が重要というのがよく分かる結果になりました。

*3 : 完全に余談ですが、PCM2702は出力インピーダンスが高いため、出力オペアンプレスは少々難しくなってます。そのため出力オペアンプLPFを簡単には除去できませんでした。

まとめ

  • PCM2704 DACの出力電圧範囲を妥協して、音質を進化させた。
  • 使用している部品も進化させた。

キットの購入は委託先から。このDACは再販しない可能性があります。

2000/02/29(火)vndrv memo

はてブ数
###############################################################################
 Virtual Network Driver I/O API specification
						Ver 0.03
###############################################################################
※基本は「リニアアドレス」を使用。

2F10h	R/W
	I/O APIの存在確認
	書き込んだバイトの NOT が読み出せる。
	初期値 0
	※他のアプリで変更されている可能性があるため0を期待してはいけない。
	※よって、非 0ffh の確認は 2F12h で行うと良い。

2F12h	R/W
	API有効化レジスタ。初期値 0。
	1を設定すると有効化(有効化しない限り、これより下のAPIは無視)

2F14h	W
	コマンドレジスタ
	書き込んだ、2バイトがコマンドになる。

	B15-B08	IOH	コマンド
	B07-B00 IOL	オプション(マウントポイント番号)

###############################################################################
 Commands
###############################################################################
00h	Get Drives

	IN	IOH = 00h
	Ret	AL	マウントポイント数

1Bh	Find First

	IN	IOH = 1Bh
		IOL =    マウントポイント番号
		FS:[ESI] カレントディレクトリ
		GS:[EDI] ファイル情報バッファ
	Ret
		AX = 0	成功
		AX !=0	失敗
			 AX = 02h	ファイルが存在しない
			 AX = 03h	パスが見つからない
			 AX = 12h	これ以上ファイルが存在しない
		GS:[EDI] ファイル情報を転送

1Ch	Find Next

	IN	IOH = 1Ch
		IOL =    マウントポイント番号
		FS:[ESI] カレントディレクトリ
		GS:[EDI] ファイル情報バッファ
	Ret
		AX = 0	成功
		AX !=0	失敗
			 AX = 12h	これ以上ファイルが存在しない
		GS:[EDI] ファイル情報を転送

###############################################################################
 あると嬉しい
###############################################################################
2F18h	B
	補助コマンドレジスタ
	書き込んだ、1バイトがコマンドになる。
	8086モード、80386モードどちらからでも使用可能。

00h	Break
	IN	なし
	Ret	なし

	Tsugaruをbreakさせる(brkonのイベント発生と同じ扱い)

09h	Print String
	IN	DS:[EBX]	NULL終端文字列
	Ret	なし

	CUIコンソールに文字列を出力。

0Ah	Print Dump
	IN	DS:[EBX]	表示するメモリ位置
		ECX		バイト数
	Ret	なし

	CUIコンソールに ECXバイト(以上)をダンプ(dm)出力。

0Bh	Print Dump for Liner Address
	IN	[EBX]		表示するメモリ位置
		ECX		バイト数
	Ret	なし

0Ch	Print Dump for Physical Address
	IN	[EBX]		表示するメモリ位置
		ECX		バイト数
	Ret	なし

###############################################################################
 ファイル名の注意
###############################################################################
・文字列の終端は NULL (00h)
・ディレクトリの区切り記号は \
・DOSの8.3ファイル形式が最大長。
・大文字小文字の区別がない。
・ファイル名の文字コードは Shift-JIS(とりあえず日本語問題は無視)

###############################################################################
 ファイル情報バッファ
###############################################################################
	+00h	b	ファイル属性
	+01h	d	ファイル更新日時
	+05h	d	ファイルサイズ(byte)
	+09h	13byte	8.3形式ファイル名(NULL終端)

ファイル更新日時
	bit	31-25	year - 1980
	bit	24-21	month
	bit	20-16	day
	bit	15-11	hours (0-23)
	bit	10-5	minutes
	bit	4-0	seconds/2

ファイル属性
	Bit 7	0	Reserved
	Bit 6	0	Reserved
	Bit 5	1	アーカイブ
	Bit 4	?	ディレクトリ
	Bit 3	0	Volume
	Bit 2	0	Systemファイル
	Bit 1	?	Hidden
	Bit 0	?	Read Only

###############################################################################
Memo:
int 2fh
	1123
	110C
	111B
	111C

http://www.oldlinux.org/Linux.old/docs/interrupts/int-html/int-2f-1.htm