Главная » Arduino
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

Измерение тока потребления устройств при помощи токовых датчиков серии 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

Raspberry Pi 2
Raspberry Pi 2
Мультиметр Mastech MS8239C Arduino UNO
вверх