Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

АЦП (Analog to Digital Converter)

Надеюсь, вы уже знакомы с понятием аналоговых и цифровых сигналов. Окружающий мир в основном аналоговый: температура плавно растёт и падает, сила света меняется постепенно, звук распространяется в воздухе волнами, а датчики выдают напряжения, которые меняются непрерывно.

Однако микроконтроллеры понимают только дискретные значения. Внутри всё представлено двоичными числами — единицами и нулями, HIGH и LOW. Так возникает базовый разрыв между реальным миром и цифровой логикой. Как цифровая система может понять то, что меняется плавно?

Здесь на помощь приходит аналого-цифровой преобразователь (АЦП, ADC — Analog to Digital Converter). АЦП измеряет аналоговое напряжение и превращает его в цифровое число, которое микроконтроллер может обработать, сохранить и использовать для принятия решений.

Возможно, вы помните из главы о ШИМ, что цифровая система может создать аналогоподобный выход, быстро включая и выключая вывод. АЦП делает обратное: он позволяет микроконтроллеру считывать аналоговые входные сигналы из реального мира и понимать их. Вместе такие периферийные блоки, как ШИМ и АЦП, позволяют встраиваемым системам и ощущать окружающую среду, и управлять ею.

Рассмотрим простой пример — систему контроля температуры. Датчик температуры выдаёт напряжение, которое зависит от температуры, например 0 В при 0 °C и 3,3 В при 100 °C. Без АЦП этот плавный сигнал ничего не значил бы для микроконтроллера. АЦП через равные промежутки времени измеряет напряжение и превращает каждое измерение в цифровое значение. Ваш код может считать это значение, интерпретировать его как температуру и соответствующим образом отреагировать.

Иллюстрация к АЦП

Разрешение АЦП

Одна из важнейших характеристик АЦП — его разрешение, которое определяет, насколько мелко он может разбить диапазон аналогового входа на дискретные цифровые значения. Разрешение обычно выражают в битах: например, 8-битный, 10-битный или 12-битный. Количество битов определяет, сколько различных значений может выдать АЦП.

8-битный АЦП делит диапазон входного напряжения на 256 уровней (28). 10-битный даёт 1 024 уровня (210), а 12-битный — 4 096 уровней (212). Как видите, каждый дополнительный бит удваивает число уровней и заметно повышает точность. Чем больше битов у АЦП, тем меньшую разницу напряжений он способен различить.

Пример

Разберём это на примере. Допустим, вы используете 10-битный АЦП с опорным напряжением 3,3 В. АЦП будет представлять напряжения от 0 В до 3,3 В цифровыми значениями от 0 до 1 023.

Наименьшее изменение напряжения, которое может обнаружить АЦП (его называют шагом квантования), вычисляется так:

\[ \text{Step Size} = \frac{\text{Vref}}{2^{\text{bits}}} \]

Шаг = 3,3 В / 1 024 = 3,22 мВ

Это значит, что АЦП не может отличить два напряжения, которые ближе друг к другу, чем примерно на 3,22 мВ. Например, если выход датчика меняется с 1,500 В до 1,502 В, АЦП, скорее всего, выдаст одно и то же цифровое значение для обоих.

Сравните с 12-битным АЦП с тем же опорным напряжением 3,3 В:

Шаг = 3,3 В / 4 096 = 0,81 мВ

12-битный преобразователь даёт заметно более тонкую точность, что может быть критично в приложениях, где нужны точные измерения.

Формула АЦП

Концептуально АЦП превращает входное напряжение в цифровое число по следующей зависимости:

\[ ADC = \frac{V_{in}}{V_{ref}} \times 2^{\text{bits}} \]

Где:

  • \(V_{in}\) — входное напряжение
  • \(V_{ref}\) — опорное напряжение

Преобразование значений АЦП в напряжение

Когда вы читаете АЦП в коде, он возвращает сырое цифровое значение от 0 до 4095 (для 12-битного АЦП). Это число показывает, где измеренное напряжение находится в диапазоне от 0 В до 3,3 В. Чтобы превратить сырое значение обратно в реальное напряжение, нужен простой расчёт.

Формула преобразования:

\[ \text{Voltage} = \frac{\text{ADC Reading} \times \text{Reference Voltage}}{2^{\text{bits}}} \]

Для RP2350 с его 12-битным АЦП и опорным напряжением 3,3 В:

\[ \text{Voltage} = \frac{\text{ADC Reading} \times 3.3}{4096} \]

Пример

Допустим, мы получили показание АЦП, равное 1000.

Voltage = (1000 × 3.3) / 4096 = 0.806 V

Ссылки