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

Объясняем, как измерять ток потребления устройств при помощи токовых датчиков серии ZXCT от Zetex Semiconductors (Diodes Incorporated).

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

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

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

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

Токовый датчик серии ZXCT

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

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

Токовый датчик серии ZXCT

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

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

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

Токовый датчик серии ZXCT

Данные датчики бывают как минимум с 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), Gt = 0.01 А/В. Следовательно в нашем случае выходной ток ИС будет равен Iout = 0.01 А/В * 0.1 В = 1 мА. Т.о. при максимальном токе нагрузки в 10 Ампер и сопротивлении шунта 0.01 Ом, на выходе токового датчика мы получим ток в 1 мА. Нам остается посчитать подходящее значение резистора RG, чтобы на входе АЦП получить нормальный диапазон входного напряжения.

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

Токовый датчик серии ZXCT

При данных номиналах схемы, для тока нагрузки в 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 кОм, для данного значения выходное напряжение с ИС составит: Vout = RG * Iout = 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 Ом. Один резистор лучше поставить подстроечный, многооборотный, чтобы в случае необходимости откалибровать схему.

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

Токовый датчик серии ZXCT

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

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

Токовый датчик серии ZXCT

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

Токовый датчик серии ZXCT

Arduino

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

Токовый датчик серии ZXCT

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

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

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

Токовый датчик серии ZXCT

В данном проекте я не использовал какие-либо схемы защиты, т.к. это тестовый проект на макетке. В реальном проекте рекомендуется задействовать защиту ИС и защиту выхода, например при помощи стабилитронов. Более подробно о способах защиты расписано в аппноуте «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  / (Gt * RS * RG)

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

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


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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *