Простой измеритель частоты (частотомер) на PIC микроконтроллере (250Гц-50МГц)

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

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

Частотомер, принципиальная схема которого изображена на рисунке, позволяет измерять частоту периодических сигналов в диапазоне 250 Гц...50 МГц.

Погрешности измерений и отсчета для каждого интервала частот приведены в табл. 1. Входное сопротивление прибора - не менее 2 кОм. Уровень лог. 0 входного напряжения должен быть не более 0,2, а лог 1 - не менее 0,8Uпит , где Uпит - напряжение питания, которое может быть любым в пределах 3...6 В. Потребляемый ток не превышает 100 мА.

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

Схема частотомера на PIC микроконтроллере 250Гц-50МГц

Рис. 1. Принципиаьная схема частотомера на микроконтроллере.

Частота (в герцах) отображается индикаторами HG1 HG4 в формате X,YZ*10^E Гц, где X,YZ - десятичное значение частоты сигнала, а Е - порядок (например, показание 2,25 3 соответствует частоте 2,25*10^3 = 2250 Гц; 4,32 5 - 4,32*10^5 = 432 000 Гц = 432 кГц и т. д.).

Таблица 1.

Интервал частот кГц (МГц)

Времію измере-ния мс

Погрешность Гц (кГц)

измерения

отсчета j

0,25...0,999

500

±2

±2

1...9.99

500

±2

±5

10...99.9

500

±2

±50

100..127

500

±2

±500

128...999

1

(±1)

(±1)

(1....9.99)

1

(±1)

(±5)

(10...50)

1

(±1)

(±50)

Микроконтроллер PIC16F84 имеет в своем составе восьмиразрядный модуль таймера (TMR0), который может использоваться с восьмиразрядным предделителем. Последний функционирует асинхронно, поэтому таймер способен считать частоту сигналов значительно выше частоты генератора микроконтроллера, которая в данном случае равна 4 МГц.

Минимальное время высокого и низкого уровней входного сигнала - 10 нс, что позволяет модулю TMR0 функционировать от внешнего сигнала частотой до 50 МГц (а практически и выше). Предделитель задействован для повышения точности измерений. Так как его предельный коэффициент деления равен 256, максимальная разрешающая способность счетчика составляет 16 двоичных разрядов.

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

На примере описываемого частотомера показан метод, позволяющий "извлекать” восьмиразрядное значение предделителя. Это обеспечивает разрешающую способность измерения 16 разрядов: восемь старших разрядов считываются из TMR0, а восемь младших -из предделителя.

Таблица 2.

:02000000852851
:100020008A0182077E340C34B6349E34CC34DA3400 
:10003000FA340E34FE34DE348A018207003462342E 
:100040005D34583453344E34493444343F343A34B4 
:10005000353430342B34263421341C3417341234E4 
:1000600006340334053405340634033402340734CB 
:1000700006340834013406340334083404340034BC 
:1000800008340134093402340034043400340934AF 
:1000900006340034023400340434083400340134AB 
:1000A00000340234043400340034053401340234A2 
:1000B0000034003402340534063400340034013492 
:1000C000023408340034003400340634043400347C 
:1000D000003400340334023400340034003401347A 
:1000E0000634003400340034003408340034003462 
:1000F000003400340434003400340034003402345A 
:100100000034003400340034013485018601831644 
:100110002730810010308500860183120830A0004E 
:10012000A100A200A3000A309200F720920B9528AC 
:1001300081018316013086008312C7309A000000C7 
:1001400064009A0B9F288316860183121021900861 
:10015000031DC928911BC92881018316013086001F 
:100160008312000000000A309200F720920BB5289D 
:100170000000000000008316860183121021900801 
:10018000031DD628911BD628A001A101A201A3011D 
:1001900098289401950196019701980199010330DF 
:1001A000A3009C0121210A30920095289401950119 
:1001B000960197019801990111309C00901B6C21C8 
:1001C0000310910D900DA3019C01212198280A3064 
:1001D0009A000000F8309B006400000000009B0BB8 
:1001E000ED28000000009A0BEA2800000800200813 
:1001F000102086000510E720051421081020860035 
:100200008510E72085142208102086000511E720BC 
:1002100005152308102086008511E72085150800A4 
:10022000010890009C010610061406109C0A100894 
:10023000010603191329FF3091001C089102910A4D 
:10024000080010309C00910D900D03186C219C0B40 
:100250002329572105309D001A30840084030008AB 
:10026000031D34299D0B2E2902301D02031C512928 
:1002700003194329143E8400840305300002031C43 
:100280004329840A800A57211D08A307143E8400CD 
:100290000008A00084030008A10084030008A20055 
:1002A00008000030A000A100A200A3000800053053 
:1002B0009200143084009E0100089C001C088000FD 
:1002C0009E0A0A309C0203185E299E03840A1E08B7 
:1002D0008007920B5B2908001C081C209D001C2035 
:1002E00098079D0A1D081C2097079D0A1D081C20C1 
:1002F00096079D0A1D081C2095079D0A1D081C20B5 
:040300009407080056 
:00000001FF 

Измеряемый сигнал через резистор R2 поступает на вывод RA4 DD1, являющийся входом внешнего сигнала (Т0СК1) таймера TMR0 Этот вывод соединен с RB0, переключением которого осуществляется управление режимом счета. Перед измерением производится сброс TMR0 (при этом сбрасывается и предделитель).

Для измерения частоты вывод RB0 конфигурируется как вход на точные интервалы времени, что позволяет внешнему сигналу поступать на вход таймера. Отсчет длительности интервалов осуществляется “зашитой" в микроконтроллер программой и выполняется как точная временная задержка.

По истечении ее вывод RB0 конфигурируется как выход, TMR0 прекращает работу, поскольку на RA4 устанавливается низкий уровень, и внешний сигнал перестает поступать на его вход.

Затем считывается накопленное 16-разрядное значение числа периодов входного сигнала, в старшие восемь разрядов записывается содержимое TMR0, а в младшие - предделителя. Для получения значения предделителя выполняется дополнительная подпрограмма (с этой целью на выводе RA4 командами BSF и BCF переключается выходной уровень, т е. программно формируется последовательность коротких импульсов).

Каждый импульс инкрементирует предделитель и счетчик им пульсов N. после чего проверяется содержимое TMR0, чтобы определить, увеличилось ли оно Если оно возросло на 1, восьмиразрядное значение предделителя определяется по содержимому счетчика импульсов N как 256 - N.

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

Измерение частоты производится едва этапа. Сначала формируется интервал времени (программная задержка) длительностью 1 мс, что соответствует области высоких частот. Если полученное значение частоты более 127 (старший байт - значение TMR0 -и старший разряд младшего байта - значения предделителя - не равны 0), оно преобразуется, и результат выводится на индикаторы. После этого цикл повторяется.

Если же значение частоты менее 127, выполняется второе измерение (для низких частот), при котором формируется интервал времени длительностью 0,5 с. Для оптимизации работы микро контроллера он объединен с циклом вывода результата предыдущего измерения на индикаторы. Значение частоты более 127 преобразуется для индикации, при меньшем показания индикаторов обнуляются (частота входного сигнала - вне диапазона измерений или отсутствует вообще). После этого в обоих случаях полный цикл измерения повторяется.

Коды “прошивки” ПЗУ микроконтроллера в формате MicroChip.hex приведены в табл. 2 Исходный текст программы желающие найдут на ftp-сервере редакции в Интернете (ftp.radio.ru/pub/). Скачать: r2001_01_fmeter.zip (5 Кб)

Частотомер можно значительно удешевить если выполнить его на базе PIC-контроллера с однократно программируемым ПЗУ, например, РІС16С54С стоимость которого вдвое меньше (при этом потребуется незначительная доработка программы). Применение ЖК индикатора с устройством управления, например, НТ1621, позволит снизить потребляемый ток примерно до 5 мА.

Увеличить входное сопротивление примерно до 1 МОм позволит применение буфера на одном транзисторе (см заметку М. Васильева “Повышение входного сопротивления частотомера в Радио”, 1987, № 4 с. 57). Чтобы уменьшить погрешность прибора в области средних частот, в программу достаточно ввести еще одно измерение длительностью 10 мс, в результате погрешность в диапазоне 100...999 кГц снизится до 100 Гц. А это, в свою очередь, позволит добавить разряд на индикаторе и повысить его разрешение.

Для измерения частоты синусоидальных сигналов, изменяющихся относительно 0, на входе прибора желательно установить разделительный конденсатор емкостью не менее 5 мкФ

Чтобы расширить диапазон измерений в сторону низких частот, нужно добавить в программу еще одно измерение, во время которого в течение 0,5 с в цикле программного опроса без участия таймера считается число импульсов на входе. Полученное значение преобразуется для индикации по предложенной программе. Однако в этом случае общее время изме рения превысит 1 с и станет заметным

Можно поступить иначе - сместить диапазон измерений в сторону низких частот, заменив ZQ1 на 4 МГц кварцевым резонатором на частоту 400 кГц. Диапазон частот после такой замены - 25 Гц. 500 кГц.

Время измерения возрастет до 5 с, и станет заметно мерцание индикаторов.

Д. Яблоков, В. Ульрих, г. Санкт-Петербург. Р2001, 1.

1 1151 На микроконтроллерах
частотомер микроконтроллер PIC микроконтроллер
cashback