ADS1115 – описание и подключение 16-битного АЦП

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

На следующей картинке представлена схема модуля АЦП ADS1115, который был куплен здесь:
Схема модуля АЦП ADS1115
Всего в микросхеме имеется 4 входа (AIN0-AIN3), которые могут использоваться как два дифференциальных входа для измерения разности напряжения между входами, либо как 4 отдельных несимметричных входа, в этом случае напряжение измеряется между одним из входов и общим проводом. Необходимую комбинацию входов можно задавать с помощью встроенного мультиплексора, структура которого показана на картинке ниже:
ADS1115 - структурная схема мультиплексора
Как видно на вход внутреннего АЦП (AINp, AINn) в один момент времени может подключаться только одна комбинация входов. Для дифференциального входа, в случае, когда AINp>AINn, напряжение считается положительным, если AINn>AINp, то напряжение отрицательное. При использовании несимметричного входа измерение напряжения производится относительно общего провода, в этом случае измеряется только положительное напряжение. Микросхема ADS1115 не предназначена для измерения отрицательного напряжение относительно общего провода, на входы можно подавать только положительное напряжение.

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

PGA FS
2/3 ±6,144 В
1 ±4,096 В
2 ±2,048 В
4 ±1,024 В
8 ±0,512 В
16 ±0,256 В

Напряжение питания АЦП должно быть больше или равно диапазону измерения, это касается коэффициентов 2/3 и 1, которые позволяют измерять значения вплоть до величины напряжения питания АЦП. Если напряжение питания меньше предела измерения, выходной код АЦП (результат преобразования) не достигнет максимального значения для выбранного предела измерения. Наибольший предел FS=6,144 В (для коэффициента 2/3) отражает полную шкалу АЦП ADS1115, но это не означает что можно подавать такое значение, напряжение подаваемое на вход АЦП не должно превышать VDD+0,3 В. В случае максимального напряжения питания (5,5 В) измеряемое напряжение не должно превышать 5,5 В+0,3 В=5,8 В.

В следующей таблице представлено соответствие выходного кода АЦП в зависимости от входного напряжения:

Входной сигнал, Vin=AINp-AINn Значение кода АЦП Десятичное значение
≥FS 7FFFh 32767
+FS/(2 в 15 степени) 0001h 1
0 0 0
-FS/(2 в 15 степени) FFFFh 65535
≤-FS 8000h 32768

При измерении напряжения на несимметричном входе используется только половина шкалы выходного кода (0-7FFFh), так как в этом случае измеряется только положительное напряжение.

Для передачи данных ADS1115 использует стандартный широко распространенный интерфейс I2C. В этом интерфейсе для связи с устройством необходимо передать его адрес, длина которого составляет 7 бит. Адрес микросхемы задается с помощью вывода ADDR, в следующей таблице приведены адреса в зависимости от того куда подключается вывод ADDR:

Подключение вывода ADDR Адрес микросхемы ADS1115
GND 1001000
VDD 1001001
SDA 1001010
SCL 1001011

На модуле этот вывод подключен к общему проводу через резистор, соответственно адрес будет равен значению 1001000.

ADS1115 поддерживает стандартную скорость передачи до 100 Кбит/сек (100 кГц), высокую скорость до 400 Кбит/сек (400 кГц), а также ультравысокую скорость до 3,4 Мбит/сек (3,4 МГц). Из даташита: для активации ультравысокой скорости необходимо после условия “Старт”, вместо адресного байта, отправить байт со значением 00001xxx, при этом АЦП не выдает подтверждение на этот байт, после чего происходит переключение на ультравысокую скорость, действие которой заканчивается после условия “Стоп”. Для работы на скоростях до 400 Кбит/сек ничего предпринимать не надо.

АЦП имеет всего 4 внутренних регистра, все регистры 16-ти битные, соответственно для каждой сессии записи/чтения по интерфейсу I2C передается 2 информационных байта (кроме байта адреса регистра). Описание регистров приведено ниже в таблице:

Название Описание Адрес
Conversion register Регистр хранения результата преобразования 00000000
Config register Конфигурационный регистр 00000001
Lo_thresh register Регистр уставки, минимальное значение 00000010
Hi_thresh register Регистр уставки, максимальное значение 00000011

С помощью конфигурационного регистра осуществляется управление АЦП, описание регистра приведено ниже в таблице:

Бит Название бита Значение бита Описание
15 OS
Бит определяет состояние устройства
Бит может быть записан только в режиме пониженного потребления
Для записи
0 Нет эффекта
1 Начать преобразование, для режима одиночного преобразования (пониженное потребление)
Для чтения
0 Выполняется преобразование
1 Преобразование закончено
14-12 MUX
Настройка мультиплексора
000 AINp=AIN0 и AINn=AIN1 (умолч)
001 AINp=AIN0 и AINn=AIN3
010 AINp=AIN1 и AINn=AIN3
011 AINp=AIN2 и AINn=AIN3
100 AINp=AIN0 и AINn=GND
101 AINp=AIN1 и AINn=GND
110 AINp=AIN2 и AINn=GND
111 AINp=AIN3 и AINn=GND
11-9 PGA
Коэффициент усиления усилителя
000 FS=±6,144 В
001 FS=±4,096 В
010 FS=±2,048 В  (умолч.)
011 FS=±1,024 В
100 FS=±0,512 В
101 FS =±0,256 В
110 FS =±0,256 В
111 FS =±0,256 В
8 MODE
Режим работы
0 Непрерывное преобразование
1 Одиночное преобразование, режим пониженного потребления (умолч)
7-5 DR
Частота дискретизации
000 8 ГЦ
001 16 ГЦ
010 32 ГЦ
011 64 ГЦ
100 128 ГЦ (умолч)
101 250 ГЦ
110 475 ГЦ
111 860 ГЦ
4 COMP_MODE
Тип компаратора
0 Компаратор с гистерезисом (умолч)
1 Компаратор без гистерезиса
3 COMP_POL
Полярность компаратора
0 Низкий активный уровень (умолч)
1 Высокий активный уровень
2 COMP_LAT
Режим компаратора
0 Компаратор без “защелки” (умолч)
1 Компаратор с “защелкой”
1-0 COMP_QUE
Управление компаратором
00 Установка сигнала на выходе после одного преобразования
01 Установка сигнала на выходе после двух преобразований
10 Установка сигнала на выходе после четырех преобразований
11 Компаратор выключен (умолч)

АЦП может работать в 2-х режимах: непрерывное преобразование и одиночное. В случае одиночного преобразования, АЦП автоматически переходит в режим пониженного энергопотребления, после окончания преобразования.

Для запуска одиночного преобразования необходимо установить бит OS в 1 (бит может быть записан только в состоянии пониженного потребления). Этот же бит определяет статус преобразования, если бит равен 0, идет преобразование, 1 – преобразование закончено. Путем чтения конфигурационного регистра можно определить готовность результата преобразования.

Режим одиночного преобразования позволяет экономить энергию, например, вместо режима непрерывного преобразования с частотой дискретизации 8 Гц, можно установить максимальную частоту дискретизации 860 Гц, а со стороны управляющего устройства (микроконтроллера) запускать одиночные преобразования с частотой 8 Гц. Время преобразования АЦП для частоты дискретизации 860 Гц составит 1,2 мс, остальные 125-1,2=123,8 мс АЦП будет находиться в режиме пониженного энергопотребления, тем самым потребляя 1/100 часть энергии, от режима непрерывного преобразования.

ADS1115 имеет встроенный компаратор (вывод ALERT/RDY), который можно использовать в качестве оповещения для управляющего устройства (микроконтроллера). Компаратор используется совместно с двумя регистрами уставки (контролируемого параметра): Hi_thresh, Lo_thresh. В конфигурационном регистре можно настраивать тип компаратора (с гистерезисом и без него), активный логический уровень выхода компаратора (вывода ALERT/RDY), режим “защелки” (сохранение уровня сигнала на выходе).

Компаратор с гистерезисом срабатывает, если измеряемое напряжение превышает значение в регистре Hi_thresh, и возвращается в исходное состояние, когда величина напряжение меньше значения в регистре Lo_thresh. Под словом “срабатывает” следует понимать установку активного логического уровня, который зависит от бита COMP_POL.

Компаратор без гистерезиса срабатывает в случае, когда измеряемое напряжение выходит за рамки, установленные в регистрах Hi_thresh, Lo_thresh.

Для правильной работы компаратора значение уставки в регистре Hi_thresh (по умолчанию 7FFFh) должно быть больше значения в регистре Lo_thresh (по умолчанию 8000h). Кроме этого вывод компаратора ALERT/RDY необходимо подтянуть через резистор к линии питания, на модуле это уже сделано.

Ниже представлена диаграмма работы компаратора:
Диаграмма компаратора ADS1115
Если включен режим “защелки” (COMP_LAT=1), то после срабатывания компаратора, уровень сигнала на выходе сохраняется и не меняется, то есть запоминается. Для снятия этого условия и дальнейшей работы компаратора необходимо прочитать результат преобразования из регистра Conversion register, или послать специальную команду предупреждения SMBus (00011001). Получив команду АЦП должен выдать ответ (ALERT) в виде своего адреса, после чего компаратор продолжает работу. Честно говоря, я не вникал в подробности этой команды, нашел только информацию, что она позволяет определить неисправный АЦП.

С помощью бита COMP_QUE можно настроить компаратор на срабатывание после одного, двух, четырех преобразований, или выключить его.

Еще одной полезной функцией компаратора является оповещение по окончании преобразования, для включения которого необходимо установить старший бит регистра Hi_thresh в 1, а старший бит регистра Lo_thresh в 0. В этом случае бит активного уровня COMP_POL, а также бит управления компаратором COMP_QUE продолжают действовать, биты COMP_MODE и COMP_LAT не влияют на выход компаратора.

Если функция оповещения включена, то в режиме непрерывного преобразования, после окончания каждого измерения на выходе компаратора появляется импульс длительностью 8 мкс. В режиме одиночного преобразования на выходе компаратора устанавливается низкий логический уровень по окончании преобразования, если бит COMP_POL установлен в 0. Тем самым эту функцию удобно использовать в качестве прерывания для управляющего устройства, чтобы не опрашивать постоянно бит OS, а сразу считывать результат преобразования.

Я подключил АЦП ADS1115 к микроконтроллеру PIC16F628A, для отображения величины измеряемого напряжения использовал цифровой индикатор на драйвере MAX7219, схема на картинке ниже:
ADS1115 схема подключения к МК
На стороне микроконтроллера интерфейс I2C реализован программно. Светодиод HL1 загорается в случае возникновения ошибки в процессе передачи данных по интерфейсу I2C, светодиод HL2 светится во время процесса преобразования АЦП. Напряжение на вход АЦП (AIN0) подается через переменный резистор R2. Используется режим одиночного преобразования с частотой дискретизации 860 Гц, с включенной функцией оповещения по окончании преобразования, измерения производятся каждые 0,6 секунд.
Код программы приведен ниже:

Сначала в регистр АЦП Hi-tresh, передается значение 0xFFFF, а в регистр Lo_thresh значение 0x0000, тем самым активируется функция компаратора об оповещении после окончания преобразования. Далее настраивается конфигурационный регистр (Config register) с одновременным запуском преобразования. После чего выполняется опрос вывода компаратора (ALERT/RDY) на факт окончания преобразования. На время выполнения преобразования включается светодиод HL2.

Можно конечно обойтись без компаратора с оповещением, но тогда придется постоянно считывать конфигурационный регистр и проверять бит OS, чтобы определить конец преобразования. Я считаю применение компаратора более удобным решением.

После срабатывания компаратора, считываем результат преобразования из регистра АЦП Conversion register. Полученный результат делим на 16, чтобы получить значение напряжения в милливольтах, данное действие равносильно уменьшению разрешения с 16 до 12 бит. Далее результат деления выводим на цифровой индикатор, после паузы в 0,6 секунд повторяем весь цикл, начиная с записи конфигурационного регистра АЦП, тем самым запуская новое преобразование. Если установлен другой предел измерения, то делить надо на другое число: для предела FS=±4,096В делим результат преобразования на 8, для FS=±2,048В на 16, для FS=±1,024В соответственно на 32, и так далее. Для наибольшего предела FS=±6,144В в код программы нужно добавить арифметические операции, так как простым делением не обойтись, готовый исходник и прошивка для наибольшего предела приведены в конце статьи.

Из-за малого энергопотребления ADS1115 можно использовать в устройствах с автономным питанием, благодаря простому управлению и гибким настройкам этот АЦП можно встраивать в различные радиоэлектронные конструкции. У рассматриваемого АЦП существуют младшие версии – ADS1113 и ADS1114, некоторые модули и функции в этих АЦП урезаны.

Модуль 16-битного АЦП ADS1115ADS1115 - макетная плата

Ниже представлен видеоролик демонстрирующий работу АЦП ADS1115:

Прошивка МК и исходник для подключения АЦП ADS1115 (предел измерения напряжения 2,048В)
Прошивка МК и исходник АЦП ADS1115 (предел измерения напряжения 6,144В)

Оцените статью
Добавить комментарий

  1. Михаил

    А какое минимальное напряжение он может измерить? Подойдет ли для измерения термопары хромель-копель? Там нужны 0,06мВ на градус!

    Ответить
    1. admin автор

      Для коэффициента усиления PGA=16 предел измеряемого напряжения равен ±0,256 В, при этом минимальное измеряемое напряжение составит 0,256/32768 = 0,0078 мВ, в случае вашей термопары погрешность составит примерно 1 градус, в пределах входного напряжения от 0 до 0,256 В.

      Ответить
  2. Александр

    День добрый.
    Спасибо за статью.

    Возник вопрос, на видео у Вас шум ADC1115 составляет до 2 единиц. У меня шум на потенциометре до 50 единиц от встроенного DC ардуины. Вы пользуетесь лабораторным блоком питания или указанные на схеме конденсаторы С1, С2 решают проблему?

    Ответить
    1. admin автор

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

      Ну а вообще шум может зависеть от качества переменного резистора, а также качества соединений (проводов) и контактов. Сглаживающие конденсаторы имеют значение, но в данном примере C1, C2 влияют слабо, так как на выходе блока питания уже стоит конденсатор большой емкости.

      Ответить
      1. Александр

        Спасибо за ответ.

        Пока питаю от встроенного DC, используется китайский резистор, соединения как у Вас на видео на макетке.

        Сейчас попробую проверить на регулируемом блоке питания (у меня простой китаец) и промышленный датчик линейного перемещения, увы конденсаторов пока нет под рукой.

        В проекте планируется использование импульсного блока питания на 5V, или DC-DC 24V-5V, пайка, колодки и промышленная резистивная линейка.

        Ответить
  3. Александр

    Помогло, хоть не идеально, но уже 10 единиц шума. Когда все будет спаяно, скручено, надеюсь достигну Вашего результата. Да и конденсаторы установлю тоже.

    Большое спасибо.

    Ответить
    1. admin автор

      Отлично, рад был помочь.

      Ответить
      1. Александр

        Длительный тест, увы не радуют. Обычно около 10 единиц, но иногда проскакивает 50.

        Получается 50 единиц, с настройками 2/3x gain +/- 6.144V что-то около 9.5mV, для меня это много. Но тут надо забирать осциллограф с работы и читать документацию, раньше выходных не доберусь.

        Ответить
  4. Артур

    По какой формуле преобразуются показатели АЦП в напряжение?

    Ответить
    1. admin автор

      Для случая AINp > AINn получаем Vизм=(4096*Xацп) / (PGA*32768), где Xацп – код ацп в десятичной форме в пределах от 0 до 32767, PGA – коэфф. усиления.

      Для случая AINp < AINn получаем Vизм=(4096*(65536-Xацп)) / (PGA*32768), Xацп - код ацп в десятичной форме в пределах от 32768 до 65535.

      Ответить
  5. releyshic

    А как измерять не только положительные напряжения? Есть дешевый аналог с такой возможностью?
    Или здесь чтото схемное можно придумать? инвертирование например и отдельный пин на контроллер (чтобы понимать что с минуса пришло)?

    Ответить
    1. releyshic

      Сообщите на почту ,чтоб знал что ответили

      Ответить
  6. миша

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

    пс: ацп-шки нету, она в пути, вот сижу код пишу

    Ответить
    1. admin автор

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

      Ответить
  7. Тимур

    Здравствуйте.
    Хотел бы спросить, сколько суммарно занимает процесс преобразования АЦП и отправки на МК, если не будем учитывать время реакции МК? Пока АЦП едет, так бы сам посчитал.
    Спасибо

    Ответить
    1. Тимур

      Забыл добавить, в режиме непрерывного преобразования на 860Гц

      Ответить
  8. Александр

    Здравствуйте!
    > Микросхема ADS1115 не предназначена для измерения отрицательного напряжение относительно общего провода, на входы можно подавать только положительное напряжение.

    В этом предложении речь идет только о режиме несимметричного входа, или о дифференциальном тоже? Другими словами, можно ли в режиме дифференциального входа изменить напряжение, когда на одном из входов положительное относительно общего, а на другом – отрицательное отностительного общего?

    Ответить
    1. admin автор

      Здравствуйте, это верно для всех режимов, на входе микросхемы стоят защитные диоды, диод подключенный между входом и общим проводом, просто зашунтирует отрицательное напряжение.

      Ответить
      1. Александр

        Ясно. Спасибо.

        Ответить
  9. Андрей

    Здравствуйте. Способен ли ADS1115 выйти из строя, если напряжение на одном из входов превысит установленный диапазон? Например, если я выставлю коэффициент 16 (±0,256 В), а на входе окажется напряжение питания (+3,3В).

    Ответить
    1. Тимур

      У него на входе два диода Шоттки – один подтянут к питанию, второй к земле. Если вдруг превысите диапазон, то тут два варианта – если есть ограничительный резистор по входу или вход подключен к высокоимпедансному источнику, то АЦП просто уйдет в зашкал и все. Если нет резистора и источник низкоимпедансный, то сначала сгорит диод, а потом весь АЦП.

      Ответить
  10. Евгений

    Существует ли возможность изменять коэффициент усиления при опросе разных входов. К примеру на шунте максимальный синал 200мв, а на делителе 400мв.

    Ответить
  11. Евгений

    Не 400мв, а 4000мв

    Ответить
  12. Igor

    Постоянно считываю с ADS1115 значения с обнуленными 4-мя младшими разрядами. Т.е. наибольшее значение смог считать только 32752. Ну и далее – 32736, 32720. В чем дело, не могу понять. Ардуино мега 2560

    Код инициализации:

    Wire.begin();
    Wire.beginTransmission(0x48);
    Wire.write(0x01);
    Wire.write(0x40); // Wire.write(0x40);
    Wire.write(0xA3); // Wire.write(0x83);
    Wire.endTransmission();
    Wire.setClock(400000);

    Код считывания:

    Wire.beginTransmission(0x48);
    Wire.write(0x00);
    Wire.endTransmission();
    Wire.requestFrom(0x48, 2);
    ReadValue[ix] = ((Wire.read() << 8) | Wire.read());

    Причем пробовал и через Adafruit библиотеку – то же самое.

    Ответить
  13. Александр

    Получается, что ADS1115 отличается от ADS1015 только символически. Младшие 4 бита всегда равны 0. И вместо 16-битного ADS1115 мы имеем 12-битный ADS1115, у которого только старшие 12 бит значащие, а младшие 4 бита – просто добавлены для “псевдозума”. Так ли это, или есть способ включить младшие 4 бита в работу? Выведите HEX, и вы заметите, что младший разряд всегда “0”. Реально выходит дискретность 3 мВ на пределе 256 мВ.

    Ответить
  14. Александр

    Исправление: Реально выходит дискретность 3 мВ на пределе 6.144V, например.

    Ответить
  15. иван

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

    Ответить
  16. Евгений

    Подскажите пожалуйста при измерении напряжения на 4 каналах всё работает отлично но если я на 4 канала вешаю 4 датчика тока Холла всё измеряется в принципе нормально но со временем начинает
    Сдвигаться 0 либо в одну сторону либо в другую сторону изменяя показания как с этим можно бороться? То есть если через токовый Шунт не течёт ток с начала показания держится нулевые всё отлично но через какой-то период времени происходит сдвиг либо в – либо в + показаний что самое интересное при измерении напряжения на датчиках тока напряжения стоит ровно 2.500 не двигая ни в одну не в другую сторону а acp значение двигает.

    Ответить