Контакт AREF на Arduino Uno R3

arduino-uno adc analogreference

редактировать

Таким образом, 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 на другой — поведение то же самое.

, 👍1


3 ответа


1

Вы должны подать опорное напряжение на вывод aref. Вы подаете опорное напряжение 5 В на вывод aref, чтобы АЦП сравнивал свой вход с опорным напряжением aref.

,

4

На 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.

Обратите внимание, что вы можете изменить этот бит, даже не используя АЦП, хотя это, вероятно, было бы бесполезно.

,

0

Как указано в техническом описании, раздел 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 становится доступным для измерения, и для сглаживания шума рекомендуется использовать конденсатор.

,