ADC 怎麼把電壓變成數字?
N 位元的 ADC 把 0 V 到參考電壓 Vref 分成 2N 階,回報輸入落在第幾階,是 0 到 2N − 1 的整數:
ADC 數值 = Vin / Vref × 2N
Vin = ADC 數值 × Vref / 2N
12 位元、參考電壓 3.3 V 的 ADC 有 4096 階,每階 3.3 / 4096 = 0.806 mV。輸入 1.2 V 時讀到 1.2 / 3.3 × 4096 ≈ 1489。
要除以 4096 還是 4095?
兩種寫法都有人用。大多數 ADC 規格書的理想轉換公式用 2N(12 位元是 4096):每個數值代表 Vref / 4096 的一階,最大值 4095 在比 Vref 少一階的地方就達到了。很多應用手冊和範例程式改用 2N − 1(4095),讓讀到 4095 時換算回來剛好等於 Vref。
兩者只差 4096 分之 1,12 位元約 0.02%,比大多數微控制器內建 ADC 的偏移和增益誤差還小。跟著你的程式或規格書用同一種,比對數字時才會一致。
| 解析度 | 數值範圍 | 每階(3.3 V) | 每階(5 V) |
|---|---|---|---|
| 8 位元 | 0~255 | 12.89 mV | 19.53 mV |
| 10 位元 | 0~1023 | 3.223 mV | 4.883 mV |
| 12 位元 | 0~4095 | 805.7 µV | 1.221 mV |
| 14 位元 | 0~16383 | 201.4 µV | 305.2 µV |
| 16 位元 | 0~65535 | 50.35 µV | 76.29 µV |
| 24 位元 | 0~16777215 | 196.7 nV | 298 nV |
ADC 數值怎麼換成感測器讀值?
大部分類比感測器輸出的電壓和量測值成直線關係,從規格書找兩個點就能換算。第二個面板會算出 讀值 = 斜率 × ADC 數值 + 偏移,可以直接寫進韌體。電壓越低、讀值越高的感測器也適用,例如 0 A 時 2.5 V、10 A 時 0.5 V 的電流感測器,斜率就是負的。
常見問題
電壓超過參考電壓會怎樣?
到達或超過滿刻度時,ADC 都讀到最大值(12 位元是 4095)。輸入超過電源電壓或低於 0 V 可能會損壞腳位,比較高的電壓要先用分壓電阻降到範圍內。
為什麼讀值會跳動好幾個數?
輸入或參考電壓上的雜訊,以及 ADC 本身的誤差,通常會讓讀值差 1、2 個數。多次取樣平均、輸入端加小電容、使用穩定的參考電壓都有幫助。
LSB 是什麼?
最低有效位元,也就是一階的電壓:Vref / 2N,代表 ADC 能分辨的最小變化。
Arduino Uno 的 analogRead() 怎麼換成電壓?
Uno 是 10 位元 ADC,預設參考電壓 5 V,所以電壓 = 數值 × 5 / 1024,讀到 512 是 2.5 V。上面選 10 位元、輸入 5 就能換算。