Сущеструют аналоговые фильтры для аналоговых сигналов которые могут быть пассивными или активными и одной из важнейших проблем таких фильтров является повышение крутизны их АЧХ (амплитудно частотной характеристики). Если например фильтр используется в составе частотного декодера сигналов то чем лучше эта характеристика и чем лучше добротность тем больше можно сделать каналов декодера при равном выделенном диапазоне частот по сравнению с фильтром у которого данные характеристики будут хуже. И в целом фильтр с более крутой характеристикой будет более надежным и избирательным. Для улучшения данной характеристики, у аналоговых фильтров может быть повышен порядок, путем усложнения схемы. Однако усложнение схемы также увеличивает вес и габариты готового устройства, усложняет его изготовление и настройку, повышает цену. Существуют также цифровые фильтры. Такие фильтры работают не с аналоговыми а с цифровыми сигналами и имеют идеальную куртизну т.е. с такими фильтрами как бы возможны только два варианта. Либо сигнал пропускается либо нет. Например варианта что он пропускается наполовину, как в случае с аналоговым фильтром, быть не может. Поэтому такие фильтры очень хороши для изготовления на их основе, частотных декодеров сигналов. Такие фильтры могут быть изготовлены например на логических микросхемах и обычных деталях а также на программируемых микроконтроллерах. Второй вариант значительно улучшает массогабаритные показатели готового устройства, уменьшает себестоимость и трудоемкость его изготовления. Первый вариант конечно тоже интересен. Например в качестве интересной головоломки или ради спортивного или культурно исторического интереса. Но второй также тоже м.б. интересен даже в этом плане, как минимум это тоже какая ни какая головоломка и задача для развития. После того как получилось определиться с элементной базой и был выбран микроконтроллер. Остается решить такую задачу как программирование этого микроконтроллера и превращение его т.о. в цифровой фильтр, частотомер, декодер. Однако эту задачу можно значительно упростить если выбрать популярный микроконтроллер и дать такую задачу какому нибудь сервису искусственного интеллекта например deepseek (или grock, chat gpt, и т.д. и т.п.). deepseek например выдал такой результат:
Данный ИИ попытался решить задачу не самым простым способом без злоупотребления специальными библиотеками и функциями (что возможно хорошо для возможности переноса кода на другой микроконтроллер). Попытался использовать внешние прерывания. А также снабдил код комментариями и пояснениями. У меня он, к сожалению, не заработал. Но думаю что используя данный код как заготовку, можно на его основе сделать работающий вариант + важно понимать что всю эту кучу текста, нейросеть сгенерировала очень быстро, буквально за минуту. Что обычному человеку, как мне кажется, будет повторить либо совсем трудно либо нереально. + Важным дополнением от deepseek оказалось то что он понял запрос, классифицировал и дал название "Arduino Frequency Detector with Output Control" по которому уже искусственный интеллект от гугл, сделал рабочий код:
Данный код значительно проще, короче и понятнее. В нем Используется функция pulseIn() для измерения длительности импульса в микросекундах а также фильтр высоких частот или вернее детектор высоких частот а не полосно пропускающий. Если внимательно посмотреть на код то можно заметить что он работает неправильно т.к. частота обратно пропорциональна периоду колебаний а не длительности импульса. Однако эту ошибку легко исправить если добавить дополнительно измерение длительности паузы и сложить длительность паузы с длительностью импульса для получения периода. Также можно заодно сделать фильтр (или вернее детектор) полосно пропускающим:
Данный детектор реагирует на частоты на пине 2 в диапазоне от 10 до 50 Гц и выдает сигнал на пин к которому подключен встроенный на плату светодиод. По uart выводит частоту импульсов в герцах. Также можно дополнить код и сделать декодер на 4 канала. Например так:
Результат можно осмотреть на видео:
Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g