![[INSIDE]](i/rdac_inside.jpeg)
= 記事制作中 =
TIMA氏に伝え聞いた「抵抗DAC」を
調べてみたところ面白そうだったのでつくってみました。
製作前は「低コストだな」と思ったのですが、
最終的にはけっこうなコスト(10kくらい?)がかかりました。
|
R-2R型抵抗ラダーをコアとしたディスクリートD/Aコンバータです。
D/Aコンバータをできるだけ単純な回路で組むとき、
1I、0.5I、0.25I、0.125I、…の電流を出力する回路をずらっと並べて
その電流の合計を出力とする方法があります。
このとき、電源を単一とした場合に1I、0.5I、…の電流を出力させようと思うと、
オームの法則に従って1R、2R、4R、8R、…の抵抗器が必要になります。
16ビットDACなら実に32768Rまで必要です。
[画像]
ところが市販の抵抗器というのは規格品であって、
そんなに都合のよい抵抗値を持った抵抗器というのは
オーダーメイドでもしないと手に入りません。
手に入れようとして手に入らないようなものではないでしょうが、
単価が恐ろしいことになるのは明らかです。
そこでR-2R抵抗ラダーという回路があります。
これは正にオームとキルヒホッフ夢の共演といった感じの回路で、
論理ゲートと1Rと2Rのたった2種の抵抗値の抵抗器を組合せ、
1I、0.5I、0.25I、…の電流をつくりだしてしまうものです。
[画像]
このR-2Rラダーを用いてD/Aコンバータを設計します。
回路を単純にするため、というか組み込むとコストが倍増しそうなので、
オーバーサンプリングなどのデジタル処理は行いません。
シンプルに、入ったデジタル信号をそのままD/A変換することにします。
|
肝心のR-2Rラダーを中心に設計します。
設計にあたってはこちらのページを大いに参考にしました。(この場で感謝)
ラダーを駆動するゲートは16ビットレジスタの74HC673を選択。
単純に16ビットなら8ビットのラッチやレジスタのカスケードでもいいのですが、
1チップのほうがゲートの特性が揃っていていいかな?という判断からです。
74HC673はシリアルインプットなので、
これにDAI(デジタルオーディオインタフェース)からのシリアル信号を入力してやればいいのです。
ただし、ここにちょっとした問題があります。
DAIからの信号は符号つき16ビットですが、
R-2Rラダーは入力された信号を符号なしとみなして変換します。
ですからDAIからの信号をそのままR-2Rラダーにかけてしまうと、
本来
[-32768 〜 -1] 〜 [0 〜 32767]
となるところが
[0 〜 32767] 〜 [-32768(32768) 〜 -1(65535)]
というふうになってしまいます。
例えるならば2階建ての建物の1階と2階を間違えて建ててしまったような感じです。
この問題を解決するのに簡単な方法は、データに32768を足し算して、
[-32768 〜 32767] を [0 〜 65535] にしてやる方法です。
2の補数からゲタばきへ変換、ということですね。
この操作は最上位ビットの反転のみで実現できます。
繰り上がり等は発生しない計算であるからです。
この最上位ビット反転処理を、PICを使って行うことにしました。
DAIからのシリアル信号をシリアル信号のまま処理できれば、
かなり簡易に回路を組むことができます。
…と思ったのですが、よく考えるとPICでは処理速度が足りません。
DAIからの信号は1.5Mbpsくらいに達するのに対して、
PICは5MIPSしか速度が出ないのです。
…ということでいろいろ考えたのですが、
結局、DAIからのシリアル信号を8ビットずつパラレル変換し、
それをPICで処理してシリアル信号を出力させるようにしました。
もっと高速なマイコンを使えばいいのですが、
開発環境がない+新たに導入するのもコストがかかるので苦渋の選択です。
|
■ 回路図 (暫定) 電源周りは記載していません。
かなり変な回路です。
せっかくマイコン使用なのにカウンタやらレジスタやら外付けしてるのは気持ち悪い…。
開発環境がないので今回は無理矢理PICで設計しましたが、
AVRやH8等の高速マイコンを使った方がすっきりしていいでしょう。
以下、ポイント解説
- 74HC595は8ビットレジスタで、シリアル→パラレル変換を行います。
74HC393はそのラッチタイミングを生成するためのカウンタです。
LRCKの変化時にカウンタにリセットをかける(74HC86と74HC04を使用)ことで
同期をとっています。
- DAIはTC9245、安い(700円)という理由のみで選択しました。
マイコンとキャラクタLCDを使ってステータス表示とコントロールを行います。
- 抵抗ラダーは電流を抑えるために10kΩと20kΩで構成し、
OPA2604によるバッファで電流容量を上げています。
- 絶対必要とは思いませんが、一応、
最終段には50kHzの一次ローパスフィルタを入れてあります。
- 音声出力の左右の選択はジャンパピン(J1, J2)でできるようにしてあります。
これもマイコンでコントロールしようかなという拡張用の設計です。
|
以下準備中
![[LADDER]](i/rdac_ladder.jpeg)
抵抗ラダー
|
実際に製作したDACの部品リストです。
前述の回路図に入っていないものが入っていたり、その逆もあるのでご注意を。
総コストは…いくらだろ?
| 種類 |
型番/容量 |
数量 |
備考 |
| IC |
OPA2604 |
1 |
オペアンプ(2回路入り) |
|
PIC16F876 |
2 |
マイクロコントローラ |
|
TC9245 |
1 |
デジタルオーディオインタフェース復調器 |
|
74HC04 |
1 |
NOTゲート |
|
74HC86 |
1 |
XORゲート |
|
74HC393 |
1 |
バイナリカウンタ |
|
74HC595 |
1 |
ラッチつき8ビットシフトレジスタ |
|
74HC673 |
2 |
ラッチつき16ビットシフトレジスタ |
|
7805 |
1 |
三端子レギュレータ(デジタル回路用) |
|
78L05 |
1 |
三端子レギュレータ(R-2RラダーのHC673用) |
|
78L09 |
1 |
三端子レギュレータ(OPA2604用) |
| セラミック発振子 |
4MHz |
1 |
コンデンサ内蔵タイプ(セラロック) |
| クリスタル発振子 |
20MHz |
1 |
|
| 抵抗 |
100 |
2 |
LCDバックライト用 |
|
680 |
2 |
(回路図: FR) |
|
750 |
3 |
|
|
1.8k |
1 |
電源ランプの電流制限用 |
|
2k |
4 |
|
|
10k |
1 |
|
|
10k |
30 |
200本から選別 |
|
20k |
34 |
200本から選別 |
|
20k |
2 |
|
|
62k |
1 |
|
|
100k |
5 |
|
|
200k |
4 |
|
| コンデンサ |
15p |
2 |
セラミック |
|
47p |
1 |
積層セラミック |
|
220p |
1 |
積層セラミック |
|
4700p |
2 |
フィルム (回路図: FC) |
|
0.047μ |
1 |
積層セラミック |
|
0.1μ |
16? |
積層セラミック、電源パスコン |
|
2.2μ |
2 |
積層フィルム |
|
47μ |
2 |
電解、オーディオ用、電源パスコン(HC673) |
|
100μ |
2 |
電解、オーディオ用 |
|
100μ |
3 |
電解、オーディオ用、電源パスコン(OPA2604他) |
|
100μ |
3 |
電解、低ESR、電源パスコン(PIC他) |
|
470μ |
1 |
電解、電源パスコン(78xxの後段) |
|
470μ |
1 |
電解、78xxの前段 |
|
2200μ |
1 |
電解、78xxの前段 |
| インダクタ |
47μ |
2 |
光受信コネクタ用 |
| 液晶ディスプレイ |
- |
1 |
16文字×2行タイプ |
| 光コネクタ |
受信用 |
2 |
角形 |
|
送信用 |
1 |
角形 |
| RCAジャック |
赤 |
1 |
右音声出力用 |
|
白 |
1 |
左音声出力用 |
|
黄 |
1 |
同軸デジタル入力用 |
| 極性統一ジャック |
- |
1 |
電源用 |
| プッシュスイッチ |
- |
2 |
DAIコントロール用 |
| 波動スイッチ |
- |
1 |
電源SW |
| ピンヘッダ&ジャンパピン |
- |
2 |
左右セレクト用 (回路図: J1, J2) |
|