Главная → Питание

INA219: измеряем ток и напряжение в своём проекте — обзор и подключение

23 сентября 2026 · Питание

Зачем ставить датчик тока

Пока проект живёт на макетке, ток обычно оценивают на глаз: «серве надо до 700 мА, значит блок на два ампера хватит». Добавляется вторая нагрузка — питание проседает, плата перезагружается, а кто виноват, без измерения не понять. INA219 закрывает вопрос целиком: чип меряет падение на шунте (это ток), напряжение на шине и сам перемножает одно на другое, отдавая ватты по I²C. На ходовом модуле уже стоит шунт с маркировкой R100 — это 0,1 Ом, вся обвязка распаяна: четыре провода к контроллеру и две клеммы в разрыв плюсового провода.

Как он устроен

По datasheet TI (SBOS448G) чип включается в разрыв плюса: входы IN+ и IN− сидят по краям шунта и меряют падение до ±320 мВ. Диапазонов четыре — ±40, ±80, ±160 и ±320 мВ, выбираются битами PGA. Напряжение шины снимается с IN− относительно земли, причём 0–26 В — абсолютный максимум, даже когда в конфигурации выбрана шкала 32 В. Внутри — 12-битный сигма-дельта АЦП с частотой выборки 500 кГц: одно преобразование занимает 532 мкс, а с усреднением до 128 выборок — до 68,1 мс, зато шум давится в зародыше.

Ток и мощность чип отдаёт только после записи калибровки: Cal = trunc(0,04096 / (Current_LSB × R_шунта)), где Current_LSB — это максимум ожидаемого тока, делённый на 32768. Для штатного шунта 0,1 Ом и потолка 3,2 А выходит Current_LSB = 0,1 мА и Cal = 4096 — столько зашито в дефолтный профиль библиотеки Adafruit. Мощность считается внутри чипа: шаг регистра мощности равен двадцати шагам регистра тока. А пока калибровка не записана, регистры тока (04h) и мощности (03h) честно держат нули — это документированное поведение, а не брак.

Характеристики по datasheet TI

Параметр Значение
Диапазон шины 0–26 В (шкалы АЦП 16 или 32 В; выше 26 В подавать нельзя)
Полная шкала шунта ±40 / ±80 / ±160 / ±320 мВ (PGA /1…/8)
Разрешение 12 бит; шаг шунта 10 мкВ, шаг шины 4 мВ
Точность тока ±0,2% тип., ±0,5% макс. по температуре (A); у INA219B — ±0,3% макс.
Смещение входа ±10 мкВ макс. при PGA /1, дрейф 0,1 мкВ/°C, CMRR от 100 дБ
Время преобразования от 532 мкс (12 бит) до 68,1 мс (128 усреднений)
Питание 3–5,5 В, 0,7 мА тип. (до 1 мА), в power-down 6–15 мкА
Адреса на шине 16 штук (0x40–0x4F): выводы A0/A1 к GND, VS+, SDA или SCL
Интерфейс I²C до 400 кГц (high-speed до 2,56 МГц), таймаут SMBus 28 мс
Температура −40…+125 °C
Корпуса SOIC-8, SOT-23-8

Подключение к Arduino и ESP32

  1. Шунт — в разрыв плюса. Плюс источника идёт на клемму VIN+ модуля, с клеммы VIN− провод уходит на плюс нагрузки. Минус источника, минус нагрузки и GND модуля сходятся в одну землю.
  2. Четыре провода к плате. Arduino Uno: VCC → 5V, GND → GND, SDA → A4, SCL → A5. ESP32: VCC → 3V3 (почему — ниже), GND → GND, SDA → GPIO21, SCL → GPIO22.
  3. Почему ESP32 — от 3,3 В. Порог логической единицы у INA219 равен 0,7 × VCC. При питании от 5 В это 3,5 В, и ESP32 со своими 3,3 В на SDA формально не дотягивается. При питании от 3,3 В порог падает до 2,31 В — всё честно. Сам чип от трёх вольт работает без ограничений.
  4. Что по силам. Шина до 26 В, ток до ±3,2 А со штатным шунтом (0,1 Ом × 320 мВ). Бортовая 12 В, литиевая банка, солнечная панель — пожалуйста; 36-вольтовые цепи и стартерные токи — уже нет.

Схема для кода ниже: источник питания плюс → VIN+, VIN− → нагрузка, земли вместе. VCC модуля — в 5V у Uno или в 3V3 у ESP32, SDA/SCL — по пинам из списка выше.

// INA219: напряжение, ток, мощность. Uno (A4/A5) и ESP32 (21/22).
// Библиотека: Adafruit INA219 из менеджера библиотек.
#include <Wire.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;

void setup() {
  Serial.begin(115200);            // на Uno можно 9600
  if (!ina219.begin()) {           // адрес по умолчанию 0x40 (A0, A1 на GND)
    Serial.println("INA219 не найден: проверь проводку и адрес");
    while (1) delay(10);
  }
  // Профиль 32 В: Cal = 4096, Current_LSB = 0,1 мА при шунте 0,1 Ом
  ina219.setCalibration_32V_2A();
}

void loop() {
  float bus = ina219.getBusVoltage_V();      // напряжение на нагрузке
  float mv = ina219.getShuntVoltage_mV();    // падение на шунте
  float ma = ina219.getCurrent_mA();         // ток: считается после калибровки
  float mw = ina219.getPower_mW();           // мощность: чип умножил сам
  Serial.print("U=");  Serial.print(bus); Serial.print(" В  ");
  Serial.print("I=");  Serial.print(ma);  Serial.print(" мА  ");
  Serial.print("P=");  Serial.print(mw);  Serial.println(" мВт");
  delay(1000);
}

Частые ошибки

  1. Читают нулевой ток. Пока в регистр калибровки (05h) не записано значение, регистры тока и мощности равны нулю. Библиотека Adafruit делает запись в begin() и setCalibration(); если говоришь с чипом напрямую — сначала калибровка, потом чтение.
  2. Вешают модуль в минусовую линию. Ток он мерить сможет (чип двунаправленный), но напряжение шины считается от IN− до земли: на низком плюсе IN− сидит почти на нуле, и вместо 12 В на экране 0,0.
  3. Питают от 5 В и подключают к ESP32. VIH = 0,7 × VCC = 3,5 В — уровень ESP32 не гарантирован. Кормите модуль от 3V3: порог 2,31 В, и вопросов нет.
  4. Превышают 26 В на шине. «32 В» в конфигурации — разрядность шкалы АЦП, а не допуск входа. Двадцать четыре вольта мерить можно, тридцать шесть — деградация или смерть чипа.
  5. Держат максимальный ток часами. На 3,2 А на шунте 0,1 Ом рассеивается около ватта: маленький SMD-резистор греется, сопротивление уплывает, показания уходят. Для постоянных токов за три ампера — внешний шунт меньшего сопротивления и пересчёт Current_LSB и Cal.
  6. Верят цифрам без поверки. Сам чип точен (доли процента), а вот резистор на модуле бывает грубее. Даташит это понимает и даёт системную калибровку: измерь ток эталонным амперметром и подгони Cal — уравнение 6 из datasheet.

Куда встроить

В паре с зарядным TP4056 INA219 покажет реальный ток заряда и ёмкость, ушедшую в банку. А на выходе понижающего LM2596 или повышающего MT3608 честно ответит, сколько преобразователь отдаёт под нагрузкой и куда деваются обещанные амперы.

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Готовые проекты

Умная розетка на ESP32 и реле: делаем сами, управляем из браузера

Что это за проект Делаем розетку, которую включают и выключают из браузера. Внутри — плата на ESP32-WROOM-32 и реле Songle SRD-05VDC-SL-C. Логика…

Читать обзор →
Моторы и приводы

Реле-модуль на 1, 2 и 4 канала для Arduino и ESP32: обзор по паспорту Songle

Зачем реле, если есть транзисторы У пина Arduino Uno потолок — 40 мА, у ESP32 меньше того. ТЭН, насос или лампа на…

Читать обзор →
Готовые проекты

Автономная метеостанция на ESP32: собираем из трёх модулей

Соберём законченное устройство: комнатная метеостанция, которая показывает температуру, влажность и давление на экране и работает от аккумулятора. Все три модуля мы уже…

Читать обзор →