Вольтамперметр на PIC16F676. Радиотехника, электроника и схемы своими руками

Представленное здесь устройство пригодится, если у Вас есть блок питания с выходным напряжение 0-10 В. Именно такие пределы измерения "заложены" в схему представленную на рисунке. В ее основе - микроконтроллер Atmega8 (U1) в стандартном корпусе DIP. Он может показаться громоздким, но был выбран из-за широкой популярности, а также по причине того, что программаторы, для данного микроконтроллера очень распространены. Atmega8 используют большинство радиолюбителей и в Интернете можно найти немало схем с этим микроконтроллером. Поэтому, если Вам не понравится данный вольтметр, Atmega8 не останется лежать без дела.

Цифровой вольтметр на Atmega8. Схема принципиальная.

Показатели измерения вольтметра будут отображаться на цифровом семисегментном трехзначном индикаторе (DISP1). Дам немного информации по поводу него.

7-сегментный цифровой LED индикатор - это индикатор, состоящий из семи светодиодов, установленных в форме цифры 8. Зажигая или выключая соответствующие LED-ы (сегменты) можно отображать цифры от нуля до девяти, а так же некоторые буквы. Обычно используется несколько цифровых индикаторов, чтобы создать многозначные цифры - для этого индикаторы снабжены сегментом в виде запятой (точки) - dp. В итоге, у одного индикатора 8 сегментов, хотя называют их по числу цифровых сегментов 7-сегментным.

Каждый сегмент индикатора представляет собой отдельный светодиод, который может быть включен (светиться) или выключен (не светиться) в зависимости от полярности подаваемого на них напряжения. Индикаторы бывают как с общим катодом, так и с общим анодом. Речь идет об общем соединении всех светодиодов (сегментов). Кроме этого, индикаторы могут содержать несколько цифр, в таком случаем каждая цифра называется разрядом или знаком. Например, трехразрядный (трехзначный) семисегментный индикатор содержит три цифры. Именно такой индикатор и понадобится для этого устройства.


В конструкции используется индикатор красного свечения GNT-2831BD-11 с общим анодом. Резисторы R1-R8 определяют ток в индикаторе и, следовательно, его яркость. Их сопротивление не должно превышать максимальный выходной ток (40 мА), даже когда все 8 светодиодов горят сразу. В схеме используется несимметричный 10-битный АЦП (аналого-цифровой преобразователь), находящийся в AVR. Диапазон выходного значения составляет 0-999. Когда будет достигнут предел этих значений, появится символ "---".

На входе вольтметра (in) установлен делитель напряжения из резисторов R9, R10 и R11, обеспечивая диапазон измерения до 10 В с погрешностью 0,01 В. На выводе 23 микроконтроллера U1 делитель формирует напряжение, которое не должно превышать 2,5 В. Входное сопротивление вольтметра близко к 1мОм. Для калибровки вольтметра подайте на его вход точно известное напряжение и, перемещая подстроечный резистор R11, добейтесь на индикаторе таких же показаний.

Частота обновления вольтметра составляет около 4 Гц. Схема питается от стабилизированного источника напряжением 5 В. Потребляемый ток устройства составляет около 25 мА (большая часть потребления приходится на индикатор). Компоненты C1 и C2 расположите как можно ближе к микроконтроллеру.

Правильно выставленные биты представлены на рисунке ниже.


Если Вам необходимы пределы измерения до 100 В, измените значение R10 на 9,1мОм и R11 на 2,2 мОм. Тогда Вы получите желаемый диапазон измерения с погрешностью 0,1 В и входным сопротивлением около 10мОм. В этом случае придется изменить и место точки индикатора, чтобы она отображалась за двумя символами, а не за первым, как на схеме. Для этого вывод 28 микросхемы U1 оставьте свободным, а к общему проводу подключите вывод 27. Теперь вместо символов в виде 0.00 будут отображаться 00.0.

Реализация вольтметра от Владимира

Добавлены ключи на аноды индикатора, что повысило яркость дисплея, и позволяет использовать более мощные дисплеи.

Две печатки под DIP14 и SO14

В схеме применены транзисторы BC847 (КТ3102).

Во время обновления основной статьи вольтметра в схеме и печатках от Владимира был заменён делитель напряжения. Прошивки к вольтметру лежат в основной статье .

Реализация сетевого вольтметра от Wali Marat

Печатка отличается от схемы заменой резисторов R2 и R3 на один подстроечный 4,7к и отсутствием стабилитрона VD1.

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

Фото сетевого вольтметра

Реализация вольтметра/амперметра от Wali Marat

Во все схемы от Wali Marat был добавлен стабилитрон VD1 на 5,1В(обозначен зелёным цветом), для защиты входа АЦП микроконтроллера от перенапряжения.


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

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

Индикаторы больших размеров


Итак, рассмотренная ранее схема примет вид, показанный на рис. 2. Добавилось три транзистора VT1-VT3 буферного каскада на каждый разряд индикатора. Установленный буферный каскад инвертирует выходной сигнал МК. По сему, входное напряжение на базе VT2 инверсно относительно коллектора указанного транзистора, а значит подходит для подачи на вывод формирования запятой. Это дает возможность убрать транзистор VT1, который был ранее в схеме на рис. 1, заменив последний развязывающим резистором R12. Не забудьте, что изменились и номиналы резисторов в цепях базы транзисторов VT1-VT3.
Если желаете поставить индикаторы с нетрадиционно большими габаритами, то придется в цепи коллекторов указанных транзисторов поставить низкоомные (1 – 10 Ом) резисторы для ограничения бросков тока при их включении.

Логика работы МК для этого варианта нуждается только в небольшом изменении программы в части инверсии выходного сигнала управления разрядами, а именно портов RA0, RA1, RA5.
Рассмотрим только то, что изменится, а именно подпрограмму, уже известную нам под условным названием «Функция формирования динамической индикации» в Листинге №2 (смотрите папку «тр_ОЕ_30V» в архиве или первую часть статьи):

16. void Indicator (){ 17. while (show_digit < 3) { 18. portc = 0b111111; // 1 -> C 19. if (show_digit == 2){ delay_ms(1); } 20. porta = 0b100111; 21. show_digit = show_digit + 1; 22. switch (show_digit) { 23. case 1: { 24. if (digit1 == 0) { } else { 25. Cod_to_PORT(DIGIT1); 26. PORTA &= (~(1<<0)); //0 -> A0 27. } break;} 28. case 2: { 29. Cod_to_PORT(DIGIT2); 30. PORTA &= (~(1<<1)); //0 -> A1 31. break;} 32. case 3: { 33. Cod_to_PORT(DIGIT3); 34. PORTA &= (~(1<<5)); //0 -> A5 35. break;} } 36. Delay_ms(6); 37. if (RA2_bit==0) {PORTA |= (1<<2);// 1 -> A2 38. Delay_ms(1);} 39. if ((show_digit >= 3)!= 0) break; 40. } show_digit = 0;}


Сравните оба варианта. Инверсия сигнала по порту RA (строка 20 Листинга №2) легко читается, поскольку записано в двоичной форме. Достаточно совместить выводы МК и двоичное число. В строках 19 и 37 появились немного странные условия, которых не было вначале. В первом случае: «задержать сигнал логического нуля на порту RA1 во время индикации второго разряда». Во втором: «в случае если на порте RA2 логический нуль, инверсия». Когда будете компилировать финальную версию программы можете их удалить, а вот для симуляции в PROTEUSе они нужны. Без них не будет нормально индицироваться запятая и сегмент «G».
Почему? - спросите Вы, ведь первый вариант прекрасно работал.

В завершение, вспомните слова кузнеца из фильма «Формула Любви»: «…если один человек построил, другой завсегда разобрать может!».
Удачи!

Читательское голосование

Статью одобрили 27 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.

Ампервольтметр предназначен для измерения тока 0-9,99А и напряжения 0-100В с разрешением 0,01А и 0,1В соответственно.

Операционный усилитель можно заменить на LM2904, LCD дисплей должен быть на контроллере HD44780. Количество символов 2х8... Так же можно применить 2х16 символьный дисплей, но в таком случае останется незадействованной бОльшая часть дисплея. В такой ситуации в устройстве, куда будет встраиваться ампервольтметр рекомендуется вырезать окошко только под рабочую часть дисплея на которой будет выводиться информация. Важно! Непосредственно на дисплеях, как правило, установлен токоограничительный резистор в цепи питания подсветки. Если резистора нет, то его необходимо установить самостоятельно в разрыв цепи идущей на LED +. Сопротивление резистора 6...100 Ом в зависимости от желаемой яркости подсветки...

Настройка устройства проста: сначала резистором "контрастность" устанавливаем необходимую контрастность дисплея, а резисторами "уст U" и "уст I" регулируем точность показаний вольтметра и амперметра. Регулировку желательно производить на верхних пределах показаний вольтметра и амперметра. Если после регулировки амперметр без нагрузки отображает какое-либо значение тока - подбираем операционный усилитель чтобы без нагрузки значение тока было 0,00А!

Фото устройства!

Подключение ампервольтметра к блоку питания.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
МК PIC 8-бит

PIC12F675

1 В блокнот
Сдвиговый регистр

CD74HC164

1 В блокнот
Операционный усилитель

LM358

1 Замена: LM2904 В блокнот
Линейный регулятор

LM7805CT

1 В блокнот
LCD-дисплей HD44780 1 8x2 В блокнот
C1, C2, C4, C5 Конденсатор 0.1 мкФ 4 В блокнот
C3 Электролитический конденсатор 100 мкФ 1 В блокнот
Резистор

100 Ом

2 В блокнот
Резистор

91 кОм

1 В блокнот
Резистор

5.1 кОм

1 В блокнот
Резистор

680 Ом

1 В блокнот
Резистор

0.01 Ом

1


Данное устройство реализовано на PIC16F676 с использованием встроенного десятиразрядного АЦП. Вольтметр позволяет измерять напряжение до 30В постоянного тока и может использоваться в настольных источниках питания либо различных приборных панелях.
Для отображения напряжения используется три семисигментный индикатора с общим анодом. Вывод информации на индикаторы осуществляется динамически(мультиплексированием), частота обновления составляет около 50 Гц.

Схема вольтметра:

Напряжение на выходе делителя
По умолчанию у PIC микроконтроллера, источник опорного напряжения АЦП установлен на VCC (+5 В в данном случае).
Необходимо сделать такой делитель напряжения, который снизит напряжение 30В до 5В. Несложно рассчитать Vin / 6 ==> 30/6 = 5, коэффициент деления равен 6. Так же делитель должен обладать большим сопротивлением, чтобы как можно меньше влиять на измеряемое напряжение.

Расчет
АЦП - 10bit значит максимальное количество отсчётов 1023.
Максимальное значение напряжения 5В, тогда получаем 5/1023 = 0,0048878 В/Отсчёт. В таком случае, если количество точек АЦП составляет 188, то напряжение на входе 188 * 0.0048878 = 0.918 вольт

С использованием делителя напряжения, максимальное напряжение 30В, тогда 30/1023 = 0,02932 В/Отсчёт.
И если количество точек АЦП составляет 188, то напряжение на входе 188 * 0,02932 = 5,5 В.

Конденсатор 0.1uF делает АЦП более стабильным, так как десятиразрядные АЦП достаточно чувствительны.
Стабилитрон на 5,1В предназначен для защиты АЦП от превышения допустимого напряжения.

Печатная плата:

Фото готового устройства:

Точность и калибровка
Общая точность схемы достаточно велика, она полностью зависит от значений сопротивлений резисторов 47кОм и 10кОм, следовательно чем точнее будут выбраны комплектующие, тем точнее будут показания.
Калибровка вольтметра осуществляется подстроечным резистором 10кОм, установите сопротивление около 7,5кОм и контролируйте показания другим прибором.
Также для настройки можно использовать любой стабилизированный источник на 5 или 12 вольт, в этом случае вращайте подстроечный резистор до тех пор, пока не получите правильное значение на дисплее.

Проект в Proteus: