Программа взаимодействия INA226 с микроконтроллером PIC
Программа взаимодействия INA226 с микроконтроллером PIC на ассемблере.
В статье будет рассмотрен один из вариантов программы взаимодействия микроконтроллера PIC16F676 с микросхемой АЦП — INA226. Эта микросхема входит в состав модуля. Внешний вид показан на фото ниже.
Микросхема предназначена для измерения тока, напряжения и мощности в нагрузке постоянного тока. Общается INA226 с внешними устройствами по интерфейсу I2C.
Возможности микросхемы:
— измерение тока, протекающего через нагрузку;
— вычисление мощности;
— отслеживание превышения или снижения заданного параметра (измеряемого напряжения, напряжения шунта, мощности) с выдачей сигнала оповещения;
— 16 программируемых адресов для шины I2C;
— напряжение питания 2,7 – 5 V.
Более подробно с характеристиками АЦП можно ознакомиться, заглянув в ее документацию.
По правде сказать, сперва, хотел найти готовые программы в Сети, но на ассемблере не нашел. Пришлось все писать с нуля. В принципе все это не сложно, имея тексты ранее написанных программ. Но! День провозился, а заставить работать модуль с контроллером так и не смог. В результате анализа работы программы в железе выяснилось, что АЦП не дает подтверждение на правильность принятого адреса. То есть загружаемый адрес b’01000000’ -> 40h, взятый из документации на INA226 при А1 и А2 – Gnd, Gnd (смотрим скрин)
не совпадает с адресом, сконфигурированным в самой микросхеме. Потом вспомнил, что видел картинку с адресами INA226 и там были другие адреса. Вот эта картинка.
Обратите внимание, что в старшей тетраде байта адреса также стоит b’0100’ – .4, в младшей тетраде — b’0000’ — .0. То есть в шестнадцатеричной системе счисления так же 40h. А на картинке стоит – 80h. Эта картинка взята из статьи о INA226 с сайта радиокот. Загрузил в микросхему адрес 80h и микросхема сразу же откликнулась. Я первый раз занимаюсь с данной АЦП и не могу точно сказать, что бы это значило. Но, тем не менее…. Вот скрин кода из программы инициализации INA226 и запись в нее 2х байтового регистра конфигурации.
Так, с одной проблемой справился. В процессе настройки и коррекции показаний тока нагрузки выяснилось, что при отсутствии оного вместо нулевых показаний на индикаторе высвечивается число 6383. Образно выражаясь: Беру бубен, иду на улицу и разжигаю костер. После «танцев» приходит мысль. INA226 — 16ти разрядное АЦП, а при измерении в документации обозначено 15 разрядов. Значит, микросхема выдает корректные значения величин при условии, что сигнал на +In будет всегда больше сигнала на –In. Отсюда, при отсутствии тока нагрузки через датчик тока (В моем модуле стоит резистор 0.01Ом), из-за наводок, помех, шумов, напряжение на –In больше, чем на +In. В этом случае АЦП будет выдавать код отрицательных чисел. Как известно это фиксируется единицей в самом старшем бите кода. При нулевом токе с датчика выводился код b’1111 1111 1111 1111’ или FFFFh или 65535. После принятия кода шла программа деления на 4, которая позволяет выводить на индикатор ток с разрешением 1 mA/bit. Отсюда 65535/4 = 16383,75. Единица десятков тысяч и число за запятой не участвовали в программном преобразовании, поэтому на индикатор не выводились. А как раз и оставалось число 6383, которое и выводилось на индикатор. Решить проблему можно подключением блокировочного конденсатора параллельно входам +In and –In. Кстати надо обратить внимание на чистоту напряжения питания модуля. Мой модуль питался напряжением +5В. Может эта проблема пропадет при пониженном напряжении питания – 2,7В. Я не пробовал. Все устройство было собрано на макетной плате и возможности заэкранировать его не было. Я, недолго думая, решил этот вопрос программно.
После принятия кода значений тока идет проверка знака числа – строка 505 на скрине. Проверяем значение седьмого бита старшего байта. Если он соответствует единице, то значит число отрицательное. Пропускаем инструкцию goto Shift – переход на программу деления на четыре и обнуляем оба регистра значений тока нагрузки. На индикаторе – красивые нули. Вот такие проблемки встретились при освоении не дорогой, но точной INA226. Вид устройства на макетной плате смотрим ниже.
Полный файл программы инициализации и считывания данных с АЦП можно скачать. В файле нумерация строк немного не совпадает с нумерацией на картинках. Буду рад, если статья кому то поможет.
Удачи. К.В.Ю.