Подключение датчика напряжения и тока INA3221 к Arduino
Сегодня расскажу о трехканальном цифровом измерителе тока и напряжения на основе микросхемы INA3221. Диапазон измеряемого напряжения находится в диапазоне 0 — 26 Вольт, а максимальный измеряемый ток составляет около 1,6 Ампера, на канал. Ограничениями измеряемого тока является так называемых шунтов, которые представляют собой три резистора с маркировкой R100 на модуле. Эти резисторы имеют значение 0,1 Ом, и если необходимо увеличить измеряемый ток, необходимо уменьшить сопротивление.
Технические параметры
► Тип интерфейса: I2C;
► АЦП: 12-разрядный;
► Максимум измерений тока: ±1,638 А;
► Максимум измерений напряжения: 26 Вольт;
► Разрешающая способность 0,4 мА;
► Сопротивление шунтов: 0,1 Ом;
► Напряжение питания: от 2,7 до 5,5 Вольт;
► Габариты: 38х 32 х 3 мм;
► Вес: 10 грам.
Описание модуля INA3221
Основная и единственная микросхема модуля, это INA3221 производства «Texas Instruments», которая является трехканальном измерителем напряжения и тока. Так же, для оповещения, о проблемах или о превышении заданных параметров, выведено несколько программируемых выводов. Связь с микроконтроллером осуществляется с помощью интерфейса I2C, подтягивающие резисторы уже установлены на плате.
На модуле очень много разъемов, назначение каждого можно посмотреть ниже.
Назначение контактов №1 (маленькие контакты):
► VS — питание модуля 2,7 до 5,5 вольт;
► GND — питание модуля, земля;
► SCL — последовательные данные шины I2C (serial data);
► SDA — последовательное тактирование шины данных I2C (serial clock);
► PV — цифровой выход сигнала превышения напряжения, программируется, если вышел за указанные пределы, установится в единицу;
► CRI — цифровой выход о критической ситуации, такие ошибки как переполюсовка или короткой замыкание, установится в единицу;
► WAR — предупреждение об ошибке измерения;
► ТС — контроль таймингов, цифровой. Меняет свое состояние если пробит один из шунтов, установится в единицу.
Назначение контактов №2 (большие контакты):
► CH1, CH2, CH3 — вывод, для подключения нагрузки.
► VPU — вывод мониторинга допустимой мощности. Подтянут к контакту PV через резистор 10 кОм;
► POW — плюс питания. Сюда следует подключать, так сказать, транзитное питание которое хотите контролировать. На выходах СН1, СН1 и СН3 выводится плюс именно с этого входа через шунт. Максимально допустимое напряжение этого канала составляет 26 вольт.
► GND (большой, рядом с POV и VPU) — минус от источника, плюс которого подается на POW.
Так же, на модуле есть 5 светодиодов, назначение каждого, можно посмотреть ниже
Назначение светодиодов:
► LED1 — индикатор наличия питания;
► LED2 — указывает на то что питание находится в запрограммированном диапазоне.
► LED3 — указатель критической проблемы такой как неверная полярность или короткое замыкание;
► LED4 — ошибка измерения;
► LED5 — обрыв линии питания одного из трех выводов;
На модуле можно установить четыре адреса, для этого необходимо установить перемычку на группе контактов A0 (только одну), что дает возможность подключить к одному микроконтроллеру сразу четыре датчика INA3221
Назначение перемычек:
► GND — 0x40;
► SCL — 0x41;
► SDA — 0x42;
► VS — 0x43.
Подключение датчика INA3221 к Arduino
В примере покажу схему подключения датчика тока и напряжения INA3221 к плате Arduino UNO и напишем небольшую программу, в которой считаем показания с датчика. В примере буду использовать внешний источник питания, на 5 Вольт, а в качестве нагрузке подключим два резистора к каналу CH1 и CH2, а канал CH3 ставим пустым. Все показания выведем на последовательной порт.
Необходимые компоненты.
► Arduino UNO R3 x 1 шт.
► Датчика напряжения и тока INA3221 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт
Подключение.
Для подключения модуля INA3221 к плате Arduino необходимо задействовать в общей сложности 4 провода. Подключаем контакты VS и GND с INA3221 к контактам 5 В и GND на Arduino UNO, а контакты SCL и SDA с INA3221 к контактам A5 и A4 на Arduino UNO. Затем внешний источник питания, подключаем к контактам POW и GND и нагрузку на отдельные каналы, CH и GND (CH1, CH2, CH3).
Установка библиотеки.
Для работы, будем использовать библиотеку «INA3221«, скачать ее можно с github или в конце статьи.
Программа
Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO.
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 |
#include <INA3221.h> #define PRINT_DEC_POINTS 3 INA3221 ina3221(INA3221_ADDR40_GND); void setup() { Serial.begin(115200); ina3221.begin(); ina3221.reset(); // Set shunt resistors to 10 mOhm for all channels ina3221.setShuntRes(100, 100, 100); // Set series filter resistors to 10 Ohm for all channels. // Series filter resistors introduce error to the current measurement. // The error can be estimated and depends on the resitor values and the bus // voltage. ina3221.setFilterRes(10, 10, 10); } void loop() { float current[3]; float current_compensated[3]; float voltage[3]; current[0] = ina3221.getCurrent(INA3221_CH1); current_compensated[0] = ina3221.getCurrentCompensated(INA3221_CH1); voltage[0] = ina3221.getVoltage(INA3221_CH1); current[1] = ina3221.getCurrent(INA3221_CH2); current_compensated[1] = ina3221.getCurrentCompensated(INA3221_CH2); voltage[1] = ina3221.getVoltage(INA3221_CH2); current[2] = ina3221.getCurrent(INA3221_CH3); current_compensated[2] = ina3221.getCurrentCompensated(INA3221_CH3); voltage[2] = ina3221.getVoltage(INA3221_CH3); Serial.print("Channel 1: \n Current: "); Serial.print(current[0], PRINT_DEC_POINTS); Serial.print("A\n Compensated current: "); Serial.print(current_compensated[0], PRINT_DEC_POINTS); Serial.print("\n Voltage: "); Serial.print(voltage[0], PRINT_DEC_POINTS); Serial.println("V"); Serial.print("Channel 2: \n Current: "); Serial.print(current[1], PRINT_DEC_POINTS); Serial.print("A\n Compensated current: "); Serial.print(current_compensated[1], PRINT_DEC_POINTS); Serial.print("\n Voltage: "); Serial.print(voltage[1], PRINT_DEC_POINTS); Serial.println("V"); Serial.print("Channel 3: \n Current: "); Serial.print(current[2], PRINT_DEC_POINTS); Serial.print("A\n Compensated current: "); Serial.print(current_compensated[2], PRINT_DEC_POINTS); Serial.print("\n Voltage: "); Serial.print(voltage[2], PRINT_DEC_POINTS); Serial.println("V\n"); delay(1000); } |
Получение данных с INA3221.
Перед тем как подключать нагрузку, необходимо подать с источника питания напряжение на контакты POW и GND, в моем случаи 12 Вольт. В качестве нагрузки, установлено дв резистора на 1.5 кОм.
Ссылки
Библиотека INA3221 v.0.0.1
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчика напряжения и тока INA3221
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчика напряжения и тока INA3221
Адреса модуля указаны неверно. A0 to Vss = 0x41, A0 to SDA = 0x42, A0 to SCL = 0x43.