ADCの出力値をアナログ値に換算する考え方2017年09月25日 15時11分05秒

■ADC出力値からアナログ値を求めるやり方の問題
ADCから量子化されて出力されるデジタル値をアナログ値への換算を行う時に2^nで割るのか、2^n - 1で割るのかの問題ですが、ADCの内部の仕組みとしては以下図の左側で示したような配列とその要素のインデックスだと考えると問題が整理しやすくなります。
2^nとか2^n-1の代わりにここでは10bitADCを前提として1024と1023という数値でどちらかを表すことにします。

ADC出力値の換算方式の比較図


この図の左側で示した配列の条件は以下です。
(1) メモリ上の通常の配置とは逆のイメージ
(2) 10bitADC
(3) 基準電圧(VREF)は5.0V
(4) 1LSB = 5.0/1024.0 = 0.004882813V
(5) 上限(n) = 下限(n+1)未満の値

■1024で割る派の問題
ADCから出力されたデジタル値からアナログ値に換算するやり方で、1024で割る派の人たちは上記の「仕組み」を前提に話をしているわけですが、常に配列インデックスに対応したアナログ値の範囲の下限のデータを拾ってくることになります。
理屈から言えば上限を拾ってきても良いはずだし、下限と上限の中間の値を採用しても良いはずです。
この点が1024で割る派の人たちのおかしなところです。
現実的には下限であることは非常にまれでしょう。
シフト演算して処理を高速化するために1024で割るという主張の方がよっぽど説得力があります。

■1023で割る派には問題はありません
あえて問題があるとすればシフト演算での高速化はできません。
あくまでもブラックボックスとしてのADCを扱うため、出力値が0なら0Vだし、1023なら5Vとして係数を求めて度量換算する算数の問題として計算するだけです。
結果的に中間値を採用することになり、フルスケールに達すると確実に5Vになります。
もちろん、中間値とはいっても0の時は下限値を採用し、1023の時は上限値を採用するような変則的な対応付けが自動で行われることになります。
図の右側で示した通り左側の配列の下限値から上限値の間に換算値は収まっていることが分かります。
無思想でコピペ増殖で1024で割る派が多い中、数少ない1023で割る派の書籍はこちら

とは言え、実験してみるのは筋なので、実際のセンサーでの実験結果はこちら

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このブログでは「組込み」と「組み込み」のどちらを使っている?

コメント:

トラックバック

このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2017/09/25/8683672/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。