使っている式

分圧回路の出力電圧は、下側抵抗が全体に占める割合で決まります。負荷電流が無視できる(ADC入力が ほぼ電流を引かない)前提です。

Vout = Vin × R2 / (R1 + R2)

ADCコード     = round( Vout / (Vref / (2^bits − 1)) )
換算係数      = (R1 + R2) / R2
常時流れる電流 = Vin / (R1 + R2)
出力インピーダンス = R1 ∥ R2 = R1·R2 / (R1 + R2)

出力インピーダンスを見る理由

マイコンのADCはサンプリング時に内部のコンデンサを充電します。分圧点から見たインピーダンスが 高いと、サンプリング時間内に充電しきれず実際より低い値が読めます。抵抗値を大きくすれば消費電流は 下がりますが、この誤差が増えます。両方をここで同時に見られるようにしてあります。

目安として出力インピーダンスは10kΩ以下、それ以上にしたい場合はサンプリング時間を長く設定するか、 分圧点に0.1µF程度のコンデンサを入れて電荷を供給させます。ただしコンデンサを入れると応答が 鈍るので、電圧監視のような遅い信号にだけ使えます。

入力例

  • Li-Po 3S(12.6V満充電)を3.3V ADCで読む:R1 = 24kΩ、R2 = 5.6kΩ。 満充電時のADC入力が約2.38V、出力インピーダンスは約4.5kΩ、常時流れる電流は約0.43mA。
  • 放電終止電圧まで見る:3S の放電終止を9.0Vとすると、同じ抵抗でADC入力は 約1.70V。満充電との差が0.68Vなので、12bit ADCなら約840カウントぶんの分解能で見られます。

含んでいない誤差

  • 抵抗の許容差。E24系列の±5%を2本使うと、比の誤差は最悪で約±10%になります
  • 基準電圧の絶対精度と温度ドリフト。マイコン内蔵レギュレータをVrefにしている場合は特に大きい
  • ADCのオフセット・ゲイン誤差、入力リーク電流
  • 抵抗の自己発熱による抵抗値変化(この電流域ではほぼ無視できます)

実機では、既知の電圧を1点測って換算係数を校正するのが確実です。抵抗の許容差はそれでまとめて 吸収できます。