Как стать автором
Обновить

Цифровой частотомер без микроконтроллера

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров17K
Всего голосов 53: ↑53 и ↓0+53
Комментарии19

Комментарии 19

Какая-то проблема со ссылкой на набор

Так не надо поддерживать Китайцев,и зашибать деньги на ссылках через алик....

Ну а по существу...возьмите в помощь радиокружку...года 90 и соберите нормальный частотомер.Китайское г остается г....

С микроконтроллером будет дешевле.

И паять придется примерно в 5 раз меньше )

А зачем такие сложности то? Любой микроконтроллер за несколько долларов и импульсы посчитает, и индикацю сделает, и ещё определит когда частоту считать, а когда период, и пересчитает в удобное вам представление.

Тут больше работы придумать удобный пользовательский интерфейс.

Чтобы понимать, как работает на низком уровне. Чтобы уметь делать микроконтроллеры

Внутри микроконтроллера тоже есть счетчики. Не думаю что это знание сильно поможет даже использовать те счетчики.

А так ли просто сделать частотомер на микроконтроллере?

  1. Как считать импульсы? Первое, что напрашивается -- считать в прерывании. Но далеко на этом не уйдешь. По личному опыту, даже STM32F407 с тактовой частотой 168 МГц таким способом с трудом справляется даже с парой мегагерц -- слишком много времени занимает обработка прерывания. И кроме того, результат измерения становится очень уж зависим от других прерываний, от которых далеко не всегда можно избавиться. Другой вариант: использовать в качестве счетчика один из таймеров. К сожалению, тут есть загвоздка: непосредственно содержимое счетчика в таймере не прочитаешь. Нужно использовать разные "грязные хаки" типа досчета импульсов. Хороший результат это дает только на простейших контроллерах типа PIC16F628, где метод досчета работает прекрасно, а сам таймер умеет считать почти до 70 МГц при том, что тактовая частота не превышает четырех мегагерц. Последний, самый разумный вариант -- внешний счетчик нужной разрядности, чтобы на выходе его получался сигнал, который можно без напряга посчитать любым удобным способом, а состояние его после счета легко вычитывалось программой. И мы имеем... уже половину частотомера на логике.

  2. Как отсчитывать интервал времени для счета? Опять же, с решением в лоб -- отсчитывать секунду по прерываниям от таймераy -- ничего хорошего не получится, если только это не будет единственное прерывание в системе, а контроллер не будет предельно "жестким" типа того же PIC или Holtek. Хитроумная связка из трех таймеров (https://we.easyelectronics.ru/STM32/chastotomer-na-stm32f10x.html) -- лучшее, пожалуй, решение средствами одного только МК -- но увы, даже оно неидеально. Больше семи разрядов таким образом делать не имеет смысла из-за, опять-таки, нестабильности длительности интервала от раза к разу. Хотим лучше -- делаем вторые пол-частотомера на логике.

    В результате хороший частотомер, достойный серьезного опорного генератора, мы делаем на ПЛИС, то есть по сути на той же мелкой логике, а микроконтроллер в нем работает в основном пользовательским интерфейсом, ну и всякую подсобную работу выполняет.

Крайне просто. В большинстве контроллеров есть таймеры которые можно управлять внешним сигналом.

Схема такова запускаем ТРИ таймера. Один на аппаратное прерывание 0.1 сек. Второй на счёт внешних импульсов по программному сигналу и третий, на счёт внутренней частоты (например, 10мгц) по внешнему сигналу вкл-выкл.

По прерыванию считывает значение второго таймера и обнуляем его. Таким образом получаем число входных импульсов за этот период, т. е частоту. Смотрим, было ли срабатывания вкл-выкл в третьем таймере. Если было, то считываем с него значение периода и сбрасываем . И так повторяем всегда.

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

Всё это можно и на совсем тупеньком контроллере и без таймером (если такие ещё бывают) но тут долго описывать реализацию.

Главный бонус, что программу можно изменить под любые нужды. А любое изменение аппаратной реализации весьма трудоёмко.

Можно ещё сделать реализацию и на программируемой логике. Но это как танком давить блох.

Супер! 90-е: давайте изобретем микроконтроллер т.к. наши сборки с n количеством компонентов уже никуда не лезут. 2000: давайте ставить микроконтроллеры везде. 2010: теперь даже в зубной щётке! 2020: давайте вернёмся в 90..

2010: теперь даже в зубной щётке!

С линуксом или андройдом внутри.

Ну пока вроде не было такого, я имел ввиду что в самой щётке от электрощетки уже есть МК счётчик использования, в самой щётке тоже естественно. Просто мир докатился что в одноразовую вещь уже ставят чип, картриджи к примеру, одноразовые купили и проч.

если это не для вас, ЗАЧЕМ вы оставляете свои говнокомментарии?

Ну да, давайте везде оставлять только позитивные комментарии, никакой критики, всё в радуге.. Плохие комментарии удалять всегда.

а как убрать эти три секунды? сократить до 0,5 или хотябы единицы?

Подключить диоды D2-D9 по-другому.

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий