14bit DACのAD9717でグリッチが出る問題とその対処法
ZYNQ搭載のDAQ装置「Cosmo-Z Mini」は、Analog Devices社のAD9717というDACを利用した、14bit 125MHzのDACを2ch搭載しています。
今まで、このDACから出す正弦波が汚いという問題がありました。
どんな感じかというと、次の波形をご覧ください。
丸で囲ったところにヒゲが出ているのがわかります。
Cosmo-Z Miniで出力したものをループバックしてADCで取り込んでみると、
このように同じ機械でもヒゲが観測されるので、オシロの問題ではなさそうです。
![]()
必ず決まった場所で出るし、特に多くのビットが切り替わるところで良く出ます。
このDACは14bitパラレルで、しかも250MHzというデータレートで信号を与えるので、データバス間のタイミングのずれや、クロックとの位相の問題かと思っていました。しかし、このヒゲは、クロックをいくら遅くしても出るのです。
次に、内部にある2つのクロックドメインをつなぐ「リタイマー」の問題かと思い、AD9717のSPI経由で内部レジスタにアクセスできるようにして、いろいろな設定をいじってみました。
しかし、リタイマー関係の設定を操作しても変更はありません。上の図のDELAYというのも変更はできないようでした。
![]()
途方に暮れて適当に内蔵レジスタを触っていたら、なんと、IRSET、QRSETレジスタの操作を行うことで、このヒゲを劇的に減らすことができたのです。
ご覧のとおり、つるっつるの正弦波です。
このDACは電流出力で、出力電流は次の式で決まります。
IOUTFS = 32 * VREFIO / RSET
VREFIOは1.0Vですので、RSETを16kΩとすると、IOUTFSはフルスケールで2mAとなります。
つまりデフォルトの設定では、外部抵抗を参照して2mAを作っているのですが、この電流が多いのか何かの理由でヒゲが出るということだったようです。これを内部の参照抵抗を使うようにして、レジスタ4と7に0x92くらいを書き込むと、劇的に改善されます。
![]()
さて、これだけだと正弦波的に見えなくなっただけかもしれないので、FFTをして確かめてみました。
まずは、デフォルトの外部抵抗(16kΩ)の状態。ゴジラの背中ような大量の高調波が観測されています。歪率は-50dB弱でしょう。
次に、IRSETレジスタに0x92を書き込んだ状態。先ほどまでの高調波が嘘のように消えてしまいました。
5MHzまでの成分を見ると、3倍と5倍がまだ少し見えていますが、基本波に対して-75dBくらいを達成できています。
最後はレジスタに0x9fを書き込んで、IRSET抵抗を32kΩにした場合。
なんとか-80dBを達成しました。
AD9717を使って、FPGAでコントロールされるDACから-80dBの歪率を持つ正弦波を出力することができました。
なぜRSETとビットの変わり目で大きなグリッチが出るかの関係はわかりませんでしたが、RSETを大きくして電流を絞ればよいことがわかりました。
| 固定リンク












コメント