Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    Frequency&Counter meter

    Frequency&Counter meter
    Частотомер + Счётчик

    Понадобился мне частотомер – решил его сделать на Ардуино. Порыскав в интернете понял, что все, в основном, используют библиотеку <FreqCount.h>. Однако посмотрев их скетчи, пришёл к выводу, что написана программа крайне нехорошо. Придётся писать свою и правильно.


    Описание

    В общем частотомер строится по такому принципу: получить переменный сигнал, сформировать из него импульсы. Эти импульсы посчитать за определённый интервал времени и отсюда уже выходит принятая частота в Гц/кГц/МГц. Далее всё выводится на какое-нибудь индикаторное устройство.

    Вроде всё понятно и просто, но в реальности получается не всё так, как бы того хотелось. В интернете у людей их самодельные частотомеры измеряют аж до 200 МГц с высокочастотными делителями и до 20-50 МГц без делителей.

    Реальность же показывает, что программа, основанная на библиотеке <FreqCount.h> не способна измерять частоту входного сигнала выше 6 МГц.

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


    Схема

    Пришлось разрабатывать свою схему частотомера.

    Вначале перепробовал разные схемы формирователей. Оказалось, что простая схема наиболее эффективна. На входе стоит усилитель на транзисторе 2SD2144 (fгр.=390 МГц). Сигнал с коллектора поступает на триггер Шмитта, выполненный на микросхеме DD1 КР1533ЛА3 (во второй схеме предполагается использовать 74AC14). Дале сформированные импульсы из входного сигнала поступают на делитель частоты.

    Делитель частоты позволяет расширить диапазон входных сигналов, так как выяснил, что без делителя входной частоты программа не в состоянии измерять выше 6 МГц. Пришлось искать подходящие микросхемы счётчиков. У меня нашлась микросхема КР531ИЕ17. Она может делить входной сигнал на 2, 4, 8, 16. Первая схема разработана под эту микросхему. Попутно купил микросхему SN74LS90N (Это наш 555ИЕ2) и оказалось, что эта микросхема быстреее переключается чем КР531ИЕ17. Если же смотреть характеристики на микросхемы, то вроде у КР531ИЕ17 максимальная тактовая частота составляет примерно 65 МГц. Реальный же экземпляр работает медленнее. Максимальная частота SN74LS90N должна составлять 42 МГц. У меня три разных партии этой микросхемы и из них выбрал наиболее быстроходный.

    На основе SN74LS90N построил вторую схему. SN74LS90N может делить на 2 и 10. Вторая схема использует ещё прямой входной сигнал, т.е. коэффициент деления 1:1.

    После делителя частоты сигнал поступает на ключи на микросхеме DD3 К561КТ3, которые использую как мультиплексор. Переключение ключей происходит программно по нажатию на кнопку [RANGE].

    Кнопка [TIME] позволяет выбрать время счёта 0,1с; 1с; 10с; или режим счёта импульсов Counter.

    Для счётчика импульсов собран свой формирователь с оптронной развязкой на U1. Работает от 5 до 110 В, сигнал может быть любой полярности.

    Кнопка [LIGHT] управляет подсветкой дисплея. Вначале использовал дисплей LCD Nokia 5110. В окончательном варианте использую дисплей LCD1602, он более подходит для частотомера. В программе применена условная компиляция и можно задать вывод на любой из этих дисплеев.

    Схема электрическая принципиальная<br>Вариант 1
    Pic 1. Схема электрическая принципиальная
    Вариант 1

    Триггер Шмитта можно использовать на КР1533ЛА3 или на специализированной микросхеме 74AC14, что более предпочтительно.

    Схема электрическая принципиальная<br>Вариант 2
    Pic 2. Схема электрическая принципиальная
    Вариант 2

    Триггер Шмитта на специализированной микросхеме 74AC14.

    Схема электрическая принципиальная<br>Вариант 3
    Pic 3. Схема электрическая принципиальная
    Вариант 3

    Генератор для проверки работы частотомера собран на микросхеме К555ЛА3. Подставляя разные кварцы, была проверена работа частотомера от 1МГц до 27МГц.

    Схема электрическая принципиальная<br>Генератор сигналов
    Pic 4. Схема электрическая принципиальная
    Генератор сигналов

    Описание программы

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

    Библиотека <FreqCount.h> использует 8-битный Timer0 на CHANNEL_B – вывод D5 (PD5). Реально измерить напрямую частоту выше 4-6 МГц невозможно. Для этого приходится делить входную частоту, чтобы счётчик микроконтроллера смог посчитать периоды входного сигнала. Поэтому, если кто-то указывает, что его программа без делителя измеряет 20 МГц – это заблуждение.

    Дисплей сейчас использую LCD1602 (16 символов в 2 строки). Он достаточно удобен для частотомера. У меня данный дисплей подключен по I2C, если же использовать без I2C, то в строчках 047-054 закомментирован альтернативный вариант. Можно его раскомментировать, а строчки 038 и 041 закомментировать.

    Управление частотомером осущестляется тремя кнопками: [RANGE], [TIME], [LIGHT], что соответственно позволяет изменять делители входной частоты, изменять временной интервал счёта и включать/отключать подсветку экрана дисплея. Выводы кнопок подтянуты к питанию и при нажатии на кнопки с них подаётся низкий уровень. Дребезг кнопок устраняется подпрограммой fnDebounce().

    В строках 312-320 реализован автоматический выбор делителя. Если сигнал не определён, то выставляется максимальный делитель. Заметил, особенно на делителе КР531ИЕ17, что счётчик не может посчитать входной высокочастотный сигнал и выдает на дисплей 0, хотя входной сигнал и присутствует. При переключении на больший делитель программа успевает посчитать периоды входного сигнала и выдаёт на дисплей уже реальную частоту. Автоматическое переключение делителя – удобство пользования. Всегда можно выбрать другой делитель в ручном управлении через кнопку [RANGE].

    Кнопкой [TIME] можно установить режим подсчёта входных импульсов. Для этого задействован вывод D2 Ардуино. Чтобы обнулить значение счётчика входных импульсов – нажмите на кнопку [RANGE]. Для чего нужен такой режим? К примеру, можно подсчитывать количество витков, при намотке катушки индуктивности или обмотки трансформатора.

    Далее можно по кнопке посмотреть код скетча частотомера... Сам файл смотрите в Приложении.


    Конструкция

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

    Макетирование схемы
    Pic 5. Макетирование схемы

    Проверка работоспособности проводилась с помощью генератора на К555ЛА3. Кварцы от в диапазоне от 1.000 МГц до 30.000 МГц. Всего 16 шт.

    Линейка кварцевых резонаторов
    Pic 6. Линейка кварцевых резонаторов
    Испытательный генератор на К555ЛА3
    Pic 7. Испытательный генератор на К555ЛА3

    Ниже на экране дисплея выводится: в верхней строке – частота, в правой части верхней строки – символ [*], указывающий на приход подсчитанных периодов входной частоты (не попал в кадр). В нижней строке выводится: слева – интервал времени измерения, в середине – выбранный делитель, справа – размерность [кГц/МГц]. В режиме счётчика (Counter) размерность [Imp]. В данном случае происходит измерение частоты в 1 МГц. Погрешность составляет 190 Гц, что -0,019%. Очень даже хорошо. Замечу, что генератор можно было бы подстраивать под каждый кварц поточнее, но я просто их перетыкивал, возможно что сам генератор выдаёт не точно 1 МГц. Расхождение в 190 Гц на частоте 1000000 Гц для самодельного частотомера достаточно приемлемо. На других частотах погрешность примерно такая же, но не более 0,05%. На частоте 30 МГц погрешность несколько больше – около 0,16%.

    Экран дисплея LCD1602
    Pic 8. Экран дисплея LCD1602

    Ниже на экране дисплея выводится: в верхней строке – режим счётчика (Counter) размерность [Imp]. Насчитано 16 импульсов.

    Экран дисплея LCD1602
    Pic 9. Экран дисплея LCD1602

    Добавил возможность подключать дисплей OLED SSD1306. Он хоть и маленький, но довольно информативноёмкий, гораздо лучше чем Nokia LCD5110.

    Экран дисплея SDD1306
    Pic 10. Экран дисплея SDD1306

    Проект в стадии разработки, возможны какие-то изменения и доработки...



    Приложение

    Все, что необходимо для повторения конструкции, можно скачать по ссылкам:

    Спасибо за внимание!
    Анатолий Беляев

    . Mr.ALB
    Предыдущая страница Страница 43 Далее