Как на самом деле Arduino измеряет напряжение?
Меня интересует не часть AnalogRead(), а то, как он преобразует 5 или 2 В в число от 0 до 1023. Как он практически это делает, преобразуя уровень напряжения в число или в биты для затем отправить в процессор? Заранее спасибо
@DaveTechICX44, 👍0
Обсуждение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 бит.
Arduino Uno питается от микроконтроллера ATmega328P. Согласно в техническое описание:
ATmega48A/PA/88A/PA/168A/PA/328/P имеет 10-битный последовательный аппроксимация АЦП.
На следующей странице вы можете увидеть следующую схему, на которой я выделены наиболее важные части преобразователя. Вы можете увидеть ЦАП, компаратор и регистр данных SAR.
Если вы хотите подробнее узнать, как это работает, см. Википедию. статья о АЦП последовательного приближения. Вы можете заметить схема в верхней части этой страницы Википедии чем-то похожа на один выше.
- Проблемы с использованием модуля мини-микрофона с AliExpress
- Библиотека DHT.h не импортируется
- Отправка значения с одного Arduino на другой
- Arduino непрерывно считывает значение АЦП с помощью прерывания
- Сброс Arduino UNO с помощью SIM800L
- Как узнать, нужно ли мне использовать резистор в цепи?
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- DHT11 аналоговый или цифровой?
https://en.wikipedia.org/wiki/Аналогово-цифровой_конвертер, @Juraj