ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

組み込みコミュのADコンバーターの製作

  • mixiチェック
  • このエントリーをはてなブックマークに追加
組み込みの中にあるADコンバーターを使えば簡単なんですが、
あえて、ADコンバーターの原理を知るために、次の様な回路を作りました。

1。アナログ入力部分がある。
2。マイコンのデジタル出力に反応するラダー抵抗を使ったDAコンバーターがある。
3。アナログ入力とDAコンバーターの間に、オペアンプで作ったコンパレータ〜を入れる。
4。コンパレータ〜の1ビット出力は、また、マイコンのデジタル1ビット入力に入れる。

ここで、マイコンのデジタル出力を変化させて、マイコン1ビット入力となっているコンパレータ〜入力の値を読み、このビットの変化を見る事によって、ADコンバーターを作る。

図示

アナログ入力  → コンパレータ〜 → 1ビット出力をマイコンの入力へ。
               ↑
マイコン8ビット出力 → ラダー抵抗を使ったDAコンバーター

さて、このADコンバーターは、簡単には動かなかった。
オシロスコープで波形を見ても、なかなか原因が分からなかった。
正常に動かすには、DAコンバーターに出力した時、コンパ〜レーターの変化をすぐ見るのではなく、10ミリセカンドの間を空けてから、コンパレータ〜の変化をマイコンが確認する様にしないとダメだったらしい。

これは、どの様な原理で動かなかったのかが、知りたい。

ちなみに、マイコン8ビット出力で、コンパレータ〜の1ビットの変化を見て、アナログ入力の電圧を知るアルゴリズムは、2分岐検索と同じものである。
であるから、DAコンバーターの8回の検索で、アナログ入力の電圧が分かる。

2の8乗の電圧よりも高いか低いかをコンパレータ〜で比較して、その電圧よりも高ければ次の2の7乗の電圧よりも高いか低いかをコンパレータ〜で比較jして、それを8回繰り返せば、アナログ電圧の値が特定できるだろう。

さて、どの様な原理で、このシステムが動かなかったか?
デジタルからアナログへの変換は、1msぐらいの時間がかかるのだろうか?
なぜ、変換に時間がかかるのだろうか?
こういう事が原因らしいが、その原理が分からない。

コメント(8)

1)変換中に入力が変化しない様にサンプル&ホールド回路を入れる
2)DAコンバータ出力 → コンパレータの遅れ時間を考慮 → コンパレータの出力を観測
こんばんは、JO_Oさん。
1のサンプル&ホールド回路は、このアナログ入力は低速なので、いらないです。
2の観測は、DAコンバーターの出力の波形も観測したい所です。
そのために、マイコン側は、デバッグのためのポート出力が必要かと思います。
1。マイコンDAコンバーター A1出力。
2。マイコンDAコンバーター A2出力。
3。マイコン デバッグポート オン。(パルスを作り出す)
4。マイコン デバッグポート オフ。
5。マイコン ソフトウエアタイマー用WAIT.
6。1へループ。

マイコン デバッグポートは、オシロスコープのトリガーとして使い、
DAコンバーターの波形、コンパレータ〜の出力をオシロスコープで観測する。

そうすれば、マイコン8ビット出力のグリッジが観測できるかもしれません。
それも、一定間隔のがオシロスコープで観測できるかもしれません。

書き込みありがとうございました。
毎度JOです。

「ADコンバーターの原理を知るために」なので以下を参照

「このアナログ入力は低速なので」低速でも変化するならサンプル&ホールド回路は必要です
今回 8bit 0〜255、マイコンの電源が5Vなら分解能は5V/255≒19mV
入力が19mV変化すると最終的なAD変換値が1変わります

一方変換時間は、DA出力→10ms待つ→次のDA出力 8bitなのでAD変換時間は80ms

なのでAD変換中80msの間に19mV以上変化するとAD変換値に誤差が出ます
変換値 H"00" B"00000000" から H"01" B"00000001"へ変化すると誤差は H"01"ですが 
H"7F" B"01111111" から H"80" B"10000000"へ変化すると「全てのビット」が反転するので変換誤差は「メチャクチャ」です

先の19mVは最大値で8bit 0〜255の間には閾値が有り、入力アナログ電圧が閾値近辺の場合は僅かなアナログ入力電圧の変化でも誤差が出ます



サンプル&ホールド用IC
https://jp.rs-online.com/web/c/semiconductors/data-converters/sample-hold-circuits/?searchTerm=%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%EF%BC%86%E3%83%9B%E3%83%BC%E3%83%AB%E3%83%89&redirect-relevancy-data=636F3D3126696E3D4931384E53656172636847656E65726963266C753D6A61266D6D3D6D61746368616C6C7061727469616C26706D3D5E5B5C707B4C7D5C707B4E647D2D2C2F255C2E5D2B2426706F3D31313326736E3D592673723D2673743D4B4559574F52445F53494E474C455F414C5048415F4E554D455249432677633D4E4F4E45267573743DE382B5E383B3E38397E383ABEFBC86E3839BE383BCE383ABE38389267374613DE382B5E383B3E38397E383AB7546463036E3839BE383BCE383ABE3838926&r=f&searchHistory=%7B%22enabled%22:true%7D

尚、サンプル&ホールド回路はアクイジションタイムに注意


こんにちは、JOさん。
ADコンバーターの原理を知るためと書いたのですが、これ、30年前の4ビットマイコンのストーブの制御回路の一部なんです。
温度の変化を知る部分、サーミスターを使い、この温度を知らせる回路は、10桁表示の7セグのLEDを1個ずつ各桁に順次、表示させて、全体を表示させるものだったんです。
画像添付ができれば、すぐに分かる様に説明できると思うのですが、画像撮影と添付の方法が分かっていないので、表現することはできません。
昔の組み込みなので、タイマー割り込みを使わず、時間測定は、メインのループが一定時間ループする事によって計測します。
この当時、ADコンバーターは、高かったので、ラダー抵抗を使ったDAコンバーターを使って、マイコン制御で、ADコンバーターを作りました。

サンプル&ホールド回路は、必要かもしれませんが、タイマー割り込みの部分を使わないで、できるだけ部品を使わない様にして、システムを動かすため、省略していたのです。

JOさん。ご参加、ありがとうございました。
サンプル&ホールド回路は、いらない。この部分をローパスフィルターを使えば問題無い。
ローパスフィルターは、CとRで構成しておけば良い。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

組み込み 更新情報

組み込みのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング