ロジックICと抵抗で、16bit・ノンオーバーサンプリングのDACを製作しました。CS8412などのDAIFと組み合わせて使用できます。
このDACは、出力にローパスフィルタを搭載していません。 音質的な面を考慮して意図的に行っていますが、パルス性ノイズが発生しますので、後段に接続する機器によっては故障の原因となります。 無帰還の三極管真空管アンプを使用している、丈夫なフルレンジ一発のスピーカーを使用しているなど、パルス性ノイズの入力に耐えられるシステム以外では使用しないでください。 なお、この回路を製作・使用する場合は、他の製作例もですが自己責任にてお願いします。
石田さんに測定していただいたところ、可聴帯域以上でもたいしてノイズはでていないです。スピーカーを壊す心配はそんなにしなくても良いのかもしれません。(2004/2/16)
現在市販されているDACチップは、24bitとか8倍オーバーサンプリングとか高性能です。でも、CDに収められたデータは44.1kHz・16bitであり、このデータが使い物にならないのであればいくらbit数を高めたりオーバーサンプリングをしたりしても良い音はしないでしょう。今回の製作では、16bit・ノンオーバーサンプリングの、加工しない「生」の音を聴くことが出来ます。
専用DACチップでは、表面実装部品となるためハンダ付けも難しく、入手性も高いとは言えません。今回の製作ではHCシリーズの入手性の良い部品を使用しており、DIP品ですのでハンダ付けも簡単です。
シンプルで理解しやすく、DACの知識が身に付きます。専用DACで製作する時にも役に立ちます。
74HCシリーズのロジックICと抵抗から、オーディオ信号が出てくるのです。なかなか愉快だと思いませんか?
回路が非常に簡単になるため、16bit後詰めフォーマットにのみ対応します。
電流出力にも出来ますが、抵抗1本でI/V変換を行い電圧出力とします。振幅は1.7Vp-pです。また、コンデンサにてDCをカットします。
+5Vの単一電源で動作します。
DAIFからのBCK(ビットクロック)とDATA(シリアルデータ)を、16ビットパラレルデータに変換します。
また、R=2R型DACでは0x0000〜0xFFFFのデータをアナログに変換しますが、DAIFからのデータは0x8000〜0xffff,0x0000〜0x7fffのデータとなっていますので、変換します。具体的には、最上位bit(MSB)を反転する処理を行います。
シリアル→パラレル変換部の16bitパラレルデータを、ラッチタイミング生成部からのラッチ信号に従ってラッチします。
ラッチ部でラッチするタイミングを生成します。RchにはLRCKを、LchにはLRCKの反転信号を出力します。
16bitパラレルデータをアナログ電圧に変換します。LchとRchで個別です。
D/A変換は、R=2R型を採用しています。説明は省きますが、出力電圧は74HC574の出力電圧の1/3となります。5Vなので、出力は0〜1.7Vです。
デジタル部の入力フォーマットと実行シーケンスです。
DAIFからの信号のうち、今回製作したDACで使用するのはBCK,LRCK,DATAの3種類です。DAIFによっては、さらに周波数の高い(256fsや384fs)クロックも出力できるものもありますが、今回は使用しません。
74HC164でシリアルデータをパラレルデータに変換し、LRCKの立ち上がりor立ち下がりでラッチすることで、44.1kHzごとのLch/Rchのパラレルデータが得られます。それをR=2R型DACでアナログ信号に変換します。
電源周りの記述はしていません。適宜、パスコン等を搭載して下さい。
抵抗は、1kΩと2kΩの組み合わせが無難なようです。 150Ωと300Ωではノイズが取りきれなかったので。
74HC574のMSB出力に接続する2kΩに半固定抵抗を挿入して、抵抗やバッファのばらつきを吸収します。 この回路図では、1kΩ+910Ω+100ΩVRで、1.91kΩ〜2.01kΩの範囲での調整ができるようにしています。 この組み合わせが絶対ではありませんが、可変抵抗は、なるべく細かい調整ができるような多回転型のものにしましょう。 調整では、なるべく静かな音楽を聴きながら、もっともノイズの小さくなる抵抗値にします。
なお、このページ冒頭の画像では、半固定抵抗を搭載していません。抵抗をとっかえひっかえして力技で合わせ込むことも可能です。
調整用のwavデータ(380kByte)を作成しました。 ダウンロードして解凍すると33個のwavデータ(計390MByte)になります。 CD-Rに焼くなどして利用してください。 なお、CD-RライティングソフトでMSBが反転されることを前提にしています。 私の環境では、MacOS X 10.3.2のToast Titunium-5.2.1というライティングソフトで、オーディオモードのサウンドファイルとして読み込んでCD-R化しました。
bit_00.wav〜bit_15.wavは、パラレル16bitデータのLSB(bit00)〜MSB(bit15)の該当ビットだけが1でそれ以外が0のwavデータです。 bit_i00.wav〜bit_i15.wavは、bit_00.wav〜bit_15.wavのMSBが反転したデータです。 このディスクリートの場合は、74HC14でMSBを反転していますからbit_i00.wav〜bit_i15.wavを使用します。 これらのwavファイルを再生しながらHC574の出力(12〜19pin)の電圧をテスータやオシロスコープで測定し、該当のbitが+5V(実際はそれより少し低い)でそれ以外が0となっていることを確認します。 配線ミスがあると、+5Vのはずが0Vになったり、逆に0Vのはずが+5Vになったり、+2.5Vのような変な電圧になったりします。
また、ゼロクロス誤差を調整するには、lsb_check.wavを使用します。 これを再生しながら、DACの出力(OUT_L、OUT_R)をオシロスコープで測定します。 このデータは、0x8000と0x7fffというLSBの重みだけ違うデータが交互に再生されるので、本来であればLSB分の電圧差の矩形波となりますが、オシロスコープの測定限界よりも小さい電圧差なので、同じ電圧が連続して出力されるような波形となるようMSBの半固定抵抗を調整します。
なお、これらのwavデータは左右のチャネルで同一の信号となっています。チェック/調整は両チャネルで実施します。
おまけとして、これらのwavファイルを作成するC言語のプログラムを同梱しています。 MacOS X 10.3.2で、gccでコンパイル、実行しました。
(2004/2/16 追記)
lsb_check.wav が間違っていたので、入れ替えました。 (2004/7/3 追記)
音質ですが、いたって普通の音がします。24bitとか、8倍オーバーサンプリングとか、何の意味が有るのか?と考えてしまいます。 あえて音質を評価すると、低域が太くクッキリとしているように感じます。
48kHzや96kHz対応のためにサンプリング周波数変換だとか、デジタルフィルタだとか、数千円もするPCM1704を複数パラレルにだとか、DACの自作となると複雑に、高価にといった傾向があるようです。でも、今回製作したDACは材料代も2千円くらいですし、とりあえず普通の音がします。最高のものを一つだけ作るのも良いでしょうが、こういった製作をすることでDACの知識も身に付きますし、いざ高級部品を使用した製作をする時にも役に立ちます。一つ製作してみてはいかがでしょうか。