デルタシグマ A/D 変換 (1) |
|
● |
高精度で高速動作が望める A/D 変換方式と
してΔΣオーバーサンプリング方式があります。 英語では sigma-delta という
語順のほうが一般的のようです。 確かにブロック図を左から見ていくと、ΣΔの順番です。 デジタルフィルターは PC 等のソフトウェアで行い、ΔΣ変調器の出力を RS-232C で圧縮して送ることを 考えました。 こうすればグランド絶縁も容易です。 入力にアナログ MUX とバッファーをつければ、 多チャンネル入力で自動 offset/gain 較正ができます。 ΔΣ変調器の出力を 15bit 区間に区切って、そのうちの "1" の個数を数え、4bit にして RS-232C で 送出します。 この圧縮がありますから、本来のΔΣ変調器が出力する情報が一部失われます。 しかしデータ 転送速度には上限があるので、それには目をつぶることにしました。 まずはハードウェア部のシミュレーションです。(RS-232C への変換を除く。) sdadc1.asc.txt sdadc1.plt.txt (74hc.lib は http://groups.yahoo.com/group/LTspice/files/Lib/Digital%2074HCxxx/ から入手しました。) U6, U7 の遅延回路で 2 相のクロックを作っています。 ck1 は ck0 に対して約 100ns 遅れ ます。 これはフリップフロップの meta-state 状態を避けるためでが、むしろ D 入力が いつも中途半端なレベルになっていることを心配すべきかも知れません。 本格的には ラッチ付きのコンパレーターを使いたい所です。 U2 は単なる 15 進のカウンターで、U5 が V(q) の "1" の個数を数えます。 このままで U5 カウンター出力を見てもわかりにく過ぎます。 そこでカウンター部のテスト回路を別に作りました。 V1 がテストデータを sdadcpwl.txt から読み込みます。 U5 の Q0..Q3 出力 は B1 で D/A 変換して、10 進数で読み出せるようにします。 sdadcpwl.txt の内容は次のようにしました。 ( 0 0 140u 0 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 ) この場合、"1" の個数は 7 のはずです。 シミュレートしてみます。 B1 の出力電圧は 7V、つまり d0..d3 は 7 だとわかります。 次に sdadcpwl.txt の内容を 変えて "1" の個数を 8 にしてみます。 ( 0 0 140u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 +1u 1 +9u 1 +1u 0 +9u 0 ) 確かに 8 になりました。 sdadcpwl.txt sdadc2.asc.txt sdadc2.plt.txt |
● |
積分器出力にヒステリシスの小さいシュミットトリガー
を追加し、2相クロックはとりやめました。 仮に meta-state 状態に陥ったとしても 50ns 〜 60ns 後
にはどちらかに定まるでしょうから、クロック周期 10μs に比較すれば無視できないわけでもあり
ません。 それよりも D 入力がスレッショルド電圧付近に留まらないことを重視しました。 この目的
には 74HC04 より 74HCU04 のほうが適切かもしれません。 カウンター出力の D/A 変換は waveform arithmetic で記述しました。 これは テスト用であって表示のみでかまいませんので。 V(_tc) = Low のときの d0..d3 が有効なデータです。 sdadc3.asc.txt sdadc3.plt.txt |
● |
http://groups.yahoo.com/group/LTspice/files/Util/ltsputil%202.6/
に ltsputil と
いうプログラムがあって、LTspice の raw 形式のシミュレーション結果に対して各種の処理を
行えます。 但し ltsputil が対象とする LTspice の version には制限があります
ので注意が必要です。 ltsputil は command.exe (DOS 窓) から実行します。 過渡解析データをテキストファイルに変換する 最も基本的な使い方は: ltsputil -coa Draft1.raw Draft1.txt "Draft1" の部分がファイル名を指定しています。 シミュレーション実行時 に .save で保存する変数を指定しておかないと、データがやたらに大きくなり ます。 なお出力されたテキストファイルを "メモ帳" で見ると改行が崩れて しまいます。 Wordpad で見れば問題ありません。 私は Windows XP を使用しており、LTSpice の *.asc ファイルを C:\Program Files\LTC\SwCADIII\new_asc\ に置いています。 ここを カレントディレクトリーとして DOS 窓を手軽に実行するため、 管理者の \スタート メニュー\プログラム\アクセサリ\コマンド プロンプト (これはショートカットです) を ・・\SwCADIII\new_asc\ にコピーし、右クリックでプロパティーの作業フォルダを 空白に変えました。 コピーしたショートカットをダブルクリックすると DOS 窓が開き ます。 めんどうなので ltsputil も同じディレクトリーに置いてあります。 上記のような出力テキストファイルを直接別のプログラムで処理する方法もありますが、ltsputil には もう少し整理してデータを書き出す機能もあります。 先の sdadc3.asc の過渡解析コマンドを .tran 0 1355u 155u uic に変更して Draft1.raw を作りました。 次のコマンドを DOS 窓で実行します。 ltsputil -eoa Draft1.raw Draft1.txt 9 すると、ちょうど V(_tc) が Low になっている期間の中間のみのデータを書き出すことができます。 Draft1.txt ltsputil にはさらにいろいろな機能もありますが、元回路のデジタルフィルター部までシミュレートしようとするなら、別のアプローチが必要のようです。 |
● |
何と言っても不満はシミュレーション速度が遅いこと
です。 前記のままで 100ms のシミュレーションは実際的ではありません。 そこで、74HC163 部分を消去し、さらに 74HCxx ライブラリーの使用をとりやめ、A デバイス をそのまま使いました。 カウンター部の機能はソフトウェアでシミュレートします。 これで 100ms のシミュレーションも待てる程度で完了するようになりました。 なお入力信号 周波数を 20Hz に変更してあります。 .tran コマンドに 10us + 5us の開始オフセットをつけて ありますので、100ms/10us = 1e4、ltsputil の -e オプションに対して 10000 + 1 点を指定 すれば V(q) をうまく読み出すことができます。 ltsputil -eoa Draft2.raw Draft2.txt 10001 Variables: 0 time time 1 V(i) voltage 2 V(o) voltage 3 V(q) voltage Values: 0 0.000000000000000e+000 -2.496852159500122e+000 -7.173512578010559e-001 4.998937129974365e+000 1 9.999999000000000e-006 -2.490569225670174e+000 -7.310449120978582e-001 -9.901588734945015e-007 2 1.999999800000000e-005 -2.484286556829243e+000 8.704987135572582e-001 -6.929601823974062e-007 3 2.999999700000000e-005 ・ ・ ・ |
もどる |