Превратить PIC микроконтроллер среднего уровня в частотомер довольно просто. Микроконтроллер обеспечивает измерение частоты до 50 МГц, которая может быть увеличена путем добавления предделителя.
Имелось в наличии несколько триггеров 74AS74, которые разогнали частотомер до более чем 100 МГц, что фактически является максимальной частотой данной версии.
На изображении выше показан прототип, подсчитывающий частоту генератора с частотой 24 МГц, который смутно виден на заднем плане. Файлы Eagle (плата и схема) и исходный код на C данного частотомера можно скачать в конце данной статьи.
Микроконтроллер PIC16F628 работает на тактовой частоте 5 МГц, которая также является частотой дискретизации входного сигнала.
Для таймера TMR0 вывод RA4 используется как вход счетчика. Настраиваемое предварительное масштабирование выполняется перед дискретизацией, поэтому можно использовать полные 50 МГц. Этот небольшой программный трюк необходим, чтобы иметь возможность считывать значение счетчика в предварительном делителе: в случае соотношения 1: 256 внутри сохраняется полный байт точности.
Счетчик запускается и останавливается, делая вывод RA3 высоким или низким. Этот вывод подключен к входу CLR последнего триггера. Программное обеспечение PIC подсчитывает переполнения TMR0. Вместе с самим регистром TMR0 и значением, удерживаемым прескалером дает в общей сложности 24 бита значения счетчика. Фактическая точность ограничена только самими часами PIC, то есть точностью интервала счета. Это может быть настроено в SW, например, путем вставки инструкций NOP.
Сама схема частотомер довольно проста. Порт B микроконтроллера используется для управления 7-сегментным индикатором с точкой. Сами цифры мультиплексируются с помощью 8 канального мультиплексора CD4051, который управляется выводами микроконтроллера RA0…2. Таким образом, младшие 3 бита порта A выбирают цифру, а порт B устанавливает значение.
В прототипе применен 7-сегментный индикатор Kingbright с общим катодом, поэтому вход X CD4051 подключен к земле. Для обычных анодных дисплеев это должно быть Vcc, и необходимо соответственно изменить кодировку цифр.
Входной сигнал буферизуется транзистором J310 и смещается до уровня, приемлемого для 74AS74. Сам триггер делит сигнал на 4, поэтому интервал счета должен быть в 4 раза длиннее, чтобы получить правильное значение. Было выбрано 40 мсек, чтобы получить максимальную частоту 100 МГц с наименьшей значащей цифрой 100 Гц.
Программное обеспечение имеет автоматическое масштабирование, а затем счет делится на часть масштабирования в 4 мсек, а затем на интервал счета, который зависит от определенного масштаба. Наименьшая значащая цифра в 1 Гц потребует интервала 4 секунды.
Дизайн печатной платы сделан в Eagle. Данный прототип был построен на двух печатных платах.
Скачать файлы проекта (45,4 KiB, скачано: 627)