Схема представляет собой цифровой монитор тока и напряжения с вычислением мощности и заряда в Ампер-часах.
Устройством измерения выступает микросхема INA233 производства Texas Instruments. На сайте производителя она позиционируется как 16-битный, ультра прецизионный монитор тока/напряжения/мощности/энергии с I2C протоколом связи, поддержкой команд управления источниками питания PMBus и с независимым выходом сигнализации аварийных ситуаций.
Технические характеристики устройства:
- Измерение тока в диапазоне: 0÷3,2А с разрешением 1мА (при RSHUNT = 25мОм)
- Измерение напряжения в диапазоне: 0÷36В с разрешением 1мВ
- Расчет мощности в диапазоне: 0÷100Вт с разрешением 1мВт
- Расчет заряда аккумулятора в диапазоне: 0÷100А⋅ч с разрешением 1мА⋅ч
Основное назначения микросхемы - следить за параметрами некоторой пользовательской шины питания постоянного тока, по запросу отдавать измеренные параметры микроконтроллеру и при выходе величин за установленные пределы подавать сигнал «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 на 128x64 точки. У нее имеется весьма обширный репозиторий на GitHub, а также огромное количество шрифтов с возможностью дополнительной установки, в том числе кириллических. Устанавливается она через менеджер библиотек Arduino IDE «U8g2 by oliver». И хотя она занимает просто огромное количество места что в памяти программ, что в динамической памяти, для меня работа с дисплеями это один из тех случаев, когда писать свою библиотеку с набором шрифтов ну совсем не целесообразно.
Модуль INA233 представлен отдельной схемой и выполняется на миниатюрной плате, расположение выводов аналогично модулю INA226, но из-за применения протокола PMBus обмен данными у них будет немного отличаться. Главное отличие - это последовательность байт при передаче данных. Если по стандарту для I2C при передачи двухбайтового числа первым принято передавать старший байт, а затем младший, то для PMBus эта последовательность заменена на обратную. Адрес устройства установлен резисторами R4, R9 в 0x40.
Упрощенный протокол инициализации и обмена данными с 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 выполнена в соответствии с рекомендациями производителя. Подключение к шунту выполнено по «Кельвин» соединению см. рис. с.)
По итогам тестирования разработанный вольтамперметр показал весьма приличную точность во всем диапазоне измерений. В качестве образца при этих испытаниях выступал мультиметр UNI-T UT61E. Он, конечно, не может являться эталонным измерителем т.к. не поверяется, но тем не менее крупными мазками показать результат работы может. Для любительских приложений этого достаточно с головой.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U1 | Плата Arduino | Arduino Nano 3.0 | 1 | Поиск в магазине Отрон | ||
P1 | LCD Дисплей | OLED 2.42" 128x64 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 | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
Прикрепленные файлы:
- Arduino_INA233_SSD1309.rar (201 Кб)
Комментарии (33) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Но INA233 довольно редкий модуль.
Так что...
[Автор]
Но по секрету скажу, что м/c INA226 весьма схожа с INA233 и, применительно к этому проекту, для ее корректной работы в этом устройстве необходимо лишь небольшое изменение в протоколе обмена данными.
[Автор]
Одно замечание, что у китайских модулей INA226 отсутствует аналоговый фильтр и точность измерений от этого будет немного страдать.
Цена дисплея не малая и, как уже написали, INA233 не так то просто и найти.
[Автор]
Действительно, примененный дисплей высококонтрасный и весьма крупный и поэтому дорогой. Он может быть легко заменен на практически любой OLED дисплей 128x64 точки, например с контроллером SSD1306. Библиотека работы с дисплеями, примененная в проекте, поддерживает великое множество вариантов.
[Автор]
[Автор]
[Автор]
А так вещь интересная очень.
Ардуино нафиг, На Atmega328 код переделать. INA233 заменить на более доставаемый.
Дисплей, как вариант исполнения, на самый ходовой 0,96' олед SPi. Желающих повторить такой много будет.
[Автор]
1. Atmega328 как бы уже.
2. INA233=INA226
3. Диплей на SSD1306 или почти любом другом.
4. Поменять 5 строчек в коде в зависимости от выбора в пунктах 2 и 3
Может сделаете?
А помехи по питанию можно побороть - это, в данных условиях, проще.
[Автор]
Напишите какой модуль хотите использовать, дайте на него ссылку, желательно какой экран, то же дайте на него ссылку.
Помехи по питанию тут ни при чем, я покажу вам на схемах о чем я говорю, но вы должны выполнить, написанное выше.
[Автор]
Почитайте раздел applications INA233
Что вы понимаете под странным наименованием "хороший тестер"?
По второй части, есть Demmel, есть Nextion есть еще куча вариантов HMI устройств, но зачем это тут объявлять?
[Автор]
[Автор]
[Автор]
Очень удачный проект. Было бы шикарно приделать подрежимом барграф с индикацией Уровня пульсаций...
Допустим, переключая индикацию двух нижних строк P и E на iiiiiiiiiiiiiiiiiiiii и Vp-p
Или знакогенератор всю память жрет?
[Автор]
Такой дисплейчик еще и к мультиметру сверху приделать, чтоб видеть Uр-р "мусора" на постоянке...
P.S. Посмотрел твое крайнее в ЮТУБ , "АЦП в STM32F1 CubeIDE", очень обещающе изложено!.
Там и разрядность ацп пожирнее,....догадываешься, куда я клоню?