Схема вольтметра на Arduino UNO для двухполярного блока питания


Очень неплохо лабораторный двухполярный блок питания оснастить цифровым вольтметром, показывающимвыходные напряжения обоих полярностей.

Используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780) можно легко сделать двойной вольтметр.

В одной строке он будет показывать напряжение U1, в другой - напряжение U2. Но проблема в том, что аналоговые входы ARDUINO UNO могут принимать только положительные напряжения.

Таким образом, двойной вольтметр на ARDUINO UNO представляет собой аналог двух вольтметров, неразрывно соединенных своими отрицательными входами.

Измерения двухполярного напряжения

Как эту «спарку» приспособить для измерения двухполярного напряжения? Можно поступить так, как показано на рисунке 1. Просто взять, и к общему минусу этих двух вольтметров подключить не нуль выхода блока питания, а его выход отрицательного напряжения.

Как измерять двуполярное напряжение с помощью микроконтроллера, схема

Рис. 1. Как измерять двуполярное напряжение с помощью микроконтроллера, схема.

При этом, нуль подключить к плюсу одного вольтметра, а выход положительного напряжения к плюсу другого вольтметра. Теперь вольтметр U1 будет численно показывать отрицательное напряжение выхода блока питания, а вольтметр U2 будет показывать, по модулю, сумму положительного и отрицательного напряжения на выходах блока питания.

Для того чтобы вольтметр U2 показывал только положительное напряжения блока питания, нужно из его показания вычесть показания вольтметра U1.

Хорошо, что это вычитание можно очень легко организовать программным способом. Но, прежде всего, хочу напомнить, что ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.

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

Схема вольтметра для двухполярного блока питания показана на рис. 2. Он предназначен для напряжений от 0 до ±50V.

Причем, напряжения разной полярности могут иметь различную величину. Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате стабилизатора напряжения 5V.

Принципиальная схема вольтметра на Arduino UNO для двухполярного блока питания

Рис. 2. Принципиальная схема вольтметра на Arduino UNO для двухполярного блока питания.

Измеряемые напряжения поступают на два аналоговых входа А1 и А2. Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них.

В данном случае, выбраны А1 и А2. Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V.

Поэтому, на входах установлены делители на резисторах R1-R4 и сами входы подключены к выходам двухполярного блока питания таким способом, как показано на рисунке 1.

Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.

Для того чтобы можно было измерять напряжение более 5V, вернее, более напряжения питания микроконтроллера, потому что реальное напряжение на выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V, и обычно немного ниже, нужно на входе применить обычные резистивные делители.

Это уже выше указанные делители напряжения на резисторах. При этом, для приведения показаний прибора к реальному значению входного напряжения, нужно в программе задать деление результата измерения на коэффициент деления резистивного делителя. А коэффициент деления, обозначим его «К», можно вычислить по такой формуле:

К = R3 / (R1+R3) или К = R4 / (R2+R4),

соответственно для разных входов двойного вольтметра.

Очень любопытно то, что резисторы в делителях совсем не обязательно должны быть высокоточными. Можно взять обычные резисторы, затем измерить их фактическое сопротивление точным омметром, и уже в формулу подставить эти измеренные значения.

Получится значение «К» для конкретного делителя, которое и нужно будет подставлять в формулу. Кроме того, после выполнения измерений и вычислений напряжений, нужно будет из результата напряжения U2 вычесть результат измерения напряжения U1.

Чтобы показать реальные значения двухполярного напряжения на выходе блока питания.

Программа

Программа на языке C++ приведена в таблице 1.

Таблица 1.

Исходный код программы двуполярного вольтметра на Arduino UNO

Рис. 2. Исходный код программы двуполярного вольтметра на Arduino UNO.

#include

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //порты для дисплея

int analogInput=l; //первый аналоговый вход А1

int analogInputl=2; //второй аналоговый вход А2

float vout; //значение с 1- входа

float voutl; //значение с 2- входа

float volt; //результат измерения с 1- входа

float voltl; //результат измерения с 2- входа

void setup ()

{

lcd.begin(16,2); //дисплей 16 символов 2 строки

}

void loop () {

vout=analogRead(analoglnput); //чтение значения 1- входа

voutl=analogRead(analoglnputl); //чтение значения 2- входа

volt=vout*5.0/1024.0/0.048; //вычисление результата 1- входа

voltl=voutl*5.0/1024.0/0.048-volt; //вычисление результата 2-входа

lcd.clear(); //очистка памяти дисплея

lcd.setCursor(0,0); //установка курсора на 1- строку

lcd.print("Ul = -"); //печать номера входа U1 =

lcd.print(volt); //печать результата 1- входа

lcd.print(" V"); //печать единицы измерения V

lcd.setCursor(0,1); //установка курсора на 2- строку

lcd.print("02 = +"); //печать номера входа U2 =

lcd.print(voltl); //печать результата 2- входа

lcd.print(" V"); //печать единицы измерения V

delay(500); //время индикации 0,5 секунды

}

Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти. Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления.

Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal.

Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:

#include

Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-инди-катором. Я выбрал порты с D2 по D7. Можно выбрать другие.

Эти порты назначены строкой:

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

После чего, программа переходит собственно к работе вольтметра. Для измерения напряжения решено было использовать аналоговые входы А1 и А2.

Эти входы заданы в строках:

int analogInput=l; int analog!nputl=2;

Для чтения данных с аналоговых портов используется функция analogRead

Чтение данных с аналоговых портов происходит в строках:

vout=analogRead(analoglnput); voutl=analogRead(analoglnputl);

Затем, производится вычисление фактического напряжения с учетом коэффициента деления делителя входного напряжения, и необходимости вычитания U2-U1:

volt=vout*5.0/1024.0/0.048;

voltl=voutl*5.0/1024.0/0.048-volt;

Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Я выбрал порты с D2 по D7. Можно выбрать другие. Эти порты назначены строкой:

LiquidCrystal led(2, 3, 4, 5, 6, 7);

После чего, программа переходит собственно к работе вольтметра. Для измерения напряжения решено было использовать аналоговые входы А1 и А2.

Эти входы заданы в строках:

int analogInput=1;

int analog!nputl=2;

Для чтения данных с аналоговых портов используется функция analogRead

Чтение данных с аналоговых портов происходит в строках:

vout=analogRead(analogInput);

voutl=analogRead(analoglnputl);

Затем, производится вычисление фактического напряжения с учетом коэффициента деления делителя входного напряжения, и необходимости вычитания U2-U1:

volt=vout*5.0/1024.0/0.048;

voltl=voutl*5.0/1024.0/0.048-volt;

В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить.

Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5.0, например, если будет 4.85V, строки будут выглядеть так:

volt=vout*4.85/1024.0/0.048;

voltl=voutl*4.85/1024.0/0.048-volt;

На следующем этапе нужно будет измерить фактические сопротивления резисторов R1-R4 и определить коэффициенты К (указаны 0.048) для этих строк по формулам:

К1 = R3 / (R2+R3) и К2 = R4 / (R1+R4)

Допустим, К1 = 0.046, а К2 = 0.051, так и пишем:

volt=vout*4.85/1024.0/0.046;

voltl=voutl*4.85/1024.0/0.051-volt;

После того как измерены и вычислены фактические напряжения, начинается индикация результатов, при которой входы обозначаются как U1 и U2 и устанавливается полярность индицируемого результата.

В результате, на двухстрочном табло, в верхней строке будет показано отрицательное напряжение на выходе двухполярного блока питания, а в нижней строке - положительное напряжение.

Соответственно, они будут отмечены значками «+» и «-» перед числом. Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового стабилизатора платы ARDUINO UNO и согласно фактическим коэффициентам деления резистивных делителей.

После этого прибор будет работать точно и никакого налаживания или калибровки не потребует. Для работы вольтметра необходимо питание. Это постоянное напряжение от 7 до 12V, подаваемое на разъем для подачи питания, имеющийся на плате ARDUINO UNO.

Специфика данной схемы такова, что этот источник не должен быть связан с выходными напряжениями блока питания. Никак нельзя его минус соединять с нулем блока питания.

То есть, это должен быть отдельный выпрямитель, работающий от какой-то дополнительной обмотки на трансформаторе блока питания. Либо это должен быть самостоятельный блок питания, например, сделанный из какого-то маломощного сетевого адаптера, на отдельном трансформаторе.

Каравкин В. РК-12-19.


1 68 На микроконтроллерах
arduino микроконтроллер avr микроконтроллер вольтметр измерения
Написать комментарий:

cashback