INA226 测量偏移/非线性问题

Всем привет, я делаю самодельный тестер батарей / электронную нагрузку на базе ESP32, TFT-дисплея и других интересных компонентов. Сердце проекта — это токопоглотитель с контуром обратной связью и цифровой уставкой. Хотя у меня есть идеи по улучшению дизайна (признаю, что сделал несколько не самых удачных решений), сейчас меня больше всего беспокоит измерение тока с помощью INA226.

Описание проблемы:

Когда напряжение на входе клемм PCB низкое (например, около 4 В), я пытаюсь увеличить ток и замечаю, что показания INA226 ниже фактического тока (проверено цифровым мультиметром), и нелинейны. По мере увеличения заданного тока это отклонение становится всё более заметным.

  • Проблема появляется при токе свыше примерно 50 мА;
  • Когда входное напряжение высокое (около 18 В), проблема практически исчезает;
  • Интересно, что уставка контура обратной связи очень близка к фактическому току — обычно погрешность в пределах ±0,5 мА.

Так что в целом моя нагрузка работает как ожидается, но INA226 при низком напряжении, похоже, «занижает» значения тока.

Вопросы:

  1. Кто-нибудь сталкивался с таким поведением INA226 под нагрузкой при низком напряжении шины?
  2. Может ли это быть связано с падением напряжения на шунте, таймингом I2C или другими факторами?
  3. Какие есть предложения по получению стабильных показаний или повышению точности измерений в такой ситуации?

При необходимости могу поделиться дополнительными фото, схемами подключения, фрагментами кода или полными файлами проекта KiCad. Большое спасибо за любые советы или рассказы о похожем опыте!

Вы не рассматривали ли проблемы устойчивости, которые может вызвать взаимодействие C1 и R4? Это создаст задержку на инвертирующем входе операционного усилителя, и вместе с задержкой, вносимой Дарлингтоном, этого может быть достаточно для возникновения колебаний или эффекта звона.

Признаю, что раньше не учитывал этого. Моя логика заключалась в том, что, поскольку напряжение батареи стабильно, быстрой регулировки не требуется, а использование RC-фильтра нижних частот может снизить шум/колебания. Я обязательно проверю эту проблему на осциллографе.

Кстати, забыл упомянуть, Q1 уже заменён с 2N2222 на BD139.

RC-фильтр нижних частот (C1 и R4) в вашем контуре обратной связи может быть причиной проблемы, как упоминалось в ответе. При низких входных напряжениях задержка в контуре (от RC и транзистора Дарлингтона Q1) может вызывать фазовые сдвиги, что приводит к нестабильной регуляции тока и, следовательно, к искажённым показаниям INA226. Попробуйте уменьшить RC-постоянную времени — используйте конденсатор C1 меньшей ёмкости (например, с 100 нФ до 10 нФ) или резистор R4 — чтобы ускорить реакцию обратной связи. Также, поскольку вы заменили Q1 на BD139, убедитесь, что его базовый ток достаточен; недостаточный ток базы может заставить транзистор работать в линейной области, увеличивая нелинейность тока. Используйте осциллограф для наблюдения формы напряжения на шунте — если есть рингинг или колебания, добавление небольшого демпферного конденсатора (например, 10 пФ) параллельно шунту может помочь стабилизировать сигнал.

Давайте для начала разберём наблюдаемое явление по частям:

  1. Токовый контур сам по себе работает нормально (заданное значение ≈ измеренное), что говорит о том, что замкнутая цепь MOSFET, операционного усилителя и DAC функционирует корректно;

  2. Только отсчёт INA226 занижен, и, что характерно, это происходит при низком напряжении VBUS и большом токе;

  3. При 18 В ошибка почти не наблюдается.

Это почти однозначно указывает на ошибку измерения на уровне компонента, вызванную «слишком низким напряжением общего режима на шунтирующем резисторе», а не на проблему с кодом или таймингом I²C.

  1. Слишком низкий общий режим, внутренний PGA начинает «лодырничать»
    Входной каскад INA226 — это АЦП ΔΣ-типа, на входе которого находится коммутируемая конденсаторная матрица с частотой 2 МГц. Чем ниже напряжение общего режима, тем заметнее расхождение в зарядовой инжекции внутреннего контура выборки и хранения, и эквивалентное смещение усиливается. В даташите чётко указано: при VCM = 0 В типовое смещение составляет 50 мкВ, при VCM ≥ 1 В оно снижается до порядка 10 мкВ. При вашем входном напряжении 4 В и токе 50 мА, если шунтирующий резистор 50 мΩ, то VBUS фактически проседает до 4 В – 2.5 мВ ≈ 3.9975 В, общий режим всё ещё считается «низким», но более серьёзно то, что напряжение на шунте составляет всего 2.5 мВ, что уже того же порядка, что и напряжение смещения; при дальнейшем увеличении тока показания начинают «терять в весе».

  2. Эффект термопары в Kelvin-разводке/площадках шунтирующего резистора
    При низком напряжении и большом токе дополнительный металлический резистор в 1 мкΩ создаст ошибку в 1 мкВ. Если верхний слой меди «съеден» сильно, или точки отбора слишком далеки от площадок, то фактическое напряжение Vshunt, подаваемое на INA226, будет ниже, чем измеренное мультиметром.

  3. Земляной отскок (ground bounce) на плате
    Если силовая земля, цифровая земля и GND INA226 используют общий тонкий проводник, переключающие пики тока в 50 мА могут создать разность потенциалов земли в несколько сотен мкВ, которая напрямую накладывается на дифференциальное измерение.

  4. Тайминг/шум I²C
    Такие ошибки обычно проявляются как «дрожание» или «мерцание кода», а не как систематическое занижение, поэтому их приоритет ниже.

Список улучшений (по критерию рентабельности)

A. Переместить шунтирующий резистор в «верхнее плечо»
Позвольте ножке VBUS INA226 напрямую подключиться к положительному полюсу батареи, тогда общий режим ≈ 4 В, что значительно выше «комфортной зоны» в 1 В, и смещение компонента сразу снизится на порядок. Для измерения в верхнем плече требуется:
– Переместить шунтирующий резистор на плюсовую сторону;
– Питание V+ INA226 может быть 3.3 В, так как общий режим допускает до 36 В;
– Обратите внимание, новая трассировка должна быть Kelvin и отделена от силового тракта.

B. Увеличить напряжение на шунте
Если максимальный ток 1 А, замените 50 мΩ на 100 мΩ, полный диапазон составит 100 мВ, LSB по-прежнему 2.5 мкВ, но отношение сигнал/смещение удваивается. Мощность рассеяния 100 мВт приемлема для приложения на 1 А.

C. Калибровка «нулевого смещения»
В коде выполните один раз выборку «нулевого тока» (реле разомкнуто или DAC=0), сохраните результат в EEPROM и вычитайте перед каждым официальным тестом. Сам INA226 имеет регистр Calibration, но он действует только для расчёта мощности/тока, а не для исходного напряжения на шунте; поэтому самый простой способ — читать регистр Shunt Voltage Register и вычитать смещение.

D. Вторичная микрохирургия трассировки платы
– Разделить силовую и цифровую землю, соединить в одной точке;
– Под INA226 сделать целостную медь «аналоговой земли», соединяемую с силовой землёй только через резистор 0 Ω или контакт разъёма в одной точке;
– Под площадки шунтирующего резистора просверлить две пары Kelvin-via, дифференциальные линии проложить параллельно во внутреннем слое, длина < 15 мм.

E. Программная фильтрация
Провести 64 выборки со среднением, затем сгладить результат двухкаскадным IIR-фильтром, это подавит случайный шум ниже 0.2 LSB, но не устранит систематическое смещение, поэтому используется только вместе с A/B/C.

Быстрые методы проверки

  1. Временно подключить лабораторный источник питания последовательно с резистором 1 Ω, чтобы искусственно поднять VBUS выше 8 В, и посмотреть, сразу ли уменьшится ошибка;

  2. Используя точный милливольтный источник (или DAC + делитель) подавать напрямую на дифференциальные выводы INA226 1 мВ, 5 мВ, 10 мВ, читать регистр Shunt Voltage Register и построить кривую «вход-код», что сразу покажет линейную зону самого компонента.

Обычно после выполнения трёх пунктов A+B+C удаётся снизить ошибку в точке 4 В/1 А до ±0.5 %FS, остаётся только программная калибровка. Удачи в отладке!

Основываясь на вашем описании, проблема с INA226, который показывает заниженные и нелинейные показания тока при низких входных напряжениях (например, 4 В) при больших токах, в то время как проблема исчезает при высоких напряжениях (18 В), может быть проанализирована и устранена следующим образом:

1. Синфазное напряжение и падение напряжения на шунте

Диапазон синфазного напряжения INA226 критически важен. Он требует V- ≤ VCM ≤ V+ (где V- — это земля, а V+ — обычно напряжение шины). Однако падение напряжения на шунтирующем резисторе (I×Rshunt) изменяет напряжение измерения. Когда входное напряжение низкое (например, 4 В), увеличение тока заставляет синфазное напряжение в точке измерения приближаться к минимальному рабочему синфазному напряжению INA226 или опускаться ниже него, что приводит к снижению точности измерения и нелинейности.

Например, если ваш шунтирующий резистор составляет 0,02 Ом (как следует из R5=0,02 Ом на схеме), падение напряжения составляет 10 мВ при 500 мА. При напряжении шины 4 В синфазное напряжение в точке измерения уменьшается из-за этого падения, приближаясь к нижнему пределу диапазона синфазного напряжения INA226, что вызывает отклонения измерений. При 18 В падение на шунте незначительно, поэтому синфазное напряжение остается в нормальном диапазоне.

2. Рассеиваемая мощность шунтирующего резистора и температурный дрейф

Шунтирующий резистор нагревается при больших токах, что приводит к изменению сопротивления с температурой (температурному дрейфу), что вызывает нелинейные измерения. Особенно при низких напряжениях и больших токах рассеиваемая мощность (I²×R) шунтирующего резистора значительна, что приводит к заметному повышению температуры и изменению сопротивления, из-за чего значение тока, рассчитанное по напряжению измерения, отклоняется от фактического значения.

3. Синхронизация I2C и стабильность связи

Хотя контур обратной связи работает нормально, связь по шине I2C у INA226 может иметь временные отклонения при низком напряжении питания. Проверьте, стабильно ли напряжение питания INA226 (3,3 В от AMS1117 на схеме) при низких напряжениях шины. Кроме того, резисторы подтяжки I2C и скорость обмена данными (например, превышающая поддерживаемую устройством скорость) также могут влиять на точность считывания данных, вызывая отклонения показаний.

4. Топология схемы и помехи

Паразитная индуктивность или сопротивление в проводке шунтирующего резистора, а также перекрёстные помехи с другими высокочастотными цепями (такими как TFT-дисплей и высокочастотные сигналы ESP32), также могут влиять на точность измерения. Особенно в сценариях с низким напряжением и малым сигналом влияние шума усиливается.

Рекомендации по обеспечению стабильных показаний и повышения точности

  • Оптимизация синфазного напряжения: Убедитесь, что синфазное напряжение INA226 всегда находится в пределах заданного диапазона. Попробуйте отрегулировать значение шунтирующего резистора (например, выбрать резистор с меньшим сопротивлением, чтобы уменьшить падение напряжения, при этом сбалансировав мощность и разрешение) или ограничить максимальный ток в сценариях с низким напряжением, чтобы избежать чрезмерно низкого синфазного напряжения.
  • Выбор шунтирующего резистора: Используйте сплавные резисторы с низким температурным коэффициентом (такие как сплав манганина) и обеспечьте достаточный запас по мощности (как минимум в два раза превышающей фактическое энергопотребление), чтобы уменьшить влияние температурного дрейфа. Одновременно оптимизируйте конструкцию теплоотвода шунтирующего резистора, например, увеличив тепловые подложки или медные области.
  • Оптимизация связи по I2C: Снизьте скорость обмена данными по шине I2C (например, с 400 кГц до 100 кГц), проверьте, соответствует ли значение резисторов подтяжки (обычно около 4,7 кОм для систем с напряжением 3,3 В), и убедитесь, что синхронизация I2C между ESP32 и INA226 строго соответствует руководству по эксплуатации устройства. Вы также можете добавить декуплирующие конденсаторы (например, параллельно подключить конденсаторы 10 мкФ и 0,1 мкФ к выводу V+ INA226) для повышения стабильности питания.
  • Улучшение топологии схемы: Держите линии измерения шунтирующего резистора как можно более короткими и толстыми, чтобы уменьшить паразитные параметры; разместите INA226 подальше от источников высокочастотных помех (таких как схемы драйвера TFT-дисплея), и при необходимости экранируйте линии измерения или используйте точечное заземление.
  • Программная калибровка и компенсация: Создайте таблицу калибровки для сценариев с низким напряжением в коде и компенсируйте показания INA226 на основе входного напряжения и заданного тока. Например, измерьте отклонения при различных напряжениях и токах с помощью цифрового мультиметра, подберите функцию компенсации и корректируйте показания в реальном времени в программном обеспечении.