В данной статье мы узнаем как использовать 16-битный модуль АЦП ADS1115 с платой Arduino. Плата коммутации ADS1115 — это 16-битный аналого-цифровой преобразователь (АЦП), который можно использовать с Arduino, ESP8266/32, STM32 или любыми другими микроконтроллерами.
Платы Arduino поставляются со встроенным 10-битным АЦП, который имеет несколько ограниченные возможности. AD1115 имеет 16-битное разрешение АЦП . Это означает, что наименьшее напряжение, которое может измерить Arduino, составляет 5 В / 1024 = 0,0049 В (или 4,9 мВ). Тогда как наименьшее напряжение, которое может измерить ADS1115, составляет 5 В / 65536 = 0,000076 В (76 мкВ). Таким образом, по сравнению с Arduino АЦП ADS1115 может измерять более широкий диапазон напряжений с более высокой разрешающей способностью.
Ранее на нашем сайте мы рассматривали подключение АЦП ADS1115 к другим микроконтроллерам/платам:
Если вам нужно еще большее разрешение чем то, которое может обеспечить модуль ADS1115, то рекомендуем присмотреться к его "старшему брату" - 24-битному модулю ADS1220.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- ЖК дисплей 16x2 с модулем I2C (купить на AliExpress).
- Модуль АЦП ADS1115 (купить на AliExpress).
- Потенциометр 10 кОм - 2 шт. (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Микросхема ADS1115
ADS1115 — это прецизионная, маломощная, 16-битная, совместимая с I2C ИС (интегральная схема) аналого-цифрового преобразователя.
Особенности ADS1115
- Разрешение 16 бит.
- Четыре (4) канала с несимметричным входом или два (2) канала с дифференциальным входом.
- Интерфейс протокола I2C.
- Программируемый компаратор.
- Широкий ассортимент поставок.
- Низкое потребление тока.
- Режим непрерывного преобразования.
- Программируемая скорость передачи данных.
- Программируемый компаратор.
- Одноцикловое осаждение.
- Внутренний источник опорного напряжения с малым дрейфом.
- Внутренний генератор
- Широкий диапазон рабочих температур.
- Доступно в сверхмалом корпусе X2QFN.
Конфигурация выводов ADS1115
На рисунке ниже показана конфигурация выводов микросхемы ADS1115.
- Контакт 1 — это контакт ADDR, который выбирает адрес I2C для чипа.
- Контакт 2 — это контакт оповещения/готовности, который служит в качестве сигнала готовности данных и оповещения.
- Контакт 3 — это клемма GND.
- Контакты 4, 5, 6 и 7 — это четыре (4) входных контакта АЦП. Мы можем использовать эти контакты как четыре (4) несимметричных входа или два (2) дифференциальных входа.
- Контакт 8 — это положительный контакт источника питания, который принимает напряжение от 2,0 В до 5,5 В.
- Контакты 9 и 10 являются клеммами для интерфейса I2C, SDA и SCL соответственно.
Функциональная блок-схема ADS1115
Ниже представлена функциональная схема микросхемы ADS1115:
Сначала мультиплексор выбирает входной сигнал. Затем этот выбранный сигнал поступает в программируемый усилитель усиления (PGA), который можно запрограммировать на усиление меньших сигналов до того, как произойдет преобразование.
Затем 16-битный преобразователь Delta Sigma обрабатывает входной сигнал. Этот преобразователь использует собственный встроенный опорный источник напряжения и генератор для измерения входного сигнала. После завершения преобразования полученные данные отправляются на интерфейс I2C. Кроме того, компаратор генерирует сигнал для внешнего интерфейса, указывая, что преобразованный результат доступен для извлечения.
Типовая схема подключения соединения ADS1115
Основные соединения I2C для ADS1115 можно увидеть на следующем изображении.
ADS1115 совместим с контроллерами I2C стандартного, быстрого и высокоскоростного режима, что позволяет ему напрямую взаимодействовать с ними. ADS1115 функционирует с любым периферийным устройством I2C микроконтроллера, включая периферийные устройства I2C только с ведущим устройством и с одним ведущим устройством.
Более подробную информацию см. в техническом описании ADS1115.
Модуль (коммутационная плата) ADS1115
ADS1115 доступен в корпусах X2QFN и VSSOP, которые не подходят для прототипирования. В результате для использования с ESP32 или любым другим микроконтроллером необходим модуль ADS1115 или отладочная плата.
Эти модули можно найти у разных производителей по доступным ценам. Их конструкция, удобная для макетных плат, делает их идеальными для прототипирования и тестирования приложений, что обеспечивает легкую интеграцию.
Распиновка модуля ADS1115
Модуль ADS1115 имеет общее количество контактов равное 10.
Номер контакта | Название контакта | Описание контакта |
1 | VDD | Питание: от 2,0 В до 5,5 В |
2 | GND | Земля (общий провод) |
3 | SCL | Последовательный вход синхронизации: синхронизирует данные на SDA (используется для связи I2C) |
4 | SDA | Последовательные данные: передача и прием данных (используется для связи I2C) |
5 | ADDR | Выбор адреса I2C (ведомый) |
6 | ALERT/RDY | Цифровой компараторный выход или готовность к преобразованию |
7 | AIN0 | Дифференциальный канал 1: несимметричный вход канала 1 или отрицательный вход |
8 | AIN1 | Дифференциальный канал 1: несимметричный вход канала 2 или отрицательный вход |
9 | AIN2 | Дифференциальный канал 2: несимметричный вход канала 3 или положительный вход |
10 | AIN3 | Дифференциальный канал 2: несимметричный вход канала 4 или отрицательный вход |
Как видите, контакты модуля почти полностью повторяют контакты микросхемы.
Схема модуля ADS1115
Приведенная выше принципиальная схема представляет собой версию модуля ADS1115 от компании Adafruit.
Она следует типичному подключению для чипа ADS1115. Подтягивающие резисторы 10 кОм установлены на выводах I2C и Alert. Также между выводом VDD и GND установлен конденсатор емкостью 1 мкФ, который служит в качестве развязывающего конденсатора.
Взаимодействие модуля ADS1115 с Arduino
Схема подключения модуля АЦП ADS1115 к плате Arduino очень проста и приведена на следующем рисунке.
Подключите выводы VDD и GND модуля к выводам 5V и GND платы Arduino. Аналогично подключите вывод I2C ADS1115 (SDA и SCL) к выводу I2C (SDA и SCL) Arduino. Вывод ADDR чипа подтянут резистором 10K к земле. Это означает, что по умолчанию он подключен к GND.
Адрес I2C ADS1115 по умолчанию — 0x48. Чтобы использовать адреса 0x49, 0x4A или 0x4B, мы можем подключить вывод ADDR к VDD, SDA или SCL соответственно.
Вывод ALERT/READY модуля ADS1115 также остается неподключенным. Чтобы использовать этот вывод, вам необходимо подключить его к цифровому выводу Arduino. Этот вывод имеет два назначения. Во-первых, вы можете использовать его для преобразования, управляемого прерываниями, где он служит сигналом READY данных. И, во-вторых, вы можете использовать его с программируемым выходным компаратором для определения порогов преобразования. В этом случае он служит сигналом ALERT.
A0, A1, A2 и A3 — это 4 выхода АЦП датчика. Это означает, что к этому модулю можно подключить 4 аналоговых датчика. В этом примере можно использовать потенциометр для проверки показаний модуля. Поэтому подключите потенциометр согласно схемы выше.
Установка библиотеки Arduino ADS1115
Для модуля ADS1115 доступно несколько библиотек. При просмотре через менеджер библиотек вы увидите библиотеки от разных разработчиков.
Из всех доступных библиотек мы можем попробовать использовать одну из стабильных библиотек для нашего приложения. Это библиотека от RobTillaart. Вы можете загрузить данную библиотеку по следующей ссылке.
Исходный код программы
Используя базовый пример кода из папки примеров ADS1115, мы можем проверить работу датчика.
Скопируйте следующий код и загрузите его на плату Arduino Nano.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include "ADS1X15.h" ADS1115 ADS(0x48); void setup() { Serial.begin(115200); Serial.println(__FILE__); Serial.print("ADS1X15_LIB_VERSION: "); Serial.println(ADS1X15_LIB_VERSION); ADS.begin(); } void loop() { ADS.setGain(0); int16_t val_0 = ADS.readADC(0); int16_t val_1 = ADS.readADC(1); int16_t val_2 = ADS.readADC(2); int16_t val_3 = ADS.readADC(3); float f = ADS.toVoltage(2); // voltage factor Serial.print("\tAnalog0: "); Serial.print(val_0); Serial.print('\t'); Serial.println(val_0 * f, 3); Serial.print("\tAnalog1: "); Serial.print(val_1); Serial.print('\t'); Serial.println(val_1 * f, 3); Serial.print("\tAnalog2: "); Serial.print(val_2); Serial.print('\t'); Serial.println(val_2 * f, 3); Serial.print("\tAnalog3: "); Serial.print(val_3); Serial.print('\t'); Serial.println(val_3 * f, 3); Serial.println(); delay(1000); } |
После загрузки кода откройте Serial Monitor (окно монитора последовательной связи) - он покажет значение АЦП для всех 4 выходов вместе с выходным напряжением.
Максимальное наблюдаемое значение АЦП составляет 25550, а максимальное напряжение — 4,779 В.
Аналогично минимальное значение АЦП наиболее близко к 0 при минимальном напряжении 0 В.
Тестирование точности модуля ADS1115
Теперь давайте проверим точность модуля АЦП ADS1115. Для проверки точности мы можем использовать ЖК-дисплей, который может отображать значение АЦП и измеренные напряжения. Затем мы можем использовать мультиметр для измерения обнаруженного напряжения и сопоставления его с напряжением в последовательном мониторе.
Схема подключения ADS1115, Arduino и ЖК-дисплея
Подключите ЖК-дисплей к предыдущей цепи согласно следующей принципиальной схеме.
Подключите контакты SDA и SCL модуля к контактам A4 и A5 Arduino. Обеспечьте подключение 5 В VCC и GND к ЖК-дисплею, используя контакты 5 В и GND Arduino.
Исходный код программы
Для компиляции кода требуется библиотека I2C LCD. Затем вы можете скопировать следующий код и загрузить его на плату Arduino Nano.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include "ADS1X15.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); ADS1115 ADS(0x48); void setup() { Serial.begin(115200); Serial.println(__FILE__); Serial.print("ADS1X15_LIB_VERSION: "); Serial.println(ADS1X15_LIB_VERSION); lcd.init(); lcd.backlight(); ADS.begin(); } void loop() { ADS.setGain(0); int16_t val_0 = ADS.readADC(0); int16_t val_1 = ADS.readADC(1); int16_t val_2 = ADS.readADC(2); int16_t val_3 = ADS.readADC(3); float f = ADS.toVoltage(1); // voltage factor Serial.print("\tAnalog0: "); Serial.print(val_0); Serial.print('\t'); Serial.println(val_0 * f, 3); Serial.print("\tAnalog1: "); Serial.print(val_1); Serial.print('\t'); Serial.println(val_1 * f, 3); Serial.print("\tAnalog2: "); Serial.print(val_2); Serial.print('\t'); Serial.println(val_2 * f, 3); Serial.print("\tAnalog3: "); Serial.print(val_3); Serial.print('\t'); Serial.println(val_3 * f, 3); Serial.println(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ADC Val:"); lcd.print(val_0); lcd.setCursor(0, 1); lcd.print("Voltage:"); lcd.print(val_0 * f, 3); lcd.print("V"); delay(1000); } |
Результаты теста
После загрузки кода модуль готов к тестированию. Для этого нам понадобится мультиметр.
На ЖК-дисплее отобразится значение АЦП и измеренное напряжение.
ЖК-дисплей показывает значение 3,19 В, тогда как мультиметр показывает значение 3,2 В.
Максимальное выходное напряжение АЦП модуля составляет 4,742 В на ЖК-дисплее, а при проверке мультиметром оно равно 4,72 В.
Где-то около значения АЦП 427 напряжение, отображаемое на ЖК-дисплее, составляло 0,080 В , а мультиметр показывал 0,086 В.
Таким образом, можно сделать вывод, что 16-разрядный модуль АЦП ADS1115 имеет хорошую точность и может использоваться для многоцелевых приложений.
Согласно другим тестам, это устройство имеет заявленную типичную точность 0,01%, но его максимальная точность составляет 0,15%. Эта точность включает в себя все источники ошибок, такие как опорное напряжение, ошибка усиления, смещение и шум.