Ардуино вывод aref

Arduino.ru

Функция analogReference()

Описание

Функция определяет опорное напряжение относительно которого происходят аналоговые измерения. Функция analogRead() возвращает значение с разрешением 10 бит пропорционально входному напряжению на аналоговом входе, и в зависимости от опорного напряжения.

  • DEFAULT: стандартное опорное напряжение 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В)
  • INTERNAL: встроенное опорное напряжение 1.1 В на микроконтроллерах ATmega168 и ATmega328, и 2.56 В на ATmega8.
  • INTERNAL1V1: встроенное опорное напряжение 1.1 В (Arduino Mega)
  • INTERNAL2V56: встроенное опорное напряжение 2.56 (Arduino Mega)
  • EXTERNAL: внешний источник опорного напряжения, подключенный к выводу AREF
Синтаксис
Параметры

type: определяет используемое опорное напряжение (DEFAULT, INTERNAL или EXTERNAL).

Возвращаемое значение
Внимание

Внешнее напряжение рекомендуется подключать к выводу AREF через резистор 5 кОм.

Таким образом уменьшается риск повреждения микросхемы Atmega если настройки analogReference не совпадают с возможностями платформы. Однако при этом произойдет небольшая просадка напряжения, вследствие того, что имеется встроенный резистор 32 кОм, подключенный к выводу AREF. В этом случае оба резистора работают как делитель напряжения. Подсоединение внешнего резистора позволяет быстро переключаться на напряжение 3.3 В вывода AREF с напряжения 5 В DEFAULT без конфигурации аппаратной части и АЦП.

Использование вывода AREF

Напряжение, подключенное к выводу AREF, конвертируется АЦП и, затем, определяется значение напряжения, при котором АЦП выдает самое высокое цифровое значение, т.е 1023. Другие значения напряжения, поступающие в АЦП, конвертируются пропорционально. Таким образом, при настройке DEFAULT 5 В значение напряжения 2.5 В в АЦП будет конвертироваться в 512.

В стандартной конфигурации платформ Arduino вывод AREF (вывод 21 Atmega) не задействован. В этом случае при настройке DEFAULT к выводу подключается внутреннее напряжение AVCC. Соединение является низко-импедансным и любое напряжение подведенное к выводу в этот момент может повредить микросхему ATMEGA.

Настройкой INTERNAL к выводу AREF подключается внутреннее напряжение 1.1 В (или 2.56 микросхемы ATmega8). При этом напряжение соответствующее или превышающее 1.1 В будет конвертироваться АЦП в 1023. Другие значения напряжения конвертируются пропорционально.

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

Рекомендуемой настройкой для вывода AREF является EXTERNAL. При этом происходит отключение обоих внутренних источников, и внешнее напряжение будет являться опорным для АЦП.

Источник

analogReference()

Description

Configures the reference voltage used for analog input (i.e. the value used as the top of the input range). The options are:

Arduino AVR Boards (Uno, Mega, Leonardo, etc.)

DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3 volts (on 3.3V Arduino boards)

INTERNAL: a built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328P and 2.56 volts on the ATmega32U4 and ATmega8 (not available on the Arduino Mega)

INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)

INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)

EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference.

Arduino SAMD Boards (Zero, etc.)

AR_DEFAULT: the default analog reference of 3.3V

AR_INTERNAL: a built-in 2.23V reference

AR_INTERNAL1V0: a built-in 1.0V reference

AR_INTERNAL1V65: a built-in 1.65V reference

AR_INTERNAL2V23: a built-in 2.23V reference

AR_EXTERNAL: the voltage applied to the AREF pin is used as the reference

Arduino megaAVR Boards (Uno WiFi Rev2)

DEFAULT: a built-in 0.55V reference

INTERNAL: a built-in 0.55V reference

VDD: Vdd of the ATmega4809. 5V on the Uno WiFi Rev2

INTERNAL0V55: a built-in 0.55V reference

INTERNAL1V1: a built-in 1.1V reference

INTERNAL1V5: a built-in 1.5V reference

INTERNAL2V5: a built-in 2.5V reference

INTERNAL4V3: a built-in 4.3V reference

EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference

Arduino SAM Boards (Due)

AR_DEFAULT: the default analog reference of 3.3V. This is the only supported option for the Due.

Arduino Mbed OS Nano Boards (Nano 33 BLE), Arduino Mbed OS Edge Boards (Edge Control)

AR_VDD: the default 3.3 V reference

AR_INTERNAL: built-in 0.6 V reference

AR_INTERNAL1V2: 1.2 V reference (internal 0.6 V reference with 2x gain)

AR_INTERNAL2V4: 2.4 V reference (internal 0.6 V reference with 4x gain)

Syntax

Parameters

type : which type of reference to use (see list of options in the description).

Returns

Notes and Warnings

After changing the analog reference, the first few readings from analogRead() may not be accurate.

Don’t use anything less than 0V or more than 5V for external reference voltage on the AREF pin! If you’re using an external reference on the AREF pin, you must set the analog reference to EXTERNAL before calling analogRead() . Otherwise, you will short together the active reference voltage (internally generated) and the AREF pin, possibly damaging the microcontroller on your Arduino board.

Alternatively, you can connect the external reference voltage to the AREF pin through a 5K resistor, allowing you to switch between external and internal reference voltages. Note that the resistor will alter the voltage that gets used as the reference because there is an internal 32K resistor on the AREF pin. The two act as a voltage divider, so, for example, 2.5V applied through the resistor will yield 2.5 * 32 / (32 + 5) =

Источник

analogReference(type)

Описание

Устанавливает источник опорного напряжения, использующийся при считывании аналогового сигнала (другими словами, задает максимальное значение входного диапазона). Для выбора источника опорного напряжения доступны следующие значения:

  • DEFAULT: опорное напряжение по умолчанию, равное 5 В (на 5В-платах Ардуино) или 3.3 В (на 3.3В-платах Ардуино)
  • INTERNAL: внутренне опорное напряжение, равное 1.1 В в микроконтроллерах ATmega168 и ATmega328, или 2.56 В в микроконтроллере ATmega8 (не доступно в Arduino Mega)
  • INTERNAL1V1: внутреннее опорное напряжение 1.1 В (только для Arduino Mega)
  • INTERNAL2V56: внутреннее опорное напряжение 2.56 В (только для Arduino Mega)
  • EXTERNAL: в качестве опорного напряжения будет использоваться напряжение, приложенное к выводу AREF (от 0 до 5В)

Параметры

type: тип источника опорного напряжения (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56 или EXTERNAL).

Возвращаемые значения

Примечание

Сразу после изменения источника опорного напряжения, несколько первых значений, возвращаемых функцией analogRead(), могут быть неточными.

Предупреждение

При использовании внешнего источника опорного напряжения, напряжение на выводе AREF должно быть строго в пределах от 0 до 5 В! При этом перед вызовом функции analogRead() нужно обязательно установить тип источника как EXTERNAL. В противном случае, возможно короткое замыкание внутреннего источника опорного напряжения с выводом AREF, что может привести к повреждению микроконтроллера на вашей плате Ардуино.

Подобную ситуацию также можно предотвратить, если внешний источник опорного напряжения соединять с выводом AREF через резистор номиналом 5 кОм. Такое соединение даст возможность переключаться между внутренним и внешним опорным напряжением. Однако, при этом следует иметь ввиду, что резистор изменит величину опорного напряжения, поскольку вывод AREF соединяется с внутренним резистором номиналом 32 КОм. Два резистора образуют делитель напряжения, таким образом, например, 2.5В, приложенные через резистор, в итоге дадут 2.5 * 32 / (32 + 5) =

2,2 В на выводе AREF.

Смотрите также

Железо

Это расширенный стартовый набор. В комплект входит Arduino Mega R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.

Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.

Макетная плата на 830 точек и ничего лишнего.

Источник

analogReference() / Arduino

Описание

Настраивает опорное напряжение, используемое для аналогового входа (т.е. значение, используемое в качестве верхней границы входного диапазона). Возможные варианты:

  • платы Arduino AVR (Uno, Mega и т.д.):
    • DEFAULT : опорное аналоговое значение по умолчанию составляет 5 вольт (на платах Arduino 5В) или 3,3 вольта (на платах Arduino 3,3В);
    • INTERNAL : встроенный источник опорного напряжения, равен 1,1 вольта на ATmega168 или ATmega328P и 2,56 вольта на ATmega8 (не доступно на Arduino Mega);
    • INTERNAL1V1 : встроенный источник опорного напряжения 1,1В (только на Arduino Mega);
    • INTERNAL2V56 : встроенный источник опорного напряжения 2,56В (только на Arduino Mega);
    • 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 SAM (Due):
    • AR_DEFAULT : опорное аналоговое значение по умолчанию составляет 3,3В. Этот вариан поддерживается только на Due.

Синтаксис

Параметры

type : какой тип опорного значения использовать (смотрите список вариантов выше).

Возвращает

Примечания и предупреждения

После изменения аналогового опорного значения первые несколько показаний от analogRead() могут быть неточными.

Не используйте напряжения ниже 0В и выше 5В в качестве внешнего опорного напряжения на выводе AREF ! Если вы используете внешнее опорное напряжение на выводе AREF , перед вызовом analogRead() вы должны установить аналоговое опорное напряжение в значение EXTERNAL . В противном случае, вы закоротите вместе активный источник опорного напряжения (внутренний) и вывод AREF , что, возможно, приведет к повреждению микроконтроллера на плате Arduino.

Кроме того, вы можете подключить внешний источник опорного напряжения к выводу AREF через резистор 5 кОм, что позволит переключаться между внешним и внутренними опорными напряжениями. Обратите внимание, что резистор изменит напряжение, которое будет использоваться в качестве опорного, потому что на выводе AREF имеется внутренний резистор 32 кОм. Эти два резистора будут действовать как делитель напряжения, поэтому, например, 2,5В, подаваемое через резистор, даст в итоге на выводе AREF напряжение 2,5 * 32 / (32 + 5) =

Источник

Аналоговые пины

В прошлом уроке мы разобрали измерение и вывод цифрового сигнала, а в этом разберём аналоговый сигнал. Зачем нужно читать аналоговый сигнал? Микроконтроллер может выступать в роли вольтметра, измерять собственное напряжение питания, например от аккумулятора, может измерять ток через шунт (если вы знаете закон Ома), можно измерять сопротивление, а также работать с потенциометрами (крутильными, линейными, джойстиками), которые являются очень удобными органами управления.

В уроке про возможности микроконтроллера мы обсуждали аналоговые входы, т.е. входы, подключенные к АЦП – аналогово-цифровому преобразователю (ADC). Взглянем на распиновку популярных плат (Arduino Nano и Wemos Mini):

Пины, на которых выведен ADC, могут измерять аналоговый сигнал. На плате Nano это пины, маркированные буквой А (A0A7), а у esp8266 такой пин всего один – A0.

Чтение сигнала

“Аналоговые” пины могут принимать напряжение от 0V (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП на AVR и esp8266 имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023 .

Функция, которая оцифровывает напряжение, называется analogRead(pin) . Она принимает в качестве аргумента номер аналогового пина и возвращает оцифрованное напряжение. Сам пин должен быть сконфигурирован как INPUT (вход). Нумерация:

  • Arduino Nano:
    • Просто номером А-пина: A0 – 0
    • Как на плате: A0 – A0
    • Порядковым номером GPIO: А0 – 14 , A1 – 15 .. А7 – 21
  • Wemos Mini
    • Просто номером А-пина: A0 – 0
    • Как на плате: A0 – A0

Пример, опрашивающий пин А0:

Хранить полученное значение разумно в переменной типа int , потому что значение варьируется от 0 до 1023.

10k) – можно, но всё равно не рекомендуется этого допускать.

Потенциометры

Аналоговые пины очень часто используются при работе с потенциометрами (переменный резистор). При помощи полученного значения можно влиять на ход работы программы, менять какие-то настройки и тому подобное. У потенциометра всегда три ноги: две крайние и одна центральная. Всё вместе это представляет собой делитель напряжения, который и позволяет менять напряжение в диапазоне 0-VCC: К Arduino потенциометр подключается следующим образом: средний вывод на любой A-пин, крайние – на GND и питание. От порядка подключения GND и питания зависит направление изменения значения. Что касается сопротивления, то читай заметку по делителям напряжения ниже в этом уроке. Чаще всего для МК ставят потенциометры с сопротивлением 10 кОм, но диапазон в принципе очень широк: от 1 кОм до 100 кОм. Чем больше, тем более шумным будет приходить сигнал, а если брать меньше – пойдут потери тока в нагрев потенциометра, а это никому не нужно.

Опорное напряжение (для AVR Arduino)

Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим функцию analogReference(mode) , где mode:

  • DEFAULT : опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • INTERNAL : встроенный источник опорного на 1.1V (для ATmega168 или ATmega328P) и 2.56V (на ATmega8)
  • INTERNAL1V1 : встроенный источник опорного на 1.1V (только для Arduino Mega)
  • INTERNAL2V56 : встроенный источник опорного на 2.56V (только для Arduino Mega)
  • EXTERNAL : опорным будет считаться напряжение, поданное на пин AREF

После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными. Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его.

В режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания VCC. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение, читайте ниже.

Что касается точности: при питании от 5V и режиме DEFAULT мы получим точность измерения напряжения (5 / 1024)

4.9 милливольт. Поставив INTERNAL мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024)

0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения.

Что касается внешнего источника опорного напряжения: нельзя подавать напряжение меньше 0V (отрицательное) или выше 5.5V в качестве внешнего опорного в пин AREF. Также при подключении внешнего опорного напряжения нужно вызвать analogReference(EXTERNAL) до первого вызова функции analogRead() (начиная с запуска программы), иначе можно повредить микроконтроллер!

Чтобы “на лету” переключаться между внутренними и внешним опорными, можно подключить его на AREF через резистор на

5 кОм. Вход AREF имеет собственное сопротивление в 32 кОм, поэтому реальное опорное будет вычисляться по формуле REF = V * 32 / (R + 32), где R – сопротивление резистора (кОм), через которое подключено опорное напряжение V (Вольт). Например для 2.5V получим 2.5 * 32 / (32 + 5) =

2.2V реальное опорное.

Измерение напряжения

0-5 Вольт

Простой пример, как измерить напряжение на аналоговом пине и перевести его в Вольты. Плата питается от 5V.

Таким образом переменная voltage получает значение в Вольтах, от 0 до 5. Чуть позже мы поговорим о более точных измерениях при помощи некоторых хаков. Почему мы делим на 1024, а не на 1023 , ведь максимальное значение измерения с АЦП составляет 1023? Ответ можно найти в даташите:
АЦП при преобразовании отнимает один бит, т.е. 5.0 Вольт он в принципе может измерить только как 4.995, что и получится по формуле выше: 1023 * 5 / 1024 == 4.995.. . Таким образом делить нужно на 1024.

Сильно больше 5 Вольт

Для измерения постоянного напряжения больше 5 Вольт нужно использовать делитель напряжения на резисторах (Википедия). Схема подключения, при которой плата питается от 12V в пин Vin и может измерять напряжение источника (например, аккумулятора):
Код для перевода значения с analogRead() в Вольты с учётом делителя напряжения:

Как выбрать/рассчитать делитель напряжения?

  • Согласно даташиту на ATmega, сумма R1 + R2 не рекомендуется больше 10 кОм для достижения наибольшей точности измерения. В то же время через делитель на 10 кОм будет течь ощутимый ток, что критично для автономных устройств (читай ниже). Если девайс работает от сети или от аккумулятора, но МК не используется в режиме сна – ставим делитель 10 кОм и не задумываемся. Также рекомендуется поставить конденсатор между GND и аналоговым пином для уменьшения помех.
  • Если девайс работает от аккумулятора и микроконтроллер “спит”: пусть аккумулятор 12V, тогда через 10 кОм делитель пойдёт ток 1.2 мА. Сам микроконтроллер в режиме сна потребляет

1 мкА, что в тысячу раз меньше! На самом деле можно взять делитель с гораздо бОльшим суммарным сопротивлением (но не больше 20 МОм, внутреннего сопротивления самого АЦП), но обязательно поставить конденсатор на

0.1 мкФ между аналоговым пином и GND (вот здесь проводили эксперимент). Таким образом например при при R1+R2 = 10 МОм (не забыть про конденсатор) ток через делитель будет 1.2 мкА, что уже гораздо лучше!
Коэффициент делителя (не тот, который в Википедии) равен (R1 + R2) / R2 . Коэффициент должен быть таким, чтобы при делении на него измеряемого напряжения не получилось больше напряжения питания МК. У меня в примере (10 + 4.7) / 4.7

3.13 . Я хочу измерять литиевый аккумулятор с максимальным напряжением 12.8 Вольт. 12.8 / 3.13

4 Вольта – отлично. Например для измерения 36 Вольт я бы взял делитель с плечами 100к и 10к.

  • Можно воспользоваться онлайн-калькулятором.
  • Сильно меньше 5 Вольт

    Для более точных измерений маленького напряжения можно подключить пин AREF к источнику низкого опорного напряжения (об этом было выше), чтобы “сузить” диапазон работы АЦП. Источник может быть как внешний, так и внутренний, например изменив опорное на внутреннее 1.1V ( analogReference(INTERNAL) ) можно измерять напряжение от 0 до 1.1 Вольта с точностью 1.1/1024

    Видео

    Источник

    Adblock
    detector