Светодиодный вольтметр на микроконтроллере

Встраиваемый ампер-вольтметр на PIC12F675 и LED-индикаторах

Когда появилась необходимость в измерительной части для лабораторного БП, рассматривая различные схемы из Интернета, сразу остановил выбор на семи сегментных LED индикаторах (возможная альтернатива – индикаторы типа 0802, 1602 – дороги и плохо читаемы). Так же, не хотелось каких либо переключений – и ток, и напряжение должны считываться в любой момент времени. По разным причинам, найденные готовые решения не устроили и я решил сконструировать свою схему.

Предлагаемое устройство предназначено для применения совместно с различными блоками питания и позволяет измерять напряжение в пределах от 0 до 99.9 Вольт с точностью 0.1 Вольт и ток потребления в пределах от 0 до 9.99 Ампер с точностью 0.01 ампер. Устройство собрано на дешевом микроконтроллере PIC12F675, как самом недорогом и распространенном из имеющих 10-разрядный АЦП, двух регистрах 74HC595 и двух 4-х или 3-х разрядных LED индикаторах. Общая стоимость примененных деталей, на мой взгляд, минимальна для подобных конструкций с одновременной индикацией напряжения и тока.

Описание работы схемы.

Напряжение высвечивается индикатором HL1, а ток – индикатором HL2. Одноименные сегментные выводы индикаторов объединены попарно и подключены к параллельным выходам регистра DD2, общие выводы разрядов подключены к регистру DD3. Регистры соединены последовательно и образуют 16-разрядный сдвиговый регистр, управляемый по трем проводам: выводы 11 – тактовые, 14 – информационный, а по перепаду на выводе 12 информация записывается в выходные защелки. Индикация обычная динамическая – через выходы регистра DD3 последовательно перебираются общие выводы индикаторов, а с выходов DD2 через токоограничительные резисторы R12-R19 включаются соответствующие выбранному разряду сегменты. Индикаторы могут быть как с общим анодом, так и с общим катодом (но оба одинаковые).

Микроконтроллер управляет индикацией по выводам GP2, GP4, GP5 в прерываниях от таймера TMR0 c интервалом 2 мс. Входы GP0 и GP1 используются соответственно для измерения напряжения и тока. В первых трех разрядах индикаторов высвечиваются собственно измеряемые значения, а в последнем разряде: в верхнем индикаторе – знак “V”, а в нижнем – знак “A”. В случае применения 3-х разрядных индикаторов эти знаки наносятся на корпус прибора. Никаких изменений программы в этом случае не требуется.

Измеряемое напряжение поступает на МК через делитель R1-R3, а ток – с выхода ОУ LM358 через резистор R10, который совместно с внутренним защитным диодом защищает вход МК от возможной перегрузки (ОУ питается напряжением +7..+15 Вольт). Коэффициент усиления ОУ задается делителем R5-R7, примерно равн 50 и регулируется подстроечным резистором R5. ФНЧ R4C2 сглаживает напряжение с шунта. Каждое измерение производится в течении всего 100 мкс. и без этой цепочки показания прибора будут “прыгать” при любой неравномерности измеряемого тока (а он редко когда бывает строго постоянным). Для тех же целей служит и конденсатор C1 в цепи измерения напряжения. Стабилитрон D1 защищает вход ОУ от перенапряжения в случае обрыва шунта.

Особо следует остановиться на цепочке R8,R9. Она задает дополнительное смещение примерно 0.25 милливольт на вход ОУ. Дело в том, что без нее имеется существенная нелинейность коэффициента усиления ОУ при низких значениях измеряемого тока (менее 0.3 А). На разных экземплярах микросхем этот эффект проявляется в разной степени, но погрешность при выше обозначенных значениях измеряемого тока слишком высока в любом случае. При установке R8 и R9 указанных на схеме значений (номиналы могут быть пропорционально изменены при сохранении того же соотношения, например 15 Ом и 300 кОм) погрешность измерения тока, обусловленная этим эффектом, не превышает единицы младшего разряда. Со всеми имеющимися у меня экземплярами микросхем, никакого подбора указанных резисторов не потребовалось. В общем случае, подбирается минимальное сопротивление R9, при котором на индикаторе еще светятся нули при отсутствии измеряемого тока, и увеличивается в 1.5-2 раза. Интересно, что среди многих подобных конструкций, где применяется та же микросхема, ни в одной статье нет и намека на данную проблему. Видимо, у меня одного оказались “неправильные” ОУ (приобретенные, кстати, в разное время в течении 10 лет). В любом случае, я категорически не рекомендую в целях “упрощения конструкции” исключать из схемы обычно отсутствующие в подобных схемах элементы C1,C2,R3,R8,R9 – это все-таки измерительный прибор, а не мигающая цифрами игрушка!

Хорошая точность и стабильность показаний, кроме того, обеспечивается полным “отделением” от микроконтроллера относительно сильноточных импульсных цепей управления индикаторами путем питания каждой цепи от отдельного стабилизатора 78L05. И даже слабые помехи от работы самого микроконтроллера мало влияют на результат, так как каждое измерение производится в режиме “SLEEP” с “заглушенным” тактовым генератором.

Микроконтроллер тактируется от внутреннего генератора для экономии выводов. Вход сброса через цепь R11,C3 подключен к “чистой” +5В. При включении-выключении БП, в котором используется конструкция, возможны значительные помехи, поэтому, для исключения “зависания” программы, включен таймер WDT.

Питается устройство от любого стабилизированного напряжения 7-15 Вольт (не больше 15В!), через стабилизаторы DA2, DA3. Конденсаторы C4-C8 – стандартные блокировочные. Для обеспечения низкой погрешности при токах, близких к верхнему пределу, напряжение питания ОУ должно быть как минимум на 2 Вольта больше напряжения микроконтроллера, поэтому питание на него берется до стабилизаторов.

Устройство собрано на печатной плате размерами 57 на 62 миллиметра.

Печатная плата устройства.

Для уменьшения габаритов платы, большая часть резисторов и конденсаторов применена в SMD корпусе типоразмера 0802. Исключениями являются: R1 – из-за рассеиваемой мощности, R12 – для упрощения топологии платы, электролитические конденсаторы и подстроечные резисторы. Конденсаторы C1 и C2 применены керамические, но в случае отсутствия таковых, их можно заменить электролитическими танталовыми. Стабилитрон – любой, с напряжением стабилизации 3-4.7 Вольт. Индикаторы можно заменить на FIT3641 или трехразрядные серий 3631 или 4031 без изменения рисунка платы. В случае необходимости, возможно даже применение без изменения рисунка более крупных индикаторов типа 5641 и 5631 (в этом случае микроконтроллер впаивается без колодки напрямую, подстроечные резисторы применяются малогабаритные, индикатор впаивается поверх микросхем, сточив четыре выступа снизу по углам индикатора). Для подключения устройства к внешним цепям применены винтовые зажимы. Часто возникающая проблема с изготовлением измерительного шунта решена путем применения готового шунта предела 10А от неисправного мультиметра серии D83x, абсолютно без всякой переделки. На мой взгляд, это оптимальный вариант – неисправный китайский мультиметр, думаю, найдется у многих радиолюбителей. В крайнем случае, его можно изготовить из нихромовой (а лучше из константановой) проволоки.

Выход блока питания подключается к точке “Ux” и далее, с той же точки в нагрузку. Общий провод подается в точку “COM”, а в нагрузку уже подается с точки “COM-Out”. При таком подключении, напряжение на индикаторе завышается на 0.1 Вольт при максимальном токе нагрузки. Программным способом эта погрешность уменьшена в два раза до половины погрешности дискретизации (0.05В максимум). Во избежание увеличения этой погрешности, следует выбирать такое сопротивление шунта, при котором не требуется при настройке изменять номиналы схемы (примерно 7-14 мОм). Подходящее напряжение питания на устройство подается на вывод “Upp”.

Фотографии готового устройства

Программа микроконтроллера написана на Ассемблере в среде MPASM. Для обоих видов индикаторов программа одна за исключением одной директивы. В начале исходного текста программы (файл AV-meter.asm) в директиве “ANODE EQU 0” параметр имеет значение 0, что соответствует работе с индикаторами с общим катодом. Для применения индикаторов с общим анодом следует изменить значение этого параметра на 1, после чего заново оттранслировать программу. Так же, прилагаются готовые прошивки для микроконтроллера как для индикаторов с общим анодом, так и с общим катодом. При загрузке HEX-файла в программы типа IC-Prog, WinPic или Pickit2, слово конфигурации загружается автоматически.

Настройка схемы предельно проста. Подав на вход напряжение, близкое к максимальному, подстроечником R2 следует выставить на верхнем индикаторе требуемое значение. Потом, подключают на выход устройства резистор 0.5-2 Ома в качества нагрузки и регулировкой напряжения устанавливают ток, близкий к максимальному. Подстроечником R5 выставляют соответствующие образцовому амперметру показания на нижнем индикаторе.

Во вложенном файле представлены прошивки, исходный код, Proteus модель и плата LAY.

Схема

Логика программы

Структура проекта

Драйвер семисегментного индикатора

//куда подключены сегменты
#define PORT_IND PORTB
#define DDR_IND DDRB

#define SEG_A 0
#define SEG_B 1
#define SEG_C 2
#define SEG_D 3
#define SEG_E 4
#define SEG_F 5
#define SEG_G 6
#define SEG_DP 7

//куда подключены упр. выводы
#define PORT_TR PORTD
#define DDR_TR DDRD

#define NUM1 0
#define NUM2 1
#define NUM3 2
#define NUM4 3

void IND_Init( void );
void IND_Output( unsigned int value, unsigned char comma);
void IND_Update( void );

Прототипы функций находятся в заголовочном файле, а их реализации в сишном.

Читайте также:  Цифровой амперметр на светодиодах в столбик

Функция инициализации

//количество разрядов индикатора
#define AMOUNT_NUM 4

//буфер семисегментного индикатора
unsigned char buf[AMOUNT_NUM];

void IND_Init( void )
<
PORT_IND = 0xff;
DDR_IND = 0xff;

PORT_TR |= (1 for ( unsigned char i = 0; i //массив для преобразования десятичных чисел в коды индикатора
unsigned char number[] =
<
(1 //0
(0 //1
(1 //2
(1 //3
(0 //4
(1 //5
(1 //6
(1 //7
(1 //8
(1 //9
>;

void IND_Output( unsigned int value, unsigned char comma)
<
unsigned char tmp;
for ( unsigned char i = 0; i if (comma //макросы для настройки драйвера индикатора под другую схему
#define LightOutAll() PORT_TR &=

((1 #define BurnDigit(port, digit) port |= (1 #define ValueBuf() buf[count]

void IND_Update( void )
<
static unsigned char count = 0;

//гасим все разряды
PORT_IND = 0;
LightOutAll();

//зажигаем соответствующий разряд
if (count == 0) BurnDigit(PORT_TR, NUM1);
else if (count == 1) BurnDigit(PORT_TR, NUM2);
else if (count == 2) BurnDigit(PORT_TR, NUM3);
else BurnDigit(PORT_TR, NUM4);

//выводим код цифры в порт
PORT_IND = ValueBuf();

count++;
if (count == AMOUNT_NUM) count = 0;
>

(1 #define ValueBuf() buf[count]

индикатор с общим катодом подключенный к микроконтроллеру с помощью транзисторов
#define LightOutAll() PORT_TR &=

((1 #define BurnDigit(port, digit) port |= (1 #define ValueBuf() buf[count]

индикатор с общим анодом подключенный напрямую к микроконтроллеру
#define LightOutAll() PORT_TR &=

((1 #define BurnDigit(port, digit) port |= (1 #define ValueBuf()

индикатор с общим анодом подключенный к микроконтроллеру с помощью транзисторов
#define LightOutAll() PORT_TR |= (1 #define BurnDigit(port, digit) port &=

(1 #define ValueBuf()

Полный текст драйвера светодиодного семисегментного индикатора

Как вычисляется напряжение

Uadc = Uin*R14/(R14 + R15) = 30В*82 /(82 + 910) = 2,48 В

Чтобы вычислить напряжение на входе вольтметра нужно результат преобразования АЦП пересчитать в напряжение и домножить на коэффициент

(R14 + R15)/R14 = 992/82

Напряжение на входе АЦП – Uadc вычисляется по формуле:

Uadc = value * 2,56/(2^n – 1),

где n – разрядность АЦП, value – цифровое значение напряжения

Отсюда напряжение на входе вольтметра будет равно:

Uin = (value * 2,56 * 992)/(82 * 1023) = (value * 30,96)/1023

Чтобы не связываться с типом float и при этом иметь возможность вычислять напряжение с точностью до 2-ух знаков после запятой, числитель этой формулы я домножил на 100

Uin = (value * 3096)/1023

Тест вольтметра

Результаты вы можете видеть в таблице. Первая колонка – это напряжение выставляемое на источнике питания, вторая – показания мультиметра Fluke, а третья – цифровой вольтметр на ATmega8.

Миниатюрный вольтметр на семисегментном LED индикаторе и PIC16F684

Прочитав статьи Edward Ned’а, я собрал DIP-версию и проверил ее в работе. Действительно вольтметр работал, ток через вывод микросхемы к индикатору не превышал 16 миллиампер в импульсе, так что работа микросхемы без резисторов, ограничивающих токи сегментов, вполне допустима и не вызывает перегрузок элементов.
Не понравилось слишком частое обновление показаний на дисплее и предложенная шкала «999». Хотелось подправить программу, но исходных кодов автор не выкладывает.

В это же мне потребовались вольтметр и амперметр для небольшого блока питания. Можно было собрать на PIC16F690 совмещенный вариант, а можно было собрать два миниатюрных вольтметра, причем габариты двух вольтметров получались меньше совмещенного варианта.
Свой выбор я остановил на микросхеме PIC16F684 и написал исходный код для посегментной развертки индикатора.
В процессе написания кода возникла идея программируемого переключения шкал и положения запятой, что и удалось реализовать.

Содержание / Contents

↑ Что умеет мой вольтметр

• Автоматически определяется тип индикатора, поэтому в схеме будут работать как общий анод, так и общий катод.
• С помощью кнопки выставляется желаемая шкала измерений «1023», «511», «343», «256» или «204». Это означает, что при входном напряжении 5 Вольт будет, зажигается максимальное число из вышеуказанных. Поскольку число 10 зажечь на первом элементе индикатора невозможно, то вместо него зажигается верхний сегмент.
• Кнопкой выставляется желаемое место запятой – после первого, второго знака или без запятой.
• Можно запрограммировать сдвиг значений на постоянную величину – потребовался этот режим для правильного измерения тока (вычитается ток измерителя напряжения). Этот вариант и был применен, что и отображено на блок-схеме приложенном примере.

Питание измерителя осуществляется от источника 7,5 – 12 Вольт, при токе 15 – 25 мA, потребление тока зависит от индикатора. Более яркие индикаторы потребляют больший ток.

↑ Выбор шкал измерителя

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

В измерителе программно реализована посегментная развертка индикатора, поэтому в каждый момент времени зажигается только один из сегментов в каждом из знаков. Это приводит к снижению нагрузки на выводы микроконтроллера по сравнению с поразрядной индикацией.

↑ Полная принципиальная схема измерителя

↑ Конструкция



Кнопка используется только перед установкой в конечное устройство, при эксплуатации ей не пользуются.

↑ Описание программы

При включении происходит измерение падения напряжения на резисторе R4 и по результатам измерений происходит выбор примененного типа индикатора «Общий катод» или «Общий анод».

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

Сдвиг шкалы вычисляется автоматически по результатам измерения паразитного тока, протекающего по шунту блока питания, если это необходимо.

После установки нужных значений шкалы, положения запятой и сдвига показаний производится запись установленных значений в EEPROM и в дальнейшем эти данные вызываются из памяти при включении.

Программа написана на «mikroC for PIC» и снабжена достаточным количеством комментариев для понимания ее работы.

↑ Управление кнопкой

• Короткое нажатие вызывает смену шкалы. Шкалы меняются по кругу («1023», «511», «343», «256» или «204»). На индикаторе загорается максимальное значение шкала на 0,5 секунды, а затем высвечивается значение входного напряжения.
• Длительное (0,5 – 1 сек) нажатие перемещает запятую вправо по кругу (после первого, второго знака или без запятой).
• Если кнопка удерживается при включении 0,5 – 2 сек, то измеритель ожидает 3 секунды, пока установятся режимы блока питания и записывает величину паразитного тока в память. При этом нагрузка от блока питания не должна быть подключена.
Если эту коррекцию надо изменить, то операцию можно повторить.
Если коррекцию надо убрать, то кнопку надо удерживать при включении более 3 секунд.

↑ Пример применения

Был собран малогабаритный блок питания, у него получились следующие параметры:
Напряжение 0 – 31,2 Вольта.
Ток 0 – 2,2 Ампера.

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

Для измерения напряжения в этом случае удобными оказались значения: шкала «343» и запятая после 2-го знака. При этом максимальное значение шкалы составит 34,3 Вольта, что вполне приемлемо.

Для измерения тока удобными оказались значения: шкала «255» и запятая после 1-го знака, соответственно максимальное значение шкалы составит 2,55 Ампера. В связи с тем, что по токоизмерительному шунту протекает ток, потребляемый измерителем, показания тока были завышены. После проведения коррекции этот паразитный ток стал вычитаться из общих показаний и показания стали правильными.

После установки шкал в блоке питания были подобраны значения резисторов делителя R2, R3 и коэффициент усиления OP1 так, чтобы показания соответствовали контрольным.

↑ Ссылки

↑ Файлы

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, учредитель журнала «Датагор»

Схема. Вольтметр на микроконтроллере ATtiny2313

Автор: Radioelectronika-Ru · Опубликовано 20.08.2017 · Обновлено 19.03.2018

Принцип работы вольтметра основан на методе преобразования измеряемого напряжения в частоту с помощью однократного интегрирования. Это позволяет, по сравнению с микроконтроллерами, имеющими встроенные десятиразрядные АЦП, получить большую разрешающую способность в широком интервале измеряемого напряжения. Подсчет частоты, переключение пределов и вывод результатов измерения на светодиодный индикатор осуществляет микроконтроллер. Он работает по программе, коды которой приведены в таблице.

:020000020000FC
:100000002FC0189518955AC11895E9C1ADC018951B
:100010001895189518951895189518951895189578
:06002000189518951895D3
:10006000F8944FED4DBF41E948B944274BBF4FEFDE
:1000700047BB4FEF48BB4FE341BB40E242BB4EEOC2
:1000800041BD9927442740936900409367004DBDC7
:100090004CBD40936A0042E049BF44E043BF40E0AA
:1000A00040936B0040E040936C0040E24093680056
:1000B00040EC4093700049EF4093710044EA409354
:1000C000720040EB4093730049E94093740042E9A9
:1000D0004093750042E84093760048EF40937700E4
:1000E00040E84093780040E94093790048E8409325
:1000F0007A0043E840937B0046EC40937C0041EA61
:1001000040937D0046E840937E004EE840937F0098
:10011000789440E84093610040EC4093620049E9E4
:100120004093630049EF409364004FEF40936900B0
:10013000409169004423E1F76BD102D00000FDCF6C
:1001400090FD089500916800002309F00895F89447
:100150001FB69160002708BF0AE809BF02E00EBD84
:1001600095981FBE78940895A8951FB60F931F9376
:100170002F933F934F935F93AF93BF93209168006A
:10018000222319F02A9520936800209169002223E8
:1001900019F02A952093690020916A0088942E33E3
:1001A00038F4239520936A002FEF209360000DC050
:1001B00088942A3738F4239520936A0022272093C5
:1001C000600003C0222720936A0004E011E0BB27EF
:1001D000A1E622B3207F212B22BB3D9140916700F5
:1001E000342B38BB54E04FEF4A9544230000000005
:1001F000D9F75A955523B9F7110F0A95002349F7F6
:100200002FEF28BB22B3207F22BBBF91AF915F911C
:100210004F913F912F911F910F911FBE18951FB6BF
:1002200088249924AA24BB240091650010916600BB
:10023000202F312F8894084E134020FOB394202FA4
:10024000312FF9CF8894022F132F0446104020F04D
:10025000A394202F312FF9CF8894022F132F0A4017
:10026000104020F09394202F312FF9CF8894022F43
:10027000132F802EBB27A1E6FF27E0E7E80D0081C2
:100280000D93E0E7E90D00810D93E0E7EA0D0081B1
:100290000D93E0E7EB0D00818894003C11F491FD93
:1002A0000FEF0C9392FB26F000270093670004C029
:1002B00000916000009367001FBE08951FB68F92E3
:1002C0009F92AF92BF920F93lF932F933F934F93Al
:1002D0005F93AF93BF93EF93FF9300270EBD0DBDC8
:1002E0000CBD02E009BF959A0CE00093680004B5CC
:1002F00015B591FB4EF12FE037E28894200B310BBE
:10030000F8F09B7F20916B0027FF0EC0402F512FEC
:100310002F778894420B504018F0042F152F09C0F6
:1003200088940027112705C08894020F2227121FE6
:1003 300038F0009365001093660071DF77D03EC0FF
:100340008894949A92603AC024ED33E08894200B0C
:10035000310B20F094989D7F9B7F30C02FE037E2D7
:100360008894200B310B08F19B7F949A9260209126
:100370006C0027FF0EC0402F512F2F778894420B1F
:10038000504018F0042F152F09C08894002711271A
:1003900005C08894020F2227121F38F000936500D1
:1003A000109366003CDF42D009C0889494600FE04F
:1003B00017E2009365001093660031DF9E7FFF9186
:1003C000EF91BF91AF915F914F913F912F911F910D
:1003D0000F91BF90AF909F908F901FBE18951FB642
:1003E0000F9300270EBD0DBD0CBD0093650000935B
:1003F000660002E009BF0CE000936800959A0A9538
:100400000EDF9E7F0CE0009368000F911FBE1895D1
:100410004F93AF93BF934FEFBB27AlE64D934D93FF
:100420004D934C93BF91AF914F91089591FB36F04E
:10043000009164000F770093640005C00091630091
:080440000F770093630008959B
:00000001FF

Схема устройства показана на рис. 1 Весь интервал измеряемого напряжения 0…99,99 В разбит на два участка — 0…9,999 и 10,00…99,99 В, которые переключаются автоматически Входное сопротивление на первом участке составляет 470 кОм, на втором — около 100 кОм, абсолютная погрешность измерения на первом участке составляет ±3 мВ. Напряжение питания вольтметра — 15…20 В, потребляемый ток — 60 мА. Период повторения измерений — 100 мс, максимальное время одного цикла преобразования при входном напряжении 9,999 В — 10 мс. При превышении измеряемым напряжением 99,99 В на индикаторе отображается число “9999”, мигающее с частотой 2 Гц.

Читайте также:  Цифровой мультиметр MAS830 - обзор и технические характеристики

Измерительная часть устройства состоит из интегратора, собранного на элементах DA1, R3, R4, С2, VT1, делителя напряжения на элементах R2, R5, VT2, компаратора напряжения DA3 и работает следующим образом. В момент запуска преобразования с линии порта PD5 (вывод 9) микроконтроллера DD1 на затвор транзистора VT1 поступает низкий логический уровень и он закрывается. В тот же момент программа записывает число 0x02 в управляющий регистр TCCR1B микроконтроллера DD1, что разрешает работу счетчика TCNT1 от импульсов с тактовой частотой контроллера, деленной на восемь, что составляет 1 МГц. Элементы DA1, R3, R4 образуют источник стабильного тока, от которого заряжается конденсатор С2. Компаратор DA3 сравнивает линейно нарастающее напряжение на этом конденсаторе с измеряемым (входным), поступающим на его неинвертирующий вход. Стабилитрон VD1 ограничивает напряжение на этом входе компаратора, защищая его от перегрузки.

Как только нарастающее напряжение превысит измеряемое, на выходе компаратора DA3 установится низкий логический уровень. Спад сигнала на входе ISP (вывод 11) контроллера DD1 приведет к записи в регистр ICR1 содержимого счетного регистра TCNT1, запрос на прерывание по событию “захват” и вызов подпрограммы обработки прерывания. Если измеренное значение напряжения превысит 9,999 В, подачей высокого уровня на затвор транзистора VT2 с линии порта PD4 микроконтроллера DD1 будет включен резистивный делитель напряжения R2R5 Для исключения непрерывного переключения участков измерения на их границе программой предусмотрена зона гистерезиса шириной в 199 мВ.

На точность измерения напряжения влияют, главным образом, такие факторы, как нелинейность стабилизатора тока на стабилизаторе DA1, задержка переключения и напряжение смещения нуля компаратора DA3, сопротивление сток—исток открытого транзистора VT1, ТКЕ конденсатора С2. На втором участке на погрешность влияет точность сопротивлений резисторов R2 и R5. Меньшее влияние оказывают температурный и временной дрейфы частоты кварцевого резонатора ZQ1. Все они заметно ухудшают точность измерения в интервале от 0 до 100 мВ. Нестабильности кварцевого резонатора ZQ1, стабилизатора DA1 и ТКЕ конденсатора С2 носят случайный характер поэтому программной компенсации не поддаются. Но погрешности, вносимые компаратором и полевым транзистором VT1, систематические, поэтому их можно скомпенсировать программным путем Для этого после каждого цикла измерения программа прибавляет к полученному значению константу, вычисляемую в процессе налаживания.

В работе прибора возможна ситуация, при которой прерывание по “захвату” может не наступить. Например, если вход вольтметра соединен с общим проводом или измеряемое напряжение равно нулю, а смещение нуля компаратора DA3 таково, что на его выходе постоянно присутствует низкий логический уровень, то спада сигнала на входе ISP микроконтроллера DD1 не будет и возникнет прерывание по переполнению таймера TCNT1 вместо прерывания по событию “захват”. В такой ситуации подпрограмма обработки прерывания по переполнению таймера TCNT1 присвоит измеренному значению нулевое значение.

Конденсатор С7 установлен для подавления выброса напряжения при переключении компаратора DA3, что приводит к ложному возникновению прерывания по событию “захват” В этот момент счетный регистр TCNT1 пуст и на индикатор выводится значение “0,000”. Однако подобный эффект наблюдался у компараторов только одной фирмы-производителя, и, скорее всего, установка конденсатора С7 не потребуется.
Большинство деталей, за исключением индикаторов HG1, HG2, смонтированы на основной печатной плате из односторонне фольгированного стеклотекстолита толщиной 1,5 мм, чертеж которой показан на рис. 2, а вид смонтированной платы — на рис. 3 Светодиодные индикаторы монтируют на дополнительной монтажной плате и соединяют с основной изолированными проводами.

Применены постоянные резисторы С2-23, Р1 -4, подстроечный — проволочный многооборотный СП5-2. Резисторы R2, R5 необходимо подобрать с допуском не более 0,5 %, причем резистор R2 можно составить из двух, соединенных последовательно Кроме того, сопротивления резисторов R2 и R5 могут немного отличаться от указанных на схеме, главное, чтобы выполнялось соотношение R2 R5=9 Оксидные конденсаторы — импортные конденсатор С2 — металлопленочный на напряжение 100 В, также импортный, от его ТКЕ зависит температурная стабильность вольтметра, поэтому применение керамических конденсаторов недопустимо. Отличные результаты дает применение конденсаторов серий К73-16, К73-17, однако они имеют большие габариты, что потребует доработки печатной платы. Конденсаторы С9, С10 — КД-2, С1, С4, С6—С8 — керамические для поверхностного монтажа типоразмера 0805.

Микроконтроллер DD1 ATtiny2313-20РI можно заменить на AT90S2313 без каких-либо изменений в программе. При питании вольтметра напряжением, большим 15В. стабилизатор КР142ЕН5А необходимо заменить на L7805CV, который допускает работу при входном напряжении до 35 В. Кварцевый резонатор ZQ1 — РК374 или аналогичный импортный, его частота может лежать в диапазоне 7,5…8,5 МГц, точное значение 8 МГц не принципиально. Индикаторы HG1, HG2 — сдвоенные красного свечения с общим анодом, если применить аналогичные Е20362 зеленого свечения, необходимо уменьшить сопротивление резисторов R6—R13 до 100 Ом. Полевые транзисторы VT1, VT2 — любые n-канальные переключательные с изолированным затвором, рассчитанные на управляющие сигналы с ТТЛ уровнями и с сопротивлением канала открытого транзистора не более нескольких Ом. Транзисторы КТ3102А можно заменить на любые из этой серии либо заменить на транзисторы серии КТ503, подобрав экземпляры с коэффициентом передачи тока базы не менее 100. Стабилитрон VD1 — любой малогабаритный с напряжением стабилизации 12… 13 В и током утечки не более 10 мкА.

Налаживание вольтметра заключается в установке резистором R3 тока зарядки конденсатора С2. Напряжение питания вольтметра может быть в интервале 15…20 В и не стабилизированным, что не влияет на точность измерения во время налаживания и последующей эксплуатации. На вход от внешнего источника подают стабилизированное напряжение в интервале 9…9,8 В, контролируемое образцовым вольтметром В качестве такого вольтметра желательно использовать модели которые могут измерять напряжение до 10 В с точностью в 1 мВ. Резистором R3 уравнивают показания налаживаемого и образцового вольтметров. Затем напряжение на входе уменьшают, добиваясь индикации минимального измеряемого напряжения. Здесь возможны два варианта: при нулевом напряжении на входе налаживаемый вольтметр будет показывать 4…50 мВ или же он покажет “0,000” раньше, чем напряжение на входе уменьшится до нуля. По этим результатам вычисляют константу. И в первом и во втором случаях она равна разности показаний. Но в первом случае ее необходимо вычитать из показаний вольтметра, а во втором — прибавлять к ним.

Под константу в программе выделен 1 байт Старший разряд отводится под знак, поэтому максимальное число, на которое можно изменить показания вольтметра, равно 127. Если константу необходимо вычесть, в старший разряд байта записывают 1, если прибавить — 0. Предположим, вольтметр вместо нуля показывает 0,017 В. В двоичном коде число 17 выглядит как 00010001. Поскольку это число необходимо вычитать из показаний, в старший разряд запишем 1 и получим поправку 10010001 или 91 в шестнадцатеричной форме счисления. Эту константу следует записать в файл ATtiny2313.asm, а именно в строке 221 заменить значение 0x00 на 0x91

Для компенсации показаний вольтметра при работе с делителем, когда измеряемое напряжение лежит в интервале 10,00…99,99 В, исходную константу, в нашем примере 17, необходимо разделить на 10 и округлить до целого значения (до 2), т. е. до 00000010. Добавив знак в старший разряд, получим 10000010, т. е 82 в шестнадцатеричной форме исчисления. Эту константу записывают в файле ATtiny2313.asm, заменив в строке 223 число 0x00 на 0x82 После внесения изменений в файл ATtiny2313.asm его необходимо заново откомпилировать и получившимся файлом ATtiny2313.hex перепрограммировать микроконтроллер В завершение настройки, подавая напряжение от внешнего источника в интервале 9…9,8 В, повторной подстройкой резистором R3 добиваются показаний вольтметра, идентичных эталонному вольтметру.
При программировании микроконтроллера устанавливают его конфигурацию: SPMEN=1, DWEN=1, EESAVE=1, SPIEN=0, WDTON=1, BODLEVEL0…2=111, RSTDISBL=1, CKDIV8=1, CKOUT=1, SUT0,1 = 11. CKSEL0…3=1111, где 0 означает, что разряд запрограммирован, а 1 — нет.

Читайте также:  Электронный штангенциркуль с глубиномером

С. БЕЛЯЕВ, г. Тамбов
“Радио” №2 2010г.

Похожие статьи:
USB программатор микроконтроллеров AVR – AVR910
Частотомер на микроконтроллере
Миниатюрный вольтметр на микроконтроллере
Лабораторный блок питания на микроконтроллере
Преобразователь USB-COM-LPT на микроконтроллере
Бегущие огни на микроконтроллере АТ89С4051
Часы с термометром и барометром на микроконтроллере ATmega8
Автомат световых эффектов на микроконтроллере
Универсальный таймер на PIC-контроллере
Музыкальный звонок на микроконтроллере

Простой вольтметр на AVR на 50, 5 и 0.3В

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

Схема измерительного прибора

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

Схема измерительного прибора

Делитель напряжения R2, R3 позволяет измерять напряжения больше 5ти вольт. Для измерения малых напряжений входной сигнал пропускается через операционный усилитель DA2 с регулируемым коэффициентом усиления. Его коэффициент усиления задается резисторами R4, R5. Для измерения тока на входе прибора должен быть установлен шунт R1.
Основой схемы служит микроконтроллер Atmega8. После преобразования уровня сигнала он поступает на вход АЦП, встроенного в микроконтроллер. Микроконтроллер выводит полученное значение на трехразрядном сегментном индикаторе с общим анодом. Напряжение на аноды разрядов поступает через транзисторы. Резисторы в эмиттерах R9, R10, R11 задают яркость индикатора. Способ индикации — динамический.
Питание можно подавать напрямую от источника напряжения 5В, либо через стабилизатор. Обратите внимание, что минус питания и минус измерительного входа соединены друг с другом.

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

Плата измерительного прибора

Плата односторонняя и содержит все элементы измерительного прибора. Резистор R1 (шунт амперметра) имеет несколько посадочных мест для корпусов разной мощности. Файл с платой, нарисованной в формате Sprint-Layout 5.0 можно скачать по ссылке.

Программа

При включении устройства в течении двух секунд на индикатор выводится приветствие «HI», после чего начинается работа прибора. В AVR-микроконтроллерах используется 10-ти разрядный АЦП. В нашем проекте мы используем только девять разрядов. Эта разрядность позволяет получить конечную приборную точность 1%. Для большей стабильности и плавности изменения показаний берется выборка из ста отсчетов и на дисплей выводится наибольший из них. Если входное напряжение превышает диапазон измеряемых значений на индикатор выводится сообщение: -0. Третий разряд не включается, если он не используется.
HEX-фал для каждой версии свой. Мы будем их прикладывать к каждой версии отдельно. Фьюз-биты всегда должны оставаться заводскими. Прошивка загружается через стандартный 6ти-пиновый разъем ISP-программирования.

Технические характеристики

  • напряжение питания, 5В либо 7-12В
  • потребляемый ток, не более 60мА
  • частота обновления индикатора, 56Гц
  • пределы измерения, 0.5В, 5В, 50В
  • входное сопротивление, не менее 10кОм
  • точность, не менее, 10%

Вольтметр на 50В

Для сборки вольтметра с пределом измерения 50В нужно установить все элементы, кроме R1, R4, R5, DA2. Если вы не планируете использовать нестабилизированное питание, то можно не устанавливать также конденсатор C1 и стабилизатор DA1.

Плата вольтметра на 50В

После сборки плата с лицевой стороны выглядит так:

Вольтметр на 50В. Лицевая сторона

…и с обратной стороны:

Вольтметр на 50В. Обратная сторона

Элементы схемы на предел 50В:

  1. C2 — танталовый конденсатор, 22мкФ, 16В T491C226K016AT, 1шт.
  2. C1,C3,C4 — конденсаторы на 0,1мкФ в корпусе 0805
  3. DA1 — стабилизатор L7805 в корпусе D2PAK, 1шт.
  4. DD1 — микроконтроллер Atmega8a-au, 1шт.
  5. J1 — чип-резистор 1206 с сопротивлением 0 Ом, 1шт. (перемычка)
  6. HL1 — сегментный индикатор BA56-12YWA, 1шт. (желательно устанавливать через колодку)
  7. R2 — подстроечный резистор CA6V на 2,5кОм, 1шт
  8. R3 — чип-резистор 0805 на 10кОм, 1шт.
  9. R6-R8, R12 — чип-резисторы 0805 на 1кОм, 4шт.
  10. R9-R11 — чип-резисторы 0805 на 56Ом, 3шт. (можно взять с меньшим сопротивлением для увеличения яркости)
  11. VT1-VT3 — транзисторы BC807-40, 3шт.
  12. Гребенка PLS-контактов

Прошивку для версии с пределом измерения на 50В можно скачать здесь. Фьюз-биты оставляем без изменения.
Если все правильно собрано, то работать должно примерно так:

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

Вольтметр на 5В

На плату необходимо установить следующие элементы:

  1. C2 — танталовый конденсатор, 22мкФ, 16В T491C226K016AT, 1шт.
  2. C1,C3,C4 — конденсаторы на 0,1мкФ в корпусе 0805
  3. DA1 — стабилизатор L7805 в корпусе D2PAK, 1шт.
  4. DD1 — микроконтроллер Atmega8a-au, 1шт.
  5. J1 — чип-резистор 1206 с сопротивлением 0 Ом, 1шт. (перемычка)
  6. HL1 — сегментный индикатор BA56-12YWA, 1шт. (желательно устанавливать через колодку)
  7. R2 — подстроечный резистор CA6V на 25кОм, 1шт
  8. R3 — чип-резистор 0805 на 1кОм, 1шт.
  9. R6-R8, R12 — чип-резисторы 0805 на 1кОм, 4шт.
  10. R9-R11 — чип-резисторы 0805 на 56Ом, 3шт. (можно взять с меньшим сопротивлением для увеличения яркости)
  11. VT1-VT3 — транзисторы BC807-40, 3шт.
  12. Гребенка PLS-контактов

Фактически отличаются только сопротивления резисторов в делителе напряжения R2, R3.
Прошивку для версии вольтметра на 5В можно скачать здесь. Фьюз-биты оставляем без изменения. Отличие этой прошивки от предыдущей только в положении разрядной точки.
Видео работы вольтметра на 5В:

Вольтметр на 300мВ

Для работы с пределом измерения от 0 до 300мВ потребуется дополнительный каскад на микросхеме LM358N. Принципиальная схема при этом принимает следующий вид:

Схема вольтметра на 300мВ

Резисторы R4, R5 задают коэффициент усиления усилителя. R1 необходим для того, чтобы в отсутствии входного сигнала вольтметр показывал 0В.
Элементы платы:

  1. C2 — танталовый конденсатор, 22мкФ, 16В T491C226K016AT, 1шт.
  2. C1,C3,C4 — конденсаторы на 0,1мкФ в корпусе 0805
  3. DA1 — стабилизатор L7805 в корпусе D2PAK, 1шт.
  4. DA2 — операционный усилитель L358N в корпусе SO8, 1шт.
  5. DD1 — микроконтроллер Atmega8a-au, 1шт.
  6. J1 — чип-резистор 1206 с сопротивлением 0 Ом, 1шт. (перемычка)
  7. HL1 — сегментный индикатор BA56-12YWA, 1шт. (желательно устанавливать через колодку)
  8. R1 — чип-резистор 0805 на 10кОм, 1шт.
  9. R4 — чип-резистор 0805 на 1кОм, 1шт.
  10. R5 — подстроечный резистор CA6V на 25кОм, 1шт
  11. R6-R8, R12 — чип-резисторы 0805 на 1кОм, 4шт.
  12. R9-R11 — чип-резисторы 0805 на 56Ом, 3шт. (можно взять с меньшим сопротивлением для увеличения яркости)
  13. VT1-VT3 — транзисторы BC807-40, 3шт.
  14. Гребенка PLS-контактов

Версия прошивки для этого вольтметра не использует разрядную точку совсем. Если старшие разряды индикатора не используются, то они отключаются. В этой версии вольтметра переполнение показывается при достижении входного напряжения 300мВ. Скачать ее можно здесь. Фьюз-биты также необходимо оставить без изменения.
Видео работы вольтметра с пределом измерения 300мВ:

Предосторожности в работе и особенности эксплуатации

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

  1. Вольтметр рассчитан только для измерения постоянного напряжения
  2. У вольтметра нет встроенной защиты от смены полярности входного напряжения
  3. Измерения производятся относительно напряжения питания. Другими словами стабильность питающего напряжения определяет точность показаний вольметра.
  4. У вольтметра нет защиты по входу. Не стоит подавать на него напряжения больше предельного
  5. Вход вольметра не имеет гальванической развязки. Если вы питаете основную схему и предложенный вольтметр от одного и того же источника питания измерения можно производить только относительно общего провода. В случае, когда необходимо измерить разность потенциалов между двумя точками на которых есть напряжение, необходимо использовать для питания вольтметра отдельный источник питания с гальванической развязкой через трансформатор. И при этом обязательно подключать минус вольтметра к точке с меньшим напряжением!
  6. Если необходимо увеличить яркость индикатора, можно уменьшить сопротивление резисторов R9-R11. Однако не стоит ставить сопротивление меньше 20Ом
  7. Если вы планируете использовать вольтметр для индикации бортового напряжения в автомобиле вам потребует подключить только два провода: минус автомобиля к «GND» вольтметра, а плюсовой провод к выводам разъема «7-12V» и «+»

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

Ссылка на основную публикацию