« 某コワーキングスペースの会員になりました | トップページ | 2018年を振り返って »

2018.12.30

14bit DACのAD9717でグリッチが出る問題とその対処法

ZYNQ搭載のDAQ装置「Cosmo-Z Mini」は、Analog Devices社のAD9717というDACを利用した、14bit 125MHzのDACを2ch搭載しています。

Cszmini

今まで、このDACから出す正弦波が汚いという問題がありました。

どんな感じかというと、次の波形をご覧ください。

Ad9717_1

丸で囲ったところにヒゲが出ているのがわかります。

Cosmo-Z Miniで出力したものをループバックしてADCで取り込んでみると、

Ad9717_3

このように同じ機械でもヒゲが観測されるので、オシロの問題ではなさそうです。

必ず決まった場所で出るし、特に多くのビットが切り替わるところで良く出ます。

このDACは14bitパラレルで、しかも250MHzというデータレートで信号を与えるので、データバス間のタイミングのずれや、クロックとの位相の問題かと思っていました。しかし、このヒゲは、クロックをいくら遅くしても出るのです。

次に、内部にある2つのクロックドメインをつなぐ「リタイマー」の問題かと思い、AD9717のSPI経由で内部レジスタにアクセスできるようにして、いろいろな設定をいじってみました。

Retimer

しかし、リタイマー関係の設定を操作しても変更はありません。上の図のDELAYというのも変更はできないようでした。

途方に暮れて適当に内蔵レジスタを触っていたら、なんと、IRSET、QRSETレジスタの操作を行うことで、このヒゲを劇的に減らすことができたのです。

Ad9717_2

ご覧のとおり、つるっつるの正弦波です。

 

このDACは電流出力で、出力電流は次の式で決まります。

IOUTFS = 32 * VREFIO / RSET

VREFIOは1.0Vですので、RSETを16kΩとすると、IOUTFSはフルスケールで2mAとなります。

つまりデフォルトの設定では、外部抵抗を参照して2mAを作っているのですが、この電流が多いのか何かの理由でヒゲが出るということだったようです。これを内部の参照抵抗を使うようにして、レジスタ4と7に0x92くらいを書き込むと、劇的に改善されます。

Ad9717_4

さて、これだけだと正弦波的に見えなくなっただけかもしれないので、FFTをして確かめてみました。

まずは、デフォルトの外部抵抗(16kΩ)の状態。ゴジラの背中ような大量の高調波が観測されています。歪率は-50dB弱でしょう。

Ad9717_5

 

次に、IRSETレジスタに0x92を書き込んだ状態。先ほどまでの高調波が嘘のように消えてしまいました。

Ad9717_6

5MHzまでの成分を見ると、3倍と5倍がまだ少し見えていますが、基本波に対して-75dBくらいを達成できています。

Ad9717_7

最後はレジスタに0x9fを書き込んで、IRSET抵抗を32kΩにした場合。

Ad9717_8

なんとか-80dBを達成しました。

AD9717を使って、FPGAでコントロールされるDACから-80dBの歪率を持つ正弦波を出力することができました。

なぜRSETとビットの変わり目で大きなグリッチが出るかの関係はわかりませんでしたが、RSETを大きくして電流を絞ればよいことがわかりました。

|

« 某コワーキングスペースの会員になりました | トップページ | 2018年を振り返って »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 某コワーキングスペースの会員になりました | トップページ | 2018年を振り返って »