Модуль INA219 c PIC контроллером • Все своими руками






Модуль INA219 c PIC контроллером

Модуль INA219 настройка конфигурации и калибровочного коэффициента

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

И так, цены на данный момент на АЦП у китайских партнеров возросли, раньше я использовал модули с INA226, INA233 и ADS1115, но тут решил найти АЦП подешевле и выбрал модуль с INA219. Его стоимость находится примерно в районе 80 рублей. Заказал на Али 5 штук в разных магазинах. Смотрим скрин.

Магазины

Два модуля в одном магазине, остальные в разных, правда, еще один заказ почему то не нашел. Вот эти пять модулей. Обратите внимание на топологию печатных проводников модулей. Три слева – одна, две справа – другая. Картинку увеличьте. Покупал модули из-за микросхем, так получилось дешевле.

Модуль измерения на INA219

Далее начинается самое интересное. А все дело в разводке выводов микросхем. Вот, что нам предлагает документация на данный АЦП.

Распиновка INA219

Кстати можете скачать даташит на INA219.

INA219 Datasheet PDF

Три правых платы рассчитаны на установку микросхемы в корпусе SOIC. Две правые, для SOT-23. Все микросхемы в пяти модулях были одного размера. Из пяти модулей работали только два. Я их проверял на работоспособность перед тем, как выпаять микросхемы для других целей. В двух правых модулях вместо SOT-23 стояли SOIC, я их потом поставил в левые, в замен выпаянных. В трех левых, две стояли правильные SOIC, а одна SOT-23, которую я в процессе разборок уморил в ноль. Возможно, это единичный случай, но пять модулей из разный магазинов…, хотя производитель то, может быть один. Короче, что под руку попало, то и ставили, вывод: надо проверить правильность установки правильной микросхемы. Для этого одаем на модуль питание пять вольт и меряем напряжение на выводах разъема модуля SDA и SCL, если оно равно напряжения питания, то микросхема стоит правильная, а если на одном из этих выводов напряжение будет порядка 1,8В , а на другом 0,8 В, то микросхема перепутана. Кстати, микросхемы в результате «перепутки», остаются жизнеспособными. По крайней мере, у меня все живы.

Основные функции АЦП

Два аналоговых входа INA219 IN+ и IN– подключаются к шунтирующему резистору на измеряемой шине. INA219 обычно питается от отдельного источника с напряжением от 3 до 5,5 В. Напряжение измеряемой шины может варьироваться от 0 до 26 В. Нет ни каких особых условий по последовательности подачи питания, например напряжение на шине может присутствовать при отключенном напряжении питания и наоборот. INA219 измеряет падение напряжения на шунте и измеряет напряжение относительно земли, от IN– для напряжения на шине. На рис. 13 показана эта схема.

Схема ихмерения U и I
Программирование регистра калибровки

Калибровочный коэффициент рассчитывается на основе формулы 1. Эта формула включает параметр Current_LSB, который является запрограммированным значением LSB — (Least Significant Bit – значение самого младшего бита регистра) для регистра (04h). Пользователь использует значение Current_LSB для преобразования значения падения напряжения на шунте в фактический ток в амперах в регистре (04h). Разрешение для регистра тока Current_LSB можно рассчитать, по формуле 2. Этот расчет дает самое высокое разрешение, но обычно выбирают значение Current_LSB с точностью до ближайшего круглого числа выше этого значения, чтобы упростить преобразование в регистрах тока (04h) и мощности (03h) в амперах и ваттах соответственно. Rshunt — значение сопротивления внешнего шунта. Регистр мощности (03h) внутренне установлен на 20-кратное значение запрограммированного Current_LSB, см .Формула 3.

Формула расчета калибровочного коэффициента
• 0,04096 — это внутреннее фиксированное значение, используемое для обеспечения правильного масштабирования.
Формула расчета разрешения INA219
Адреса регистров находятся в таблице 2.

Адреса регистров INA219

Пример: Теперь рассчитаем калибровочный коэффициент вот для этого устройства. О нем будет отдельная статья. Это измерительное устройство для автомобильных аккумуляторов. Отслеживает напряжение, ток заряда, время заряда и величину емкости – Q.

Измерительное устройство для автомобильных аккумуляторов на INA219

На фото 2 можно видеть шунт из отрезка константановой проволоки диаметром 1,5 мм. Его сопротивление совершенно случайно составляет порядка 0,008 Ом. Зададимся максимальным током нагрузки 20 А, хотя для модуля такой конструкции с таким шунтом это многовато. При этом мощность, выделяемая на шунте будет равна — Р = I²•R = 400•0,008=3,3Вт. Ну, тут чисто по-русски, рассчитываем на 20, используем на 10. И так, по формуле 2 определяем минимальное разрешение по току:
Current_LSB = 20А / 215 = 20/ 32 768 = 0,0006103515625 ≈ 0,0006 А/bit.

Задаемся (согласно прочитанного выше) значение разрешения в 1мА/бит. Теперь находим значение калибровочного коэффициента:

Cal = (0,04096 / Current_LSB• Rshunt)=0,04096 / 0,001 А/бит•0,008 Ом = 5 120

В шестнадцатеричной системе счисления это будет 0х 1400. Это значение и будем записывать в регистр калибровки, который расположен па адресу 5h. В архиве будет исходник к этому устройству, где значение калибровочного коэффициента сначала записывается в EEPROM. А уже потом, читая его значение, будет записываться в АЦП в процессе ее инициализации. Кстати, если этот регистр оставить пустым, то АЦП работать не будет.

Теперь разберемся с адресами АЦП.

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

INA219 имеет два адресных вывода, A0 и A1.Таблица 1 описывает логические уровни выводов для каждого из 16 возможных адресов. Состояние A0 и A1 считывается при каждом обмене данными по шине и должно быть установлено до начала связи ведущего с ведомым. У регистра адреса в таблице не обозначен младший – нулевой бит, указывающий ведомому выполнить операцию чтения или записи.

В модулях выводы A0 и A1 через резисторы 10к подтянуты к общему проводу и соответственно адрес АЦП будет соответствовать первой строке таблицы, т.е. – 1000 000 плюс бит запись\чтение – 0×80.

Адреса регистров INA219

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

15 бит — Установка этого бита в «1» приводит к сбросу системы, аналогичному сбросу при включении питания. Сбрасывает все регистры в значения по умолчанию;

13бит — BRNG: — Диапазон напряжения шины. 0 -16 В; 1 = 32 В (значение по умолчанию).

Регистр конфигурации INA219

12-11биты PGA — Устанавливают усиление и диапазон. Обратите внимание, что значение PGA по умолчанию равно ÷8 (диапазон 320 мВ). Т.е. в 4и3 битах старшего байта конфигурации стоят единицы. В Таблице 4 показаны усиление и диапазон для различных настроек усиления применительно к напряжению на шунте.

Таблица переключения усиления напряжения шунта INA219

Выбирая, например, настройки – PG1 — 0 и PG0 — 0, и при Rshunt = 0,008Ом, мы можем измерять ток лишь до величины – 0,04В/0,008Ом = 5А. Для моего примера выберем напряжение – U = I•R = 20A •0,008Oм = 0,16В = 160мВ(так уж совпало). PG1 и PG0 имеют при этом значения 1 и 0 соответственно. На сей момент имеем конфигурацию – 00110ххх хххххххх

7 – 10 биты — Эти биты регулируют разрешение шинного АЦП (9- , 10- , 11- или 12-битное) или устанавливают количество выборок, используемых при усреднении результатов для регистра напряжения шины (адрес регистра — 02h).

Спешить нам некуда, да и точность преобразования не помешает, поэтому выбираем последнюю строчку: 128 раз преобразуем и усредняем за ≈ 68 мс. Получаем конфигурацию — 00110111 1ххххххх

Биты 3–6 — Эти биты регулируют разрешение шунтирующего АЦП (9- , 10- , 11- или 12-разрядное) или устанавливают количество выборок, используемых при усреднении результатов преобразования падения напряжения на шунте (адрес — 01h). Параметры разрешения/усреднения и времени преобразования АЦП SADC (шунт) так же показаны в Таблица 5.

Для преобразования значений напряжения на шунте также выбираем нижнюю строчку, теперь регистр конфигурации имеет вид — 00110111 11111ххх
.

Осталось выбрать режим работы АЦП. Выбираем значения по умолчанию – затемненная строка – 111. Это непрерывная оцифровка напряжения шунта и шины. В конечном итоге получаем полное значения регистра конфигурации — 00110111 11111111 или 0х37FF, кому, как удобнее, но в бинарной форме намного информативнее.

Ниже представлен код записи в АЦП значений конфигурации и калибровочного коэффициента.

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

Строка 292 – читаем адрес АЦП(ведомого) и передаем его. Побитовая передача данных ведется, начиная со старшего бита(7). Проверяем, принял ли ведомый команду. Команда прошла, читаем адрес(0h) регистра конфигурации – строка 299. Затем передаем два байта данных о конфигурации АЦП.

Обратите внимание, что первым передается старший байт(строка 305) , за которым следует младший байт(строка 311).

Далее следует передача данных в регистр калибровки. Опять передаем адрес ведомого, строки 321 — 326. Затем адрес калибровочного регистра (05h), строки 328 — 332. Далее однотипно передаются данные двух байт калибровочного коэффициента. Его значения изначально записываются в энергонезависимую память микроконтроллера. От туда при необходимости и считываются. Строка 336 – указываем адрес ячейки памяти EEPROM и считываем (строка 337) из ее данные старшего регистра калибровочного коэффициента. Записываем полученные значения в вспомогательный регистр Reg_TX, для последующей передачи в ведомый, строка 339. После успешной передачи старшего байта выбираем ячейку по адресу 02h и считываем содержимое младшего байта коэффициента, строка 334. Передаем данные в ведомый. На этом инициализация INA219 заканчивается.

Ниже приведен скриншот (извиняюсь за качество, лучше почему то не получить) с кодом считывания данных с INA219.

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

Считываем данные о напряжении на шине и токе. практически все тоже самое.
1. Передаем адрес ведомого.
2. Передаем адрес регистра, в котором хранятся интересующие нас данные. Данные о напряжении шины записаны в регистре по адресу 02h, данные о токе – по адресу 04h.

После записи адреса регистра снова передаем адрес ведомого, но уже с битом чтения, строка 626. Со строки 634 начинается выполнения инструкций по чтению данных из ведомого. В данном случае считываем значения напряжения на шине.

Исходник в архиве. Удачи. К.В.Ю.

Скачать файлы и статью.


Просмотров:2 662
2 комментария




2 комментария к “Модуль INA219 c PIC контроллером”

  • Станислав
    21 декабря, 2022, 12:52

    Плата и схема будут выложены?

  • admin
    22 декабря, 2022, 15:43

    Будут, но я даже не знаю когда.

Оставить комментарий