トラ技のこの記事のように4096で割らないといけないところを4095で割ってしまうという勘違いをすることについて少し考察してみました。
おそらく4095で割ることの根拠はこれだと思います。
確かに数学的には正しいでしょう。
しかし、ADC(AD変換器)についてはこれでは少しマズイのです。
ところでADCの動作はと言うと
アナログからデジタルに変換するものですが、
ここでデジタルとは何か。
デジタルとは離散的な時間で区切った離散的なデータです。
アナログ値である入力電圧をサンプリング周期で離散的なデータに変換するものと言えます。
例えばグラフにするとこうなります。
出力が0から1に変わる閾値を1LSBとするとこうなります。
つまりこう言うこと。
0LSB ≦ 入力<1LSB --> 出力 0
1LSB ≦ 入力<2LSB --> 出力 1
2LSB ≦ 入力<3LSB --> 出力 2
3LSB ≦ 入力<4LSB --> 出力 3
出力の数字は数値ではなくデータつまりラベルなのです。
1LSB以上2LSB未満の入力に1と言うラベル付けをしているに過ぎません。
で、大きい方はこうなります。
12bitのADCでは4095以上は4096LSBを含め全て4095と言うラベルになります。
4092LSB ≦ 入力<4093LSB --> 出力 4092
4093LSB ≦ 入力<4094LSB --> 出力 4093
4094LSB ≦ 入力<4095LSB --> 出力 4094
4095LSB ≦ 入力 ≦ 4096LSB --> 出力 4095
要するに4096LSBも4095と言うラベルなんです。
で、最初の数直線に戻って考えます。
4095と言うラベルは4096LSBまで含まれるのでこうなります。
これを正規化するとこうなります。
これなら4096で割らないといけませんね。
電圧値に変換する場合も同じです。
だから電圧リファレンス用のICの電圧が4.095Vではなく4.096Vなのです。
これをADCのVrefに使用するとADCの出力値がそのままmVの電圧値となります。
※コメント投稿者のブログIDはブログ作成者のみに通知されます