Ina 219 измерение тока

Содержание
  1. Обзор модуля тока и напряжения INA219 (CJMCU-219)
  2. Технические параметры
  3. Обзор модуля модуле INA219
  4. Подключение INA219 к Arduino
  5. INA219 — датчик тока и напряжения (Arduino)
  6. Цифровой датчик INA219 для измерения потребляемого тока, напряжения и мощности, емкости аккумуляторов
  7. INA219 — Датчик тока и напряжения (вольтамперметр) с протоколом связи I²C
  8. Характеристики INA219
  9. Модуль Zero CJMCU-219 на базе INA219
  10. Принципиальная схема Zero CJMCU-219/INA219
  11. Распиновка Zero CJMCU-219/INA219
  12. Система установки I2C адреса на INA219
  13. Описание регистров INA219
  14. Как подключить датчик тока к Arduino
  15. 1 Описание датчикатока ACS712
  16. 2 Подключение датчика тока ACS712 к Arduino
  17. 3 Чтение показаний датчика тока ACS712с помощью Arduino
  18. 4 Описание датчика тока,напряжения и мощности INA219
  19. 5 Подключение датчика тока и напряжения INA219 к Arduino
  20. 6 Как читать данные сдатчика тока и напряжения INA219
  21. Регистр Shunt Voltage (адрес 0x01) датчика INA219
  22. Регистр Bus Voltage (адрес 0x02) датчика INA219
  23. Регистр Current Register (адрес 0x04) датчика INA219
  24. Регистр Power (адрес 0x03) датчика INA219
  25. 7 Подключение трёхканального датчика тока и напряжения INA3221 к Arduino

Обзор модуля тока и напряжения INA219 (CJMCU-219)

Автор: Сергей · Опубликовано 18.07.2020 · Обновлено 17.07.2020

Сегодня расскажу о модуле INA219 с помощью которого можно одновременно измерить напряжение до 26 В и ток до 3.2 А c высокой точностью. Данный модуль можно использовать в лабораторном блоке питания, измерения мощности и так далее.

Технические параметры

► Напряжение питания: 3 — 5 В
► Максимальное измеряемое напряжение: 26 В
► Максимальная измеряемая сила тока: 3.2 А
► Рабочая температура: -40 … 85° C
► Дрейф в рабочем температурном диапазоне: 100 мкВ
► Разрешение измерителя: 12 бит
► Интерфейс: I2C
► Скорость интерфейса: 3.4 МГц
► Фильтрация: х128 отсчетов

Обзор модуля модуле INA219

Модуль основан на микросхеме INA219, которая собрана в корпусе SOT23. Измерение тока осуществляется с помощью резистора (шунта)на 0.1 Ом с точностью 1% (выводы Vin+ и Vin-), по сути микросхема измеряет падение напряжение на шунте, а потом по закону ома рассчитывает ток (I) = напряжение (V) / сопротивление (R).
Максимальное падение напряжения, которое может измерить INA219, составляет 320 мВ или 0,32 В. Следовательно, максимальный ток, который INA219 может измерить с резистором по умолчанию, составляет 0,32 В / 0,1 Ом = 3,2 А. Если вам необходимо измерить более 3,2 А можно заменить шунт 0,0,5 Ом на более низкое значение. Шунт 0,01 Ом позволит проводить измерения тока 6.4 А.

Назначение контактов:
VCC — вывод питания микросхемы INA219, 3 — 5 В;
GND — заземляющий вывод питания микросхемы INA219, 3 — 5 В;
SCL — вывод I2C, подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.
SDA — вывод данных I2C подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.
Vin+
Vin-

Смена адреса I2C:
Адрес по умолчанию адрес модуля установлен 0×40, который легко можно изменить с помощью перемычки в правом углу, для этого соедините перемычку припоем, чтобы указать двоичное число «1».

Принципиальная схема модуля INA219 показана на рисунке ниже.

Подключение INA219 к Arduino

Необходимые детали:
► Arduino UNO x 1 шт.
► Модуля тока и напряжения INA219 x 1 шт.
► Провода DuPont M-F, 20 см x 1 шт.
► Аккумулятор LiitoKala HG2, 18650, 3000 mAh x 1 шт.
► Коллекторный двигатель x 2 шт.

Описание:
В этом примере покажу как подключить модуля INA219 к Arduino. В качестве нагрузки будем использовать обычный коллекторный двигатель, который подключим к литий-ионному аккумулятору.

Подключение.
Сначала подключить питание, выводы +5 В и GND (Arduino) подключаем к выводам Vcc и GND (INA219), далее подключаем интерфейс I2C, выводы A4 и A5 (Arduino) подключаем к выводам SDA и SCL (INA219). Теперь осталось подключить нагрузку, вывод Vin+ (INA219) подключаем к плюсу аккумулятору, вывод Vin- (INA219) подключаем к одному из выводом мотора. Второй вывод мотора подключаем к GND arduino и аккумулятора.

Установка библиотеки:
Для работы скетча необходимо две библиотеки «Adafruit INA219» и «Adafruit BusIO Register«, необходимо дополнительно скачать с «Менеджера библиотек«.

В строке поиска вводим «INA219» находим библиотеку «Adafruit INA219» и устанавливаем ее.

Далее, в строке поиска вводим «Adafruit BusIO» находим библиотеку «Adafruit BusIO Register и устанавливаем ее.

Программа:
Теперь можно приступить к скетчу, скачиваем или копируем его в среду разработки Arduino IDE.

Источник

INA219 — датчик тока и напряжения (Arduino)

Цифровой датчик тока и напряжения INA219 позволяет с достаточно большой точностью измерять постоянный ток в прямом и обратном направлении, напряжение от 0 до 26 В. Использование шины I2C делает датчик удобным в использовании совместно с Arduino, так же к шине I2C можно подключить до 4-х таких датчиков.

Основным элементом на плате модуля является микросхема INA219. Микросхема измеряет падение напряжения на шунте (резисторе с малым сопротивлением на выводах Vin+ и Vin-). На плате установлен шунт с сопротивлением 0.1 Ом.

Характеристики датчика тока и напряжения INA219:

  • Тип модуля: INA219
  • Рабочая температура: от -40 °C до 85 °C
  • Дрейф в рабочем температурном диапазоне: 100 мкВ
  • Максимальный измеряемый ток: 3,2 А
  • Точность измерения тока: 0,8 мА
  • Точность измерений по току и напряжению: 1 %
  • Разрешение измерителя: 12-бит
  • Интерфейс: I2C
  • Скорость интерфейса: 3,4 МГц
  • Максимальное измеряемое напряжение: ± 26 В
  • Напряжение питания: от 3 В до 5 В

Ниже показан скетч работы датчика с выводом информации на LCD дисплей 1602, данный пример можно использовать как блок измерения и индикации для источника питания. На плате модуля находятся две группы адресных перемычек, по умолчанию установлен адрес 0х40. Если замкнуть перемычку А0, то адрес поменяется на 0х41, если замкнуть перемычку А1, то адрес поменяется на 0х44, при замыкании двух перемычек адрес поменяется на 0х45.

Источник

Цифровой датчик INA219 для измерения потребляемого тока, напряжения и мощности, емкости аккумуляторов

Основой модуля индикации является датчик напряжения и тока типа INA219 приобретенный на Алиэкспресс. Эта платка рассчитана на измерение значений напряжения до 26 В и значений тока до 3,2 А. Все измеренные параметры по шине I2C передаются на Ардуино. Этот датчик определяет сразу несколько параметров: мощность и емкость в мА\ч, ток и напряжение.

Характеристики датчика INA219.
1) Пределы измеряемых напряжений: от 0 до 26 В;
2) Напряжение питания датчика: от 3.0 до 5.5 В;
3) Параметры по измеряемому току –максимум 3,2А ;
4) Точность измерений значений напряжения и тока до 1%.

Датчик INA219 не требует дополнительной обвязки, достаточно только подать питание на сам датчик, подключить силовой плюсовой и минусовой провода и соединить по интерфейсу I2C с Ардуино. Использовать модуль можно в схемах где необходимо контролировать данные в ходе зарядки и разряда аккумуляторов. Также можно применить датчик INA219 в приборах питания в качестве блока контроля напряжения и тока подключенных потребителей.

В основу прибора будут входить собственно сам датчик INA219, плата Arduino (можно применить любой вариант- Uno, Nano, Pro Mini), двухстрочный экран LCD1602 с платой интерфейса I2C, модуль реле на 5В.



Перечень инструментов и материалов.
-плата Ардуино Nano-1шт;
-датчик INA219-1шт;
-двухстрочный дисплей LCD1602с платой интерфейса I2C-1шт;
-модуль реле на 5вольт-1шт;
-зарядное устройство от телефона для питания схемы-1шт;
-соединительные провода;
-паяльник;
-тестер;
пластмассовая распредкоробка -1шт;
-понижающая плата 5А -1шт.

Шаг первый. Сборка схемы блока индикациии на датчике INA219.

Собираем схему устройства с помощью проводов с разъемами. Входные и выходные силовые провода, через которые будет питаться нагрузка, берем сечением 1-1,5 кв,мм. Питание модулей схемы будет осуществляться от зарядное устройства от телефона через USB разъем платы Ардуино Nano, а далее от контактов +5 и Gnd. Связь датчика INA219 с Ардуино по интерфейсу I2C проходит по выводам CLK и SDA. Адрес датчика INA219 можно при необходимости изменить перепайкой контактов А1 и А0. Очень аккуратно и внимательно собирайте схему-датчик своими контактами V+, V- должен быть включен последовательно нагрузке, также INA219 не любит переполюсовок. Не соблюдая этих требований можно легко его вывести из строя!

В корпусе распредкоробки вырезаем окно для дисплея LCD1602, внизу делаем отверстие для USB разъема платы Ардуино.



Обычно прибор сразу начинает работать. В мониторе порта можно увидеть все данные измерений.
Фото монитор порта

Шаг третий. Проверка работоспособности устройства.
Без нагрузки прибор показывает текущие значения напряжения. Подключаем нагрузку и на дисплее видим значения напряжения, тока, потребленной мощности и емкости.Если надо проводить зарядку литиевых аккумуляторов то необходимо использовать плату CC CV. Она даст возможность регулировать как напряжение так и ток заряда. . Эту платку можно разместить вместе с другими. Тогда в этом случае получится полноценное устройство для зарядки таких аккумуляторов.

Чтобы определить емкость аккумулятора нужно подключить его в качестве источника перед INA219, а на выходной провод подключить нагрузку(например автолампу). В скетче устанавливается нижний предел отключения нагрузки 2,8 Вольт-значение надо подобрать по даташиту ваших аккумуляторов. При достижении напряжения 2,8 Вольта реле отключит нагрузку и на дисплее увидим реальную емкость аккумулятора в в миллиамперчасах. Чтобы опять включить прибор в работу надо сбросить питание 5 Вольт на Ардуино или установить кнопку сброса на контакт RST платы Ардуино и GND.

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

Подробнее можно посмотреть в видео

Читателям сайта всего наилучшего и в творчестве и в жизни !

Источник

INA219 — Датчик тока и напряжения (вольтамперметр) с протоколом связи I²C

INA219 DC Current Monitor — цифровой датчик для измерения потребляемого тока, напряжения и мощности на базе микросхемы INA219B. Выходной интерфейс модуля — шина I2C, что очень удобно при работе с устройствами на базе Arduino, Raspberry Pi, Orange PI, Banana Pi и т.п.

Модуль имеет высокую точность измерения тока и напряжения, нулевой дрейф, при этом обладая компактными размерами и не требует дополнительной обвязки. Также важное преимущество датчика INA219 заключается в том, что измерительный шунт установлен в разрыв «+» питания, а не «-«, так как в таком случае не возникает нежелательный в электронике сдвиг потенциалов между «землей» нескольких устройств, объединенных в общую схему.

I2C адрес микросхемы INA219 можно изменить запайкой перемычек А0 и А1. Возможно четыре различных комбинации установки адресных перемычек, соответственно на одну шину I2C можно подключать до 4-х таких модулей. Для увеличения точности измерений предусмотрен регистр калибровки. Напряжение в микросхеме измеряет аналого-цифровой преобразователь (АЦП) и может работать в 9-ти, 10-ти, 11-ти, 12-ти битных режимах. Настраивается режим работы микросхемы изменением регистра конфигурации.

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

Характеристики INA219

  • Напряжение питания: от 3.0 до 5.5 В;
  • Разрядность АЦП: 12 бит;
  • Выходной интерфейс: I2C;
  • Скорость интерфейса: 3.4 МГц;
  • Диапазон измеряемых напряжений: от 0 до 26 В;
  • Максимальный измеряемый ток: от -3.2 A до 3.2 A;
  • Дискретность при измерении тока: 0.8 мА;
  • Точность измерений по току и напряжению: 1 %;
  • Диапазон рабочих температур: от -40 до +125 °C;
  • Дрейв в рабочем температурном диапазоне: 100 мкВ;
  • Калибровка: калибровочный регистр;
  • Внутренние данные: измеренный ток и мощность;
  • Фильтрация: х128 отсчетов.

Модуль Zero CJMCU-219 на базе INA219

Модуль Zero CJMCU-219 — это законченный модуль, который можно подключать к различным устройствам, не только к платформе Arduino, но и к Raspberry Pi, Orange PI, Banana Pi и др.. Основным элементом на плате является микросхема INA219. Несмотря на маленький размер и малое количество выводов, INA219 обладает большими возможностями. Микросхема измеряет падение напряжения на шунте (резисторе с малым сопротивлением на выводах Vin+ и Vin-). На плате установлен шунт с сопротивлением 0.1 Ом.

Принципиальная схема Zero CJMCU-219/INA219

Модуль Zero CJMCU-219 имеет минимальный набор компонентов для правильной работы датчика INA219.

Распиновка Zero CJMCU-219/INA219

Плата имеет 6+2 вывода, 2 из 6 дублируют Vin+ и Vin-.

Вывод Описание
Vcc Питание модуля от 3.0 до 5.5 В
Gnd Земля
Scl Линия тактирования (Serial CLock)
Sda Линия данных (Serial Data)
Vin- Выход напряжения от источника питания через шунт. Напряжение измеряется от этого вывода относительно земли
Vin+ Вход напряжения от источника питания
A0 Выбор I2C адреса
A1 Выбор I2C адреса

Система установки I2C адреса на INA219

Если используется более одной платы INA219, каждой плате должен быть присвоен уникальный адрес. Это делается с помощью адресных перемычек на правом краю платы. Базовый адрес I2C для каждой платы равен 0x40. Бинарный адрес, который вы программируете с помощью перемычек адресов, добавляется к базовому адресу I2C.

A1 A0 Адрес (bin) Адрес (hex)
GND GND 1000000 0x40
GND VS+ 1000001 0x41
GND SDA 1000010 0x42
GND SCL 1000011 0x43
VS+ GND 1000100 0x44
VS+ VS+ 1000101 0x45
VS+ SDA 1000110 0x46
VS+ SCL 1000111 0x47
SDA GND 1001000 0x48
SDA VS+ 1001001 0x49
SDA SDA 1001010 0x4A
SDA SCL 1001011 0x4B
SCL GND 1001100 0x4C
SCL VS+ 1001101 0x4D
SCL SDA 1001110 0x4E
SCL SCL 1001111 0x4F

Для изменения адреса шины I2C платы микросхемы INA219 нужно запаять/отпаять перемычки на A0 и A1. Определить текущий адрес можно с помощью I2cScanner от Arduino.

Описание регистров INA219

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

Содержимое регистра обновляется 4 мкс после завершения команды записи. Следовательно, требуется задержка в 4 мкс между завершением записи в заданный регистр и последующим считыванием этого регистра (без изменения указателя) при использовании частот SCL, превышающих 1 МГц.

Источник

Как подключить датчик тока к Arduino

Для проекта нам понадобятся:

Датчики тока, как следует из их названия, служат для измерения силы тока. Существуют датчики, которые основаны на различных физических эффектах и имеют различные особенности. В частности, рассматриваемый датчик ACS712 основан на эффекте Холла, датчик INA219 имеет в своём составе аналого-цифровой преобразователь (АЦП ), а датчик INA3221 – трёхканальный. Рассмотрим их по порядку.

Содержание:

1 Описание датчикатока ACS712

Датчик тока ACS712 – это датчик, который основан на эффекте Холла. Эффект Холла заключается в том, что когда через проводник, помещённый в магнитное поле, протекает электрический ток, в проводнике возникает напряжение. Это напряжение и служит индикатором силы тока: оно линейно зависит от силы тока. Ещё оно имеет небольшую зависимость от температуры окружающей среды и поддаётся влиянию внешних магнитных полей. Так, например, на графике ниже показана зависимость напряжения на выходе датчика ACS712 от силы протекающего тока (для одной из разновидностей датчика, об этом чуть ниже) при различных температурах:

Зависимость напряжения на выходе датчика ACS712 от силы тока

Модуль с датчиком ACS712 может выглядеть, например, так:

Модуль с датчиком тока ACS712 и схема подключения

Датчик ACS712 имеет следующие характеристики:

  • работает с постоянным и переменным током;
  • ток потребления – до 13 мА;
  • температура эксплуатации -40…+85 °C.

Существуют несколько разновидностей датчика ACS712, которые отличаются величиной измеряемого тока. Так, существуют разновидности с максимально измеряемым током 5, 20 и 30 А. Широкий диапазон измеряемых значений тока можно отнести к существенным преимуществам датчика ACS712. Перечисленные модификации имеют чувствительность 185, 100 и 66 мВ/А соответственно.

2 Подключение датчика тока ACS712 к Arduino

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

Вывод датчика ACS712 Назначение
VCC Питание, 5 В
GND Земля
OUT Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока
IP+ Вывод 1 для подачи измеряемого тока
IP- Вывод 2 для подачи измеряемого тока

Выводы IP+ и IP- как раз и есть тот разрыв цепи, через который нужно пропустить интересующий ток. Если перепутать полярность, то измерения будут с обратным знаком.

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

Таким образом, для подключения датчика ACS712 к плате Arduino используются 3 провода:

Схема подключения датчика тока ACS712 к Arduino

Выход сенсора VOUT подключим к любому аналоговому выводу Arduino, например, A0. В качестве нагрузки будем использовать двигатель постоянного тока.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока

Либо вместо нагрузки можно использовать мощную лампу накаливания. Либо любую другую нагрузку.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания

Питать нагрузку будем от лабораторного источника тока, на котором можно менять напряжение и ток.

3 Чтение показаний датчика тока ACS712с помощью Arduino

В скетче будем постоянно читать значение с порта A0 и выводить в монитор последовательных данных. Напомню, АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. Подробнее здесь. Это означает, что с аналогового порта могут приходить значения от 0 до 2 10 = 1024 для 10-разрядного АЦП . Будем считать, что у нас датчик тока, диапазон измерений которого от -5 А до +5 А, а чувствительность 185 мВ/А.

Пояснение принципа вычисления силы тока

На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта, добавим в скетч примитивную калибровку. Калибровка будет заключаться в том, что некоторое количество раз прочитаем значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредним его. Естественно, нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.

Скетч для измерения постоянного тока датчиком ACS712 (разворачивается)

Загрузим скетч и плавно начнём поднимать напряжение и ток на нагрузке. Какое-то время подождём, а затем начнём уменьшать ток. В результате получим примерно такую картинку:

Вывод тока датчика ACS712 в монитор последовательного порта и его график

Как видно, аналоговый сигнал постоянно «прыгает». Чтобы этого избежать, следует добавить в скетч сглаживание. Для этого будем проводить подряд несколько измерений, а затем брать среднее арифметическое от них в качестве действительного значения. Заодно совместим начальную калибровку, т.к. она выполняется точно так же. Вот как изменится в результате скетч:

Скетч для измерения постоянного тока датчиком ACS712 со сглаживанием

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

В результате выполнения данного скетча картинка получается гораздо более приятная:

Сглаженный график тока, измеренного датчиком ACS712

Тот же самый принцип заложен в библиотеки для Arduino, которые оперируют с датчиком тока ACS712. Например, вот эта библиотека Troyka Current.

По результату эксперимента получается, что датчик ACS712 очень простой, но при этом довольно не точный. Гораздо точнее датчик тока, который мы рассмотрим в следующем разделе.

4 Описание датчика тока,напряжения и мощности INA219

Датчик INA219 – цифровой датчик тока, напряжения и мощности. Он позволяет измерять напряжения от 0 до 26 вольт и ток от 0 до 3,2 ампер. Питается датчик напряжением от 3 до 5,5 В. Существуют модули, полностью готовые к подключению к Arduino. Один из таких модулей GY-219:

Модуль GY-219 с датчиком тока INA219: назначение выводов и частей

Датчик INA219 выполняется в двух разновидностях: A и B. Последняя отличается повышенной точностью и меньшей погрешностью. На фото ниже как раз модификация INA219B.

Модуль GY-219 с датчиком тока INA219

Для конфигурирования датчика INA219 и для считывания показаний с него используется последовательный интерфейс I2C. Причём адрес на шине можно задать с помощью перемычек A0 и A1 на модуле. Допустимые адреса:

  • 0x40 (без перемычек);
  • 0x41 (с перемычкой A0);
  • 0x44 (с перемычкой A1);
  • 0x45 (установлены обе перемычки).

Соответственно, на одной шине IIC можно иметь до 4-х таких датчиков, подключённых одновременно.

5 Подключение датчика тока и напряжения INA219 к Arduino

Для начала пойдём простым путём: скачаем готовую библиотеку, загрузим в Arduino и посмотрим на результат. Существует несколько библиотек для работы с нашим датчиком. Предлагаю воспользоваться вот этой популярной библиотекой для INA219 от Adafruit. Скачаем её, установим стандартным образом и загрузим в Arduino скетч из примеров getcurrent.

Если скетч не компилируется, а в сообщениях об ошибках присутствуют какие-то недостающие компоненты (например, Adafruit_I2CDevice.h или Adafruit_BusIO_Register.h, то необходимо доустановить их. Проще всего это сделать так. Для этого способа требуется подключение к интернету на компьютере, где запущена среда разработки. Открыть в среде Arduino IDE менеджер библиотек: в меню Tools Manage Libraries…. Откроется окно Library Manager. В поле поиска следует ввести adafruit busio. Когда библиотека будет обнаружена и покажется в списке, нажать кнопку Install.

Установка недостающих библиотек через менеджер библиотек Arduino IDE

Подключим модуль GY-219 к Arduino по следующей схеме. SDA и SCL датчика можно подключить как к аналоговым входам A4 и A5 Arduino, так и к специально выделенным портам SDA и SCL (если они есть на вашей плате).

Схема подключения датчика INA219 к Arduino

В качестве нагрузки может быть любой источник, например, электромотор, лампа или просто мощный резистор. У меня это 5 соединённых параллельно 5-ваттных 16-омных резисторов. В качестве источника питания также может выступать любой из имеющихся у вас источников. Я буду использовать лабораторный источник питания.

Датчик INA219 подключён к Arduino

В результате выполнения скетча получится следующий вывод:

Результат работы скетча «GetCurrent» для датчика тока INA219

Отлично! Всё работает! Как говорится, бери – и пользуйся.

Данная библиотека позволяет также проводить калибровку датчика INA219 при необходимости. Подробности – в описании библиотеки и в самих исходниках (в файле Adafruit_INA219.cpp библиотеки даётся большое число пояснений).

6 Как читать данные сдатчика тока и напряжения INA219

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

Осциллограмма чтения регистров датчика INA219

Чтобы понять, что здесь происходит, необходимо познакомиться с картой регистров датчика INA219. Датчик содержит всего 6 регистров. Все регистры 16-разрядные.

Карта регистров датчика тока и напряжения INA219

Адрес регистра Название регистра Назначение регистра Тип
0x00 Configuration Сброс всех регистров, настройка диапазона измерений, усиления PGA , разрешения АЦП и фильтрации. Чтение/Запись
0x01 Shunt voltage Хранит измеренное значение напряжения на шунтирующем резисторе 0,1 Ом. Чтение
0x02 Bus voltage Хранит измеренное значение напряжения шины. Чтение
0x03 Power Хранит измеренное значение мощности. Чтение
0x04 Current Содержит значение силы тока, протекающего через шунтирующий резистор. Чтение
0x05 Calibration Калибровочный регистр. Задаёт диапазон измерений и позволяет осуществлять калибровку системы. Чтение/Запись

Чтение регистров датчика тока INA219 с помощью FT2232H

Запустим программу SPI via FTDI, выберем в меню «Устройство» интерфейс I2C. Подключимся к порту A. Просканируем устройства на шине I2C. Программа найдёт устройство по адресу 64 (0x40), если конечно вы не меняли адрес перемычками A0 и A1. Выберем это устройство. В разделе «Чтение» зададим размер буфера 2 байта, напишем команду 00 и нажмём кнопку «Прочитать». Прочитанные данные будут в таблице, которая открывается по нажатию на кнопку с пиктограммой таблицы. Вот что мы увидим.

Чтение регистров датчика тока INA219 с помощью FT2232H и программы «SPI via FTDI»

Как вы уже наверное догадались, команда «0» означает адрес регистра, из которого мы хотим прочитать данные. А число 0x399F – это данные в нулевом регистре (регистр конфигурации). И это соответствует документации, т.к. после включения и загрузки микросхема INA219 имеет именно такую конфигурацию по умолчанию. Вот какую структуру имеет регистр конфигурации.

Структура конфигурационного регистра датчика тока INA219

В регистре конфигурации датчика INA219 присутствуют следующие части:

0x399F в двоичном виде это «001_11_0011_0011_111». Следовательно, значения по умолчанию после включения такие.

Для чтения других регистров необходимо сначала так же записать их адрес в поле «Чтение» «Команда», а затем прочитать 2 байта. Или можно записать номер регистра в поле «Запись» «Команда», а затем просто читать (не указывая адрес регистра в команде чтения).

К сожалению, последовательного чтения всех регистров микросхемы INA219 «за один проход» не предусмотрено.

Вернёмся к нашей осциллограмме. Мы видим на ней 6 циклов чтения (каждый начинается с зелёной точки ● и заканчивается тёмно-красной ● ). Сначала читаем регистр с напряжением шунта Vшунт. (адрес 0x01), который хранит значение 0x1957. Далее читаем значение регистра напряжения шины Vшины (0x02), в котором значение 0x19BA. Далее читаем регистр калибровки Cal (0x05) со значением 0x1000. Потом регистр тока шунта Iшунт. (0x04), в котором значение 0x1959. Потом снова читаем регистр калибровки Cal (0x05). И наконец читаем регистр мощности Pwr (0x03), в котором находится значение 0x042B. При этом монитор последовательного порта показывает следующее:

Вывод монитора порта в момент снятия осциллограммы с датчика INA219

Рассмотрим, как привести данные в регистрах «в человеческий вид». Нам интересны не все значения, а только напряжения и ток. Плюс регистр калибровки, который играет роль поправочного коэффициента.

Регистр Shunt Voltage (адрес 0x01) датчика INA219

Напряжение на шунте равняется тому значению, которое записано в регистре, поделённое на 100: Uшунта = Shunt_voltage/100 = 0x1957/100 = 64.87 (мВ) Для случаев, когда напряжение отрицательное, расчёт несколько сложнее. Это можно посмотреть в техническом описании (datasheet).

Регистр Bus Voltage (адрес 0x02) датчика INA219

Начнём с регистра, в котором записано напряжение шины, т.к. он самый простой. В текущий момент данные в нём это 0x19BA. Согласно всё тому же техническому описанию (datasheet на INA219), для преобразования значения в милливольты необходимо сделать следующее: Uшины = (0x19BA >> 3) × 32000 (мВ) / 8000 = 3292 (мВ).

Здесь 0x19BA это значение в регистре. Его нужно сдвинуть на 3 разряда вправо, т.к. данные о напряжении хранятся, начиная с 3-го разряда. 32000 (мВ) – это предел шкалы измерения (он указан в регистре конфигурации). А 8000 – это предел шкалы измерения в отсчётах. Получается 3292 (мВ) или 3.29 вольта, что мы и видим в выводе скетча в мониторе порта Arduino.‬

Регистр Current Register (адрес 0x04) датчика INA219

Значение тока рассчитывается тоже просто: I = 0x1959 × 0x1000 / 4096 = 6489.

Значение в регистре напряжения шунта 0x1959 умножается на значение регистра калибровки, который в нашем случае равен 0x1000. А затем результат делится на 4096 (что, кстати, то же самое, что 0x1000). То есть ток получается равным 6489. Но в каких единицах? Чтобы ответить на этот вопрос, необходимо определить параметр Current_LSB: Current_LSB = 0.04096 / 0x1000 / 0.1 (Ом) = 0.0001 Здесь 0x1000 – значение регистра калибровки, 0.1 (Ом) – сопротивление шунта, а 0.04096 – просто коэффициент. Теперь посчитанный ток нужно умножить на число Current_LSB, и получим 0.6489 (А) или 648,90 (мА). Такой ток мы видим и в мониторе.

Регистр Power (адрес 0x03) датчика INA219

Мощность рассчитывается как произведение напряжения на шине и тока: P = Uшины × I = 3292 (мВ) × 648.9 (мА) = 2136 (мВт)

Небольшое расхождение с выводом монитора Arduino связано с ошибкой округления. А именно, если посмотреть на вывод монитора порта, мы увидим, что значение напряжения на шине принято равным 3.29 В, в то время как в регистре записано 3.292 В. Из-за этого рассчитанное значение на 2 милливатта больше, чем показанное в выводе скетча.

7 Подключение трёхканального датчика тока и напряжения INA3221 к Arduino

Датчик тока INA3221 практически идентичен датчику INA219. Основное отличие состоит в том, что он имеет 3 измерительных канала вместо одного. Показания с них можно снимать независимо друг от друга. Будем использовать вот такую небольшую плату с датчиком:

Плата с датчиком INA3221

Подключается данный модуль к Arduino всего 4-мя проводами: два для питания, и ещё два – шина I2C.

Вывод модуля INA3221 Вывод Arduino Назначение
SDA A4 Данные шины I2C
SCL A5 Импульсы синхронизации шины I2C
VS +3.3V Питание
GND GND Общий

Подключение датчика INA3221 к Arduino Nano

Назначение остальных выводов модуля показано на приведённом рисунке и в таблице ниже.

Вывод модуля INA3221 Назначение
TC Цифровой выход оповещения о сбое таймингов (timing control alert).
WAR Цифровой выход оповещения о сбоях измерений (warning).
CRI Цифровой выход оповещения о критических сбоях (critical).
PV Цифровой выход оповещения о валидности питающего напряжения (power valid).
VPU Аналоговый вход подтягивающего напряжения для смещения выходных цепей определения валидности питания.
POW Аналоговый вход питания измеряемой нагрузки.
CH1, CH2, CH3 Порты для подключения измеряемых цепей.

Используем библиотеку для работы с датчиком INA3221. Поместим файлы с расширениями *.cpp и *.h в одну директорию, в ней же создадим файл с расширением *.ino и следующим содержимым:

Скетч для чтения показаний датчика INA3221

Загрузим данный скетч в память Arduino. Перед тем как подключать нагрузку, необходимо подать с источника питания напряжение на контакты POW и GND, расположенные с одного из краёв модуля. Это напряжение будет подаваться на нагрузку и оно в данном модуле общее для всех трёх измерительных каналов. Допустимый диапазон напряжений от 0 до 26 вольт. Я сейчас подам 5 В.

Удобно в места подключения нагрузки и питания впаять клеммники для быстрого монтажа.

Теперь можно подключать нагрузку. Давайте нагрузим выходы модуля и посмотрим, что будет выводиться в монитор последовательного порта. Я подключу на канал 1 два параллельных резистора номиналом 4,3 кОм, что в сумме даст сопротивление 2,15 кОм. А на канал 3 – один резистор 4,3 кОм.

Датчик тока INA3221 с нагрузкой

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

Показания датчика тока INA3221 в мониторе COM-порта

Если мы подключим в измеряемую цепь амперметр, то убедимся, что показания цифрового датчика INA3221 довольно точно совпадают с показаниями амперметра.

Показания датчика тока INA3221 в сравнении с амперметром

Источник

Поделиться с друзьями
Моя стройка
Adblock
detector