«Частотомер на микроконтроллере ATmega16. Сайт о микроконтроллерах AVR.RU», версия для печати. Исходный документ: https://avr.ru/ready/signal/sense/chastotomer

Частотомер на микроконтроллере ATmega16

В статье мы рассмотрим, как построить маленький, дешевый и простой частотомер, способный измерять частоту до 40 МГц с ошибкой ниже 1%. Подобной точности вполне достаточно для отладки большинства собственных аналоговых и цифровых устройств. Прибор позволит Вам проанализировать многие аспекты работы схем.

Частотомер на микроконтроллере ATmega16

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

Частотомер на микроконтроллере ATmega16

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

Частотомер собран на макетной плате, основой является микроконтроллер ATmega16 компании Atmel, источником тактовой частоты является внутренний RC осциллятор 8 МГц (это необходимо помнить при программировании микроконтроллера). Дополнительно, во входной части используется 4-битный счетчик 74HC191 в качестве делителя измеряемой частоты на 16 до подачи ее на вход микроконтроллера. Как видно, используется только выход Q3 счетчика, частота на этом выходе будет равна входной частоте деленной на 16.

Вход прибора (щуп) – точка W1, которая напрямую подключена к порту микроконтроллера PB0 и, через делитель, к порту PB1.

Для отображения значения измеренной частоты используется 4-разрядный семисегментный светодиодный индикатор с общим анодом. Такое решение сокращает количество проводников для подключения индикатора. В случае отсутствия дисплея указанного типа, возможно применение различных типов семисегментных индикаторов, однако потребуется адаптация программного обеспечения микроконтроллера.

Схема расположения и назначение выводов примененного индикатора изображена на рисунке 2.

Расположение и назначение выводов семисегментного индикатора
Рис.2. Расположение и назначение выводов примененного 4 разрядного светодиодного индикатора.

Выводы E1…E4 используются для включения соответствующих разрядов (E1 – для включения правого младшего разряда).

Каждая линия ввода/вывода микроконтроллера ATmega16 может обеспечить выходной ток до 40 мА, поэтому нам нет необходимости использовать транзисторы и сигналы управления дисплеем (E1…E4) подключены непосредственно к порту микроконтроллера.

Коннектор для внутрисхемного программирования микроконтроллера J1. После сборки и программирования микроконтроллера Вам потребуется калибровка прибора, настройка некоторых переменных (например, для увеличения яркости дисплея, уменьшения мерцания дисплея). Другими словами Вам потребуется обновление ПО микроконтроллера, и поэтому указанный коннектор необходимо установить на плату.

Алгоритм измерения частоты

Все мы знаем, что частота – это количество повторяющихся импульсов за единицу времени. Однако, измерение частоты с помощью цифровых приборов, например, с помощью микроконтроллера, который имеет свои ограничения, требует некоторых исследований для достижения необходимых результатов.

Максимальная частота, которая может быть обработана счетчиком микроконтроллера ATmega16, не может превышать тактовую частоту, деленную на 2.5. Обозначим максимальную частоту – Fmax. Тактовая частота для нашего микроконтроллера – 8 МГц, следовательно напрямую мы можем измерять сигналы с частотой до 3.2 МГц. Для измерения частоты выше этого уровня мы используем 4-битный счетчик в качестве делителя входной частоты. Теперь мы можем измерять частоты в 16 раз превышающие Fmax, но здесь накладывается ограничение со стороны счетчика 74191 и фактическая максимальная измеряемая частота не превышает 40 МГц.

Алгоритм, который был разработан, проводит измерение оригинальной (входной) частоты (обозначимFo) и частоты получаемой с делителя (обозначим Fd). Пока соблюдается условие, что частота меньшеFmax выполняется условие:

Fo = 16 × Fd;

Но по мере приближении Fo к Fmax, все больше импульсов должны быть обработаны и выражение выше примет вид:

F< 16 × Fd;

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

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

Алгоритм суммарно изображен на диаграмме (рис. 3)

Алгоритм работы частотомера на микроконтроллере

Рис.3 Алгоритм работы частотомера на микроконтроллере

Программное обеспечение микроконтроллера

Исходный код программы микроконтроллера снабжен подробными комментариями, но некоторые моменты требуют отдельного разъяснения:

factor = Fcpu/(1024×256)=8.E6/(1024×256)=30.51757


Функция Anti-Flickering (устранение мерцания индикатора) довольна сложна, но очень эффективна, особенно при измерении непостоянных частот. Данная функция полностью избавляет индикатор от быстрого переключения между различными значениями, продолжая отображать точное значение, и быстро изменяет показания, если измеренная частота действительно изменилась.

Примечание

Микроконтроллер ATmega16 поставляется с заводскими установками, при которых настроен на работу от внутреннего RC осциллятора 1 МГц. Необходимо с помощью последовательного программатора установить Fuse-биты CKSEL3..0 в значение «0100», что соответствует включению внутреннего RC осциллятора 8 МГц.

 

ПРИЛОЖЕНИЯ: 

Исходный код программы микроконтроллера (/int/Files/Dounload/chastotomer/avr_freq_meter.zip)

 

 

Автор:   www.circuitcellar.com

Перевод: Vadim 

 

Все права защищены © AVR.RU, 2021.