Частотомер на PIC-контроллере.

Этот прибор предназначен для измерения частоты логических сигналов, а также периодических сигналов непрямоугольной формы положительной полярности. Он предельно прост по схеме и в работе (пределы измерений переключаются автоматически) и может найти применение в тех случаях, когда отсчета частоты с точностью до третьего знака достаточно. Частотомер, принципиальная схема которого изображена на рисунке, позволяет измерять частоту периодических сигналов в диапазоне 250 Гц...50 МГц. Погрешности измерений и отсчета для каждого интервала частот приведены в табл. 1. Входное сопротивление прибора - не менее 2 кОм. Уровень лог. О входного напряжения должен быть не более 0,2, а лог. 1 - не менее 0,8ип„, , где ипит - напряжение питания, которое может быть любым в пределах 3...6 В. Потребляемый ток не превышает 100 мА. Как видно из схемы, основной элемент частотомера - микроконтроллер PIC16F84, осуществляющий счет импульсов внешнего сигнала, поступающего на вход прибора, обработку полученных значений и вывод результатов измерения на табло.

Таблица 1

Интервал частот, кГц (МГц) Время измерения, ме Погрешность, Гц (кГц)
измерения отсчета
0,25.. .0,999 500 ±2 ±2
1...9.99 500 ±2 ±5
10.. .69.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)

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

Микроконтроллер PIC16F84 имеет в своем составе восьмиразрядный модуль таймера (TMRO), который может использоваться с восьмиразрядным предделителем. Последний функционирует асинхронно, поэтому таймер способен считать частоту сигналов значительно выше частоты генератора микроконтроллера, которая в данном случае равна 4 МГц. Минимальное время высокого и низкого уровней входного сигнала — 10 не, что позволяет модулю TMRO функционировать от внешнего сигнала частотой до 50 МГц (а практически и выше). Предде-литель задействован для повышения точности измерений. Так как его предельный коэффициент деления равен 256, максимальная разрешающая способность счетчика составляет 16 двоичных разрядов. Однако содержимое пред-делителя невозможно считать программно, подобно регистру. На примере описываемого частотомера показан метод, позволяющий "извлекать" восьмиразрядное значение предделителя. Это обеспечивает разрешающую способность измерения 16 разрядов: восемь старших разрядов считываются из TMRO, а восемь младших — из предделителя.

Измеряемый сигнал через резистор R2 поступает на вывод RA4 DD1, являющийся входом внешнего сигнала (TOCKI) таймера TMRO. Этот вывод соединен с RBO, переключением которого осуществляется управление режимом счета. Перед измерением производится сброс TMRO (при этом сбрасывается и предделитель). Для измерения частоты вывод RBO конфигурируется как вход на точные интервалы времени, что позволяет внешнему сигналу поступать на вход таймера. Отсчет длительности интервалов осуществляется "зашитой" в микроконтроллер программой и выполняется как точная временная задержка. По истечении ее вывод RBO конфигурируется как выход, TMRO прекращает работу, поскольку на RA4 устанавливается низкий уровень, и внешний сигнал перестает поступать на его вход. Затем считывается накопленное 16-разрядное значение числа периодов входного сигнала: в старшие восемь разрядов записывается содержимое TMRO, а в младшие - предделителя. Для получения значения предделителя выполняется дополнительная подпрограмма (с этой целью на выводе RA4 командами BSF и BCF переключается выходной уровень, т. е. программно формируется последовательность коротких импульсов). Каждый импульс инкремен-тирует предделитель и счетчик импульсов N, после чего проверяется содержимое TMRO, чтобы определить, увеличилось ли оно. Если оно возросло на 1, восьмиразрядное значение предделителя определяется по содержимому счетчика импульсов N как 256 - N. Далее 16-разрядное двоичное значение частоты преобразуется в шестиразрядное десятичное, которое округляется до трехзначного, а затем формируется указанный выше экспоненциальный формат для вывода на табло в динамическом режиме. Сканирование индикаторов происходит с частотой примерно 80 Гц. Высокая нагрузочная способность микроконтроллера позволила подключить индикаторы непосредственно к его выводам.

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

Коды "прошивки" ПЗУ микроконтроллера в формате MicroChip.hex приведены в табл. 2. Исходный текст программы желающие найдут на ftp-сервере редакции в Интернете (ftp://ftp.paguo.ru/pub/ или ftp://212.188.13.179/pub/). Частотомер можно значительно удешевить, если выполнить его на базе PIC-контроллера с однократно программируемым ПЗУ, например, PIC16C54C, стоимость которого вдвое меньше (при этом потребуется незначительная доработка программы). Применение ЖК индикатора с устройством управления, например, НТ1621, позволит снизить потребляемый ток примерно до 5 мА.

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

Для измерения частоты синусоидальных сигналов, изменяющихся относительно О, на входе прибора желательно установить разделительный конденсатор емкостью не менее 5 мкФ. Чтобы расширить диапазон измерений в сторону низких частот, нужно добавить в программу еще одно измерение, во время которого в течение 0,5 с в цикле программного опроса без участия таймера считается число импульсов на входе. Полученное значение преобразуется для индикации по предложенной программе. Однако в этом случае общее время измерения превысит 1 с и станет заметным. Можно поступить иначе — сместить диапазон измерений в сторону низких частот, заменив ZQ1 на 4 МГц кварцевым резонатором на частоту 400 кГц. Диапазон частот после такой замены - 25 Гц...500 кГц. Время измерения возрастет до 5 с, и станет заметно мерцание индикаторов.

Д. ЯБЛОКОВ, В. УЛЬРИХ, г. Санкт-Петербург

Назад