Меню

Вольтметр переменного напряжения микроконтроллером

Вольтметр переменного напряжения на ATmega48-20PU

Вольтметр переменного Напряжения

Н. ОСТРОУХОВ, г. Сургут

В статье описан вольтметр переменного напряжения. Он собран на
микроконтроллере и может быть использован как автономный измерительный прибор
или как встроенный вольтметр в генераторе НЧ.

Предлагаемый вольтметр предназначен
для измерения переменного напряжения синусоидальной формы частотой от 1 Гц до
800 кГц. Интервал измеряемого напряжения — 0…3 В (или 0…30 В с внешним
делителем напряже­ния 1:10). Результат измерения отобра­жается на
четырехразрядном свето­диодном индикаторе. Точность измере­ния определяется
параметрами встро­енных в микроконтроллер АЦП и источ­ника образцового
напряжения и равна 2 мВ (для интервала 0…3 В). Питается вольтметр от
источника стабилизированного напряжения 5 В и потребляет ток 40…65 мА в
зависимо­сти от примененного индикатора и яркости его свечения. Ток, потребляемый
от встроенного преобразователя полярности, не превышает 5 мА.

В состав устройства (см. схему на
рис. 1) входят преобразователь переменного напряжения в постоянное, буферный
усилитель постоянного напря­жения, цифровой вольтметр и преобра­зователь
полярности питающего напря­жения. Преобразователь переменного напряжения в
постоянное собран на компараторе DA1, генераторе импульсов на элементах
DD1.1—DD1.4 и переключательном транзисторе VT1. Рас­смотрим его работу
подробнее. Предположим, что на входе устройства сиг­нала нет. Тогда напряжение
на инвертирующем входе компаратора DA1 равно нулю, а на неинвертирующем определяется
делителем напряжения R19R22 и при указанных на схеме номиналах равно около -80
мВ. На выходе компаратора в этом случае присутствует низ­кий уровень, который
разрешает работу генератора импульсов. Особенность генератора в том, что при
каждом спаде напряжения на выходе компаратора DA1 на выходе генератора (вывод 8
элемента DD1.2) формируется один импульс. Если к моменту его спада выходное
состояние компаратора не изменится, сформируется следующий импульс и т. д.

Длительность импульсов зависит от
номиналов элементов R16, С5 и равна примерно 0,5 мкс. При низком уровне
напряжения на выходе элемента DD1.2 открывается транзистор VT1. Номиналы
резисторов R17, R18 и R20 подобраны так, чтобы через открытый транзистор
протекал ток 10 мА, который заряжает конденсаторы С8 и С11. За время действия
каждого импульса эти конденсаторы заряжаются на доли милливольта. В установившемся
режиме напряжение на них возрастет от -80 мВ до нуля, частота следования
импульсов генератора уменьшится и импульсы коллекторного тока транзистора VT1
будут компенсировать только медленную разрядку конденсатора С11 через резистор
R22. Таким образом, благодаря небольшому начальному отрицательному смещению,
даже в отсутствие входного сигнала, преобразователь работает в нор­мальном
режиме. При подаче входного переменного напряжения из-за изменения частоты следования
импульсов генератора напряжение на конденсаторе С11 изменяется в соответствии с
амплитудой входного сигнала. ФНЧ R21C12 сглаживает выходное напряжение
преобразователя. Следует отметить, что фактически преобразуется только
положительная полуволна входного напряжения, по­этому если оно несимметрично
относительно нуля, возникнет дополнительная погрешность.

Буферный усилитель с коэффициентом
передачи 1,2 собран на ОУ DA3. Подключенный к его выходу диод VD1 защищает
входы микроконтроллера от напряжения минусовой полярности. С выхода ОУ DA3
через резистивные де­лители напряжения R1R2R3 и R4R5 по­стоянное напряжение
поступает на линии РС0 и РС1 микроконтроллера DD2, которые сконфигурированы как
входы АЦП. Конденсаторы С1 и С2 дополни­тельно подавляют помехи и наводки. Собственно
цифровой вольтметр собран на микроконтроллере DD2, в котором использованы
встроенный 10-разрядный АЦП и внутренний источник образцового напряжения 1,1 В.

Про­грамма для микроконтроллера
написана с использованием среды BASCOM-AVR и допускает применение трех- или
четырехразрядных цифровых све­тодиодных индикаторов с об­щим анодом или общим
като­дом и позволяет отображать действующее (для синусоидального сигнала) или
амплитудное значение напряжения входного сигнала, а также изменять яркость
свечения индикатора Логический уровень сигна­ла на линии PC3 задает тип примененного
индикатора — с общим анодом (низкий) или с общим катодом (высокий), а на линии
РС4 — число его раз­рядов, четыре — для низкого и три — для высокого. Про­грамма
в начале работы один раз считывает уровни сигна­лов на этих линиях и настраи­вает
микроконтроллер на работу с соответствующим индикатором. Для четырех­разрядного
индикатора результат измерения отобража­ется в виде Х.ХХХ (В), для трехразрядного
— XXX (мВ) до 1 В и Х.ХХ (В), если напряжение более 1 В. При применении
трехразряд­ного индикатора выводы его разрядов подключают как выводы трех
старших разрядов четырехразрядного на рис. 1.

Читайте также:  Реле напряжения для чего применяется

Уровень сигнала на линии РС2 уп­равляет
умножением результата изме­рений на 10, что необходимо при при­менении внешнего
делителя напряжения 1:10. При низком уровне результат не умножается Сигнал на
линии РВ6 управляет яркостью свечения индика­тора, при высоком уровне она
снижает­ся. Изменение яркости происходит в результате изменения соотношения между
временем свечения и временем гашения индикатора внутри каждого цикла измерения.
При заданных в про­грамме константах яркость изменяется примерно вдвое.
Действующее значение входного напряжения отображает­ся при подаче на линию РВ7
высокого уровня и амплитудное — низкого. Уров­ни сигналов на линиях РС2, РВ6 и
РВ7 программа анализирует в каждом цик­ле измерения, и поэтому они могут быть
изменены в любой момент, для чего удобно применять переключатели. Продолжительность
одного цикла измерения равна 1.1 с. За это время АЦП выполняет около 1100
отсчетов, из них выбирается максимальный и умножается, если необходимо, на
нужный коэффициент.

Для постоянного измеряемого
напряжения достаточно было бы одного измерения на весь цикл, а для переменного
с частотой менее 500 Гц напряжение на конденсаторах С8. С11 заметно изменяется
в течение цикла. Поэтому 1100 измерений с интервалом 1 мс позволяют
зафиксировать макси­мальное за период значение. Преобразователь полярности
пита­ющего напряжения собран на микро­схеме DA2 по стандартной схеме. Его выходное
напряжение -5 В питает ком­паратор DA1 и ОУ DA3. Разъем ХР2 предназначен для
внутриаппаратного программирования микроконтроллера.

В вольтметре применены постоянные
резисторы С2-23, МЛТ, подстроечные — фирмы Bourns серии 3296, оксидные
конденсаторы — им­портные, остальные — К10-17. Микро­схему 74АС00 можно
заменить на КР555ЛАЗ, транзистор КТ361Г — на любой из серии КТ3107. Диод 1N5818
заменим любым германиевым или диодом Шотки с допустимым прямым то­ком не менее
50 мА. Замена для микро­схемы ICL7660 автору неизвестна, но преобразователь
полярности напряже­ния +5/-5 В можно собрать по одной из опубликованных в
журнале “Радио” схем. Кроме того, преобразователь можно исключить
совсем, применив двухполярный стабилизированный ис­точник питания. Особо
следует остановиться на вы­боре компаратора, поскольку от него зависит диапазон
рабочих частот. Выбор компаратора LM319 (аналоги КА319, LT319) обусловлен двумя
крите­риями — необходимым быстродейст­вием и доступностью. Компараторы LM306,
LM361, LM710 более быстро­действующие, но приобрести их оказа­лось труднее, к
тому же они дороже. Более доступны LM311 (отечественный аналог КР554САЗ) и
LM393. При установке в устройство компаратора LM311, как и следовало ожидать,
час­тотный диапазон сузился до 250 кГц. Резистор R6 имеет сравнительно
небольшое сопротивление, поскольку устройство было примене­но как встроенный
вольт­метр в генераторе НЧ. При использовании прибора в автономном измерителе его
сопротивление можно увеличить, но погрешность измерения возрастет из-за сравнительно
большого входного тока компаратора DA1.

Схема делителя напря­жения 1:10
показана на рис. 2. Здесь функции ре­зистора R2 в делителе выполняет резистор
R6 (см. рис. 1). Налаживают делитель напряжения в определенной последова­тельности.
На его вход по­дают прямоугольные им­пульсы с частотой не­сколько килогерц,
ампли­тудой 2…3 В (такой калиб­ровочный сигнал имеется во многих
осциллографах), а к выходу (к выводу 5 DA1) подключают вход осциллографа. Подстройкой
конденсатора С1 доби­ваются прямоугольной формы импуль­сов. Осциллограф следует
применить с входным делителем напряжения 1:10. Все детали, кроме индикатора, смонтированы
на макетной монтажной плате размерами 100×70 мм с приме­нением проводного
монтажа. Внешний вид одного из вариантов устройства показан на рис. 3. Для
удобства под­ключения цифрового индикатора при­менен разъем (на схеме не
показан). При монтаже общий провод входной вилки ХР1 и соответствующие выводы конденсаторов
С8, С10, С11 и С13 сле­дует соединить с общим проводом в одном месте проводами
минимальной длины. Элементы VT1, R20, С8, С10, С11 и С13 и компаратор DA1
должны быть размещены максимально компактно, конденсаторы С3, С6 — как можно
ближе к выводам компаратора DA1, а С4, С14, С15 — к выводам мик­роконтроллера
DD2. Для налаживания вход устройства замыкают, общий вывод щупа осцил­лографа
присоединяют к плюсовому выводу конденсатора С13, а сигналь­ный — к эмиттеру
транзистора VT1. На экране должен появиться импульс отрицательной полярности
амплитудой около 0,6 В и длительностью 0,5 мкс. Если из-за малой частоты
следования импульсов их будет трудно наблюдать, то временно параллельно
конденсато­ру С11 подключают резистор сопротив­лением 0,1… 1 кОм. Напряжение
на конденсаторе С12 контролируют высо-коомным вольтметром, оно должно быть
близко к нулю (плюс-минус не­сколько милливольт).

Читайте также:  Поверочный интервал трансформатора напряжения

Напряжение на выходе ОУ DA3
(которое не должно превышать нескольких милливольт) резистором R27
устанавливают равным нулю. Требуемый режим работы микро­контроллера
устанавливают подачей требуемых уровней на линии РВ6, РВ7, РС2—РС4, для чего их
соединяют с об­щим проводом или с линией питания +5 В через резисторы
сопротивлением 20…30 кОм. Ко входу устройства под­ключают образцовый
вольтметр и пода­ют постоянное напряжение 0,95… 1 В. Подстрочным резистором
R4 уравни­вают показания обоих вольтметров. За­тем напряжение повышают до
2,95…3 В и резистором R1 вновь уравнивают по­казания. Подборкой резисторов
R8—R15 можно установить желаемую яркость свечения индикатора. Сначала подби­рают
требуемый номинал только одно­го из них, а затем устанавливают ос­тальные. При
подборке следует пом­нить, что максимальный выходной ток порта примененного
микроконтролле­ра не должен превышать 40 мА, а об­щий потребляемый ток — 200
мА.

Источник



Arduino.ru

вольтметр переменного напряжения

Решил поделится весьма скудными знаниями по созданию вольтметра переменного напряжения от 1 до 300 вольт. Заранее хочу выразить благодарность всем кто помог мне в этом нелегком деле!
материалы которые помогли разобратся привожу в виде ссылок:
1http://samou4ka.net/page/tajmer-schetchik-mikrokontrollerov-avr //тема о настройке таймеров
2http://samou4ka.net/page/analogo-cifrovoj-preobrazovatel-mk-atmega8 // настройка АЦП
3http://www.stepwood.com/avrsuite/2012/10/03/atmega-rezhimyi-rabotyi-taymerov/ еще немного о таймерах
4http://arv.radioliga.com/content/view/107/43/ про измерение напряжения теория
5http://cxem.net/izmer/izmer90.php полезная ссылочка
В этих статьях описанно как использовать Таймеры и АЦП управляя ими напрямую!

Итак сам вольтметр состоит из Аналоговой и цифровой части, В качестве АЦП применен встроенный преобразователь с разрешением в 10 бит микроконтроллера ATmega328 установленный на плату Arduino MIni. Я использовал на нем 2 аналоговых входа из восьми возможных!

Аналоговая часть состоит из2 ОУ схема достаточно простая и взята она от китайского стабилизатора, на 1 ОУ реализуется уменьшение 5 вольтового напряжения до уровня 2 вольта, второй через делитель напряжения получает входную величину и поднимает ее относительно 2 вольт. Очень важно выбрать хороший ОУ я применил MCP617 (По непонятной причине LM324 совершенно не подходит для этой схемы появляется двоение синусоиды) И желательно использовать сопративление ряда Е96 +-1%. Переменный резистор многооборотный 10кОм.

Можно было использовать схему приведенную ниже, но если захотите контролировать несколько фаз эта схема не пойдет и проблемы с ней обсуждались в этой теме.http://arduino.ru/forum/apparatnye-voprosy/kak-borotsya-s-dannym-yavleniem , некоторые люди пишут что применение диодов вносит погрешности при измерении чесно говоря я их не заметил, но это не говорит о том что их нет.

Цифровая часть написана в ArduinoIDE. Алгоритм измерения следеюший каждые 0.3 секунды запускается таймер с частотой прерывания 5000Гц(использован 8 битный таймер 2) следовательно если брать частоту 50 Гц то период равен 20мсек, за данный период в обработчике прерывания сохраняем 100 выборок напряжения в массив. после того как программа собрала 100 значений запрещаем прерывание и расчет переходит в основном цикле LOOP/
В цикле for происходит математические вычисления(вычитание подъема синусоиды на 2 вольта, возведение в квадрат и сложение этих значений) согласно вот этой теории :
по завершению цикла происходит вычисление реальной величины напряжения.
Переменная coef расчитывается с учетом напряжения делителя , я ее подбирал эксперементально, сравнивал измеренную величину и подаваемую источником переменного тока, и эту разницу выравнивал коэфициентом!
значение я выводил по сериал соединению!

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

вообщем получилось достаточно неплохо точность около 1%
Вот в принципе и все!

Источник

Схема

вольтметр на микроконтроллере

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

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

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

//куда подключены сегменты
#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.

Источник

Adblock
detector