Опорное напряжение ардуино что это

Функция analogReference() в Arduino IDE

С помощью функции настраивается один из важнейших параметров, определяющих точность измерения АЦП – источник опорного напряжения.

Величина опорного напряжения принимается за 100% (1023) и все значения рассчитываются относительно этого опорного напряжения.

Возможные источники опорного напряжения (ИОН):

  1. DEFAULT – стандартное значение, равное величине напряжения питания (5В для плат, рассчитанных на работу от 16МГц и 3.3В для плат, работающих на частоте 8МГц).
  2. INTERNAL – встроенный (не очень точный) ИОН. Выдаёт 1.1В на платах с микроконтроллерами ATMega328 и ATMega168, 2.56В на платах с ATMega8 (Arduino NG).
  3. INTERNAL1V1 – встроенный ИОН на 1.1В (только Arduino Mega, так как имеет внутри два ИОН).
  4. INTERNAL2V56 – встроенный ИОН на 2.56В (только Arduino Mega).
  5. EXTERNAL – внешний ИОН, позволяющий многократно повысить точность измерений.

Синтаксис

Аргументы

CVStype – тип источника опорного напряжения (CVS – ConstantVoltageSupply)

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

Замечания

В случае использования внешнего ИОН, рекомендуется подключать его через сопротивление в 5 Ком. В противном случае возможно повреждение микроконтроллера из-за разницы потенциалов.

Единственный минус подключения – напряжение будет немного просаживаться, так как внутри контроллера уже установлено сопротивление. Однако такое подключение позволит «на лету» менять ИОН со внешнего на внутренний и обратно.

Теория использования ИОН

Напряжение ИОН используется в микроконтроллерах как верхняя точка измерения АЦП. В продвинутых внешних АЦП, кроме положительной верхней границы, существует напряжение нижней границы (в старших сериях AVR оно тоже есть – AGND, Analog ground). Остальные поступающие на вход АЦП значения рассчитываются пропорционально относительно верхних точек.

К примеру, если подать на вход АЦП 2.5В при ИОН = 2.56В, то на выходе получим

1000, а если ИОН = 5В, то значение преобразования АЦП будет равно

По умолчанию вывод AREF не используется, а напряжение верхней точки берётся относительно аналогового питания, при этом AREF находится в низкоимпедансном состоянии и не терпит напряжений на входе.

При выборе внутреннего ИОН значения АЦП считаются, опираясь на напряжение, меньшее чем напряжение питания. В таком случае, любое напряжение, поступившее на вход АЦП, значение которого будет больше, чем напряжение ИОН, будет восприниматься как максимальное (1023).

Значение внутреннего ИОН также будет выведено на вывод 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. При этом происходит отключение обоих внутренних источников, и внешнее напряжение будет являться опорным для АЦП.

Источник

Arduino — функции — аналоговый вход/выход

Система Arduino поддерживает обработку аналоговых сигналов. Для входных сигналов мы имеем АЦП (аналогово-цифровой преобразователь), в случае выходного сигнал — возможна модуляция ШИМ (широтно-импульсная модуляция).

В Arduino, сердцем которой является микроконтроллер Atmega, имеется один 10-битный АЦП. Это означает, что считанное значение напряжения может находиться в диапазоне от 0 — 1023. В зависимости от опорного напряжения 1024 значений будут распределены на соответствующий диапазон. В результате мы можем получить различную точность и различный диапазон напряжений, считываемых аналого-цифровым преобразователем.

Если выбрать опорное напряжение равное 1,024В, то каждое последующее значение, считанное с аналогового входа будет соответствовать 1мВ. Если опорное напряжение задать равным 5В, то каждое последующее значение будет соответствовать приблизительно 5 мВ.

Следует отметить, что аналого-цифровые преобразователи не имеют идеальной линейной характеристики. Это означает, что в определенных интервалах может быть разница между фактическим и считанным значением напряжения. Из вышеизложенного вытекает, что увеличивая диапазон измерения, мы теряем на качестве измерения, уменьшая диапазон, мы увеличиваем точность измерения.

Примечание: Arduino имеет несколько (в зависимости от версии) аналоговых входов, однако АЦП в ней только один. Это означает, что одновременно может быть считано значение только с одного из датчиков, подключенных к аналоговым входам A0… A5 (A0… A15 для Arduino MEGA).

Функция analogReference()

Для правильной работы АЦП требуется опорное напряжение (эталон). Для Arduino опорное напряжение может быть в диапазоне 0…5В (или 0… 3,3В для Arduino с напряжением питания 3,3В). В зависимости от типа используемого микроконтроллера у нас могут быть разные виды опорного напряжения.

Мы можем использовать внутренний или внешний источник опорного напряжения. Функция AnalogReference() предназначена для того, чтобы установить соответствующий источник опорного напряжения. Доступны следующие параметры этой функции:

  • DEFAULT: опорное напряжение составляет 5В или 3,3В (в зависимости от питания) — то есть, оно равно напряжению питания микроконтроллера;
  • INTERNAL: опорное напряжения составляет 1,1В для ATmega168, ATmega328 и 2,56В для ATmega8;
  • INTERNAL1V1: опорное напряжение составляет 1,1В — только для Arduino MEGA;
  • INTERNAL2V56: опорное напряжение составляет 2,56В — только для Arduino MEGA;
  • EXTERNAL: внешнее опорное напряжение, приложенное к выводу AREF — от 0 до 5В.

Параметр DEFAULT выбираем, когда хотим воспользоваться опорным напряжением 5В (питание системы). Это самый простой и одновременно наименее точный способ. Здесь требуется хорошая стабильность питания.

Использование INTERNAL является хорошим вариантом, в ситуации, когда мы создаем проект, предназначенный для конкретной версии Arduino. Внутренние опорное напряжение является относительно стабильным и достаточным в большинстве случаев.

Наиболее точным вариантом является использование внешнего источника опорного напряжения. Существуют специальные источники опорного напряжения (ИОН). Плюсом является возможность получения необходимого точного опорного напряжения, например, 1,024В или 2,048В, что облегчает интерпретацию данных, считываемых АЦП. К недостаткам применения внешнего источника опорного напряжения можно отнести возможное увеличение стоимости проекта.

Синтаксис функции analogReference() показан в следующем примере:
[slh lang=»php»] analogReference(DEFAULT); //опорное напряжение = напряжение питания
analogReference(INTERNAL); //опорное напряжение = 1,1В или 2,56В
analogReference(EXTERNAL); //опорное напряжение = напряжение на AREF выводе
[/slh]

Функция analogRead()

Функция analogRead() обеспечивает считывание значения с одного из аналоговых входов. Считанное значение находится в диапазоне 0 — 1023 (10-битный АЦП). Необходимо указать номер аналогового входа, с которого будет происходить чтение данных.

Следующий пример иллюстрирует использование аналоговых входов:
[slh lang=»php»] #define analogPin 0 // потенциометр подключен к A0
int val = 0; // val — переменная, хранящая считанное значение
void setup()
<
Serial.begin(9600); // инициализация последовательного порта
>
void loop()
<
val = analogRead(analogPin); // чтение значения напряжения с порта A0
Serial.println(val); // отправка измеренной величины на терминал
>
[/slh]

Как видно, на приведенном выше примере, считанное значение напряжения передается через последовательный порт на компьютер.

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

Функция analogWrite()

Функция analogWrite() позволяет управлять выходом с помощью сигнала ШИМ. ШИМ часто используется в качестве замены обычного аналогового сигнала. Количество доступных выводов ШИМ зависит от типа используемого микроконтроллера в Arduino.

Так у Arduino на микроконтроллере:

  • Atmega8 — выводы 9, 10, 11;
  • Atmega128, Atmega168 и Atmega328 — выводы 3, 5, 6, 9, 10, 11;
  • Atmega1280 — выводы 2…13 и 44…46.

Частота переключения ШИМ большинства контактов составляет 490 Гц. Степень заполнения формируется числом от 0 до 255 (0 — без заполнения, 255 – полное заполнение).

Если мы подключим светодиод к контакту PWM и будем менять заполнение ШИМ, мы увидим изменение интенсивности свечения светодиода. Ниже приведен пример программы изменения свечения светодиода при помощи потенциометра:
[slh lang=»php»] #define ledPin 11 // светодиод подключен к контакту 11
#define analogPin 0 // потенциометр на А0
int val = 0; // val — переменная, хранящая значение A0
void setup()
<
pinMode(ledPin, OUTPUT); // устанавливаем контакт 9 как выход
>
void loop()
<
val = analogRead(analogPin); // чтение с потенциометра
analogWrite(ledPin, val / 4); // пишем в ШИМ
>
[/slh]

Как вы можете видеть, значение, считанное с аналогового входа, преобразуется в соответствующее значение ШИМ.

Чтобы ШИМ работал пропорционально вращению потенциометра, значение, полученное с A0, следует разделить на четыре. Это связано с тем, что данные с потенциометра лежат в диапазоне от 0 до 1024, а ШИМ принимает диапазон данных от 0 до 255.

В этом примере используется простое деление. В Arduino IDE имеется специальная функция map(), которая предназначена для пропорционального преобразования данных в новый диапазон значений.

Источник

Arduino

Аналоговый ввод/вывод

Функция analogRead()

Описание

Считывает значение из указанного аналогового пина.

На большинстве плат содержится многоканальный 10-битный аналого-цифровой преобразователь, поэтому результатом будет значение в приделах от 0 до 1023. На платах Arduino Due и Arduino Zero преобразователь 12-битный, но результат по-умолчанию все равно отдается в 10 битах для совместимости с другими платами. Чтобы использовать 12 бит, нужно явно указать это через вызов analogReadResolution() , тогда результат будет в пределах 0-4095.

Синтаксис
Параметры

pin — номера аналогового пина. Для большинства плат — значение от A0 до A5 , для Arduino Mini и Nano — от A0 до A7 , для arduino mega — от A0 до A15

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

Целое значение в приделах от 0 до 1023 или от 0 до 4095 для плат Arduino Duo и Arduino Zero (нужна настройка)

Пример
Примечания

Аналоговые пины работают не так, как цифровые, и для работы с ними не нужно устанавливать режим работы. Вызывать для них pinMode() нужно только если вы хотите использовать их в качестве цифровых.

Функция analogReference()

Описание

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

Синтаксис
Параметры

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

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

Значения параметра для Arduino AVR плат (Uno, Mega и др.):

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

Значения параметра для 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 плат (Duo):

  • AR_DEFAULT — стандартное опорное напряжение 3.3 В. Для Arduino Duo доступно только это значение.

Функция analogWrite()

Описание

Функция выдает на пин аналоговую величину (ШИМ-сигнала или ШИМ-волну). Это может быть полезно например для управления яркостью светодиода или для задания скорости вращения мотора.

Могут использоваться только пины, помеченные символом «

«. На Arduino Uno и на других платах на микроконтроллерах ATmega168 и ATmega328P это пины 3, 5, 6, 9, 10 и 11. На пинах 5 и 6 частота ШИМ-сигнала составляет около 980 Гц, а на остальных пинах — примерно 490 Гц. На плате Arduino Mega можно использовать пины 2–13 и 44–46. На Arduino DUE — пины 2–13, а также контакты DAC0 и DAC1. Причем DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.

Перед использованием не требует вызова функции pinMode() .

Синтаксис
Параметры

pin — номер пина, на который следует подать ШИМ-сигнал

value — период рабочего цикла от 0 (сигнал всегда выключен) до 255 (сигнал подан постоянно)

Источник

Adblock
detector