0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10bitのADCなのに、何故1023を計算式に入れるコードがあるのか

0
Posted at

1023はどこから来たのか

前回、10bitADCの出力値を電圧に変換するコードをCodexが出力した際に、1023で割っていることを話題にした。

adc_value = adc_read(ADC_CHANNEL_LM61);
millivolts = (uint16_t)((((uint32_t)adc_value * ADC_VREF_MV) + 511UL) / 1023UL);

ADCは0vと基準電圧の間を、ビット数の段階分だけ量子化する。
2の十乗は1024なので、1024で割るのが正しい。

電圧=\frac{基準電圧}{2^{n}}ADCの出力値

基準電圧が5VでADC出力が1の場合は

4.88=\frac{5000}{1024}1 

となる。
ここで下の1024の代わりに、1023を使っているコードを多数見かけるのだが、それなりの便宜的な理由が有るようだ。

10bit数の最大値は1023だ。
ADCが1023を出力した時、基準電圧と同じなほうが見た目が良い。

4995.1=\frac{5000}{1024}1023
5000=\frac{5000}{1023}1023

そのために、誤差を覚悟で1023を使うようだ。

しかしながら、ADCが出力1023を出すのは
4995mvと5000mvの区間であり、実際には5000mvと定まらない。
どれだけRail to RailなADCであっても、GNDレベルと基準電圧と完全に一致することを計測できない。

端数を加える場合

上記のCodexは、計算式に端数を加えている。

1024を基数する場合、ADC出力値1023の場合実際の電圧は4995mvと5000mvの間である。
そこで端数を加えると、区間の丁度中間になる。

4997.5=\frac{5000}{1024}1023 + \frac{5000}{1024}0.5

こちらの方が、気持ちがいいかもしれない。

しかし基数1023の場合に端数を加えると基準電圧を超えてしまう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?