Модуль INA219 c PIC контроллером
Модуль INA219 настройка конфигурации и калибровочного коэффициента
В статье рассматривается модуль АЦП с микросхемой INA219. Но перед тем, как перейти к непосредственному выбору корректирующего коэффициента, выбору режимов и запись в регистр конфигурации и выбора адреса АЦП, я хочу поведать вам о возможных косяках этих китайских модулей. Возможно, и вы столкнетесь с такой проблемой.
И так, цены на данный момент на АЦП у китайских партнеров возросли, раньше я использовал модули с INA226, INA233 и ADS1115, но тут решил найти АЦП подешевле и выбрал модуль с INA219. Его стоимость находится примерно в районе 80 рублей. Заказал на Али 5 штук в разных магазинах. Смотрим скрин.
Два модуля в одном магазине, остальные в разных, правда, еще один заказ почему то не нашел. Вот эти пять модулей. Обратите внимание на топологию печатных проводников модулей. Три слева – одна, две справа – другая. Картинку увеличьте. Покупал модули из-за микросхем, так получилось дешевле.
Далее начинается самое интересное. А все дело в разводке выводов микросхем. Вот, что нам предлагает документация на данный АЦП.
Три правых платы рассчитаны на установку микросхемы в корпусе 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 показана эта схема.
Программирование регистра калибровки
Калибровочный коэффициент рассчитывается на основе формулы 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 — это внутреннее фиксированное значение, используемое для обеспечения правильного масштабирования.
Адреса регистров находятся в таблице 2.
Пример: Теперь рассчитаем калибровочный коэффициент вот для этого устройства. О нем будет отдельная статья. Это измерительное устройство для автомобильных аккумуляторов. Отслеживает напряжение, ток заряда, время заряда и величину емкости – Q.
На фото 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.
С адресами, надеюсь, разобрались, теперь конфигурация АЦП. Регистр конфигурации двухбайтовый, для удобства я добавил нумерацию побайтную старшего и младшего регистров, ну, по крайней мере, мне так кажется.
15 бит — Установка этого бита в «1» приводит к сбросу системы, аналогичному сбросу при включении питания. Сбрасывает все регистры в значения по умолчанию;
13бит — BRNG: — Диапазон напряжения шины. 0 -16 В; 1 = 32 В (значение по умолчанию).
12-11биты PGA — Устанавливают усиление и диапазон. Обратите внимание, что значение PGA по умолчанию равно ÷8 (диапазон 320 мВ). Т.е. в 4и3 битах старшего байта конфигурации стоят единицы. В Таблице 4 показаны усиление и диапазон для различных настроек усиления применительно к напряжению на шунте.
Выбирая, например, настройки – 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, кому, как удобнее, но в бинарной форме намного информативнее.
Ниже представлен код записи в АЦП значений конфигурации и калибровочного коэффициента.
Строка 292 – читаем адрес АЦП(ведомого) и передаем его. Побитовая передача данных ведется, начиная со старшего бита(7). Проверяем, принял ли ведомый команду. Команда прошла, читаем адрес(0h) регистра конфигурации – строка 299. Затем передаем два байта данных о конфигурации АЦП.
Обратите внимание, что первым передается старший байт(строка 305) , за которым следует младший байт(строка 311).
Далее следует передача данных в регистр калибровки. Опять передаем адрес ведомого, строки 321 — 326. Затем адрес калибровочного регистра (05h), строки 328 — 332. Далее однотипно передаются данные двух байт калибровочного коэффициента. Его значения изначально записываются в энергонезависимую память микроконтроллера. От туда при необходимости и считываются. Строка 336 – указываем адрес ячейки памяти EEPROM и считываем (строка 337) из ее данные старшего регистра калибровочного коэффициента. Записываем полученные значения в вспомогательный регистр Reg_TX, для последующей передачи в ведомый, строка 339. После успешной передачи старшего байта выбираем ячейку по адресу 02h и считываем содержимое младшего байта коэффициента, строка 334. Передаем данные в ведомый. На этом инициализация INA219 заканчивается.
Ниже приведен скриншот (извиняюсь за качество, лучше почему то не получить) с кодом считывания данных с INA219.
Считываем данные о напряжении на шине и токе. практически все тоже самое.
1. Передаем адрес ведомого.
2. Передаем адрес регистра, в котором хранятся интересующие нас данные. Данные о напряжении шины записаны в регистре по адресу 02h, данные о токе – по адресу 04h.
После записи адреса регистра снова передаем адрес ведомого, но уже с битом чтения, строка 626. Со строки 634 начинается выполнения инструкций по чтению данных из ведомого. В данном случае считываем значения напряжения на шине.
Исходник в архиве. Удачи. К.В.Ю.
2 комментария к “Модуль INA219 c PIC контроллером”
Плата и схема будут выложены?
Будут, но я даже не знаю когда.