Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [115]
Наш опрос
Оцените мой сайт
Всего ответов: 1292
Главная » Статьи » Мои статьи

VdBFmeter
Измеритель напряжения, уровня и частоты.



В технике связи, и в радиолюбительской практике, бывает необходимо измерение сигнала не только по напряжению, но и по уровню. Уровни сигналов измеряются в логарифмических единицах – дециБеллах (дБ=20Lg(Uвых./Uвх.)  для напряжения и тока, и =10 Lg(Uвых./Uвх.) для мощности.)    (Ранее применялись Неперы. 1Нп=Ln(Uвых./Uвх.)).   Для измерения абсолютных уровней используются начальные значения  Р=1мВт, U=775мВ, I=129 мА на нагрузке R=600 Ом.
Предлагаемый прибор позволяет измерять высокочастотные сигналы переменного тока с выводом на индикатор значений напряжения в В., уровня в дБ. и частоты в Гц. 
Диапазон измерения напряжения: 0-50 В, точность в диапазоне 0-5В равна (5000/1024) примерно 5 мВ. В диапазоне 5-50 В точность примерно 50 мВ. Максимальная измеряемая частота зависит от типа применяемых диодов в в/ч головке. При использовании измерительной головки, описанной в журнале Радио №1 2008 г. стр.61 «ВЧ вольтметр на диоде Шотки», автор статьи проводил измерения на частотах до 30 МГц.
Измеренное значение напряжения пересчитывается  программой в уровни, по формуле дБ=20Lg(0,775В/Uизм.) и выводится на индикатор вслед за значением напряжения.
Измерение частоты производится с точность 1 Гц, максимально возможная измеряемая частота теоретически ограничена частотой кварцевого резонатора и не может превышать половины его значения. При использовании кварца 20 МГц, возможно измерение частоты до 10 МГц. 
Устройство собрано на микроконтроллере ATmega48, имеющем 4 кБ программной памяти и такто-вую частоту до 20 Мгц.
 В качестве индикатора используется  двухстрочный индикатор фирмы Winstar с 16 символами в каждой строке Win1602.
Формирователь для частотомера и измерительная в/ч головка взяты из описанных в технической литературе источников. Примеры находятся в папке «Схемы/Дополнительно».
Принцип действия прибора.
На вход АЦП(0), (PortC0, pin 23), поступает постоянное напряжение от в/ч головки. Ко входу АЦП подключены защитные диоды и делитель напряжения. При входном напряжении менее 5В, делитель отклю-чен, при превышении 5В он включается (1:10) контактом реле, в результате напряжение на входе АЦП не превышает 5В, а измеренное значение умножается на 10.
Опорное напряжение АЦП равно напряжению питания контроллера (5В), входы AVcc, AREF поключены через сглаживающий фильтр из дросселя 100 мкГн и конденсаторов 0,1 мкф.
На вход таймера Т0, (PortD4, pin 6), приходит сигнал от формирователя частотомера, представляю-щий собой, прямоугольные импульсы размахом, близким к 5В. (Этот же сигнал поступает на вход захвата таймера Т1, в данной схеме это не используется, но оставлено для перспективы измерения частоты с точно-стью до сотых долей Герца. Пока протеусная версия не дает нужных результатов, а в железе не собиралось. Для практики точности в 1 Гц достаточно, но для возможности довести до желаемого результата цепь оставлена.) 
Аналоговая и цифровая земля разделены, для обеспечения большей точности АЦП, и соединяются вместе в одной точке резистором R9, имеющем сопротивление 0 Ом (перемычка).

Описание программы.
Программа написана в демо-версии Bascom 2.0.5.0. 
Вначале задаем тип используемого микроконтроллера, частоту кварцевого резонатора, используемый индикатор и определяем его подключение.  Затем конфигурируем АЦП. Далее конфигурируем таймеры. 16-разрядный Т1 работает как таймер и дает прерывания 1 секунду, это интервал измерения частоты. 8-разрядный Т0 включен как счетчик и используется для подсчета количества импульсов, поступающих на pin6 (T0) за 1 сек. Так как 8-разрядный счетчик может считать только до 256, при переполнении он генерирует прерывание и увеличивает на 1 содержимое 4-байтового регистра  TimHoh. В результате частота может измеряться до четырехбайтового значения 2^32=4294967296 Гц,, что при 20МГц кварце более чем достаточно.
Конфигурируем PortD1 как выход, и присваеваем ему имя Delitel, он будет использоваться для включения делителя 1:10, при превышении напряжения на входе АЦП 5В.
Далее определяем переменные: Timecounter As Byte для записи содержимого счетчика Т0, Timhoh As Long для увеличения диапазона счета, F As Long –для хранения полученного значения частоты в Герцах, Flagt1 As Bit –флаг, изменяет свое значение на противоположное при прерывании Т1, используется для определе-ния моментов начала и окончания счета импульсов частоты.
W As Word- двухбайтовая переменная для хранения значения 10 разрядного АЦП,  K As Byte =1 или 10, в зависимости отключен делитель напряжения или включен. V и A – четырехбайтовые переменные с плавающей запятой- значения напряжения и уровня измеряемого сигнала.
Разрешаем прерывания по переполнению таймеров Т0 и Т1, общее разрешение прерываний пока не разрешаем, они будут мешать расчетам. Выводим заставку на индикатор,  останавливаем Таймеры, стартуем АЦП, устанавливаем в «0» выход включения делителя и флаг таймера Т1, значение коэффициента К делаем равным 1.
Далее следует главный цикл программы. В нем:
-считываем значение АЦП, если АЦП =1023 (переполнено), то устанавливаем К=10, включаем делитель на-пряжения, и снова считываем значение АЦП. Если значение АЦП меньше 101 ( примерно 5В, при включен-ном делителе, или 0,5В при отключенном), то устанавливаем К=1 и отключаем делитель напряжения.
-Устанавливаем курсор на первую позицию, верхней строки.
-Рассчитываем значения напряжения и уровень. При напряжении менее 5В выводим на индикатор значение с тремя цифрами после запятой, при напряжении более 5В с двумя цифрами после запятой. Следом, через пробел, выводим значение уровня с двумя знаками после запятой.  В данном случае, хоть переменные Single -беззнаковые, отрицательные значения выводятся на индикатор со знаком «минус», никаких дополнитель-ных мер по его выводу не понадобилось.
-Делаем паузу 100мс.
Приступаем к измерению частоты:
-Разрешаем общее разрешение прерываний.
-Записываем в Таймер1 значение для 1 сек., обнуляем Т0, также обнуляем переменные Timhoh и F.
-Запускаем Таймер1.
-Ждем установки флага Flagt1, который установится в «1» при прерывании Т1.
-Как только Flagt1=1, запускаем таймер Т0, который будет считать импульсы на входе 6, и ждем сброса флага Flagt1, который будет сброшен при следующем прерывании Т1, через 1 секунду.
- Как только Flagt1=0, останавливаем таймеры, значение Таймера0 записываем в переменную Timecounter. Переменной F присваиваем значение, хранящееся в Timhoh (количество переполнений Т0). Затем сдвигаем влево на 8 позиций,  и прибавляем к нему значение переменной Timecounter, в которой хранится значение Таймера Т0. Таким образом  получаем значение частоты, размерностью до 4 байт.
- Запрещаем общие прерывания.
-Очищаем индикатор, переводим курсор на первую позицию нижней строки и выводим значение частоты.
-Ждем 100 мс, и возвращаемся в начало основного цикла.
В прерывании таймера Т1 «T1over:» производится перезагрузка таймера, изменение флага Flagt1 и выход из прерывания.
В прерывании таймера Т0 «T0over:» увеличивается на 1 содержимое переменной Timhoh и произ-водится выход из прерывания. Перезагрузка Т0 не делается, так как после переполнения он начинает счет с нуля.

Резюме.
Устройство разрабатывалось для измерения уровней аппаратуры, расположенной на удаленных объектах. В стационарных условиях, размеры измерительных приборов, не имеют столь важного  значения.  Имеет небольшие габариты и вес, отражает основные параметры контролируемого сигнала. Удобно при отыскании повреждений, хотя точность не очень высока, для проведения подавляющего большинства работ её вполне достаточно.  Основное достоинство прибора- универсальность и простота.  Отлажено в Протеусе v7.7sp2.  Протеусные файлы прилагаются. Схемы выполнены в программе DipTrace. Исходные коды с файлами прошивки.

Таблица фьюзов.
Надо установить конфигурацию, задающую режим работы микроконтроллера ATmega48, с высокочастотным кварцевым резонатором без внутреннего деления на 8: расширенный байт конфигурации-все единицы (исходное состояние), старший байт-11011111, младший байт-11110111.

 Старший байт: High byte: Младший байт: Low byte:
 RSTDISBL=1 CKDIV8=1
 DWEN=1 CKOUT=1
 SPIEN=0 SUT1=1
 WDTON=1 SUT0=1
 EESAVE=1 CKSEL3=0
 BODLEVEL2=1 CKSEL2=1
 BODLEVEL1=1 CKSEL1=1
 BODLEVEL0=1 CKSEL0=1


Категория: Мои статьи | Добавил: bascom (09.12.2011)
Просмотров: 7032 | Комментарии: 3
Всего комментариев: 3
3 shus  
0
Для pitato: Уйти от реле можно, но тогда сузится диапазон измеряемых значений напряжения. Я давно закончил устройство, собрано, работает, правда пришлось подбирать коэффициенты к каждому диапазону напряжений. Напишите на shus@rambler.ru Отвечу подробней.

2 pitato  
0
Здравствуйте. Попробовал схему в протеусе, как уйти от реле переключения диапазонов? нельзя ли сделать это программно? хочу сделать вольтметр до 20V и частотомер в одной упаковке.

1 Jacalyn  
0
Thanks for your thoughts. It's hepeld me a lot.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Radan Studio © 2024