Acs712 подключение к трансформатору тока

Обновлено: 04.05.2024

Всем доброго времени суток. Пришла в голову идея подключения немалоизвестного датчика тока ACS712 и прошу ее оценить. Вообще основная проблема использования этого датчика для измерения постоянного тока состоит в том что напряжения на его выходе изменяется в пределах от 2.5 (если питаем от 5) до 5 вольт, следовательно если напрямую подключать к Ардуино то использовать сможем только половину разрядности вроенного АЦП. А что если ток через микросхему напрявить в обратную сторону, ACS712 ведь предназначена для изменения переменного тока, и тогда напрядение на выоде будет изменяться от 2.5 до 0 вольт. Дальше делителем уменьшаем 2.5 до 1.1 и на вход АЦП Ардуино с всроенным источником опорного 1.1 В. Будет ли так работать или ошибаюсь?

Как подключить датчик тока к Arduino

Датчики тока, как следует из их названия, служат для измерения силы тока. Существуют датчики, которые основаны на различных физических эффектах и имеют различные особенности. В частности, рассматриваемый датчик ACS712 основан на эффекте Холла, датчик INA219 имеет в своём составе аналого-цифровой преобразователь (АЦП ), а датчик INA3221 – трёхканальный. Рассмотрим их по порядку.

Содержание:

1 Описание датчикатока ACS712

Датчик тока ACS712 – это датчик, который основан на эффекте Холла. Эффект Холла заключается в том, что когда через проводник, помещённый в магнитное поле, протекает электрический ток, в проводнике возникает напряжение. Это напряжение и служит индикатором силы тока: оно линейно зависит от силы тока. Ещё оно имеет небольшую зависимость от температуры окружающей среды и поддаётся влиянию внешних магнитных полей. Так, например, на графике ниже показана зависимость напряжения на выходе датчика ACS712 от силы протекающего тока (для одной из разновидностей датчика, об этом чуть ниже) при различных температурах:

Зависимость напряжения на выходе датчика ACS712 от силы тока

Зависимость напряжения на выходе датчика ACS712 от силы тока

Модуль с датчиком ACS712 может выглядеть, например, так:

Модуль с датчиком тока ACS712 и схема подключения

Модуль с датчиком тока ACS712 и схема подключения

Датчик ACS712 имеет следующие характеристики:

  • работает с постоянным и переменным током;
  • ток потребления – до 13 мА;
  • температура эксплуатации -40…+85 °C.

Существуют несколько разновидностей датчика ACS712, которые отличаются величиной измеряемого тока. Так, существуют разновидности с максимально измеряемым током 5, 20 и 30 А. Широкий диапазон измеряемых значений тока можно отнести к существенным преимуществам датчика ACS712. Перечисленные модификации имеют чувствительность 185, 100 и 66 мВ/А соответственно.

2 Подключение датчика тока ACS712 к Arduino

Как мы помним из курса школьной физики, для измерения тока необходимо пропустить ток через измерительный прибор, помещённый в разрыв между источником питания и нагрузкой. Соответственно, схема подключения датчика проста:

Вывод датчика ACS712Назначение
VCCПитание, 5 В
GNDЗемля
OUTАналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока
IP+Вывод 1 для подачи измеряемого тока
IP-Вывод 2 для подачи измеряемого тока

Выводы IP+ и IP- как раз и есть тот разрыв цепи, через который нужно пропустить интересующий ток. Если перепутать полярность, то измерения будут с обратным знаком.

Кстати, эта особенность – измерять ток как с положительным, так и отрицательным знаком, позволяет использовать датчик ACS712 для измерений переменного тока.

Таким образом, для подключения датчика ACS712 к плате Arduino используются 3 провода:

Схема подключения датчика тока ACS712 к Arduino

Схема подключения датчика тока ACS712 к Arduino

Выход сенсора VOUT подключим к любому аналоговому выводу Arduino, например, A0. В качестве нагрузки будем использовать двигатель постоянного тока.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока

Либо вместо нагрузки можно использовать мощную лампу накаливания. Либо любую другую нагрузку.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания

Питать нагрузку будем от лабораторного источника тока, на котором можно менять напряжение и ток.

3 Чтение показаний датчика тока ACS712с помощью Arduino

В скетче будем постоянно читать значение с порта A0 и выводить в монитор последовательных данных. Напомню, АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. Подробнее здесь. Это означает, что с аналогового порта могут приходить значения от 0 до 2 10 = 1024 для 10-разрядного АЦП . Будем считать, что у нас датчик тока, диапазон измерений которого от -5 А до +5 А, а чувствительность 185 мВ/А.

Пояснение принципа вычисления силы тока

Пояснение принципа вычисления силы тока

На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта, добавим в скетч примитивную калибровку. Калибровка будет заключаться в том, что некоторое количество раз прочитаем значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредним его. Естественно, нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.

Скетч для измерения постоянного тока датчиком ACS712 (разворачивается)

Загрузим скетч и плавно начнём поднимать напряжение и ток на нагрузке. Какое-то время подождём, а затем начнём уменьшать ток. В результате получим примерно такую картинку:

Вывод тока датчика ACS712 в монитор последовательного порта и его график

Вывод тока датчика ACS712 в монитор последовательного порта и его график

Как видно, аналоговый сигнал постоянно «прыгает». Чтобы этого избежать, следует добавить в скетч сглаживание. Для этого будем проводить подряд несколько измерений, а затем брать среднее арифметическое от них в качестве действительного значения. Заодно совместим начальную калибровку, т.к. она выполняется точно так же. Вот как изменится в результате скетч:

Скетч для измерения постоянного тока датчиком ACS712 со сглаживанием

Кстати, желательно вынести чувствительность датичка ACS712 в константу в начале скетча, чтобы можно было быстро изменить скетч для модификации датчика с другим диапазоном измерений.

В результате выполнения данного скетча картинка получается гораздо более приятная:

Сглаженный график тока, измеренного датчиком ACS712

Сглаженный график тока, измеренного датчиком ACS712

Тот же самый принцип заложен в библиотеки для Arduino, которые оперируют с датчиком тока ACS712. Например, вот эта библиотека Troyka Current.

По результату эксперимента получается, что датчик ACS712 очень простой, но при этом довольно не точный. Гораздо точнее датчик тока, который мы рассмотрим в следующем разделе.

4 Описание датчика тока,напряжения и мощности INA219

Датчик INA219 – цифровой датчик тока, напряжения и мощности. Он позволяет измерять напряжения от 0 до 26 вольт и ток от 0 до 3,2 ампер. Питается датчик напряжением от 3 до 5,5 В. Существуют модули, полностью готовые к подключению к Arduino. Один из таких модулей GY-219:

Модуль GY-219 с датчиком тока INA219: назначение выводов и частей

Модуль GY-219 с датчиком тока INA219: назначение выводов и частей

Датчик INA219 выполняется в двух разновидностях: A и B. Последняя отличается повышенной точностью и меньшей погрешностью. На фото ниже как раз модификация INA219B.

Модуль GY-219 с датчиком тока INA219

Модуль GY-219 с датчиком тока INA219

Для конфигурирования датчика INA219 и для считывания показаний с него используется последовательный интерфейс I2C. Причём адрес на шине можно задать с помощью перемычек A0 и A1 на модуле. Допустимые адреса:

  • 0x40 (без перемычек);
  • 0x41 (с перемычкой A0);
  • 0x44 (с перемычкой A1);
  • 0x45 (установлены обе перемычки).

Соответственно, на одной шине IIC можно иметь до 4-х таких датчиков, подключённых одновременно.

5 Подключение датчика тока и напряжения INA219 к Arduino

Для начала пойдём простым путём: скачаем готовую библиотеку, загрузим в Arduino и посмотрим на результат. Существует несколько библиотек для работы с нашим датчиком. Предлагаю воспользоваться вот этой популярной библиотекой для INA219 от Adafruit. Скачаем её, установим стандартным образом и загрузим в Arduino скетч из примеров getcurrent.

Установка недостающих библиотек через менеджер библиотек Arduino IDE

Установка недостающих библиотек через менеджер библиотек Arduino IDE

Подключим модуль GY-219 к Arduino по следующей схеме. SDA и SCL датчика можно подключить как к аналоговым входам A4 и A5 Arduino, так и к специально выделенным портам SDA и SCL (если они есть на вашей плате).

Схема подключения датчика INA219 к Arduino

Схема подключения датчика INA219 к Arduino

В качестве нагрузки может быть любой источник, например, электромотор, лампа или просто мощный резистор. У меня это 5 соединённых параллельно 5-ваттных 16-омных резисторов. В качестве источника питания также может выступать любой из имеющихся у вас источников. Я буду использовать лабораторный источник питания.

Датчик INA219 подключён к Arduino

Датчик INA219 подключён к Arduino

В результате выполнения скетча получится следующий вывод:

Результат работы скетча "GetCurrent" для датчика тока INA219

Результат работы скетча "GetCurrent" для датчика тока INA219

Отлично! Всё работает! Как говорится, бери – и пользуйся.

Данная библиотека позволяет также проводить калибровку датчика INA219 при необходимости. Подробности – в описании библиотеки и в самих исходниках (в файле Adafruit_INA219.cpp библиотеки даётся большое число пояснений).

6 Как читать данные сдатчика тока и напряжения INA219

Если посмотреть на обмен данными по шине I2C, который происходит при работе данного скетча (с помощью логического анализатора, конечно), то увидим следующее.

Осциллограмма чтения регистров датчика INA219

Осциллограмма чтения регистров датчика INA219

Чтобы понять, что здесь происходит, необходимо познакомиться с картой регистров датчика INA219. Датчик содержит всего 6 регистров. Все регистры 16-разрядные.

Карта регистров датчика тока и напряжения INA219
Адрес регистраНазвание регистраНазначение регистраТип
0x00ConfigurationСброс всех регистров, настройка диапазона измерений, усиления PGA , разрешения АЦП и фильтрации.Чтение/Запись
0x01Shunt voltageХранит измеренное значение напряжения на шунтирующем резисторе 0,1 Ом.Чтение
0x02Bus voltageХранит измеренное значение напряжения шины.Чтение
0x03PowerХранит измеренное значение мощности.Чтение
0x04CurrentСодержит значение силы тока, протекающего через шунтирующий резистор.Чтение
0x05CalibrationКалибровочный регистр. Задаёт диапазон измерений и позволяет осуществлять калибровку системы.Чтение/Запись

Чтение регистров датчика тока INA219 с помощью FT2232H

Чтение регистров датчика тока INA219 с помощью FT2232H

Запустим программу SPI via FTDI, выберем в меню «Устройство» интерфейс I2C. Подключимся к порту A. Просканируем устройства на шине I2C. Программа найдёт устройство по адресу 64 (0x40), если конечно вы не меняли адрес перемычками A0 и A1. Выберем это устройство. В разделе «Чтение» зададим размер буфера 2 байта, напишем команду 00 и нажмём кнопку «Прочитать». Прочитанные данные будут в таблице, которая открывается по нажатию на кнопку с пиктограммой таблицы. Вот что мы увидим.

Чтение регистров датчика тока INA219 с помощью FT2232H и программы "SPI via FTDI"

Чтение регистров датчика тока INA219 с помощью FT2232H и программы "SPI via FTDI"

Как вы уже наверное догадались, команда "0" означает адрес регистра, из которого мы хотим прочитать данные. А число 0x399F – это данные в нулевом регистре (регистр конфигурации). И это соответствует документации, т.к. после включения и загрузки микросхема INA219 имеет именно такую конфигурацию по умолчанию. Вот какую структуру имеет регистр конфигурации.

Структура конфигурационного регистра датчика тока 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 «за один проход» не предусмотрено.

Вывод монитора порта в момент снятия осциллограммы с датчика INA219

Вывод монитора порта в момент снятия осциллограммы с датчика 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 милливатта больше, чем показанное в выводе скетча.

7 Подключение трёхканального датчика тока и напряжения INA3221 к Arduino

Датчик тока INA3221 практически идентичен датчику INA219. Основное отличие состоит в том, что он имеет 3 измерительных канала вместо одного. Показания с них можно снимать независимо друг от друга. Будем использовать вот такую небольшую плату с датчиком:

Плата с датчиком INA3221

Плата с датчиком INA3221

Подключается данный модуль к Arduino всего 4-мя проводами: два для питания, и ещё два – шина I2C.

Вывод модуля INA3221Вывод ArduinoНазначение
SDAA4Данные шины I2C
SCLA5Импульсы синхронизации шины I2C
VS+3.3VПитание
GNDGNDОбщий
Подключение датчика INA3221 к Arduino Nano
Подключение датчика INA3221 к Arduino Nano

Назначение остальных выводов модуля показано на приведённом рисунке и в таблице ниже.

Вывод модуля INA3221Назначение
TCЦифровой выход оповещения о сбое таймингов (timing control alert).
WARЦифровой выход оповещения о сбоях измерений (warning).
CRIЦифровой выход оповещения о критических сбоях (critical).
PVЦифровой выход оповещения о валидности питающего напряжения (power valid).
VPUАналоговый вход подтягивающего напряжения для смещения выходных цепей определения валидности питания.
POWАналоговый вход питания измеряемой нагрузки.
CH1, CH2, CH3Порты для подключения измеряемых цепей.

Используем библиотеку для работы с датчиком INA3221. Поместим файлы с расширениями *.cpp и *.h в одну директорию, в ней же создадим файл с расширением *.ino и следующим содержимым:

Скетч для чтения показаний датчика INA3221

Загрузим данный скетч в память Arduino. Перед тем как подключать нагрузку, необходимо подать с источника питания напряжение на контакты POW и GND, расположенные с одного из краёв модуля. Это напряжение будет подаваться на нагрузку и оно в данном модуле общее для всех трёх измерительных каналов. Допустимый диапазон напряжений от 0 до 26 вольт. Я сейчас подам 5 В.

Удобно в места подключения нагрузки и питания впаять клеммники для быстрого монтажа.

Теперь можно подключать нагрузку. Давайте нагрузим выходы модуля и посмотрим, что будет выводиться в монитор последовательного порта. Я подключу на канал 1 два параллельных резистора номиналом 4,3 кОм, что в сумме даст сопротивление 2,15 кОм. А на канал 3 – один резистор 4,3 кОм.

Датчик тока INA3221 с нагрузкой

Датчик тока INA3221 с нагрузкой

В мониторе последовательного порта видно, как меняются показания датчика INA3221 при изменении нагрузки. На иллюстрации для примера показаны три состояния: показания датчика без нагрузки, с нагрузкой на одном канале и с разной нагрузкой на двух каналах.

Показания датчика тока INA3221 в мониторе COM-порта

Показания датчика тока INA3221 в мониторе COM-порта

Если мы подключим в измеряемую цепь амперметр, то убедимся, что показания цифрового датчика INA3221 довольно точно совпадают с показаниями амперметра.

Показания датчика тока INA3221 в сравнении с амперметром

Показания датчика тока INA3221 в сравнении с амперметром

Использование датчика тока ACS712. Часть 1 - Теория

Измерение и контроль протекающего тока являются принципиальным требованием для широкого круга приложений, включая схемы защиты от перегрузки по току, зарядные устройства, импульсные источники питания, программируемые источники тока и пр. Один из простейших методов измерения тока –использование резистора с малым сопротивлением, – шунта между нагрузкой и общим проводом, падение напряжения на котором пропорционально протекающему току. Несмотря на то, что данный метод очень прост в реализации, точность измерений оставляет желать лучшего, т.к. сопротивление шунта зависит от температуры, которая не является постоянной. Кроме того, такой метод не позволяет организовать гальваническую развязку между нагрузкой и измерителем тока, что очень важно в приложениях, где нагрузка питается высоким напряжением.

Вебинар Экономичные решения МЕAN WELL для надежных разработок - 30.09.2021

Датчик тока Allegro ACS712

Основные недостатки измерения тока с помощью резистивного шунта:

  • нагрузка не имеет прямой связи с «землей»;
  • нелинейность измерений, обусловленная температурным дрейфом сопротивления резистора;
  • отсутствие гальванической развязки между нагрузкой и схемой измерения.

В статье мы рассмотрим экономичный и прецизионный интегральный датчик тока Allegro ACS712, принцип его работы, основанный на эффекте Холла, характеристики и способ подключения к микроконтроллеру для измерения постоянного тока. Статья разделена на две части: первая посвящена устройству и характеристикам датчика, вторая – интерфейсу с микроконтроллером и работе с датчиком.

Датчик тока ACS712 основан на принципе, открытом в 1879 году Эдвином Холлом (Edwin Hall), и названным его именем. Эффект Холла состоит в следующем: если проводник с током помещен в магнитное поле, то на его краях возникает ЭДС, направленная перпендикулярно, как к направлению тока, так и к направлению магнитного поля. Эффект иллюстрируется Рисунком 2. Через тонкую пластину полупроводникового материала, называемую элементом Холла, протекает ток I. При наличии магнитного поля на движущиеся носители заряда (электроны) действует сила Лоренца, искривляющая траекторию движения электронов, что приводит к перераспределению объемных зарядов в элементе Холла. Вследствие этого на краях пластины, параллельных направлению протекания тока, возникает ЭДС, называемая ЭДС Холла. Эта ЭДС пропорциональна векторному произведению индукции B на плотность тока I и имеет типовое значение порядка нескольких микровольт.

Микросхема ACS712 в корпусе SOIC

Внутренняя конструкция датчика тока ACS712

На Рисунке 5 показано расположение выводов ACS712 и типовая схема его включения. Выводы 1, 2 и 3,4 образуют проводящий путь для измеряемого тока с внутренним сопротивлением порядка 1.2 мОм, что определяет очень малые потери мощности. Его толщина выбрана такой, чтобы прибор выдерживал силу тока в пять раз превышающую максимально допустимое значение. Контакты силового проводника электрически изолированы от выводов датчика (выводы 5 – 8). Расчетная прочность изоляции составляет 2.1 кВ с.к.з.

В низкочастотных приложениях часто требуется включить на выходе устройства простой RC фильтр, чтобы улучшить отношение сигнал-шум. ACS712 содержит внутренний резистор RF, соединяющий выход встроенного усилителя сигнала со входом выходной буферной схемы (см. Рисунок 6). Один из выводов резистора доступен на выводе 6 микросхемы, к которому подключается внешний конденсатор CF. Следует отметить, что использование конденсатора фильтра приводит к увеличению времени нарастания выходного сигнала датчика и, следовательно, ограничивает полосу пропускания входного сигнала. Максимальная полоса пропускания составляет 80 кГц при емкости фильтрующего конденсатора равной нулю. С ростом емкости CF полоса пропускания уменьшается. Для снижения уровеня шума при номинальных условиях рекомендуется устанавливать конденсатор CF емкостью 1 нФ.

Чувствительность и выходное напряжение ACS712

Выходное напряжение датчика пропорционально току, протекающему через проводящий путь (от выводов 1 и 2 к выводам 3 и 4). Выпускается три варианта токового датчика для разных диапазонов измерения:

  • ±5 А (ACS712-05B),
  • ±20 А (ACS712-20B),
  • ±30 А (ACS712-30A)

Соответствующие уровни чувствительности составляют 185 мВ/А, 100 мА/В и 66 мВ/A. При нулевом токе, протекающем через датчик, выходное напряжение равно половине напряжения питания (Vcc/2). Необходимо заметить, что выходное напряжение при нулевом токе и чувствительность ACS712 пропорциональны напряжению питания. Это особенно полезно при использовании датчика совместно с АЦП.

Точность любого АЦП зависит от стабильности источника опорного напряжения. В большинстве схем на микроконтроллерах в качестве опорного используется напряжение питания. Поэтому при нестабильном напряжении питания измерения не могут быть точными. Однако если опорным напряжением АЦП сделать напряжение питания датчика ACS712, его выходное напряжение будет компенсировать любые ошибки аналого-цифрового преобразования, обусловленные флуктуациями опорного напряжения.

Рассмотрим эту ситуацию на конкретном примере. Допустим, что для опорного напряжения АЦП и питания датчика ACS712 используется общий источник Vcc = 5.0 В. При нулевом токе через датчик его выходное напряжение составит Vcc/2 = 2.5 В. Если АЦП 10-разрядный (0…1023), то преобразованному выходному напряжению датчика будет соответствовать число 512. Теперь предположим, что вследствие дрейфа напряжение источника питания установилось на уровне 4.5 В. Соответственно, на выходе датчика будет 4.5 В/2 = 2.25 В, но результатом преобразования, все равно, будет число 512, так как опорное напряжение АЦП тоже снизилось до 4.5 В. Точно также, и чувствительность датчика снизится в 4.5/5 = 0.9 раз, составив 166.5 мВ/А вместо 185 мВ/А. Как видите, любые колебания опорного напряжения не будут источником ошибок при аналого-цифровом преобразовании выходного напряжения датчика ACS712.

На Рисунке 7 представлены номинальные передаточные характеристики датчика ACS712-05B при напряжении питания 5.0 В. Дрейф выходного напряжения в рабочем диапазоне температур минимален благодаря инновационной технологии стабилизации.

Датчик тока для Ардуино основан на эффекте Холла, имеет прямую зависимость измеряемой силы тока и выходного сигнала. Модули ACS712 / TA12-100 для измерения тока используются в проектах, где требуется защита от перегрузки, например, при изготовлении зарядных устройств и внешних аккумуляторов (power bank), импульсных источников питания. Рассмотрим, как работать с датчиками тока и Arduino Uno.

Характеристики датчика тока Arduino

ACS713 и ACS712 состоит из линейного датчика на базе эффекта Холла с медным проводником. Ток создает магнитное поле в медном проводнике, которое улавливается датчиком и преобразуется в напряжение. Сила магнитного поля линейно зависит от силы тока. Точность обеспечивается микросхемой на модуле с заводскими настройками. Работает цифровой датчик с постоянным и переменным током.

Технические характеристики ACS712

  • Тип интерфейса: цифровой;
  • Напряжение: постоянное и переменное;
  • Напряжение питания: 5 Вольт;
  • Ток потребления: не более 11 мА;
  • Измерение силы тока: от 5 до 30 Ампер;
  • Чувствительность: от 66 мВ/А до 185 мВ/А;
  • Температура эксплуатации: от -40°C до +85°C;
  • Размер платы модуля: 31 мм на 13 мм.

Датчик TA12-100 Arduino работает на другом принципе. Модуль измеряет напряжение, падающее на транзисторе в 200 Ом, который находится на выходе трансформатора. Датчик TA12-100 преобразует напряжение на резисторе в аналоговый сигнал, применяя закон Ома (I = E / R). Коэффициент трансформатора составляет 1000:1 и, чтобы получить значение тока, следует полученные данные умножить на 1000.

Технические характеристики TA12-100

  • Тип интерфейса: аналоговый;
  • Напряжение: постоянное;
  • Напряжение питания: 5 Вольт;
  • Ток потребления: не более 5 мА;
  • Измерение силы тока: до 5 Ампер;
  • Чувствительность: не известна;
  • Температура эксплуатации: от -55°C до +85°C;
  • Размер платы модуля: 30 мм на 24 мм.

Как подключить к Ардуино датчик ACS712

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • датчика тока ACS712 / TA12-100;
  • источник питания 12 Вольт;
  • нагрузка, например, лампа 12V;
  • провода «папа-папа», «папа-мама».

Счетч для датчика тока Arduino ACS712

Пояснения к коду:
  1. для переменного тока используйте команду sensorCurrent.readCurrentAC() ;
  2. при отрицательных значениях поменяйте местами провода на колодках.

Как подключить к Ардуино датчик TA12-100


Подключил к ардуине, вроде все просто, и ничего, точнее говоря, если я все правильно нонимаю, то при отсутствии тока он должен показывать половину от опорного. опорное у меня ровно 5В, а на выходе датчика всего 1.99В вместо 2.5В. При подключении нагрузки карина почти не меняется. Пропускаем 2А, по идее значение должно увеличиться на 10% а нет, только на 2-3% максимум.

К сожалению у меня нет еще одного что бы проверить с другим датчиком. Может кто уже сталкивался с этим.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 17:09

Может у вас напряжение питания риже 5в?

проще мультиметром проверить

откуда взяли 10% на 2а? Прочитайте даташит, там другая формула. Что-то типа 66мв на ампер, но не уверен, что это для 20а версии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 17:09

Проверьте наличие питания +5 В на самой микросхеме. Проверьте наличие +2,5 В без нагрузки на выходе самой микросхемы. Если это не так, то видимо проблемы с микросхемой.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 19:30 axill пишет:

Aоткуда взяли 10% на 2а? Прочитайте даташит, там другая формула. Что-то типа 66мв на ампер, но не уверен, что это для 20а версии

Про формулу спасибо, я почему-то думал что там все предельно-линейно.

Схема питается от выхода 12В 500ватного блока питания от ПК.
На входе стоит L7805 по схеме из даташита. Нагрузка отсутствует.
Промерил все точки, правда я пока не выпаевал сам чип из платы.

Результаты такие, ( мерил и на 3 пинах сенсора и на чипе, результаты одинаковые )

VCC <-> GND = 5.000V
OUT <-> GND = 1.937V
OUT <-> VCC = 3.064V
GND <-> GND = 0.001V

Ума не приложу что делать дальше. :-(
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 21:27 Andrey_Y_Ostanovsky gregoryl пишет:

Ума не приложу что делать дальше. :-(

Принять за ноль и считать от него. :) У меня ноль где-то в районе 518 единиц АЦП - и ничего, меряет как-то, хотя счетчика из него не получается из-за большого количества помех в линии.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 22:10

Я имею 50-ти амперовый датчикй тока - в нём на холостом ходу на выходе 2,5 В. Попробуйте то напряжение на выходе, что имеете при токе 0 А принять за "исходное". Затем, используя компьютерный блок питания, пропустить через датчик ток величиной около 10 А (например используя в качестве нагрузки автомобильные лампы). Измерьте изменения выходного напряжения при разных направлениях протекания тока через датчик. Если приращения соизмеримы и соответствуют расчётным, значит с этим датчиком "можно жить".

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 17/01/2014 - 22:15

И ещё. Попробуйте запитать не от компьютерного блока питания пятью вольтами, а от какого либо другого - ну хотя бы от USB. А вдруг блок питания помехи даёт или 7805 "звенит"?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 03:53

спасибо всем ответившим.

Провел еще одну серию экспериментов, питание 4 аккумулятора Eneloop и на чипе и на коннекторе сенсора одни и теже значения.

VCC <-> GND = 5.34V
OUT <-> GND = 2.07V
OUT <-> VCC = 3.27V

т.е. такой неправильный сдвиг это явно не проблема питания

Если использовать формулы вот отсюда заменить коэффициент нужным, то расчеты все равно получаются неправильными

I = ( count - 394 ) * 0,048828125; где 394 это показания при 0, а 0,0488 коэффициент пересчитаны для нашего чипа с учетом максимум на 20А.

Согласно амперметру я пропускаю ток 1.71А переменного тока через нагрузку ( отдельный трансформатор ).

максимальное и минимальное значение получаемое в результате 1 сек считываний следующие

min = 380
max = 409
cnt = 4553 - количество считанных значений

если пересчитать по формуле то мин=0,683 а макс 0,732, т.е. датчик на что-то там реагирует конечно, но как-то не по плану. В ближайшею неделю должны приехать еще 2 датчика один на 20 и другой на 5А, буду ставить новые эксперименты. Надеюсь что просто этот конкретный сенсор битый.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 04:13

Глупый вопрос. Вы чем напряжение замеряете?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 11:17

Что-то настораживает меня в Ваших измерениях:

min = 380
max = 409
cnt = 4553 - количество считанных значений.

Можете ли сделать измерения тестером (мультиметром) на постояннном токе? И хотя бы током 2. 5 А, чтобы можно было увидеть изменения.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 13:46 axill пишет:

Глупый вопрос. Вы чем напряжение замеряете?

Мерил Fluke 73 III, в режиме измерения постоянного напряжения, при отсутствии тока через нагрузку и с отключеной нагрузкой вовсе, одно и тоже.

При подключении переменного папряжения к нагрузке через трансформатор, отключил батарейный блок, вернул сенсор в прототип и считывал значения с входа A4 Arduino Pro Mini 328P 16M.

Я только начинаю разбираться со схемотехникой, может я чего не так делаю ?

С софтом у меня нет никаких проблем, там мне все понятно и просто, а вот схемотехника это то место где слова "магия" и "чудо" я вспоминаю не реже чем слова "напряжение" и "сила тока" :-)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 14:02 Andrey_Y_Ostanovsky gena пишет:

Что-то настораживает меня в Ваших измерениях:

Да не, это - нормально для ACS712, там просто надо усреднять значения и выкидывать явно "лишние". У меня делается усреднение по сотне замеров - и то показания слегка гуляют.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 14:01 gena пишет:

Что-то настораживает меня в Ваших измерениях:

min = 380
max = 409
cnt = 4553 - количество считанных значений.

Можете ли сделать измерения тестером (мультиметром) на постояннном токе? И хотя бы током 2. 5 А, чтобы можно было увидеть изменения.

Так это переменный ток 50Гц с силой 1.71А. тут скорее мешает то что расстояние между мин и мах должно быть раз намного больше для этого сенсора и этого тока.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 14:12

Ну тогда имерьте в прототипе показания без тока через датчик. Затем пустите постоянный ток через датчик - вычислите разницу показаний. Поменяйте полярность протекания тока через датчик - вычислите новую разницу показаний. Если эти две разницы соизмеримы, значит от датчика ещё может быть какой либо толк. Иначе - датчик станет предметом экспериментов для любознательных (что тоже полезно).

В идеале сделать так. При наличии осциллографа посмотреть выходной сигнал с датчика, когда через него протекает ток - возможно запитать утюг, электрочайник. Сколь нибудь грамотный электронщик Вам прокомментирует результат увиденного, или фото "в студию" (т.е. сюда).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 14:19 gena пишет:

В идеале сделать так. При наличии осциллографа посмотреть выходной сигнал с датчика, когда через него протекает ток - возможно запитать утюг, электрочайник. Сколь нибудь грамотный электронщик Вам прокомментирует результат увиденного, или фото "в студию" (т.е. сюда).

Точно про осциллограф забыл, щас попробую смастерить.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 14:33

Такая, весьма "слабенькая" зацепка. Посмотрел даташит на датчик и вижу, что к выводу "5" подключен конденсатор: С1 или С2 - по фото точно не видно. Через этот вывод можно влиять на выходное напряжение. Если допустить, что паяли плату не очень хорошим флюсом (или не промыли как следует), то выходное напряжение может "уйти" от положенных +2,5 В. Когда плату не станет жалко, отдайте на перепайку и отмывку электронщику. А вдруг что и получится.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 15:24

Где вы в даташите увидели, что можно влиять на выходное напряжение?

в общем если все правильно замерили, то у вас проблема или с микросхемой или с тем как она впаяна.

у вас получается отклонение при нулевом токе аж 500мв. Это явно за пределами шума (не помню точно значение из даташита, посмотрите, но оно точно меньше)

Возможно или токопроводящий флюс остался на плате или сопли припоя. Осмотрите плату под лупой, промойте спиртом

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 18/01/2014 - 15:47

Откройте даташит на данную микросхему и найдите рисунок "Functional Block Diagram", а в рисунке вывод

FILTER (Pin 6). Затем я готов продолжить дискуссию о возмжности влиять на выходное напряжение.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 22/01/2014 - 17:08

Проверил одну из двух таких. Все работает. Да, видно, что шумит в р-не мВ. При нуле тока около 2В на выходе. Ток не гонял, ясно, что работает.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 23/01/2014 - 11:33

Вчера получил еще 2 датчкика, на 20А и на 5А, и они работают как и ожидалось, т.е. при отсутствии напряжения 2.5( +/- 0,03В ) вольтметр хоть и показывает что все стабильно, но МК говорит что в течении секунды значения менялись от 509-514. Это конечно не камельфо, но для начала сойдет, и есть с чем поиграться.

Так что первый мой сенсор видимо имел битый чип.

Всем большое спасибо. :-)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 23/01/2014 - 12:21

Где то читал, что у датчиков построенных по принципу как ACS712, заметный шум выходного сигнала в покое. Даже график был.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 23/01/2014 - 17:34 gena пишет:

Где то читал, что у датчиков построенных по принципу как ACS712, заметный шум выходного сигнала в покое. Даже график был.

избавьтесь от догадок, читайте даташит

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 23/01/2014 - 19:18

Есть полезная статья о датчиках в журнале "Современная электроника" декабрь 2004, стр. 18. Правда там речь о датчиках ACS750.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 06/07/2014 - 14:36 hugoboss317

Дошёл до этого датчика (20А). Кто углублялся, подскажите: выходное значение с датчика меняется в еденицу времени при изменении тока по синусоиде или выводится уже действующее значение? Если значение на выходе меняется вместе с током, то оно может составлять и 5% и 25% и даже 125% от действующего, а значит о какойто точности вобще нечего говорить.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 06/07/2014 - 15:07

напряжение пропорционально току. если ток переменный значит и напряжение на выходе переменное. и действующее значение нужно считать

а вы думали вам сразу в действуещее пересчитает сам?

а при чем здесь связт изменение переменного тока с точностью? подход изначально неверен

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 06/07/2014 - 15:35 hugoboss317

Я закон ома знаю. Дело в том, что даже если предположить что реактивный ток равен нулю(при подключении датчика к переменномк току) не нужно забывать что значение тока в цепи постоянно меняется по величине и направлению. Ключевое тут "по величине". Деперь мы измеряем "ток" 100 раз и усредняем значение. Вот тут интересней начинается. Первое из ста замеров попадает, допустим, на 1/16 периуда, второе, на 1/32 периуда, третье на 1/12 и т.д. А истинное значение тока только в 4-х точках синусоиды - это и есть действующее значение, но найти эти точки мы не можем, только расчитать, сняв значения тока только в 2-х уже точках, это максимальное значение первого полупериуда, и минимальное значение второго, потом разделить на корень квадратный из 2-х (я делю на 1,4).

В описании примеров часто используют выражение " отбросить всё лишнее" это как, извините? Контроллер сам что-ли произведёт замер только в 1/4 и 3/4 периуда?

Датчик тока для Ардуино ACS712


При конструировании различных систем измерения и контроля может потребоваться измерить ток, протекающий по проводнику. Встроенными средствами аппаратной платформы Arduino низкое постоянное напряжение можно измерить без каких-либо проблем, а вот ток так просто измерить не получится. Одним из специальных датчиков, предназначенных решить данную проблему, является датчик тока ACS712, эти датчики бывают рассчитаны на различные максимальные значения измеряемого тока, в данном случае автор использовал датчик на 20А. Физически работа этого устройства основана на эффекте Холла. Данный эффект заключается в том, что носители электрического тока при движении вдоль проводника, помещенного в поперечное магнитное поле испытывают на себе действие силы Лоренца и отклоняются в сторону. Из за этого на боковых, по отношению к направлению тока, сторонах проводника возникает разность потенциалов, которую можно измерить 2. Датчик приобретен здесь всего за 100 рублей:

Датчик тока для Ардуино ACS712

Устройство поставляется в антистатическом пакете

Датчик тока для Ардуино ACS712

На печатной плате устройства хорошо видна клеммная колодка для подключения контролируемой цепи.

Датчик тока для Ардуино ACS712

Габариты платы датчика 31 х 13 х 12 мм, масса 3,1 г.

Подключение датчика ACS712

На плате расположен 3-х контактный разъем.

  • Vcc – контакт для подачи питающего напряжения +5В,
  • OUT – контакт для снятия результатов измерения,
  • GND – общий провод.

На плате датчика имеется красный светодиод – индикатор питания. Сопротивление токовой шины 1,2 мОм 5, напряжение питания 5 В, ток потребления составляет около 12 мА.

Тестирование токового датчика

Автор обзора приобрел версию датчика рассчитанную на ток до 20 А, и это в целом было ошибкой. В радиолюбительской практике все же довольно редко приходится иметь дело с подобными значениями силы тока, так что более рациональным было бы приобретение версии рассчитанной на 5 А, так как у нее разрешение 185 мВ/А, против 100 мВ/А у 20А версии. Тем не менее, и данную версию можно использовать, но точность у нее ниже при измерении токов порядка 1 А.

Для тестирования можно использовать программу AnalogInput2 [6], на ее основе не сложно написать код для измерения значения силы тока, протекающей через датчик и вывода этих данных в удобном виде в монитор последовательного порта. При отсутствии тока на выходе датчика присутствует напряжение примерно в половину от напряжения питания, так, что встроенный АЦП Arduino вернет значение около 512.

В опытах по тестированию данного модуля использован блок питания, дающий напряжение 5 В, который согласно маркировке рассчитан на максимальный ток 2 А. При подключении одного резистора сопротивлением 10 Ом, ток через датчик составляет примерно 0,47 А.

Полезное: Самая маленькая видеокамера с датчиком движения и ночной съемкой

Датчик тока для Ардуино ACS712

При этом АЦП возвращает значение около 504.

Датчик тока для Ардуино ACS712

При подключении параллельно первому резистору второго резистора с аналогичным сопротивлением, общее сопротивление потребителя составит 5 Ом, при этом амперметр показывает значение силы тока около 0,9 А.

Датчик тока для Ардуино ACS712

При этом АЦП возвращает значение около 496.

Датчик тока для Ардуино ACS712

Как известно встроенный АЦП Arduino UNO является 10 разрядным, т.е. диапазону напряжений от 0 до 5 В ставится в соответствие двоичное число от 0 до 1023. Таким образом, разрешение АЦП составляет примерно 0,0049 В. Как следует из приведенных выше данных току в 0,47 А соответствует напряжение 2,46 В, а току 0,9 А – 2,42 В, т.е изменению тока на 0,43 А соответствует изменение напряжения на 40 мВ, что вполне соответствует заявленным продавцом 100 мВ/А.В целом рассмотренный датчик заданные функции выполняет вполне успешно, устройство своих денег стоит.

Ссылки по теме

Читайте также: