Вольт-Амперметр на INA233 и Arduino как монитор для лабораторного БП

Схема представляет собой цифровой монитор тока и напряжения с вычислением мощности и заряда в Ампер-часах.

Устройством измерения выступает микросхема INA233 производства Texas Instruments. На сайте производителя она позиционируется как 16-битный, ультра прецизионный монитор тока/напряжения/мощности/энергии с IC протоколом связи, поддержкой команд управления источниками питания PMBus и с независимым выходом сигнализации аварийных ситуаций.

Технические характеристики устройства:

  • Измерение тока в диапазоне: 0÷3,2А с разрешением 1мА (при RSHUNT  = 25мОм)
  • Измерение напряжения в диапазоне: 0÷36В с разрешением 1мВ
  • Расчет мощности в диапазоне: 0÷100Вт с разрешением 1мВт
  • Расчет заряда аккумулятора в диапазоне: 0÷100А⋅ч с разрешением 1мА⋅ч

Схема

Board

Основное назначения микросхемы — следить за параметрами некоторой пользовательской шины питания постоянного тока, по запросу отдавать измеренные параметры микроконтроллеру и при выходе величин за установленные пределы подавать сигнал «Alert».

Непосредственно измеряемые параметры — это напряжение шунта (VIN+ – VIN–) и напряжение шины (VBUS) , которые не должны превышать ±81,92мВ и 36В соответственно.

Для установки правильного диапазона измерений сопротивление шунта устанавливается как RSHUNT = 81,92 (мВ) / IMAX (мА).

Например, для моего случая: RSHUNT = 81,92 (мВ) / 3200 (мА) = 25,6мОм ≈ 25мОм

При этом рассеиваемая мощность при номинальном токе составит P = U⋅I = 81,92 (мВ) ⋅ 3200 (мА) ≈ 0,262 Вт что не превышает допустимые 1Вт для корпуса SMD 2512.

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

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

В моей реализации мозгом устройства выступает плата Arduino Nano c микроконтроллером ATmega328P. Человеко-машинный интерфейс — это экран OLED 2,42″ на контроллере SSD1309 и кнопка для спроса накопленных показаний мА⋅ч.

Данные на дисплей передаются по протоколу SPI, для этого кроме стандартной библиотеки SPI.h так же подключается сторонняя для Arduino IDE библиотека U8g2lib.h, она позволяет работать с большим количеством дисплеев в том числе и с контроллером SSD1309 на 128×64 точки. У нее имеется весьма обширный репозиторий на GitHub, а также огромное количество шрифтов с возможностью дополнительной установки, в том числе кириллических. Устанавливается она через менеджер библиотек Arduino IDE «U8g2 by oliver». И хотя она занимает просто огромное количество места что в памяти программ, что в динамической памяти, для меня работа с дисплеями это один из тех случаев, когда писать свою библиотеку с набором шрифтов ну совсем не целесообразно.

Модуль INA233 представлен отдельной схемой и выполняется на миниатюрной плате, расположение выводов аналогично модулю INA226, но из-за применения протокола PMBus обмен данными у них будет немного отличаться. Главное отличие — это последовательность байт при передаче данных. Если по стандарту для I2C при передачи двухбайтового числа первым принято передавать старший байт, а затем младший, то для PMBus эта последовательность заменена на обратную. Адрес устройства установлен резисторами R4, R9 в 0x40.

INA233 Scheme

INA Board

Упрощенный протокол инициализации и обмена данными с INA233 выглядит так:

1. Передаем значение в регистр конфигурации АЦП (MFR_ADC_CONFIG [0xD0])

Начало передачи I2C Master Output Slave In + адрес устройства I2С + пакет данных.

Состав пакета: [адрес устройства] [адрес регистра, младший байт данных, старший байт данных]

Пакет целиком (мой вариант конфигурации): [0x40][0xD0, 0xFF, 0x45]

Расшифровка:

  • Режим усреднения по 16-ти точкам;
  • Время преобразования при измерении напряжения шины 8.244мс;
  • Время преобразования при измерении напряжения шунта 8.244мс;
  • Режим работы – непрерывное измерение тока и напряжения.  

2. Передаем значение в регистр калибровки АЦП (MFR_CALIBRATION [0xD4])

Состав пакета: [адрес устройства] [адрес регистра, младший байт данных, старший байт данных]

Пакет целиком (мой вариант калибровки): [0x40][0xD4, 0x00, 0x08]

Расшифровка:

MFR_CALIBRATION = 0,00512/(Current_LSB⋅RSHUNT), где Current_LSB = 1-LSB Shunt voltage / RSHUNT = 2,5мкВ/25мОм = 0,1мА,

тогда MFR_CALIBRATION = 0,00512/(0,1мА⋅25мОм) = 2048 (0x0800).

При таком значении регистра калибровки INA233 будет отдавать значение 32767 при IMAX = 3,2767А, значит для правильного отображения тока в мА необходимо будет разделить в МК данные с АЦП на 10.

Второй путь, это запись в MFR_CALIBRATION 2048/10 ≈ 205 (0x00CD), тогда данные будут сразу в мА.

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

3. Чтение в цикле значений тока и напряжения

— Напряжение, PMBus команда 0x88

— Ток, PMBus команда 0x89

Состав запроса: [адрес устройства][команда]

Состав ответа: [адрес устройства][младший байт данных, старший байт данных].

Пример: запрос [0x40][0x88]; ответ [0x40][VoltageLowByte, VoltageHighByte]

По протоколу обмена это все, «Alert» в моем варианте не задействуется, хотя аппаратно такая возможность остается. Дополнительные пояснения можно найти в моих комментариях в исходном коде.

В особенностях схемы стоит отметить возможность измерять параметры USB устройств, источник питания подключается к разъему USB1, а приемник к USB2, при этом должен быть установлен джампер P5 (в остальных случаях измерения джампер должен быть снят).

Для защиты от обратной полярности на входе VBUS установлен MOSFET Q1. Эта схема имеет ряд недостатков из-за ограничения среднестатистических P-канальных транзисторов по напряжению Gate-Source порядка -20В. Это проблема может быть преодолена установкой стабилитрона на напряжение менее 20В и резистора в цепь затвора. Тем не менее, при напряжениях менее 1В показания вольтметра с защитой могут быть искажены из-за возрастающего сопротивления канала с учетом того, что входное сопротивление АЦП по линии VBUS составляет 830кОм.

Один из вариантов решения проблемы — это отказ от этой защиты при стационарной установке в качестве монитора параметров однополярного БП.  

Схемотехника модуля INA233 выполнена в соответствии с рекомендациями производителя. Подключение к шунту выполнено по «Кельвин» соединению см. рис. с.)Kelvinp-fet protect

По итогам тестирования разработанный вольтамперметр показал весьма приличную точность во всем диапазоне измерений. В качестве образца при этих испытаниях выступал мультиметр UNI-T UT61E. Он, конечно, не может являться эталонным измерителем т.к. не поверяется, но тем не менее крупными мазками показать результат работы может. Для любительских приложений этого достаточно с головой.

foto1

MaketBoard

INA233_1INA233_2

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 Плата Arduino Arduino Nano 3.0 1
P1 LCD Дисплей OLED 2.42" 128×64 SSD1309 1
P2 Плата расширения Arduino INA233 Модуль 1
KEY1 Кнопка 12/12/10 1
P3, P4 Разъем 2P 5мм под винт 2
Q1 MOSFET-транзистор BSS84 1
USB1 Разъем USB Micro Female 1
USB2 Разъем USB Type A Female 1
DC1 Разъем DS-210 1
D1 Диод M7 SMD 1
PWR Переключатель DS1040-01RN 1
DA1 Линейный регулятор LM78M05 1
C1, C2 Конденсатор 150мкФ/16В 2
R1 Резистор 1 кОм 1
LED1 Светодиод 2.5В. зеленый 1