АЦП

АЦП — аналого-цифровой преобразователь. Он нужен, когда датчик выдаёт не готовое число по I²C, SPI или 1-Wire, а напряжение. Контроллер не «понимает» напряжение напрямую: он сравнивает его с опорным уровнем и возвращает целый код.
АЦП превращает напряжение в код. Чтобы получить температуру, освещённость, расстояние или влажность почвы, программе всё равно нужна формула датчика, калибровка и проверка диапазона. Больше бит полезно, но не заменяет точное опорное напряжение, правильное подключение и чистое питание.
Зачем это нужно
В робототехнике аналоговый сигнал встречается постоянно: LDR-модуль меняет напряжение при изменении света, Sharp GP2Y0A21 выдаёт нелинейное напряжение от расстояния, датчик влажности почвы даёт условный код, а токовый выход драйвера мотора часто читается через аналоговый вход.
Во всех этих случаях программа сначала получает не «люксы» и не «сантиметры», а число вроде 0...1023 или 0...4095. Это только промежуточный код. Его нужно связать с физической величиной.

Главная идея
АЦП делит диапазон от 0 В до опорного напряжения Vref на ступеньки:
напряжение датчика -> сравнение с Vref -> код АЦП -> пересчёт в нужную шкалу
Если у АЦП 10 бит, возможны 1024 кода: от 0 до 1023. Если 12 бит — 4096 кодов от 0 до 4095. Если 16 бит — 65536 кодов. Ширина одного идеального уровня квантования примерно равна:
шаг квантования = Vref / 2^N
Например, при Vref = 5 В и 10-битном АЦП шаг квантования равен примерно 4,88 мВ. При Vref = 3,3 В и 12 битах — около 0,806 мВ.
При приближённом пересчёте готового кода в напряжение иногда используют масштаб Vref / (2^N - 1), чтобы сопоставить максимальный код с Vref. Это масштаб пересчёта, а не ширина уровня квантования.

Что важно в паспорте
| Параметр | Что означает | Почему важно |
|---|---|---|
| Разрядность | сколько кодов выдаёт АЦП | определяет шаг, но не всю точность |
| Опорное напряжение | с чем сравнивается вход | ошибка Vref превращается в ошибку всех измерений |
| Диапазон входа | какие напряжения допустимы | выход датчика нельзя подавать выше питания входа |
| Частота выборки | как часто можно измерять | слишком медленный опрос старит данные робота |
| Входное сопротивление | как АЦП нагружает цепь | слабый делитель может давать неверный код |
| Интерфейс | встроенный вход, I²C или SPI | влияет на скорость, число проводов и библиотеки |
Встроенный и внешний АЦП
У Arduino Uno встроенный АЦП удобен для учебных датчиков: один провод сигнала, GND, питание и функция analogRead(). Этого достаточно для LDR, потенциометра, датчика линии или влажности почвы.
Внешний АЦП нужен, когда встроенных входов мало, требуется больше разрядов, другая опора, дифференциальное измерение или подключение к одноплатному компьютеру без аналоговых входов. Например, Raspberry Pi не имеет встроенного АЦП, поэтому для аналоговых датчиков часто берут MCP3008 по SPI или ADS1115 по I²C.
Частые ошибки
| Ошибка | Что происходит |
|---|---|
| Считать код физической величиной | analogRead() вернул не проценты и не градусы |
Не соединить общий GND | код скачет или стоит в невозможном уровне |
| Подать 5 В на вход 3,3 В | можно повредить контроллер |
Игнорировать Vref | пересчёт напряжения получается смещённым |
| Сильно сгладить сигнал | график красивый, но робот реагирует поздно |
| Не калибровать датчик | разные экземпляры дают разные коды в одинаковой среде |
Что запомнить про АЦП
- АЦП измеряет напряжение относительно опоры, а не саму физическую величину.
- Код АЦП нужно пересчитывать по схеме подключения, даташиту и калибровке.
- Разрядность задаёт шаг кода, но точность зависит ещё от шума, опоры, питания и монтажа.
- Аналоговый датчик может быть простым, но требует аккуратной проверки сырых значений.
Практика
- Рассчитайте идеальный шаг квантования 10-битного АЦП при опоре
5 Ви3,3 В. - Для кода
512найдите напряжение по формулеcode × Vref / 1024при обеих опорах. - Объясните, почему расчёт остаётся оценкой, пока опорное напряжение не измерено.
Ориентиры: шаги равны примерно 4,88 мВ и 3,22 мВ, а код 512 соответствует примерно половине выбранной опоры — 2,5 В или 1,65 В.
Проверьте себя
- Почему код
512на Arduino Uno не всегда означает ровно2,5 В? - Чем разрядность АЦП отличается от точности измерения?
- Зачем внешнему АЦП интерфейс I²C или SPI?
- Почему датчик влажности почвы нельзя считать «процентами» без калибровки?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- АЦП — устройство, которое превращает аналоговое напряжение в цифровой код.
- Опорное напряжение — уровень, с которым АЦП сравнивает входной сигнал.
- Разрядность — количество бит в результате преобразования.
- Квантование — замена непрерывного значения ближайшей ступенькой.
- LSB — вес младшего разряда, минимальный шаг кода.
Связанные темы
- Калибровка датчиков — как связать сырой код с рабочей шкалой.
- Фильтрация данных с датчиков — как уменьшить шум и не потерять реакцию.
- Датчики освещённости — пример аналогового измерения света.
- Датчики положения и наклона — аналоговые и цифровые способы определить ориентацию.
Источники
- Arduino Documentation. analogRead().
- Texas Instruments. ADS1115 product page.
- Microchip. MCP3008 product page.