Измеритель напряжения, уровня и частоты.
В технике связи, и в радиолюбительской практике, бывает необходимо измерение сигнала не только по напряжению, но и по уровню. Уровни сигналов измеряются в логарифмических единицах – дециБеллах (дБ=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 |
|