Цифровой вольтметр и амперметр для зарядного устройства (Arduino UNO, 1602A)
Прибор предназначен для работы вместе с простым трансформаторным зарядным устройством для автомобильных аккумуляторов. Прибор измеряет напряжение на заряжаемой батарее и ток заряда При этом питается от заряжаемой батареи.
Прибор сделан используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780). В верхней строке он будет показывать силу тока зарядки, а в нижней напряжение на заряжаемой батарее.
Принципиальная схема
Схема прибора показана на рисунке. Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от имеющегося на плате стабилизатора напряжения 5V.
Рис. 1. Принципиальная схема самодельного вольтметра и амперметра на Arduino UNO для зарядного устройства.
Измерение как силы тока, так и напряжения производятся путем измерения напряжения. Силу тока измеряют путем измерения напряжения на шунте R1, включенном последовательно заряжаемой аккумуляторной батарее GB1. Напряжение измеряется практически на выходе зарядного устройства, то есть, это сумма напряжения на аккумуляторе GB1 и напряжения на шунте R1.
Поэтому, чтобы получить значение напряжения именно на аккумуляторе, микроконтроллер производит вычитание напряжения на шунте R1 из напряжения на выходе зарядного устройства.
Измеряемые напряжения поступают на два аналоговых входа А1 и А2 Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них. В данном случае, выбраны А1 и А2. Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V.
Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.
Напряжение на аккумуляторе должно быть 12-14V, но может достигать, в разных случаях, и даже 18V. Для того чтобы можно было измерять напряжение более 5V, вернее, более напряжения питания микроконтроллера, потому что реальное напряжение на выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V, и обычно немного ниже, нужно на входе применить обычные резистивные делители.
Здесь это делитель напряжения на резисторах R2, R3. С него напряжение поступает на вход А2, служащий для измерения напряжения на аккумуляторе. При этом, для приведения показаний прибора к реальному значению входного напряжения, нужно в программе задать деление результата измерения на коэффициент деления резистивного делителя. А коэффициент деления, обозначим его «К», можно вычислить по такой формуле:
К = R3 / (R2+R3)
Очень любопытно то, что резисторы в делителях совсем не обязательно должны быть высокоточными. Можно взять обычные резисторы, затем измерить их фактическое сопротивление точным омметром, и уже в формулу подставить эти измеренные значения. Получится значение «К» для конкретного делителя, которое и нужно будет подставлять в формулу.
Для измерения силы тока делителя не требуется, потому что значение напряжения на порту А1 не будет превышать 5V, а даже будет значительно ниже. Но здесь ведь нужно будет перейти от напряжения к силе тока, а это, по всем известному Закону Ома, потребует деления на величину сопротивления шунта R12 В данном случае это 0,1 Ом.
Впрочем, именно такое сопротивление шунта совсем не обязательно. поэтому делите на то сопротивление шунта, которое у вас есть. Однако, брать его более 0,3 Ом и менее 0,05 Ом не рекомендую из соображения точности.
Программа для микроконтроллера
Программа на языке C++ приведена в таблице. Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица) начинается с загрузки этой библиотеки:
#include
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-инди-катором. Я выбрал порты с D2 по D7 Можно выбрать другие Эти порты назначены строкой:
LiquidCrystal lcd(2, 3, 4, 5, 6, 7) ;
После чего, программа переходит собственно к работе вольтметра.
Для измерения напряжения решено было использовать аналоговые входы А1 и А2. Эти входы заданы в строках:
int analoglnput=l; int analoglnputl=2;
Для чтения данных с аналоговых портов используется функция analogRead.
Чтение данных с аналоговых портов происходит в строках:
vout=analogRead(analoginput); voutl=analogRead(analoginput1);
Затем, производится вычисление силы тока с этой строке:
volt=vout*5.0/1024.0/0.1;
Рис. Программа для микроконтроллера самодельного вольтметра и амперметра.
А в этой строке происходит вычисление напряжения на аккумуляторе:
volt1=vout1*5.0/1024.0/0.048-volt*0.1;
Заметьте, сначала идет процедура вычисления напряжения общего на выходе зарядного устройства, а затем из него производится вычитание напряжения на шунте, для чего делается обратная функция, в которой уже измеренное и вычисленное значение силы тока умножается на величину сопротивления шунта, чтобы вернуться к значению напряжения на шунте.
В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы прибора это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5 0, например, если будет 4 85V, строки будут выглядеть так:
volt=vout*4.85/1024.0/0.1;
volt1=vout1*4.85/1024.0/0 048-volt*0.1;
На следующем этапе нужно определить фактическое значение сопротивления шунта R1. Как вы будете это определять, я не знаю Я просто прочитал маркировку с проволочного низкоомного резистора, который использовал в качестве шунта. Было 0.1 Оm. Так и записано в строках.
Хотя, конечно, лучше бы измерить, но миллиомметра у меня нет.
На следующем этапе нужно будет измерить фактические сопротивления резисторов R2-R3 и определить коэффициент. К (указан 0 048) для этих строк по формуле.
К = R3 / (R2+R3)
У меня получилось 0.048, так и указано.
После того как все измерено и рассчитано, производится очистка дисплея и индикация результатов. В верхней строке выведена сила тока, в нижней - напряжение. Выглядит это, например, так:
I = 4.52 А
U = 12.11 V
Таким образом, в текст программы нужно внести спедующие изменения:
-
1 Соответственно фактическому напряжению на выходе 5-вольтового стабилизатора платы ARDUINO UNO.
-
2 Соответственно фактическому коэффициенту деления резистивного делителя.
-
3 Соответственно фактическому значению сопротивления шунта
После этого прибор будет работать точно и никакого налаживания или калибровки не потребует. Еще одно замечание. - для того чтобы измерение силы тока происходило точно, нужно шунт R1 расположить в непосредственной близости к клемме аккумуляторной батареи, то есть, прямо на «крокодиле».
При этом провод общего минуса, идущего на плату нужно прицепить не к клеммам зарядного устройства, а непосредственно к шунту R1.
Каравкин В. РК-07-18.
Литература: 1. Каравкин В. - Двойной вольтметр на ARDUINO UNO, РК01-2017.