Контакт AREF на Arduino Uno R3
редактировать
Таким образом, AREF может выводить напряжение только при использовании АЦП, но не при использовании переменного тока.
Вот на что, как я чувствую, указывают все ваши ответы, но ни один из них не имеет черного на белом. Мои вопросы остаются неизменными, ниже:
Должен ли вывод AREF на Uno R3 подавать какое-либо напряжение, если для аналогового компаратора установлено напряжение по умолчанию/напряжение запрещенной зоны?
С этим кодом (аналоговый компаратор):
void initAC()
{
ADCSRA = ADCSRB = ACSR = DIDR1 = 0; // также включает компаратор
ADCSRB |= (1 << ACME); // AIN1 из мультиплексора АЦП
ADMUX |= (1 << MUX0); // Выбран входной контакт ADC1 (PIN_VSENSE)
ACSR |= (1 << ACBG); // AIN0 установлен на опорную запрещенную зону
// напряжение 1,1В
//ACSR |= (1 << ACIS0) | (1 << ACIS1); // включить прерывание по переднему фронту;
ACSR |= (1 << ACIE); // прерывания включены
DIDR1 |= (1 << AIN0D) | (1 << AIN1D); // отключить цифровые входные буферы
// для экономии энергии
PRR &= ~(1 << PRADC); // нет снижения мощности АЦП для того, чтобы
// AC, чтобы иметь возможность использовать вход MUX
EEPROM.put(0x155, 0x5501);
}
При подсоединении щупов цифрового мультиметра к AREF / GND во время перезагрузки Arduino я стабильно считываю около 10 мВ.
Прикоснувшись к щупам во время работы Arduino, я могу увидеть уменьшающееся напряжение, как через RC-цепочку.
Пытался с АКБГ и без него, результат тот же.
С этим другим кодом (аналого-цифровой преобразователь):
{
//power_adc_enable(); нет-нет!
//power_usart0_enable();
ADCSRA = ADCSRB = ADMUX = ACSR = DIDR0 = 0;
ADCSRA |= (1 << ADEN); // включение питания АЦП
ADCSRA |= (1 << ADIE); // включить прерывания
ADCSRA |= (1 << ADPS2) | (1 << ADPS0); // работа на частоте 250 кГц
ADMUX |= (1 << REFS0); // 3,3 В (AVCC) как опорное напряжение
ADMUX |= (1 << ADLAR); // отбрасываем 2 младших бита,
// только чтение ADCH
ADMUX |= (1 << MUX0); // Выбран входной контакт ADC1 (PIN_VSENSE)
DIDR0 |= (1 << ADC1D) | (1 << ADC3D) | (1 << ADC5D); // отключить цифровой вход
// буферы для экономии энергии, что не так
// действительно необходимо, учитывая, как используется АЦП
}
Мне удалось прочитать хорошие 4,8 В на выводе AREF. Поменял чип Atmega328P на моей плате Arduino на другой — поведение то же самое.
@kellogs, 👍1
3 ответа
Вы должны подать опорное напряжение на вывод aref. Вы подаете опорное напряжение 5 В на вывод aref, чтобы АЦП сравнивал свой вход с опорным напряжением aref.
На ATmega328P (микроконтроллер Arduino Uno) вывод AREF изначально плавающий. Если вы попытаетесь прочитать его напряжение, вы можете получить в принципе, все что угодно.
Как только вы выбираете аналоговую ссылку, отличную от EXTERNAL
,
Вывод AREF внутренне подключается либо к выводу AVCC (если выбран
DEFAULT
) или внутренний опорный источник 1,1 В (если выбран INTERNAL
).
Обычно это происходит, когда вы вызываете analogRead()
или, в вашем примере,
код, когда вы устанавливаете бит REFS0
ADMUX
.
Правка 1: Как отметил JRobert в комментарии, раздел ADC Опорное напряжение в техническом описании ATmega328P стоит прочитать, если вы рассматриваете использование AREF pin. Особенно предупреждение в третьем абзац.
Правка 2: Отвечая на этот новый вопрос:
AREF может выводить напряжение только при использовании АЦП, но не при использовании АС.
Не имеет значения, используется ли он ADC и/или AC.
к поведению AREF-пина. Единственное, что имеет значение, это
значение бита REFS0
ADMUX
. Вывод выдает напряжение, если и
только если этот бит установлен. Это можно ясно увидеть в этой части
Схема АЦП из технического описания:
Когда REFS0
равен 1, транзистор, обведенный красным, подключается к выводу AREF
либо к AVCC, либо к внутреннему опорному сигналу, в зависимости от выбора мультиплексора
управляется битом REFS1
.
Обратите внимание, что вы можете изменить этот бит, даже не используя АЦП, хотя это, вероятно, было бы бесполезно.
Как указано в техническом описании, раздел 1.1.8, вывод AREF является опорным напряжением для АЦП. Другими словами, это вход.
AREF — аналоговый опорный вывод для АЦП.
Из технического описания:
23.5.2 Опорное напряжение АЦП
Опорное напряжение для АЦП (VREF) указывает диапазон преобразования для АЦП. Несимметричные каналы, которые превышают VREF приведет к кодам, близким к 0x3FF. VREF можно выбрать как AVCC, внутренний опорный сигнал 1,1 В или внешний вывод AREF.
AVCC подключен к АЦП через пассивный переключатель. Внутренний опорный сигнал 1,1 В генерируется из внутренней запрещенной зоны опорный (VBG) через внутренний усилитель. В любом случае внешний вывод AREF напрямую подключен к АЦП, а Опорное напряжение можно сделать более устойчивым к шуму, подключив конденсатор между выводом AREF и землей. VREF также можно измерить на выводе AREF с помощью вольтметра с высоким импедансом. Обратите внимание, что VREF является источником с высоким импедансом, и В систему следует подключать только емкостную нагрузку.
Если у пользователя есть фиксированный источник напряжения, подключенный к выводу AREF, пользователь не может использовать другие варианты опорного напряжения. в приложении, так как они будут закорочены на внешнее напряжение. Если внешнее напряжение не подается на вывод AREF, пользователь может переключаться между AV CC и 1,1 В в качестве опорного выбора.
Как видно из приведенной выше цитаты из технического описания, после инициализации AREF становится доступным для измерения, и для сглаживания шума рекомендуется использовать конденсатор.
- Питание Arduino от батареи и считывание напряжения батареи
- Взаимодействие ADS8319 с Arduino UNO
- Ускорение двигателя постоянного тока с помощью ШИМ
- Как найти пиковое значение аналогового сигнала?
- Как преобразовать эту программу в сборку из c++
- Напряжение на выводе AREF
- Неточное считывание напряжения с аналогового вывода Arduino
- Чтение сигнала 4-20 мА на ардуино