В этом уроке мы узнаем как подключить модуль датчика постоянного тока INA226 к плате Arduino. INA226, как и его предшественник INA219, представляет собой устройство, которое может измерять ток, напряжение и мощность. Однако он имеет расширенный диапазон, способный измерять напряжение до 36 В и ток до 20 А.
INA226 — это монитор напряжения шунта и шины, представленный компанией Texas Instruments. Он предлагает интегрированный, с нулевым дрейфом, двунаправленный интерфейс, который контролирует напряжение шунта, напряжение шины, ток и мощность. INA226 взаимодействует с микроконтроллерами через интерфейс I2C, что позволяет легко передавать и интерпретировать данные.
Одной из уникальных особенностей INA226 является настраиваемое время усреднения и преобразования для измерений как напряжения шунта, так и напряжения шины. Это дает возможность оптимизировать устройство для различных приложений и системных требований. Кроме того, он также включает программируемый порог и функцию оповещения для этих измерений, которые могут использоваться для оптимизации на уровне системы, такой как энергосбережение и программирование прерываний, управляемых событиями.
Модуль датчика тока INA226 универсален и находит применение в управлении питанием серверов, телекоммуникациях, оборудовании электропитания и системах управления батареями. По сути, любая система, требующая высокоточного и экономичного мониторинга мощности и тока, может получить значительную выгоду от этого модуля.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Датчик тока INA226 (купить на AliExpress).
- Батарея 3,7 В.
- Двигатель постоянного тока.
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Модуль датчика постоянного тока INA226
INA226 — это усовершенствованная интегральная схема (ИС) шунта тока и монитора мощности, разработанная Texas Instruments. Она работает через интерфейс, совместимый с I2C или SMBus, предлагая прямую цифровую связь с микроконтроллером. Она обеспечивает более широкие возможности, чем INA219, включая лучшую точность, более широкий диапазон напряжения и тока, а также интегрированные математические функции, которые напрямую сообщают мощность в ваттах.
Более подробную информацию об этой ИС можно посмотреть в техническом паспорте INA226.
Схема платы INA226
Модуль INA226 состоит из микросхемы INA226, нескольких резисторов и конденсатора, который помогает уменьшить шум или нежелательные электрические сигналы.
Особенности и характеристики INA226
- Рабочее напряжение (2,7–5,5 В): INA226 работает в диапазоне от 2,7 до 5,5 В. Это расширяет его совместимость с системами, работающими при разных уровнях напряжения. Эта особенность полезна для адаптации к широкому диапазону схемных решений.
- Диапазон напряжения шины (0–36 В): INA226 может контролировать источники питания напряжением до 36 В, что расширяет применимость устройства к различным источникам питания.
- Диапазон измерения тока (от ± 500 мА до ± 50 А): в зависимости от номинала шунтирующего резистора INA226 может контролировать широкий диапазон токов, что позволяет использовать его во множестве приложений, включая управление питанием, зарядные устройства для аккумуляторов и управление двигателями постоянного тока.
- Потребляемая мощность: непрерывный режим: 0,35 мА; режим пониженного энергопотребления: 2,3 мкА.
- Режимы измерения: непрерывный или по требованию («запускаемый»).
- Усреднение 1, 4, 64, 128, 256, 512 или 1024 отдельных измерений.
- Время аналого-цифрового преобразования регулируется на восьми уровнях: от 0,14 до 8,2 мс.
- Более высокая точность: INA226 обеспечивает повышенную точность благодаря 16-битному АЦП, что обеспечивает более точные измерения.
- Программируемый сигнальный контакт для обнаружения нарушений предельных значений и доступных данных.
Распиновка INA226
Модуль датчика INA226 обычно имеет 8 контактов, которые расположены следующим образом:
- VCC: принимает входное напряжение от 2,7 В до 5,5 В.
- GND: Заземляющий контакт, подключенный к заземлению источника питания.
- SDA: последовательная линия данных для интерфейса I2C. Используется для двунаправленной передачи данных.
- SCL: последовательная линия синхронизации для интерфейса I2C. Используется для синхронизации во время передачи данных.
- ALE: Это вывод оповещения. Это выход с открытым стоком, требующий подтягивающего резистора. Этот вывод можно использовать для различных оповещений или как готовый к преобразованию сигнал.
- VBUS: Этот вывод используется для измерения напряжения питания. Он может измерять напряжение питания до 36 В.
- IN- : Этот вывод подключается к нагрузке. Здесь размещается шунтирующий резистор для измерения тока.
- IN+ : этот контакт подключается к источнику питания.
Выбор резистора для измерения тока
Максимальный ток , который может измерить INA226, определяется не непосредственно самой микросхемой, а скорее значением шунтирующего резистора, используемого совместно с ней.
INA226 измеряет падение напряжения на шунтирующем резисторе и на его основе вычисляет ток, используя закон Ома (I = V/R). Поскольку INA226 может измерять максимальное напряжение шунта 81,92 мВ (с разрешением 2,5 мкВ), максимальный ток зависит от сопротивления шунта.
Ниже приведена таблица рекомендуемых шунтов.
Разрешение АЦП
Регистр напряжения шины INA226, 16-битный знаковый объект, имеет младший значащий бит (LSB) или разрешение 1,25 мВ. Это позволяет измерять напряжение в диапазоне полной шкалы +/-40,96 В.
Аналоговый вход INA226, предназначенный для шунтирующего резистора, способен принимать максимальное (полное) напряжение 81,92 мВ. В сочетании с шунтирующим резистором 4 мОм он позволяет измерять ток до +/-20,48 А с разрешением до 625 мкА .
I2C-адрес
Подобно INA219, INA226 использует протокол I2C для связи с микроконтроллерами. Адрес I2C по умолчанию для INA226 — 0x40. Этот адрес можно изменить, чтобы облегчить использование нескольких датчиков INA226 на одной шине I2C. INA226 допускает до 16 различных адресов I2C, от 0x40 до 0x4F. Вы можете изменить адрес I2C, изменив соединения выводов A0 и A1.
Расчеты адресов и значений регистра
INA226 также имеет внутренние регистры, доступ к которым осуществляется через интерфейс I2C. Некоторые из основных:
- Регистр конфигурации (адрес = 00h): подобно INA219 , этот регистр используется для управления различными аспектами INA226.
- Регистр напряжения шунта (адрес = 01h): в этом регистре хранятся необработанные результаты измерения напряжения шунта.
Напряжение шунта (В) = Значение регистра напряжения шунта * 2,5 мкВ - Регистр напряжения шины (адрес = 02h): этот регистр содержит необработанные измерения напряжения шины.
Напряжение шины (В) = Значение регистра напряжения шины * 1,25 мВ - Регистр мощности (адрес = 03h): в этом регистре хранится рассчитанное значение мощности.
Мощность (Вт) = Значение регистра мощности * Power_LSB - Текущий регистр (адрес = 04h): этот регистр содержит вычисленное текущее значение.
Ток (A) = Текущее значение регистра * Текущий_LSB - Регистр калибровки (адрес = 05h): этот регистр используется для установки значения калибровки для расчетов тока и мощности.
Как использовать датчик постоянного тока INA226 с Arduino
Теперь давайте подключим модуль датчика постоянного тока INA226 к Arduino. Аппаратное взаимодействие очень простое.
Ниже представлена простая схема подключения, которую можно использовать для сопряжения датчика тока INA226 с Arduino вместе с внешней нагрузкой и источником питания.
Подключите контакты VCC, GND, SCL и SDA датчика INA219 к контактам 5V, GND, A5 и A4 платы Arduino соответственно. Контакт Vin+ должен быть подключен к источнику питания, а Vin- к нагрузке, как показано на рисунке выше. Датчик INA226 имеет контакт VBus, который используется для измерения напряжения источника. Подключите контакт VBus к выводу Vin-.
Для теста я использовал в качестве источника питания батареи 3,7 В и 9 В. В качестве нагрузки для этой схемы я использовал двигатель постоянного тока.
Контакт Vin+ может принимать входное напряжение до 36 В. Устройство рассчитано на 36 В (абсолютный максимум 40 В) на входных контактах. Поэтому не подавайте на них ничего выше 36 В.
Возможно, вам придется отпаять шунтирующий резистор и заменить его указанным выше резистором, если вы захотите измерить более высокий ток.
Библиотека INA226 Arduino
Существует много версий библиотеки INA226, доступных для использования. Я протестировал большинство из них. Библиотека от Wollewald показалась мне наиболее точной.
Вы можете загрузить библиотеку с GitHub или установить ее напрямую с помощью менеджера библиотек Arduino IDE.
Исходный код программы
Скопируйте следующий код и вставьте его в окно редактора Arduino IDE. Перед загрузкой кода вам может потребоваться внести некоторые изменения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#include <Wire.h> #include <INA226_WE.h> #define I2C_ADDRESS 0x40 INA226_WE ina226 = INA226_WE(I2C_ADDRESS); void setup() { Serial.begin(9600); while (!Serial); // wait until serial comes up on Arduino Leonardo or MKR WiFi 1010 Wire.begin(); ina226.init(); /* Set Number of measurements for shunt and bus voltage which shall be averaged Mode * * Number of samples AVERAGE_1 1 (default) AVERAGE_4 4 AVERAGE_16 16 AVERAGE_64 64 AVERAGE_128 128 AVERAGE_256 256 AVERAGE_512 512 AVERAGE_1024 1024*/ //ina226.setAverage(AVERAGE_16); // choose mode and uncomment for change of default /* Set conversion time in microseconds One set of shunt and bus voltage conversion will take: number of samples to be averaged x conversion time x 2 Mode * * conversion time CONV_TIME_140 140 µs CONV_TIME_204 204 µs CONV_TIME_332 332 µs CONV_TIME_588 588 µs CONV_TIME_1100 1.1 ms (default) CONV_TIME_2116 2.116 ms CONV_TIME_4156 4.156 ms CONV_TIME_8244 8.244 ms */ //ina226.setConversionTime(CONV_TIME_1100); //choose conversion time and uncomment for change of default /* Set measure mode POWER_DOWN - INA226 switched off TRIGGERED - measurement on demand CONTINUOUS - continuous measurements (default)*/ //ina226.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default /* Set Resistor and Current Range if resistor is 5.0 mOhm, current range is up to 10.0 A default is 100 mOhm and about 1.3 A*/ ina226.setResistorRange(0.1, 1.3); // choose resistor 0.1 Ohm and gain range up to 1.3A /* If the current values delivered by the INA226 differ by a constant factor from values obtained with calibrated equipment you can define a correction factor. Correction factor = current delivered from calibrated equipment / current delivered by INA226*/ ina226.setCorrectionFactor(0.93); Serial.println("INA226 Current Sensor Example Sketch - Continuous"); ina226.waitUntilConversionCompleted(); //if you comment this line the first data might be zero } void loop() { float shuntVoltage_mV = 0.0; float loadVoltage_V = 0.0; float busVoltage_V = 0.0; float current_mA = 0.0; float power_mW = 0.0; ina226.readAndClearFlags(); shuntVoltage_mV = ina226.getShuntVoltage_mV(); busVoltage_V = ina226.getBusVoltage_V(); current_mA = ina226.getCurrent_mA(); power_mW = ina226.getBusPower(); loadVoltage_V = busVoltage_V + (shuntVoltage_mV / 1000); Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV); Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V); Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V); Serial.print("Current[mA]: "); Serial.println(current_mA); Serial.print("Bus Power [mW]: "); Serial.println(power_mW); if (!ina226.overflow) { Serial.println("Values OK - no overflow"); } else { Serial.println("Overflow! Choose higher current range"); } Serial.println(); delay(3000); } |
Модификации и настройка кода
В этот код необходимо внести некоторые изменения, чтобы получить точный результат.
1 |
ina226.setResistorRange(0.1, 1.3); |
Эта строка устанавливает резистор и диапазон тока. Если резистор 5,0 мОм, диапазон тока до 10 А. По умолчанию 100 мОм и около 1,3 А.
1 |
ina226.setCorrectionFactor(0.93); |
Если текущие значения, выдаваемые INA226, отличаются на постоянный коэффициент от значений, полученных с помощью калиброванного оборудования, вы можете определить поправочный коэффициент.
Ниже приведены некоторые другие функции и требуемые настройки:
- Установите количество отдельных измерений для преобразования напряжения шунта и шины с помощью
setAverage()
- Усредняются 1, 4, 16, 64, 128, 256, 512 или 1024 отдельных измерений
- Установите время аналого-цифрового преобразования для напряжения шунта и шины с помощью
setConvTime()
- 8 уровней, регулируемых от 140 мкс до 8,244 мс
- Примечание: получение набора данных о напряжении шунта и шины занимает в два раза больше времени.
- Установите режим измерения с помощью
setMeasureMode()
- CONTINUOUS (НЕПРЕРЫВНЫЙ) – непрерывное измерение
- TRIGGERED (ТРИГГЕРНЫЙ) – «по запросу»: я объясню в следующем примере.
- POWER_DOWN – выключает INA226. Но лучше использовать более удобную
powerDown()
функцию, которая описана ниже. - INA226 на самом деле позволяет определять шунтовые или шинные напряжения – но я этого не реализовал. Используя мою библиотеку, измерения доступны только в двойном пакете.
- Установите текущий диапазон с помощью
setCurrentRange()
- Вы можете установить 400 или 800 мА в качестве максимального тока. Чем меньше диапазон тока, тем выше разрешение для тока и мощности.
Результаты тестирования
После загрузки кода на плату Arduino можно приступить к тестированию настройки.
Сначала подключите литий-ионную батарею 3,7 В к контакту Vin+, а двигатель постоянного тока к контакту Vin-. Двигатель постоянного тока начнет вращаться.
Теперь откройте последовательный монитор, и вы увидите следующие результаты для источника 3,7 В.
Извлеките батарею 3,7 В и подключите батарею 9 В.
Та же схема при испытании с источником постоянного тока 9 В дает следующие результаты.
Заключение
В заключение, модуль датчика постоянного тока INA226 — это очень универсальное и мощное устройство, идеально подходящее для широкого спектра применений, где требуется точный мониторинг мощности, тока и напряжения. Он имеет расширенный диапазон по сравнению со своим предшественником INA219, позволяя измерять до 36 В напряжения и 20 А тока.
Интерфейс этого модуля датчика тока INA226 с Arduino позволяет нам использовать его расширенные возможности простым способом, что делает его бесценным инструментом для тех, кто ищет высокоточные и экономически эффективные решения для мониторинга. Таким образом, освоив интерфейс INA226 с Arduino, мы можем значительно расширить наши возможности по мониторингу и управлению питанием в электронных системах.
104 просмотров