analogReference()
Функция analogReference() задаёт опорное напряжение АЦП — верхнюю границу шкалы, с которой analogRead() сравнивает входной сигнал, что особенно полезно для датчиков с узким выходным диапазоном.
Полная статья
Описание
Когда analogRead() измеряет напряжение на аналоговом входе, он сравнивает его с опорным напряжением: именно оно соответствует максимальному результату (например, 1023 у 10-битного АЦП). По умолчанию в качестве опоры используется напряжение питания платы — 5 В или 3,3 В. Функция analogReference() позволяет выбрать другой источник опоры: встроенный стабилизированный источник или внешнее напряжение на выводе AREF.
Это полезно, когда измеряемый сигнал занимает лишь часть диапазона питания. Например, если датчик выдаёт максимум 1,1 В, переключение на внутреннее опорное 1,1 В даст вам полную разрядность АЦП именно в этом диапазоне — вместо того чтобы «тратить» большую часть шкалы впустую.
Доступные варианты опорного напряжения зависят от конкретной платы и её микроконтроллера.
Платы Arduino AVR (UNO, Mega, Leonardo и т. д.)
DEFAULT: опорное напряжение по умолчанию — 5 В на 5-вольтовых платах Arduino или 3,3 В на 3,3-вольтовых платах Arduino.INTERNAL: встроенный источник опорного напряжения: 1,1 В на ATmega168 и ATmega328P, 2,56 В на ATmega32U4 и ATmega8 (недоступно на Arduino Mega).INTERNAL1V1: встроенное опорное напряжение 1,1 В (только для Arduino Mega).INTERNAL2V56: встроенное опорное напряжение 2,56 В (только для Arduino Mega).EXTERNAL: в качестве опорного используется напряжение на выводе AREF (только от 0 до 5 В).
Платы Arduino Renesas (UNO R4, Portenta C33)
AR_DEFAULT: опорное напряжение по умолчанию — 5 В.AR_INTERNAL: встроенное опорное напряжение 1,5 В на RA4M1 UNO R4.AR_INTERNAL_1_5V: встроенное опорное напряжение 1,5 В на R7FA6M5 Portenta C33.AR_INTERNAL_2_0V: встроенное опорное напряжение 2,0 В на R7FA6M5 Portenta C33.AR_INTERNAL_2_5V: встроенное опорное напряжение 2,5 В на R7FA6M5 Portenta C33.AR_EXTERNAL: в качестве опорного используется напряжение на выводе AREF (только от 0 до 5 В).
Платы Arduino SAMD (Zero и т. д.)
AR_DEFAULT: опорное напряжение по умолчанию — 3,3 В.AR_INTERNAL: встроенное опорное напряжение 2,23 В.AR_INTERNAL1V0: встроенное опорное напряжение 1,0 В.AR_INTERNAL1V65: встроенное опорное напряжение 1,65 В.AR_INTERNAL2V23: встроенное опорное напряжение 2,23 В.AR_EXTERNAL: в качестве опорного используется напряжение на выводе AREF.
Платы Arduino megaAVR (UNO WiFi Rev2, Arduino Nano Every)
DEFAULT: встроенное опорное напряжение 0,55 В.INTERNAL: встроенное опорное напряжение 0,55 В.VDD: напряжение Vdd ATmega4809 — 5 В на Uno WiFi Rev2 и Nano Every.INTERNAL0V55: встроенное опорное напряжение 0,55 В.INTERNAL1V1: встроенное опорное напряжение 1,1 В.INTERNAL1V5: встроенное опорное напряжение 1,5 В.INTERNAL2V5: встроенное опорное напряжение 2,5 В.INTERNAL4V3: встроенное опорное напряжение 4,3 В.EXTERNAL: в качестве опорного используется напряжение на выводе AREF (только от 0 до 5 В).
Платы Arduino SAM (Due)
AR_DEFAULT: опорное напряжение по умолчанию — 3,3 В. Это единственный поддерживаемый вариант для Arduino Due.
Платы Arduino Mbed OS Nano (Nano 33 BLE), Edge Boards Arduino Mbed OS (Edge Control)
AR_VDD: опорное напряжение по умолчанию — 3,3 В.AR_INTERNAL: встроенное опорное напряжение 0,6 В.AR_INTERNAL1V2: опорное напряжение 1,2 В (внутреннее опорное 0,6 В с усилением ×2).AR_INTERNAL2V4: опорное напряжение 2,4 В (внутреннее опорное 0,6 В с усилением ×4).
На платах Nicla Sense ME и Nicla Voice опорное напряжение фиксировано на уровне 1,8 В и не может быть изменено программно.
Синтаксис
Чтобы изменить опорное напряжение для аналоговых входов на поддерживаемых платах, используйте следующую функцию:
analogReference(type)
Параметры
Функция принимает один параметр:
type: тип опорного напряжения (варианты перечислены в разделе «Описание»).
Возвращает
Функция ничего не возвращает.
Где применяется
- Датчики с малым выходным диапазоном. Если аналоговый датчик температуры, давления или pH выдаёт сигнал в диапазоне 0–1,1 В, переключение на внутреннее опорное 1,1 В позволяет задействовать всю разрядность АЦП, а не только её пятую часть.
- Точные измерения напряжения. Когда питание платы нестабильно или поступает от батареи, опорное напряжение питания «плавает» вместе с ним. Внутренний или внешний стабилизированный источник опоры даёт значительно более воспроизводимые результаты.
- Внешний прецизионный источник опоры. Если нужна высокая точность, к выводу AREF подключают специализированную микросхему источника опорного напряжения и выбирают
EXTERNAL. - Многоканальные системы сбора данных. При работе с несколькими датчиками, каждый из которых работает в своём диапазоне, можно менять опорное напряжение между измерениями — хотя это требует паузы после каждого переключения.
Практические замечания
- Первые показания после смены опоры ненадёжны. После вызова
analogReference()сделайте несколько «холостых» вызововanalogRead()и отбросьте их результаты — АЦП нужно время, чтобы стабилизироваться на новом опорном напряжении. - Никогда не подавайте на AREF напряжение выше 5 В или ниже 0 В. Это может повредить микроконтроллер.
- Перед подключением внешнего источника к AREF обязательно установите режим
EXTERNAL. Пока активен любой внутренний источник опоры, он подключён к выводу AREF изнутри. Если в этот момент подать напряжение снаружи, два источника окажутся соединены напрямую — это может вывести плату Arduino из строя. - Резистор 5 кОм между внешним источником и AREF — разумная защитная мера, если вы хотите иногда переключаться между внутренним и внешним опорным напряжением. Но помните: внутренний резистор 32 кОм на выводе AREF образует с ним делитель. Итоговое напряжение на AREF будет ниже поданного: например, 2,5 В через 5 кОм дадут примерно 2,2 В.
- Опорное напряжение должно быть больше измеряемого сигнала. Если сигнал превышает опорное напряжение,
analogRead()вернёт максимальное значение (например, 1023) независимо от реального уровня — «клиппинг» без предупреждений. - Выбирайте опору под задачу. Для грубых измерений
DEFAULTвполне подходит. Для точных — используйте внутренний стабилизированный источник или внешний прецизионный, а питание платы держите стабильным.