Ардуино опорное напряжение для ацп

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

АЦП Arduino UNO имеет разрешение 10 бит, т.е. позволяет выводить значения в десятичном виде от 0 до 1023.

В относительных единицах деление шклалы 5/1024 = 4.9 мВ;

Описание здесь http://arduino.ru/Reference/Analogreference

analogRead(pin) — Функция считывает значение с указанного аналогового входа. Возвращает: int (0 to 1023).

Считывание значение с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду.

analogReference(type) — определяет опорное напряжение относительно которого происходят аналоговые измерения. Type принимает одно из следующих значений:

DEFAULT: стандартное опорное напряжение 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В).

INTERNAL: встроенное опорное напряжение 1.1 В на микроконтроллерах ATmega168 и ATmega328, и 2.56 В на ATmega8.

EXTERNAL: внешний источник опорного напряжения, подключенный к выводу AREF (рекомендуется подключать к выводу AREF через резистор 5 кОм).

Примеч.: Опорное напряжение можно установить, используя функцию analogReference или при помощи битов REFT[1:0] в регистре ADMUX.

Используйте внутреннее опорное напряжение 1.1 В для точных измерений внешних напряжений:

analogReference(INTERNAL1V1); // выбираем внутреннее опорное напряжение 1.1В

Опорное напряжение 1.1 В более стабильно и не зависит от изменения напряжения питания или температуры. Таким образом, можно производить измерения абсолютных значений. В Arduino Mega также возможен вариант опорного напряжения 2.56 В.

Режимы работы

1) Разовая выборка — это на самом деле то, что Arduino делает при вызове функции analogRead.

Из-за шумов 2 младших бита обычно отбрасывают:

int val = analogRead(A0)>>2;

— в итоге получаем значения от 0 до 255, т.е. точность 5/255=19.6мВ.

2) Непрерывная выборка:

Хорошей идеей при непрерывной выборке сигнала является использование прерываний.

Микроконтроллеры ATMega328 и ATMega2560 могут быть переведены в режим непрерывной выборки (free running mode). В этом режиме АЦП запускается автоматически после завершения предыдущей обработки.

Для включения режима непрерывной выборки необходимо установить три регистра: ADMUX, ADCSRA и ADCSRB.

Источник

Использование аналого-цифрового преобразования (АЦП) в Arduino Uno

В этой статье мы рассмотрим различные аспекты использования аналого-цифрового преобразования (АЦП, в англ. ADC — Analog to Digital Conversion) в Arduino Uno.

Внешний вид конструкции для использования АЦП в Arduino Uno

Плата Arduino имеет 6 каналов АЦП, как показано на следующем рисунке.

Контакты АЦП в Arduino Uno

Любые из этих каналов (или даже все сразу) можно использовать для подачи на них аналогового напряжения. АЦП в Arduino Uno имеет разрешение 10 бит, то есть получаем диапазон целых чисел, соответствующих этому разрешению, от 0 до 2^10-1 (до 1023). Это означает, что значение входного аналогового напряжения от 0 до 5 В преобразуется в целое число от 0 до 1023. То есть получаем шаг АЦП равный 5/1024= 4.9 мВ.

В нашем проекте мы будем подключать потенциометр к каналу ‘A0’, а результат аналого-цифрового преобразования на этом канале показывать на жидкокристаллическом (ЖК) дисплее. В радиолюбительской практике наиболее распространены жидкокристаллические (ЖК) дисплеи 16×1 и 16×2. ЖК дисплей 16×1 может отображать 16 символов, расположенных на одной строке. ЖК дисплей 16×2 может в сумме отображать 32 символа на двух строках – 16 символов на первой строке и 16 символов на второй. Здесь необходимо принимать во внимание тот факт, что каждый символ в подобных дисплеях состоит из 5×10=50 пикселов (точек). То есть чтобы отобразить 1 символ все эти 50 пикселов должны работать вместе. Но мы можем об этом не беспокоиться, потому что за их совместную работу отвечает контроллер HD44780 – его визуально можно увидеть на обратной стороне ЖК дисплея.

Необходимые компоненты

Плата Arduino UNO
Источник питаний 5 В
ЖК дисплей 16х2 (JHD_162ALCD)
Конденсатор 100 пФ
Конденсатор 100 нФ
Потенциометр 100 кОм

Работа схемы

Схема устройства представлена на следующем рисунке.

В ЖК дисплее 16×2 если мы хотим задействовать черный цвет, то нам будут нужны все его 16 контактов, в противном случае нам будет достаточно 14 контактов. Эти 2 контакта, отвечающие за черный цвет, можно оставить неиспользованными. Среди оставшихся 14 контактов мы имеем 8 контактов данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (определяет насколько «жирными» будут выглядеть символы на экране дисплея) и 3 управляющих контакта (RS&RW&E).

На представленной схеме можно увидеть, что мы использовали только 2 управляющих контакта – это обеспечивает гибкость в управлении. Бит контраста и READ/WRITE используются редко, поэтому в нашем случае их можно замкнуть на землю – это обеспечивает ЖК дисплею максимальную контрастность и режим чтения. Таким образом, нам необходимо будет контролировать только контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные.

В схеме необходимо будет сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS на землю
PIN2 или VDD или VCC к источнику питания +5В
PIN3 или VEE на землю (обеспечивает максимальную контрастность – хорошо для начинающих)
PIN4 или RS (Register Selection) к контакту PIN0 ARDUINO UNO
PIN5 или RW (Read/Write) на землю (переводит ЖК дисплей в режим чтения, что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) к контакту PIN1 of ARDUINO UNO
PIN11 или D4 к контакту PIN8 of ARDUINO UNO
PIN12 или D5 к контакту PIN9 of ARDUINO UNO
PIN13 или D6 к контакту PIN10 of ARDUINO UNO
PIN14 или D7 к контакту PIN11 of ARDUINO UNO

Программная среда ARDUINO IDE позволяет пользователю использовать ЖК дисплей в 4-битном режиме. Этот тип взаимодействия с ЖК дисплеем позволяет сократить использование контактов ARDUINO, к тому же этот режим взаимодействия (4-битный) по умолчанию заложен в ARDUINO. На представленной схеме мы использовали 4-битный режим взаимодействия (контакты D4-D7).

То есть в сумме мы подсоединили 6 контактов ЖК дисплея к нашей плате Arduino, из которых 4 контакта будут использоваться для передачи данных и 2 контакта для целей управления.

Объяснение работы программы

Для того, чтобы полноценно использовать АЦП в Arduino Uno, необходимо сделать следующие вещи:

analogRead(pin);
analogReference();
analogReadResolution(bits);

Прежде всего необходимо отметить что каналы АЦП Arduino Uno имеют по умолчанию опорное значение 5 В (опорное напряжение). Это означает, что максимальное входное значение напряжения для каждого канала АЦП Arduino составляет 5 В. Но некоторые датчики имеют выходное напряжение в диапазоне 0-2,5 В, поэтому если мы будем использовать опорное напряжение по умолчанию (5 В), то мы потеряем в точности измерений. В связи с этим полезно иметь возможность изменения значения опорного напряжения, для Arduino Uno это делается с помощью команды “ analogReference(); ”.

По умолчанию мы имеем разрешающую способность АЦП, равную 10 бит, разрешение АЦП мы также можем изменить используя команду “ analogReadResolution(bits); ”. Это может быть полезно в ряде случаев.

Теперь, если все установки параметров работы АЦП нами сделаны, мы можем считать значение АЦП с канала ‘0’ просто используя инструкцию “analogRead(pin);”, где “pin” означает контакт (вывод), на который мы подаем аналоговый сигнал, в нашем случае это будет контакт “A0”. Значение с выхода АЦП может быть преобразовано в число типа integer, например, с помощью инструкции “ int ADCVALUE = analogRead(A0); ”, в результате выполнения этой инструкции значение с используемого канала АЦП после проведения преобразования (то есть АЦП) сохраняется в переменной целого типа (integer) под названием “ADCVALUE”.

Теперь несколько слов о работе с ЖК дисплеем 16×2. Сначала мы должны подключить необходимый заголовочный файл с помощью команды ‘ #include
’, этот заголовочный файл содержит все необходимые функции для работы с ЖК дисплеем. По умолчанию функционал этого файла настроен для работы с ЖК дисплеем в 4-битном режиме. С помощью этого заголовочного файла нам не нужно будет заботиться о том, чтобы передавать данные в ЖК дисплей бит за битом и писать какие либо собственные функции для работы с ЖК дисплеем.

Далее мы должны указать какой именно тип ЖК дисплея мы будем использовать. Существуют различные типы ЖК дисплеев, например, 20×4, 16×2, 16×1 и т.д. Мы в нашем проекте будем использовать ЖК дисплей 16×2, поэтому мы должны будем записать команду ‘ lcd.begin(16, 2); ’. А если бы у нас был дисплей 16×1, то нам бы пришлось использовать команду ‘lcd.begin(16, 1);’.

Далее мы Arduino Uno должны указать, к каким ее контактам мы подключили ЖК дисплей. В нашем случае мы к Arduino Uno подключили следующие выводы ЖК дисплея: “RS, En, D4, D5, D6, D7”. Мы подключили их к контактам 0, 1, 8, 9, 10, 11 Arduino Uno, поэтому в нашем случае соответствующая команда будет иметь следующий вид: “LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”.

После всего этого мы можем приступит к передаче данных на ЖК дисплей. Сделать это можно, к примеру, с помощью следующей команды: “ lcd.print(«hello, world!»); ”. В результате выполнения этой команды на экран ЖК дисплея будет выведена строка ‘hello, world!’.

Исходный код программы

В этом разделе статьи будет представлен полный код программы для обработки данных с АЦП Arduino Uno и последующего их вывода на ЖК дисплей. Если у вас возникнут вопросы, то вы можете задать их в комментариях к данной статье.

#include

// подключаем необходимый заголовочный файл для работы с ЖК дсиплеем
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // сообщаем Arduino номера контактов, к которым мы подключили ЖК дисплей
char ADCSHOW[5]; //объявляем переменную для хранения результата АЦП
void setup()
<
// устанавливаем число столбцов и строк для ЖК дисплея
lcd.begin(16, 2);
>
void loop()
<
// устанавливаем курсор в нулевой столбец 1-й строки
lcd.print(» CIRCUIT DIGEST»); //выводим на экран ЖК дисплея строку
lcd.setCursor(0, 1); // устанавливаем курсор в нулевой столбец второй строки
lcd.print(«ADC RESULT:»); // выводим на экран ЖК дисплея строку «ADC RESULT:»
String ADCVALUE = String(analogRead(A0)); //сохраняем значение АЦП в переменной типа «строка»

ADCVALUE.toCharArray(ADCSHOW, 5); // преобразуем эту строку в символьный массив
lcd.print(ADCSHOW); // выводим значение этого символьного массива на экран ЖК дисплея
lcd.print(» «);
lcd.setCursor(0, 0); // устанавливаем курсор в нулевой столбец 1-й строки
>

Видео, демонстрирующее работу схемы

Также можете посмотреть еще одно видео про то, как использовать АЦП в Arduino Uno. Оно на английском языке, но зато очень подробное и доходчивое.

Источник

Поделиться с друзьями
Электрика и электроника
Adblock
detector