Что такое АЦП и зачем он нужен в микроконтроллере?
Читаю про analogRead в Arduino и встретил аббревиатуру АЦП (ADC). Что такое АЦП и почему analogRead возвращает число от 0 до 1023? Объясните, пожалуйста.
2 ответа
АЦП (аналого-цифровой преобразователь, ADC) — это блок, который переводит плавное (аналоговое) напряжение в число, понятное процессору. Микроконтроллер не умеет работать с «2.37 вольта» напрямую — ему нужно число.
Как это работает: АЦП измеряет входное напряжение и сравнивает его с опорным (например, 5 В), выдавая целое число в диапазоне.
У Arduino Uno АЦП 10-битный. «10 бит» означает, что он делит диапазон на 2^10 = 1024 ступенек — отсюда числа от 0 до 1023:
- 0 В → 0
- 2.5 В → ~512 (половина)
- 5 В → 1023
Чтобы перевести «сырое» число обратно в вольты:
U = значение · 5 / 1023
Например, analogRead вернул 512: U = 512 · 5 / 1023 ≈ 2.5 В.
Зачем это нужно: почти все аналоговые датчики (температура, свет, влажность, потенциометр) выдают именно напряжение. АЦП превращает его в число, с которым ты считаешь в коде.
Важный параметр — разрядность. 10 бит дают 1024 уровня (грубовато, но хватает). У более точных АЦП бывает 12 или 16 бит — больше ступенек, точнее измерение. Но и медленнее.
Простыми словами: АЦП — это «линейка» для напряжения. Он смотрит на плавный сигнал и говорит, на какой он отметке из 1024.
Есть и обратное устройство — ЦАП (DAC), оно из числа делает напряжение. У Arduino Uno настоящего ЦАП нет, поэтому «аналоговый выход» там подделывают через ШИМ. А вот, например, у ESP32 АЦП мощнее и есть встроенный ЦАП.