Для проекта нам понадобятся:
- аналоговый датчик тока ACS712;
- цифровой датчик тока INA219;
- трёхканальный цифровой датчик тока INA3221;
- Arduino UNO или иная совместимая плата;
- какая-либо нагрузка, например, двигатель постоянного тока;
- соединительные провода (например, такой набор проводов);
- макетная плата;
- персональный компьютер со средой разработки Arduino IDE.
Датчики тока, как следует из их названия, служат для измерения силы тока. Существуют датчики, которые основаны на различных физических эффектах и имеют различные особенности. В частности, рассматриваемый датчик ACS712 основан на эффекте Холла, датчик INA219 имеет в своём составе аналого-цифровой преобразователь (АЦП), а датчик INA3221 – трёхканальный. Рассмотрим их по порядку.
1Описание датчикатока ACS712
Датчик тока ACS712 – это датчик, который основан на эффекте Холла. Эффект Холла заключается в том, что когда через проводник, помещённый в магнитное поле, протекает электрический ток, в проводнике возникает напряжение. Это напряжение и служит индикатором силы тока: оно линейно зависит от силы тока. Ещё оно имеет небольшую зависимость от температуры окружающей среды и поддаётся влиянию внешних магнитных полей. Так, например, на графике ниже показана зависимость напряжения на выходе датчика ACS712 от силы протекающего тока (для одной из разновидностей датчика, об этом чуть ниже) при различных температурах:
Зависимость напряжения на выходе датчика ACS712 от силы тока
Модуль с датчиком ACS712 может выглядеть, например, так:
Модуль с датчиком тока ACS712 и схема подключения
Датчик ACS712 имеет следующие характеристики:
- работает с постоянным и переменным током;
- ток потребления – до 13 мА;
- температура эксплуатации -40…+85 °C.
Существуют несколько разновидностей датчика ACS712, которые отличаются величиной измеряемого тока. Так, существуют разновидности с максимально измеряемым током 5, 20 и 30 А. Широкий диапазон измеряемых значений тока можно отнести к существенным преимуществам датчика ACS712. Перечисленные модификации имеют чувствительность 185, 100 и 66 мВ/А соответственно.
Практика применения
Чаще всего данные изделия используются как измерители в схемах токовых реле, которые управляют режимами работы различного электроприводного оборудования и предохраняют его от экстремальных ситуаций.
Токовые реле способны защитить любое механическое устройство от заклинивания или других условий перегрузки, которые приводят к ощутимому увеличению нагрузки на двигатель. Функционально они определяют уровни тока и выдают выходной сигнал при достижении указанного значения. Такие реле используются для:
- Сигнала сильноточных условий, например, забитая зёрнами доверху кофемолка;
- Некоторых слаботочных условий, например, работающий насос при низком уровне воды.
Чтобы удовлетворить требования разнообразного набора приложений, в настоящее время используется блочный принцип компоновки датчиков, включая применение USB-разъёмов, монтаж на DIN-рейку и кольцевые исполнения устройств. Это обеспечивает выполнение следующих функций:
- Надёжную работу на любых режимах эксплуатации;
- Возможность применения трансформаторов;
- Регулировка текущих параметров, которые могут быть фиксированными или регулируемыми;
- Аналоговый или цифровой выход, включая и вариант с коротким замыканием;
- Различные исполнения блоков питания.
В качестве примера рассмотрим схему датчика тока для управления работой водяного насоса, обеспечивающего подачу воды в дом.
Кавитация — это разрушительное состояние, вызванное присутствием пузырьков, которые образуются, когда центробежный насос или вертикальный турбинный насос работает с низким уровнем жидкости. Образующиеся пузырьки затем лопаются, что приводит к точечной коррозии и разрушению исполнительного узла насоса. Подобную ситуацию предотвращает токовое реле.
Когда насос работает в нормальном режиме, и жидкость полностью перекрывает его впускное отверстие, двигатель насоса потребляет номинальный рабочий ток. В случае снижения уровня воды потребляемый ток уменьшается. Если кнопка запуска нажата, одновременно включаются стартёр M и таймер TD. Реле CD настроено на максимальный ток, поэтому его контакт при первоначальном запуске двигателя не будет замкнут. При падении силы тока ниже установленного минимума реле включается, а, после истечения времени ожидания TD, включается в его нормально замкнутый контакт. Соответственно контакты CR размыкаются и обесточивают двигатель насоса.
Применение такого детектора исключает автоматический перезапуск насоса, поскольку оператору необходимо убедиться в том, что уровень жидкости перед впускным отверстием достаточен.
2Подключение датчика тока ACS712 к Arduino
Как мы помним из курса школьной физики, для измерения тока необходимо пропустить ток через измерительный прибор, помещённый в разрыв между источником питания и нагрузкой. Соответственно, схема подключения датчика проста:
Вывод датчика ACS712 | Назначение |
VCC | Питание, 5 В |
GND | Земля |
OUT | Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока |
IP+ | Вывод 1 для подачи измеряемого тока |
IP- | Вывод 2 для подачи измеряемого тока |
Выводы IP+ и IP- как раз и есть тот разрыв цепи, через который нужно пропустить интересующий ток. Если перепутать полярность, то измерения будут с обратным знаком.
Кстати, эта особенность – измерять ток как с положительным, так и отрицательным знаком, позволяет использовать датчик ACS712 для измерений переменного тока.
Таким образом, для подключения датчика ACS712 к плате Arduino используются 3 провода:
Схема подключения датчика тока ACS712 к Arduino
Выход сенсора VOUT подключим к любому аналоговому выводу Arduino, например, A0. В качестве нагрузки будем использовать двигатель постоянного тока.
Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока
Либо вместо нагрузки можно использовать мощную лампу накаливания. Либо любую другую нагрузку.
Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания
Питать нагрузку будем от лабораторного источника тока, на котором можно менять напряжение и ток.
Микросхемы с элементами Холла
В рамках этой концепции возможны два различных способа контроля тока. Первый, более традиционный вариант предполагает установку микросхемы с элементом Холла в сравнительно тонком немагнитном зазоре, который специально оставляется у ферромагнитного сердечника, охватывающего проводник с измеряемым током. Варианты компоновки такого датчика тока показаны на рисунке 1.
Рис. 1. Датчик тока с микросхемой Холла, установленной в немагнитном зазоре сердечника, рас- положенного вокруг проводника
Важные особенности этих датчиков:
- принципиально необходим ферромагнитный сердечник, охватывающий проводник с контролируемым током;
- немагнитный зазор сравнительно мал (2…5 мм), не зависит от диапазона измеряемых токов (кроме случаев очень большого протекающего тока) и определяется, в основном, толщиной корпуса микросхемы с элементом Холла;
- сердечник обеспечивает концентрацию магнитного поля измеряемого тока и, одновременно, экранирует большинство паразитных магнитных полей, в частности, индуцированных токами, протекающими по другим проводникам;
- измеряемое магнитное поле в зазоре сердечника направлено перпендикулярно к поверхности чипа;
- магнитная индукция в зазоре (в зоне установки элемента Холла) почти не зависит от поперечного смещения микросхемы, но, с другой стороны, достаточно сильно зависит от толщины зазора;
- размеры сердечника достаточно велики (много больше, чем, например, размеры магниточувствительной микросхемы);
- сложно установить датчик с замкнутым сердечником на проводник с измеряемым током;
- паразитные параметры ферромагнитного сердечника: магнитное насыщение, магнитный гистерезис, вихревые токи при быстром перемагничивании, температурная зависимость характеристик – принципиально ограничивают достижимые свойства датчика тока.
Основное соотношение, определяющее чувствительность датчиков токов с охватывающим сердечником, вычисляется по формуле:
B = 1.25×I/d
где B – индукция в зазоре (перпендикулярно поверхности чипа), мТл;
I – измеряемый ток (если сердечник охватывает один проводник), А;
d – толщина немагнитного зазора, мм.
3Чтение показаний датчика тока ACS712с помощью Arduino
В скетче будем постоянно читать значение с порта A0 и выводить в монитор последовательных данных. Напомню, АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. Подробнее здесь. Это означает, что с аналогового порта могут приходить значения от 0 до 210 = 1024 для 10-разрядного АЦП. Будем считать, что у нас датчик тока, диапазон измерений которого от -5 А до +5 А, а чувствительность 185 мВ/А.
Если на 1 А приходится 185 мВ, это соответствует примерно 38 единицам измерения АЦП: 185·1024/5000 = 37.888, (1) где 5000 – это максимальное значение напряжения, которое способен измерить АЦП Arduino, в милливольтах.
На выходе OUT датчика ACS712 при отсутствии измеряемого тока должна быть половина напряжения питания, т.е. 2.5 В. Так как вся шкала АЦП лежит в диапазоне от 0 до 1024, то при отсутствии измеряемого тока мы должны считывать с аналогового порта Arduino число 512. Это начало шкалы отсчёта. Обозначим его value_zero. Отклонение тока value_adc от нулевого уровня в большую или меньшую сторону и будет показывать силу тока. Следовательно, чтобы посчитать в амперах значение тока с датчика ACS712, необходимо разницу
нулевого уровня и измеренного значения с аналогового порта A0 поделить на 38. А чтобы получить ток в миллиамперах, следует умножить это значение на 1000: I(mA) = (value_zero − value_adc) / 38·1000 (2)
Пояснение принципа вычисления силы тока
На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта, добавим в скетч примитивную калибровку. Калибровка будет заключаться в том, что некоторое количество раз прочитаем значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредним его. Естественно, нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.
Скетч для измерения постоянного тока датчиком ACS712 (разворачивается) const int acs712_pin = A0; int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2 void setup() {
Serial.begin(9600); calibrate(); } // определим нуль шкалы (до включения нагрузки)
void calibrate(){
zero = 0; int repeats = 10; for (int i=0; i
int getCurrent(int adc) {
int delta = zero — adc; // отклонение от нуля шкалы float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер, по формуле (1) int current = (int)delta*1000/scale; // считаем ток в мА и округляем до целых, по формуле (2) return current; }
Загрузим скетч и плавно начнём поднимать напряжение и ток на нагрузке. Какое-то время подождём, а затем начнём уменьшать ток. В результате получим примерно такую картинку:
Вывод тока датчика ACS712 в монитор последовательного порта и его график
Как видно, аналоговый сигнал постоянно «прыгает». Чтобы этого избежать, следует добавить в скетч сглаживание. Для этого будем проводить подряд несколько измерений, а затем брать среднее арифметическое от них в качестве действительного значения. Заодно совместим начальную калибровку, т.к. она выполняется точно так же. Вот как изменится в результате скетч:
Скетч для измерения постоянного тока датчиком ACS712 со сглаживанием const int acs712_pin = A0; int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2 void setup() {
Serial.begin(9600); zero = getSmoothedValue(); // определим нуль шкалы (до включения нагрузки) Serial.print(«Zero=»); Serial.println(zero); } // получает сглаженное значение с АЦП Arduino
int getSmoothedValue(){
int value; int repeats = 10; for (int i=0; i
void loop() {
int sensorValue = getSmoothedValue(); // читаем значение с АЦП и выводим в монитор Serial.print(sensorValue); Serial.print(» = «); int c = getCurrent(sensorValue); // преобразуем в значение тока и выводим в монитор Serial.print(c); Serial.println(» mA»); delay(100); } // рассчитывает ток в мА по значению с АЦП
int getCurrent(int adc) {
int delta = zero — adc; // отклонение от нуля шкалы float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер int current = (int)delta*1000/scale; // считаем ток в мА return current; }
Кстати, желательно вынести чувствительность датичка ACS712 в константу в начале скетча, чтобы можно было быстро изменить скетч для модификации датчика с другим диапазоном измерений.
В результате выполнения данного скетча картинка получается гораздо более приятная:
Сглаженный график тока, измеренного датчиком ACS712
Тот же самый принцип заложен в библиотеки для Arduino, которые оперируют с датчиком тока ACS712. Например, вот эта библиотека Troyka Current.
По результату эксперимента получается, что датчик ACS712 очень простой, но при этом довольно не точный. Гораздо точнее датчик тока, который мы рассмотрим в следующем разделе.
Демонстрационные проекты планарных датчиков тока от Melexis
Для ускорения проектирования планарных датчиков тока и гарантированного достижения достаточно высоких характеристик Melexis предлагает пользователям типовые разработки на самые разные диапазоны измеряемых токов:
- Для измерения небольших токов 2…10 А, протекающих по проводникам печатной платы. При этом демонстрируются варианты решений с многовитковыми катушками (3 или 6 витков), обтекаемыми контролируемым током без использования магнитного экрана или с достаточно простым U-образным экраном, в зависимости от требований к чувствительности и точности датчиков. В качестве альтернативного предлагается проект с одним витком тока и экраном более сложной С-образной формы, который обеспечивает высокую концентрацию поля на микросхему. При этом пользователя знакомят с разными вариантами установки C-образного экрана на плату.
- Для измерения токов на печатной плате в диапазоне 10…50 А. Используется один проводник (виток) с применением U-образного экрана или без него. Соответственно, достигается коэффициент передачи планарного датчика 170 или 60 мВ/А.
- Для прямой установки печатной платы с микросхемой MLX91206 версии HF на плоскую медную шину 12х2 мм и использования U-образного экрана. При измерении токов до ±250 А нелинейность передаточной характеристики не превышает 1,5 А. Несмотря на простоту и низкую стоимость такого датчика, он обеспечивает высокую устойчивость к паразитным магнитным полям, механическим вибрациям и смещениям микросхемы.
- Для прямой установки на шину с током и измерений в диапазоне 300…700 А. Датчик показан на рисунке 7. Он обеспечивает нелинейность менее 5 А в диапазоне измеряемых токов ±650 А.
- Пример двухдиапазонной разработки. На одной и той же шине с током расположен планарный датчик на ±5 А (С-образный экран-концентратор, крутизна 400 мВ/А при погрешности в пределах 20…25 мА) и датчик на ±200 А (U-образный экран, крутизна 10 мВ/А при погрешности в пределах 200 мА). Благодаря компактности датчиков, не возникает проблем с их размещением на шине, а высокая перегрузочная способность по измеряемому току обеспечивает совместную работу в исключительно широком диапазоне с высокой относительной точностью при малых токах.
- Планарные датчики тока 10…100 А для кабелей круглой формы.
Рис. 11. Планарный датчик тока ±2 А с много- витковой катушкой измеряемого тока и внеш- ним магнитным экраном
Для измерения очень малых токов (до ±2 А) можно использовать многовитковые катушки, выполненные на изолированном каркасе и обтекаемые контролируемым током. Выбором должного количества витков в сочетании с относительным расположением катушки и микросхемы можно добиться оптимальной чувствительности (полное использование динамического диапазона датчика при данном значении максимального тока). Высокая диэлектрическая прочность каркаса позволяет конструировать датчики с большим допустимым напряжением между цепью измеряемого тока и выходным сигналом микросхемы. При необходимости такой датчик может иметь внешний магнитный экран для улучшения чувствительности и защиты от паразитных магнитных полей (рисунок 11).
Для опробования характеристик планарных датчиков тока компания Melexis выпускает демонстрационный набор DVK91206. Он содержит три варианта печатных плат, на которые можно распаять MLX91206. Платы позволяют выбрать разное число витков, по которым протекает ток. В набор входят также семь микросхем MLX91206 с различными вариантами чувствительности (см. примечания к таблице 1) и три U-образных экрана. В совокупности набор позволяет реализовать значительное количество вариантов планарных датчиков тока и исследовать их характеристики.
4Описание датчика тока,напряжения и мощности INA219
Датчик INA219 – цифровой датчик тока, напряжения и мощности. Он позволяет измерять напряжения от 0 до 26 вольт и ток от 0 до 3,2 ампер. Питается датчик напряжением от 3 до 5,5 В. Существуют модули, полностью готовые к подключению к Arduino. Один из таких модулей GY-219:
Модуль GY-219 с датчиком тока INA219: назначение выводов и частей
Датчик INA219 выполняется в двух разновидностях: A и B. Последняя отличается повышенной точностью и меньшей погрешностью. На фото ниже как раз модификация INA219B.
Модуль GY-219 с датчиком тока INA219
Датчик INA219 имеет 12-разрядный АЦП, соответственно при максимуме измерений ±3,2 А получается разрешающая способность 0,8 мА. Однако можно настроить датчик таким образом, чтобы уменьшить диапазон измеряемой силы тока до ±400 мА; при этом разрешающая способность датчика увеличится до 0,1 мА. При этом можно откалибровать датчик, записав калибровачные данные в специальный регистр. Измеренные данные силы тока, напряжения и можности хранятся в трёх соответствующих регистрах. Кстати, датчик INA219 позволяет осуществлять аппаратную фильтрацию по 128 отсчётам, если измеряемый ток имеет сильные наводки.
Для конфигурирования датчика INA219 и для считывания показаний с него используется последовательный интерфейс I2C. Причём адрес на шине можно задать с помощью перемычек A0 и A1 на модуле. Допустимые адреса:
- 0x40 (без перемычек);
- 0x41 (с перемычкой A0);
- 0x44 (с перемычкой A1);
- 0x45 (установлены обе перемычки).
Соответственно, на одной шине IIC можно иметь до 4-х таких датчиков, подключённых одновременно.
Для современных зарядных устройств: датчики тока Texas Instruments
Алгоритм так называемой быстрой зарядки аккумулятора предполагает точное регулирование тока зарядки. А для этого нужны специализированные микросхемы датчиков тока на базе усилителей сигнала токовых шунтов. Линейку таких микросхем предлагает Texas Instruments.
Устройства с батарейным питанием становятся неотъемлемой частью нашей жизни, поэтому разработчикам все больше внимания приходится уделять проблемам, связанным с быстрой зарядкой этих устройств. За последние несколько лет появились новые подходы к решению проблемы длительных сроков зарядки аккумуляторов, что позволяет пользователям полностью заряжать свои устройства за считанные минуты, а не в течение нескольких часов, как ранее. Рассмотрим тенденции построения систем быстрой зарядки, уделив особое внимание задаче точного регулирования постоянного тока для реализации безопасного и экономически эффективного устройства быстрой зарядки аккумуляторов.
5Подключение датчика тока и напряжения INA219 к Arduino
Для начала пойдём простым путём: скачаем готовую библиотеку, загрузим в Arduino и посмотрим на результат. Существует несколько библиотек для работы с нашим датчиком. Предлагаю воспользоваться вот этой популярной библиотекой для INA219 от Adafruit. Скачаем её, установим стандартным образом и загрузим в Arduino скетч из примеров getcurrent.
Если скетч не компилируется, а в сообщениях об ошибках присутствуют какие-то недостающие компоненты (например, Adafruit_I2CDevice.h или Adafruit_BusIO_Register.h, то необходимо доустановить их. Проще всего это сделать так. Для этого способа требуется подключение к интернету на компьютере, где запущена среда разработки. Открыть в среде Arduino IDE менеджер библиотек: в меню Tools Manage Libraries…. Откроется окно Library Manager. В поле поиска следует ввести adafruit busio. Когда библиотека будет обнаружена и покажется в списке, нажать кнопку Install.
Установка недостающих библиотек через менеджер библиотек Arduino IDE
Подключим модуль GY-219 к Arduino по следующей схеме. SDA и SCL датчика можно подключить как к аналоговым входам A4 и A5 Arduino, так и к специально выделенным портам SDA и SCL (если они есть на вашей плате).
Схема подключения датчика INA219 к Arduino
В качестве нагрузки может быть любой источник, например, электромотор, лампа или просто мощный резистор. У меня это 5 соединённых параллельно 5-ваттных 16-омных резисторов. В качестве источника питания также может выступать любой из имеющихся у вас источников. Я буду использовать лабораторный источник питания.
Датчик INA219 подключён к Arduino
В результате выполнения скетча получится следующий вывод:
Результат работы скетча «GetCurrent» для датчика тока INA219
Отлично! Всё работает! Как говорится, бери – и пользуйся.
Данная библиотека позволяет также проводить калибровку датчика INA219 при необходимости. Подробности – в описании библиотеки и в самих исходниках (в файле Adafruit_INA219.cpp библиотеки даётся большое число пояснений).
Датчик тока своими руками
Если приобрести стандартный датчик (наиболее известны конструкции от торговой марки Arduino) по каким-то соображениям невозможно, устройство можно изготовить и самостоятельно.
Датчик тока фирмы Arduino. Стрелкой указан USB-разъём.
Необходимые компоненты:
- Операционный усилитель LM741, или любой другой, который мог бы действовать как компаратор напряжения.
- Резистор 1 кОм.
- Резистор 470 Ом.
- Светодиод.
Общий вид устройства в сборе, сделанного своими руками, представлен на следующем рисунке. В данной схеме используется эффект Холла, когда разность управляющих потенциалов может изменяться при изменении месторасположения проводника в электромагнитном поле.
6Как читать данные сдатчика тока и напряжения INA219
Если посмотреть на обмен данными по шине I2C, который происходит при работе данного скетча (с помощью логического анализатора, конечно), то увидим следующее.
Осциллограмма чтения регистров датчика INA219
Чтобы понять, что здесь происходит, необходимо познакомиться с картой регистров датчика INA219. Датчик содержит всего 6 регистров. Все регистры 16-разрядные.
Карта регистров датчика тока и напряжения INA219
Адрес регистра | Название регистра | Назначение регистра | Тип |
0x00 | Configuration | Сброс всех регистров, настройка диапазона измерений, усиления PGA, разрешения АЦП и фильтрации. | Чтение/Запись |
0x01 | Shunt voltage | Хранит измеренное значение напряжения на шунтирующем резисторе 0,1 Ом. | Чтение |
0x02 | Bus voltage | Хранит измеренное значение напряжения шины. | Чтение |
0x03 | Power | Хранит измеренное значение мощности. | Чтение |
0x04 | Current | Содержит значение силы тока, протекающего через шунтирующий резистор. | Чтение |
0x05 | Calibration | Калибровочный регистр. Задаёт диапазон измерений и позволяет осуществлять калибровку системы. | Чтение/Запись |
Для обмена с модулем воспользуемся отладочной платой с микросхемой FT2232H и программой SPI via FTDI. Это будет проще, чем использовать Arduino, т.к. для внесения изменений в целях эксперимента не придётся каждый раз перепрограммировать ПЗУ, а можно будет вносить изменения в передаваемые команды «на лету». Подключим датчик к питанию 3,3 В и к земле, взятых от Arduino. А ножки SCL и SDA подключим к выводам ADBUS0 и ADBUS1+ADBUS2 платы с микросхемой FTDI, соответственно.
Чтение регистров датчика тока INA219 с помощью FT2232H
Запустим программу SPI via FTDI, выберем в меню «Устройство» интерфейс I2C. Подключимся к порту A. Просканируем устройства на шине I2C. Программа найдёт устройство по адресу 64 (0x40), если конечно вы не меняли адрес перемычками A0 и A1. Выберем это устройство. В разделе «Чтение» зададим размер буфера 2 байта, напишем команду 00 и нажмём кнопку «Прочитать». Прочитанные данные будут в таблице, которая открывается по нажатию на кнопку с пиктограммой таблицы. Вот что мы увидим.
Чтение регистров датчика тока INA219 с помощью FT2232H и программы «SPI via FTDI»
Как вы уже наверное догадались, команда «0» означает адрес регистра, из которого мы хотим прочитать данные. А число 0x399F – это данные в нулевом регистре (регистр конфигурации). И это соответствует документации, т.к. после включения и загрузки микросхема INA219 имеет именно такую конфигурацию по умолчанию. Вот какую структуру имеет регистр конфигурации.
Структура конфигурационного регистра датчика тока INA219
В регистре конфигурации датчика INA219 присутствуют следующие части:
- RST (reset) – сброс;
- BRNG (bus voltage range) – диапазон измерения шины;
- BADC (bus ADC resolution/averaging) – разрешающая способность АЦП шины;
- SADC (shunt ADC resolution/averaging) – разрешающая способность АЦП шунта;
- MODE – режим;
- PG – усиление и диапазон PGA.
0x399F в двоичном виде это «001_11_0011_0011_111». Следовательно, значения по умолчанию после включения такие.
- BRNG равен «1», что означает диапазон измерений 32 вольта FSR;
- PG равно «11»: задаёт диапазон ±320 мВ и коэффициент усиления 8;
- BADC, SADC равны «0011»: максимальная разрешающая способность АЦП – 12 бит;
- MODE, равное «111», означает непрерывный режим работы, включены и шунт, и шина.
Для чтения других регистров необходимо сначала так же записать их адрес в поле «Чтение» «Команда», а затем прочитать 2 байта. Или можно записать номер регистра в поле «Запись» «Команда», а затем просто читать (не указывая адрес регистра в команде чтения).
К сожалению, последовательного чтения всех регистров микросхемы INA219 «за один проход» не предусмотрено.
Вернёмся к нашей осциллограмме. Мы видим на ней 6 циклов чтения (каждый начинается с зелёной точки ● и заканчивается тёмно-красной ●). Сначала читаем регистр с напряжением шунта Vшунт. (адрес 0x01), который хранит значение 0x1957. Далее читаем значение регистра напряжения шины Vшины (0x02), в котором значение 0x19BA. Далее читаем регистр калибровки Cal (0x05) со значением 0x1000. Потом регистр тока шунта Iшунт. (0x04), в котором значение 0x1959. Потом снова читаем регистр калибровки Cal (0x05). И наконец читаем регистр мощности Pwr (0x03), в котором находится значение 0x042B. При этом монитор последовательного порта показывает следующее:
Вывод монитора порта в момент снятия осциллограммы с датчика INA219
Рассмотрим, как привести данные в регистрах «в человеческий вид». Нам интересны не все значения, а только напряжения и ток. Плюс регистр калибровки, который играет роль поправочного коэффициента.
Регистр Shunt Voltage (адрес 0x01) датчика INA219
Напряжение на шунте равняется тому значению, которое записано в регистре, поделённое на 100: Uшунта = Shunt_voltage/100 = 0x1957/100 = 64.87 (мВ) Для случаев, когда напряжение отрицательное, расчёт несколько сложнее. Это можно посмотреть в техническом описании (datasheet).
Регистр Bus Voltage (адрес 0x02) датчика INA219
Начнём с регистра, в котором записано напряжение шины, т.к. он самый простой. В текущий момент данные в нём это 0x19BA. Согласно всё тому же техническому описанию (datasheet на INA219), для преобразования значения в милливольты необходимо сделать следующее: Uшины = (0x19BA >> 3) × 32000 (мВ) / 8000 = 3292 (мВ).
Здесь 0x19BA это значение в регистре. Его нужно сдвинуть на 3 разряда вправо, т.к. данные о напряжении хранятся, начиная с 3-го разряда. 32000 (мВ) – это предел шкалы измерения (он указан в регистре конфигурации). А 8000 – это предел шкалы измерения в отсчётах. Получается 3292 (мВ) или 3.29 вольта, что мы и видим в выводе скетча в мониторе порта Arduino.
Регистр Current Register (адрес 0x04) датчика INA219
Значение тока рассчитывается тоже просто: I = 0x1959 × 0x1000 / 4096 = 6489.
Значение в регистре напряжения шунта 0x1959 умножается на значение регистра калибровки, который в нашем случае равен 0x1000. А затем результат делится на 4096 (что, кстати, то же самое, что 0x1000). То есть ток получается равным 6489. Но в каких единицах? Чтобы ответить на этот вопрос, необходимо определить параметр Current_LSB: Current_LSB = 0.04096 / 0x1000 / 0.1 (Ом) = 0.0001Здесь 0x1000 – значение регистра калибровки, 0.1 (Ом) – сопротивление шунта, а 0.04096 – просто коэффициент. Теперь посчитанный ток нужно умножить на число Current_LSB, и получим 0.6489 (А) или 648,90 (мА). Такой ток мы видим и в мониторе.
Регистр Power (адрес 0x03) датчика INA219
Мощность рассчитывается как произведение напряжения на шине и тока: P = Uшины × I = 3292 (мВ) × 648.9 (мА) = 2136 (мВт)
Небольшое расхождение с выводом монитора Arduino связано с ошибкой округления. А именно, если посмотреть на вывод монитора порта, мы увидим, что значение напряжения на шине принято равным 3.29 В, в то время как в регистре записано 3.292 В. Из-за этого рассчитанное значение на 2 милливатта больше, чем показанное в выводе скетча.
Семейство усилителей сигнала токового шунта Texas Instruments
На рисунке 8 показаны основные варианты схем измерения тока с использованием специализированных микросхем производства компании TI, а в таблице 2 приведены их сравнительные характеристики.
Рис. 8. Основные варианты построения схем измерения тока на основе специализированных микросхем TI
Таблица 2. Основные серии специализированных усилителей сигналов токовых шунтов производства TI
Измерение тока в шине питания на выходе сетевого адаптера | |||||||
Наименование | Диапазон синфазного напряжения, В | Напряжение смещения, мкВ | Температурный дрейф напряжения смещения, мкВ/°C | Коэффициент усиления | Погрешность коэффициента усиления, % | Температурный дрейф погрешности коэффициента усиления, ppm/°C | Примечание |
INA240 | -4…80 | 25 | 0,25 | 20, 50, 100, 200 | 0,2 | 2,5 | Подавление ШИМ |
INA210 | -0,3…26 | 35, 60, 100 | 0,1 | 50, 75, 100, 200, 500 | 0,9 | 10 | Улучшенные рабочие характеристики |
INA300 | 0…36 | 650 | 0,1 | – | – | – | Только компаратор |
INA301 | 0…36 | 35 | 0,1 | 20, 50, 100 | 0,10 | 10 | Быстрый компаратор |
Измерение тока в шине питания нагрузки | |||||||
Наименование | Диапазон синфазного напряжения, В | Напряжение смещения, мкВ | Температурный дрейф напряжения смещения, мкВ/°C | Коэффициент усиления | Погрешность коэффициента усиления, % | Температурный дрейф погрешности коэффициента усиления, ppm/°C | Примечание |
INA240 | -4…80 | 25 | 0,25 | 20, 50, 100, 200 | 0,2 | 2,5 | Подавление ШИМ |
INA210 | -0,3…26 | 35, 60, 100 | 0,1 | 50, 75, 100, 200, 500 | 0,9 | 10 | Улучшенные рабочие характеристики |
Измерение тока в шине земли | |||||||
Наименование | Диапазон синфазного напряжения, В | Напряжение смещения, мкВ | Температурный дрейф напряжения смещения, мкВ/°C | Коэффициент усиления | Погрешность коэффициента усиления, % | Температурный дрейф погрешности коэффициента усиления, ppm/°C | Примечание |
INA210 | -0,3…26 | 35, 60, 100 | 0,1 | 50, 75, 100, 200, 500 | 0,9 | 10 | Улучшенные рабочие характеристики |
INA199 | -0,3…26 | 150 | 0,1 | 50, 100, 200 | 1,4 | 10 | Низкая стоимость |
INA300 | 0…36 | 650 | 0,1 | – | – | – | Только компаратор |
INA301 | 0…36 | 35 | 0,1 | 20, 50, 100 | 0,1 | 10 | Быстрый компаратор |
Основные особенности микросхем INA производства Texas Instruments, применяемых для прецизионного измерения тока в шине питания, в шине земли, имеющих функцию защиты от перегрузки по току, а также встроенный шунт, приведены в таблице 3.
Таблица 3. Основные применения и особенности микросхем INA от Texas Instruments для измерения тока
Наименование | Способ измерения тока | Особенности |
INA210 | Прецизионное измерение тока в шине питания |
|
INA240 |
| |
INA199 | Прецизионное измерение тока в шине земли |
|
INA300 | Измерение тока с функцией защиты от перегрузки |
|
INA301 |
| |
INA250 (рисунок 9) | Наличие встроенного шунта |
|
|
Рис. 9. Структурная схема прецизионного аналогового преобразователя «ток- напряжение» INA250
Рис. 10. Структурная схема прецизионного цифрового монитора напряжения питания, тока и мощности нагрузки INA260