Как на самом деле Arduino измеряет напряжение?

Меня интересует не часть AnalogRead(), а то, как он преобразует 5 или 2 В в число от 0 до 1023. Как он практически это делает, преобразуя уровень напряжения в число или в биты для затем отправить в процессор? Заранее спасибо

, 👍0

Обсуждение

https://en.wikipedia.org/wiki/Аналогово-цифровой_конвертер, @Juraj


2 ответа


Лучший ответ:

2

ATmega328P оснащен 10-разрядным АЦП последовательного приближения. АЦП подключен к 8-канальному аналоговому мультиплексору.

Схема АЦП

Сначала в мультиплексоре слева выбирается вход. Это позволяет одновременно активировать любой из 8 входных каналов (но только один). Это: от A0 до A5 на Uno (некоторые платы также имеют A6 и A7). Также имеются дополнительные входные каналы (не показаны), которые также позволяют выбирать:

  • Внутренний датчик температуры.
  • Земля
  • Опорное напряжение запрещенной зоны

Входной канал (выход мультиплексора) подключен к устройству «выборка и удержание». конденсатор, как показано. Как только начинается аналоговое преобразование, переключатель размыкается после 1,5 циклов АЦП (12 мкс с предварительным делителем по умолчанию, равным 128), так что конденсатор сохраняет свое текущее показание (т. е. удерживает его), так что теперь входное напряжение может меняться, не влияя на результат. . Это будет полезно для быстро меняющихся сигналов, поскольку все преобразование может занять 104 мкс (в зависимости от прескалера).

Для расчета напряжения логика применяет аналоговое опорное напряжение (ARef), деленное ЦАП (цифро-аналоговый преобразователь) под управлением логики АЦП. Выходной сигнал ЦАП отправляется на компаратор, который определяет, выше или ниже входное напряжение опорного напряжения в его текущем разделенном состоянии. Например, старший бит можно установить или очистить, настроив ЦАП на деление опорного напряжения на 2 (т. е. 2,5 В, если ARef равно 5 В). Если входное напряжение выше 2,5 В, то устанавливается старший бит результата. Это занимает один цикл АЦП (8 мкс при прескалере по умолчанию, равном 128, и тактовой частоте процессора 16 МГц).

Чтобы получить следующий бит результата, ЦАП должен быть установлен на следующий шаг (т. е. 0,25 ARef или 0,75 ARef в зависимости от того, был ли установлен первый бит или нет) и выполнено еще одно сравнение. Этот процесс повторяется для всех 10 бит.

,

1

Arduino Uno питается от микроконтроллера ATmega328P. Согласно в техническое описание:

ATmega48A/PA/88A/PA/168A/PA/328/P имеет 10-битный последовательный аппроксимация АЦП.

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

Схема АЦП ATmega328P

Если вы хотите подробнее узнать, как это работает, см. Википедию. статья о АЦП последовательного приближения. Вы можете заметить схема в верхней части этой страницы Википедии чем-то похожа на один выше.

,