Главная » Arduino
Призовой фонд
на июль 2017 г.
1. Осциллограф DSO138
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 200 руб.
От пользователей

Измерение тока потребления устройств при помощи токовых датчиков серии ZXCT

Измерение постоянного тока при помощи цифровых схем является широко распространенной задачей в практике разработчика. Для этого существует несколько решений. Самое популярное решение - при помощи шунта, который включен последовательно с нагрузкой. Ток, проходящий через сопротивление вызывает на нем падение напряжение, которое в случае использования цифровых схем подается на АЦП (аналого-цифровой преобразователь) для перевода в цифровое значение. При этом, сопротивление шунта должно быть заранее известным и очень точным. Также, оно должно быть по возможности минимальным, чтобы исключить его воздействие на нагрузку и уменьшить потери в виде нагрева.
Еще одно решение - измерение DC-тока бесконтактным методом при помощи измерения напряжённости магнитного поля, создаваемого проводником по которому течет ток, в полупроводниковом кристалле. Используется эффект Холла. Хорошо подходит для измерения больших токов, но обладает меньшей точностью и более высокой стоимостью.

В настоящее время электронная промышленность предлагает большое количество разнообразных интегральных схем, облегчающих жизнь разработчика, перед которым стоит задача измерения тока. Как правило, среди Российских радиолюбителей широко применяются решения с использованием операционных усилителей. Но в данной статье я хотел бы рассмотреть методы измерения постоянного тока и мощности при помощи токовых датчиков серии ZXCT фирмы Zetex Semiconductors (в настоящее время это Diodes Incorporated). Данные ИС компактны, достаточно дешевы и их без проблем можно купить в интернет-магазинах России и на eBay или AliExpress
Пример лотов с ценами: ZXCT1009, ZXCT1021ZXCT1030

На сегодняшний день компания Diodes Incorporated выпускает токовые датчики с 2-мя видами выходного сигнала: токовый выход и потенциальный выход. Номенклатура продукции насчитывает с десяток ИС (интегральных схем) с токовым выходом (номенклатура) и с десяток ИС с потенциальным выходом (номенклатура). Отличительной особенностью токовых датчиков ZXCT является использование минимума внешних элементов, отсутствует необходимость использования внешнего питания (кроме специализированных ИС), а также миниатюрные 3-х или 5-ти выводные корпуса SOT23/SOT25 (за исключением микросхем ZXCT1009 в корпусе SM-8 и ZXCT1030 в корпусе SO-8)

Рассмотрим подключение токовых датчиков ZXCT1008 и ZXCT1009:

Подключение токовых датчиков ZXCT1008 и ZXCT1009

Датчики для измерения постоянного тока бывают High Side и Low Side (а также универсальными). Это определяет схему включения датчика. High Side - это измерение тока до нагрузки (т.е. между питанием и нагрузкой), а Low Side - измерение тока после нагрузки (т.е. между нагрузкой и землей). ZXCT1008 и ZXCT1009 являются High Side токовыми датчиками. Как мы видим, используется всего 3 контакта ИС. Ток потребления микросхем чрезвычайно мал, поэтому погрешностью измерения ввиду протекания тока через резистор RG можно пренебречь. 

В подключении ZXCT1010 и ZXCT1012 задействовано 4 вывода:

Схема подключения ZXCT1010 и ZXCT1012

В данных ИС предусмотрен вывод "земли" GND, чтобы убрать ток покоя с выхода, что дает более высокую точность измерения при низких значениях Vsense (падение напряжения на шунте Rs).

Заявленная погрешность измерений вышеприведенных ИС при Vsense = 100мВ составляет 2.5%. Диапазон входного напряжения (Sense Voltage) составляет 2500 мВ. Напряжение питания: 2.5...20 Вольт.

Рассмотрим подключение ИС с потенциальным выходом (ZXCT1021, ZXCT1022, ZXCT1023 и др.):

Схема подключения токового датчика с потенциальным выходом

Данные датчики бывают как минимум с 4-мя выводами, однако в отличии от датчиков с токовым выходом не требуют каких-либо внешних компонентов (естественно кроме шунта). Выходное напряжение, снимаемого с датчика рассчитывается по очень простой формуле: VOUT = k * RS * ILOAD , где k - коэффициент (10 или 100 в зависимости от ИС)

Расчеты

Как известно, падение напряжения на шунте вычислить очень просто: Vsense RS * ILOAD, где RS - сопротивления резистора (шунта), а ILOAD - ток нагрузки.

Для микросхем с токовым выходом, выходной ток ИС рассчитывается по следующей формуле: IOUT = Gt * Vsense, где Gt - электрическая проводимость, измеряемая в А/В или См (Сименсах). Величина эта фиксированная и составляет 0.01 См, однако для некоторых ИС серии ZXCT таких как ZXCT1011, ZXCT1020, ее можно задавать при помощи внешнего резистора.

Для микросхем в потенциальным выходом, выходное напряжение ИС рассчитывается следующим образом: VOUT = k * Vsense, где k - постоянный коэффициент (10 или 100 в зависимости от ИС).

От теории к практике

К примеру, имеется микроконтроллер с АЦП и с диапазоном измеряемого напряжения 0...5 Вольт. А также нагрузка с питанием 24 Вольта и током потребления 5-10 Ампер. Необходимо при помощи МК измерить ток потребления схемы.

Как правило, в схемах измерения тока при выборе шунта радиолюбитель исходит из того, что у него имеется под рукой, т.к. шунт должен быть малого сопротивления и высокой точности. Поэтому просчитаем разные варианты. Например будем использовать шунт сопротивлением 0.2 Ом, максимальное падение напряжения на шунте в этом случае составит Vsense = 0.2 Ом * 10 А = 2 В, а тепловые потери мощности на шунте дадут PD = Vsense * ILOAD = 2 В * 10 А = 20 Ватт, что является очень большим значением. Значит шунт на 0.2 Ома отбраковываем.
Попробуем рассчитать для шунта сопротивлением 0.01 Ом. Максимальное падение напряжения на шунте: Vsense = 0.01 Ом * 10 А = 0.1 В, а потери мощности  PD = 0.1 В * 10 А = 1 Ватт, что является уже более приемлемым значением.
Далее, произведем расчет выходного тока: 
Iout = Gt x Vsense
Для ИС с токовым выходом (на примере ZXCT1008/ZXCT1009), G= 0.01 А/В. Следовательно в нашем случае выходной ток ИС будет равен Iout = 0.01 А/В * 0.1 В = 1 мА. Т.о. при максимальном токе нагрузки в 10 Ампер и сопротивлении шунта 0.01 Ом, на выходе токового датчика мы получим ток в 1 мА. Нам остается посчитать подходящее значение резистора RG, чтобы на входе АЦП получить нормальный диапазон входного напряжения.

Т.к. максимальное значение напряжения АЦП составляет 5 Вольт, то мы должны получить данное напряжение при максимальном токе нагрузки в 10 Ампер. Сопротивление рассчитывается очень просто: RG = VoutIout= 5 В / 0.001 А = 5000 Ом (на схеме ниже ошибочно изображен RG 500 Ом, следует читать 5 кОм), где Vout - требуемое выходное напряжение (в нашем случае 5 Вольт).

ZXCT-4.png

При данных номиналах схемы, для тока нагрузки в 5 Ампер мы получим выходное напряжение 2.5 Вольт, а для 1 А соответственно 0.5 Вольт.
Т.о. становиться очевидным все преимущество специализированных микросхем по сравнению с обычным шунтом: в данном варианте, меняя сопротивление RG мы можем подогнать нужное нам выходное напряжение с ИС под любой диапазон АЦП. Конечно это не все плюсы специализированных микросхем измерения тока. Промышленность выпускает множество самых разнообразных микросхем для измерения тока: бывают двунаправленные мониторы тока, а помимо токового и потенциального выходов, есть ИС с ШИМ, I2C, SPI выходами. И многие другие, мы же рассмотрели одни из самых простых и доступных микросхем мониторов тока.

От практики к реальному устройству

Необходимо измерять ток нагрузки величиной не более 2А, в диапазоне от 200 мА до 1.5 А. Напряжение питания нагрузки 12 Вольт. Для начала произведем небольшие расчеты. В качестве шунта, я использовал импортное сопротивление номиналом 0.1 Ом, точностью 1% и мощностью 1 Ватт. В качестве микросхемы я использовал ZXCT1010 (PDF).

Падение напряжения на шунте при максимальном токе нагрузки в 2А: Vsense(max) RS * ILOAD = 0.1 * 2 = 0.2 Вольт. Тепловые потери на шунте при нагрузке в 2А составят: PD = I2R = 22*0.1 = 0.4 Ватт. Т.о. мы не выходим за рамки допустимого значения и плюс имеем некоторый запас.

Вход АЦП нашего микроконтроллера имеет максимально допустимое напряжение 5 Вольт, поэтому при максимальном токе нагрузки в 2А мы не должны превысить это значение.

Напомню формулу выходного тока: Iout(max) Gt x Vsense(max), для ИС ZXCT1010 значение Gt составляет 0.01. Следовательно Iout(max) 0.01 * 0.2 = 0.002 А.

Рассчитаем сопротивление при максимальном токе нагрузки в 2А: RG = Vout / Iout = 5 В / 0.002 А = 2500 Ом = 2.5 кОм. Ближайшее значение резистора, которое у меня было: 2.4 кОм, для данного значения выходное напряжение с ИС составит: VoutRGIout = 2400 * 0.002 = 4.8 Вольт.

А при сопротивлении RG = 2.4 кОм и минимальном токе нагрузке в 200 мА, "снимаемое" с ИС напряжение Vout =  RG * (Gt * RS * ILOAD) = 2400 * (0.01 * 0.1 *0.2) = 0.48 Вольт. Т.о. при токе нагрузки в 200 мА, напряжение, подаваемое на АЦП будет 0.48 Вольт, а при токе нагрузки в 2 А соответственно 4.8 Вольт.

Хотя в моем устройстве напряжение питания нагрузки будет все время равняться 12 В, в реальной устройстве может встать задача измерения входного напряжения. Делается это намного проще - при помощи обыкновенного делителя напряжения. Чтобы получить 4 В выходного напряжения, с 12 В входного, воспользуемся калькулятором делителя напряжения, номиналы для делителя составят 1 кОм и 500 Ом. Один резистор лучше поставить подстроечный, многооборотный, чтобы в случае необходимости откалибровать схему.

Принципиальная схема:

Принципиальная схема подключение ZXCT1010

Схема подключается в разрыв нагрузки на High-side стороне, т.е. между питанием и нагрузкой. С выхода "voltage" снимается напряжения питания нагрузки, а с выхода "Current" снимается напряжение в виде значения тока нагрузки. Общий вывод соединяется с минусом питания и нагрузкой, а также GND пином контроллера.

Схема была собрана на макетной плате. Т.к. микросхема ZXCT1010 выпускается в корпусе SOT23-5, то на eBay были приобретены универсальные переходники, с одной стороны SOT в DIP8, а с другой SSOP8 в DIP8:

Переходник SOT to DIP8

После запайки микросхемы на переходник получается примерно так:

Вид ИС на переходнике

Arduino

В качестве подопытной платы для начала была применена плата Arduino Nano v3, в которой используется микроконтроллер ATmega328P. Для наглядности проекта, я подключил плату к дисплею Nokia 5110, который у меня был в корпусе из под другого проекта:

ZXCT-8.jpg

Подключение простое: вывод GND от Arduino подключаем к общему выводу схемы измерения. Вывод с делителя напряжения подключаем к аналоговому входу, который задается в программе (Voltage pin). Вывод с ИС токового датчика ZXCT подключаем к аналоговому входу Arduino (Current pin), который также задается в программе. В моем случае это пины А0 и соответственно А1 .

Подключение дисплея Nokia 5110 расписано в программе (в моем случае подключается в пинам 3-7, питание 3.3В и GND).

Собранное устройство в корпусе:

Собранное устройство в корпусе

В данном проекте я не использовал какие-либо схемы защиты, т.к. это тестовый проект на макетке. В реальном проекте рекомендуется задействовать защиту ИС и защиту выхода, например при помощи стабилитронов. Более подробно о способах защиты расписано в аппноуте "AN39 Current measurement applications handbook" глава "5.2 Transient protection" который вы можете скачать ниже в виде PDF.

Библиотека для Nokia 5110 использована от Adafruit, которую можно взять на GitHub.

Немного о точности измерений. Как известно, для задания источника опорного напряжения в Arduino предусмотрена функция analogReference(), которая может принимать одно из следующих значений: 

  • DEFAULT: опорное напряжение по умолчанию 5В (для 5В плат Arduino) или 3.3В (для 3.3В плат Arduino). Смотрите спецификацию вашей платы
  • INTERNAL: встроенный источник опорного напряжения, 1.1В в платах с МК ATmega168/ATmega328 и 2.56В в платах с МК ATmega8 (кроме Arduino Mega)
  • INTERNAL1V1: встроенный источник опорного напряжения 1.1В (только на Arduino Mega)
  • INTERNAL2V56: встроенный источник опорного напряжения 2.56В (только на Arduino Mega)
  • EXTERNAL: внешний источник опорного напряжения. Подключается к пину AREF (диапазон от 0 до напряжения питания платы 3.3В или 5В).

Однако тут есть небольшая загвоздка в том, что если плата питается от USB, то на его выходе не всегда будет точно 5В. А если питается от внешнего источника питания, то внутренний преобразователь UA78M05 (который стоит в Arduino Nano v3) также не даст точно 5В. По даташиту (PDF) выходное напряжение будет "гулять" от 4.8 до 5.2 Вольт. Проведя некоторые эксперименты, при питании от USB, а затем при питании от внешнего аккумулятора 7.2 В, разница при измерении 12В напряжения на нагрузке составила 1 Вольт! Следовательно, лучше использовать встроенный ИОН 1.1В/2.56В, а еще лучше задействовать внешний стабилизированный ИОН, подключаемый к входу AREF. 

Код программы:

#include "adafruit_gfx.h"
#include "adafruit_pcd8544.h"

#define VoltPin A0  // Voltage pin
#define CurrPin A1  // Current pin

float kVD = 3;    // Коэффициент делителя напряжения
float kI = 2.4;   // Коэффициент для пересчета тока нагрузки - в нашем случае значение резистора Rg

// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int VoltageValue; 
int CurrentValue;
float voltage;
float current;

void setup()   {
  display.begin();
  display.setContrast(40);    // установка контрастности дисплея
  delay(1000);
  display.clearDisplay();     // очистка экрана и буфера
  display.setTextSize(1);     // установка размера текста
  display.setTextColor(BLACK);
  delay(1000);
}

void loop() {
  VoltageValue = analogRead(VoltPin);               // считываем значение аналогового входа (напряжение)
  CurrentValue = analogRead(CurrPin);               // считываем значение аналогового входа (ток)
  voltage = VoltageValue * (5.0 / 1023.0) * kVD;    // расчет напряжения
  current = (CurrentValue * (5.0 / 1023.0)) / kI;   // расчет тока
  
  display.clearDisplay();              // очистка экрана и буфера
  display.setCursor(0,0);              // установка курсора в позицию 0,0
  
  display.print("Voltage=");           // вывод надписи
  display.println(voltage);            // вывод значения напряжения с переводом строки
  display.println();                   // перевод строки
  
  display.print("Current=");
  display.println(current);
  display.println();  
  
  display.print("Power=");
  display.println(current * voltage);  // расчет мощности
  
  display.display();                   // вывод данных на дисплей
  
  delay(500);                          // задержка 500 мс
}

Напряжение на нагрузке вычисляется в строке voltage = VoltageValue * (5.0 / 1023.0) * kVD, где - напряжение ИОН (т.к. используется DEFAULT, то у нас оно 5); kVD - коэффициент делителя напряжения, который дает нам он-лайн калькулятор. Либо можно рассчитать самому - просто поделив входное напряжение на выходное.

Ток нагрузки вычисляется следующей формулой  ILOAD =  Vout  / (G* RS * RG)

В программе за это отвечает строка: current = (CurrentValue * (5.0 / 1023.0)) / kI, где напряжение ИОН 5В, а kI - "токовый коэффициент" снимаемый с делителя напряжения ИС, в нашем случае 2.4.

Все три параметра после расчетов выводится на дисплей Nokia 5110.

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 17.07.2015 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (7) | Я собрал (0) | Подписаться

0
Антон #
Программа, описанная в статье у меня не компилируется. Выдает такой результат:
arduino86_DC12_Lamp_Meter2:17: error: 'Adafruit_PCD8544' does not name a type
arduino86_DC12_Lamp_Meter2.ino: In function 'void setup()':
arduino86_DC12_Lamp_Meter2:25: error: 'display' was not declared in this scope
arduino86_DC12_Lamp_Meter2:30: error: 'BLACK' was not declared in this scope
arduino86_DC12_Lamp_Meter2.ino: In function 'void loop()':
arduino86_DC12_Lamp_Meter2:40: error: 'display' was not declared in this scope
Подскажите, пожалуйста, в чем проблема?
Ответить
+1

[Автор]
talibanich #
Не установили библиотеки. Либо неправильные пути к ним
Ответить
0
Максим #
Подскажите, как реализовать контроль сетевого напряжения (220 В) данным устройством?
Ответить
0

[Автор]
talibanich #
Контроль 220В AC я бы организовывал бы через трансформатор, а не через данные чипы.
Ответить
0
Илья #
Здравствуйте, откуда берется число 1023.0 и у вас используется DEFAULT, а как сделать чтобы INTERNAL подключить?
Ответить
0
Евгений #
Диапазон значений АЦП 0..1023
Максимальное значение 1023 для DEFAULT опорного 5В
Ответить
0
wersila #
Я не нашел темы амперметра на хал датчике ACS752SCA-050 с использованием ОЛЕД дисплея. Мне хоть бы увидеть пример вольтметра с выводом на ОЛЕД
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Регулятор мощности 2 кВт 200 Вт усилитель класса D на IRS2092
вверх