Разрядность АЦП и шаг квантования

Урок про то, на сколько уровней АЦП режет напряжение и какой шаг при этом получается.

Разрядность $N$ — число бит АЦП; он делит диапазон на $2^N$ уровней, шаг между ними называется LSB (младший значащий разряд).

АЦП не может выдать любое число — только один из конечного набора уровней. Чем больше бит, тем мельче шаг и точнее представлен сигнал. Понимание шага квантования помогает выбрать АЦП под нужное разрешение.

Число уровней и шаг

$N$-битный АЦП с опорным напряжением $V_{ref}$ даёт $2^N$ уровней. Шаг квантования:

$$ \text{LSB} = \frac{V_{ref}}{2^N} $$

def lsb(vref, bits):
    return vref / 2**bits

for bits in (8, 10, 12, 16):
    step_mv = lsb(5.0, bits) * 1000
    levels = 2**bits
    print(bits, "бит:", levels, "уровней, шаг", round(step_mv, 4), "мВ")

Вывод:

8 бит: 256 уровней, шаг 19.5312 мВ
10 бит: 1024 уровней, шаг 4.8828 мВ
12 бит: 4096 уровней, шаг 1.2207 мВ
16 бит: 65536 уровней, шаг 0.0763 мВ

Код в напряжение и обратно

АЦП выдаёт целый код $D$ от 0 до $2^N - 1$. Перевод в напряжение:

$$ V = \frac{D}{2^N - 1}\,V_{ref} $$

def code_to_volt(D, vref=3.3, bits=10):
    return D * vref / (2**bits - 1)

print(round(code_to_volt(0), 4), "В")
print(round(code_to_volt(512), 4), "В")
print(round(code_to_volt(1023), 4), "В")

Вывод:

0.0 В
1.6516 В
3.3 В

Как работает под капотом

Каждый дополнительный бит вдвое уменьшает шаг и вдвое увеличивает число уровней. Но реальная точность ограничена не только разрядностью: шум, нелинейность самого АЦП и качество опорного напряжения часто «съедают» младшие биты. Поэтому 16-битный АЦП может давать эффективных, скажем, 13–14 «честных» бит. Опорное напряжение $V_{ref}$ — критичный элемент: если оно плавает, плавает и весь пересчёт кода в вольты.

Частые ошибки

  • Делить на $2^N$ вместо $2^N - 1$ при переводе кода в напряжение — край шкалы не достигнет $V_{ref}$.
  • Считать, что 16 бит дают 16 честных бит точности — шум урезает разрешение.
  • Игнорировать нестабильность $V_{ref}$ — она сдвигает все показания.

Итог

  • $N$-битный АЦП даёт $2^N$ уровней с шагом $\text{LSB} = V_{ref}/2^N$.
  • Код переводится в напряжение через $V = D\,V_{ref}/(2^N - 1)$.
  • Реальная точность ограничена шумом и качеством $V_{ref}$, а не только числом бит.
Проверьте себя
1. Сколько уровней различает 12-битный АЦП?
A12
B144
C4096
D65536
2. Чему равен шаг квантования (LSB) 10-битного АЦП с Vref = 5 В?
A≈ 4.88 мВ
B≈ 19.5 мВ
C≈ 1.22 мВ
D≈ 0.5 В