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

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

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

В данных ИС предусмотрен вывод «земли» 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), 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 Вольт).

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

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

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

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

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

Arduino

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

Подключение простое: вывод 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  / (Gt * RS * RG)

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

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


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

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

Ваш адрес email не будет опубликован.