Простой частотомер

Buldakov
Offline
Зарегистрирован: 17.01.2016

ua6em пишет:

а если мне надо мерить от 200Кгц до 400Кгц что изменить в коде

Для измерения таких частот надо изменить F_min на значение 1000, Хотя в принципе ничего можете не менять. Работать будет и так.

Другое дело, если измерять надо частоты от нескольких Гц. В таком случае F_min  должна быть в несколько раз меньше минимальной измеряемой частоты. Но не меньше 1.

F_min            =   100;  //Минимальная измеряемая частота

 

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Оживлю немного тему, как добавить в код из поста #3 показания коэффициента заполнения ("скважности")?

Buldakov
Offline
Зарегистрирован: 17.01.2016

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

b707
Offline
Зарегистрирован: 26.05.2017

Buldakov пишет:

Точность измерения на 100 Гц и на 4500000 Гц одинаковая и составляет 4/16000000 - это программная точность.

Количество знаков зависит от частоты: При времени измерения 1 сек.

от 100000 Гц и выше 0.1 Гц

от 10000 до 100000 Гц - 0.01 Гц

от 1000 до 10000 Гц - 0.001 Гц

от 100 до 1000 Гц - 0.0001 Гц

Касательно этих цифр - рекомендую подтянуть теорию и ознакомится с теоремой Найквиста-Котельникова, из которой следует, что точность измерения реального частотного сигнала не может быть лучше единицы деленной на время измерения. Таким образом, при времени измерения 1 сек - точность теоретически не может быть лучше 1 Гц. При 10 сек - 0.1 Гц Это в теории. На практике точность может быть только хуже.

Так что все цифры после запятой рекомендую убрать. Профессионалы засмеют.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Buldakov пишет:

Точность измерения на 100 Гц и на 4500000 Гц одинаковая и составляет 4/16000000 - это программная точность.

Количество знаков зависит от частоты: При времени измерения 1 сек.

от 100000 Гц и выше 0.1 Гц

от 10000 до 100000 Гц - 0.01 Гц

от 1000 до 10000 Гц - 0.001 Гц

от 100 до 1000 Гц - 0.0001 Гц

Касательно этих цифр - рекомендую подтянуть теорию и ознакомится с теоремой Найквиста-Котельникова, из которой следует, что точность измерения реального частотного сигнала не может быть лучше единицы деленной на время измерения. Таким образом, при времени измерения 1 сек - точность теоретически не может быть лучше 1 Гц. При 10 сек - 0.1 Гц Это в теории. На практике точность может быть только хуже.

Так что все цифры после запятой рекомендую убрать. Профессионалы засмеют.

ну так это и без теоремы понятно, чисто с позиций здравой логики )))

ssss
Offline
Зарегистрирован: 01.07.2016

b707 пишет:

Касательно этих цифр - рекомендую подтянуть теорию и ознакомится с теоремой Найквиста-Котельникова, из которой следует, что точность измерения реального частотного сигнала не может быть лучше единицы деленной на время измерения. Таким образом, при времени измерения 1 сек - точность теоретически не может быть лучше 1 Гц. При 10 сек - 0.1 Гц Это в теории. На практике точность может быть только хуже.

Так что все цифры после запятой рекомендую убрать. Профессионалы засмеют.

Профессионалы конечно смеются, но и над вами тоже. При reciprocal counter получаем 7 цифр точности при 10000000 МГц тактовой независимо от входной частоты. Т.е. 1 Гц входной с точностью +-0,000001 при времени измерения 1 сек. померять реально. Не на голой меге конечно, Леонид Иванович CPLD ещё к меге цеплял. На СТМ8 и СТМ32 можно и без CPLD сделать, там таймера более продвинутые.

b707
Offline
Зарегистрирован: 26.05.2017

ssss пишет:

Профессионалы конечно смеются, но и над вами тоже. При reciprocal counter получаем 7 цифр точности при 10000000 МГц тактовой независимо от входной частоты. Т.е. 1 Гц входной с точностью +-0,000001 при времени измерения 1 сек. померять реально.

Это так называемая "точность вычисления" - и к реальной точности измерения она никаким боком.  Примерно как если измерить длину и ширину участка рулеткой с точностью в 1см, а потом перемножить эти числа на калькуляторе с восемью разрядами и получить площадь участка с "точностью" до долей квадратного миллиметра. Грош цена этим цифрам.

Так же и с частотой. Физически невозможно различить два сигнала с разницей частоты df за время, меньшее чем 1/df .

 

ssss
Offline
Зарегистрирован: 01.07.2016

b707 пишет:

Это так называемая "точность вычисления" - и к реальной точности измерения она никаким боком.  Примерно как если измерить длину и ширину участка рулеткой с точностью в 1см, а потом перемножить эти числа на калькуляторе с восемью разрядами и получить площадь участка с "точностью" до долей квадратного миллиметра. Грош цена этим цифрам.

Так же и с частотой. Физически невозможно различить два сигнала с разницей частоты df за время, меньшее чем 1/df .

Теперь над вами можно смело смеяться во весь голос! )))))))))))))))))))))))))))))))

А мужики ведущих фирм частотомеростроения то и не знали! )))))))))))))))))))))

Да на сранном СТМ8 это легко и непринуждённо делается, в железе, уже проверено. А вы тут со своей геморройной авр-теорией надрываетесь. ))))))))))))))))))))))))))

ssss
Offline
Зарегистрирован: 01.07.2016

ssss пишет:

При reciprocal counter получаем 7 цифр точности при 10000000 МГц тактовой независимо от входной частоты.

Запятая сцуко затерялась. Должно быть так.

Цитата:

При reciprocal counter получаем 7 цифр точности при 10,000000 МГц тактовой независимо от входной частоты.

Далее по тексту.

ssss
Offline
Зарегистрирован: 01.07.2016

b707 пишет:

Это так называемая "точность вычисления" - и к реальной точности измерения она никаким боком. 

На "точность вычисления" влияет только размерность величин которыми оперируют при вычислениях, типа флоат или лонг, 32 бит математика или 64 бит, с чем у авр тоже полный швах. Не, можно конечно напрячься и написать свою или переписать уже существующую математику, но похоже это мало кому нужно и интересно, уж для врдуины точно.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Ну сдесь конечно и расписали все прелести. Проект первоначально разрабатывался для изменения относительного измерения малых значений частоты. Надо было измереть точно разность между 7899.25 и между 7899.26 Гц. При этом нужна была только разница. Значение самой частоты не нужно было.Частотомер получился как побочный эффект. Цена нужна была до 200 руб и размером со спичечный коробок.

А если кому то надо мерить точно частоту - пусть покупает фабричную штуковину.

b707
Offline
Зарегистрирован: 26.05.2017

ssss пишет:

Запятая сцуко затерялась. Должно быть так.

При reciprocal counter получаем 7 цифр точности при 10,000000 МГц тактовой независимо от входной частоты.

Ну да, и в точности тоже запятая затерялась - должно быть 0.000001 Мгц, а не 0.000001 Гц - тогда верно.

ssss
Offline
Зарегистрирован: 01.07.2016

b707 пишет:

должно быть 0.000001 Мгц, а не 0.000001 Гц - тогда верно.

Для 1 Гц - 0.000001 Гц, для 1МГц - 0.000001 Мгц. Кароче, 7 знаков и в африке 7 знаков. Гуглите сначала, просвещайтесь, потом уже и в спор влазьте.

demyan2
Offline
Зарегистрирован: 10.12.2014

А можно  увидеть  схему  подключения дисплея ?

b707
Offline
Зарегистрирован: 26.05.2017

ssss пишет:

 Гуглите сначала, просвещайтесь, потом уже и в спор влазьте.

Ага, почитал. Интересная техника. Как я понял, частота отсчетов исходного сигнала совмещается с самим сигналом, что дает возможность обойти математические ограничения последовательных измерений.

Да, вероятно был неправ.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Алгоритм примерно такой:

С приходом фронта очередного входного импульса запускается счет тактов частоты 16 мгц. По истечении времени 1 сек. и с приходом очередного фронта импульса счетчик тактов останавливается. Затем одно целое число делится на другое и получаем частоту. В обычных частотомерах используется подсчет входных импульсов за 1 сек. с обрезанием входного импульса по времени равному 1 сек. (Для больших частот это не принципиально.)

Да и еще замечание: Частотомер работает только при наличии входной частоты. Если на вход ничего не подавать он не будет показывать нулевую частоту. Экран при этом обновляться так же не будет.

А по поводу теоремы Котельникова. Вы сами то ее хорошо знаете?  Она применяется для аналоговых сигналов. Хотя если брать ее в общем виде - то для сигналов любой формы включая и прямоугольный сигнал. Что то типа если у нас есть синус частотой 1000 Гц. то для правильного восстановления аналогового сигнала оцифровывать сигнал надо хотя бы с частотой 10000 Гц.

Только не надо здесь говорить, что достаточно частоты оцифровки 2000 Гц. Кто не верит пусть попробует проделать такой опыт: Берем листочек в клеточку и рисуем какой нибудь сигнал. Затем делаем отсчеты с частотой в 2 раза больше частоты сигнала. Переносим эти отсчеты на другой листочек и по точкам не глядя на первый листок восстанавливаем сигнал. А потом сравниваем две картинки. И если вы рисовали произвольный сигнал - то восстановить первоначальный сигнал не получится.

https://blog.amartynov.ru/%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0-%D0...

 

ssss
Offline
Зарегистрирован: 01.07.2016

Buldakov пишет:

С приходом фронта очередного входного импульса запускается счет тактов частоты 16 мгц. По истечении времени 1 сек. и с приходом очередного фронта импульса счетчик тактов останавливается. Затем одно целое число делится на другое и получаем частоту.

А частоту тактовой где потеряли?

freq = (Fclk * cnt_input) / cnt_ref;

Цитата:

Да и еще замечание: Частотомер работает только при наличии входной частоты. Если на вход ничего не подавать он не будет показывать нулевую частоту. Экран при этом обновляться так же не будет.

Ну это уже ваши недоделки. Тупо проверяем на ноль счётчик тактовых. Да делить на ноль как бы нельзя.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Да согласен мои недоделки.Здесь фишка не в том, что на ноль делить нельзя, а в том, что если нет входной частоты - то  таймер ни разу не переключится и не будет ни запускающего сигнала на начало счета, ни останавливающего сигнала на окончание счета. А поскольку счет не остановлен - то невыполняется условие вывода значений частоты.

ssss
Offline
Зарегистрирован: 01.07.2016

Buldakov пишет:

Здесь фишка не в том, что на ноль делить нельзя, а в том, что если нет входной частоты - то  таймер ни разу не переключится и не будет ни запускающего сигнала на начало счета, ни останавливающего сигнала на окончание счета. А поскольку счет не остановлен - то невыполняется условие вывода значений частоты.

Всё равно это ваша недоработка. Защитный интервал ещё никто не отменял.

Buldakov
Offline
Зарегистрирован: 17.01.2016

А никто и не спорит с этим. Другое дело, что я незнаю пока как это решить.

Ihor
Offline
Зарегистрирован: 10.11.2017

А мне частотомер понравился очень. Автору благодарность. Работает на ардуинке про мини.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ihor пишет:

А мне частотомер понравился очень. Автору благодарность. Работает на ардуинке про мини.

Этот прибор будет частотомером когда в ардуине кварц будет заменен на кварцевый генератор с PPT 0,5 и лучше, но как образец реализации устройства на ардуино и показометр отличная вещь

SieOK
Offline
Зарегистрирован: 29.03.2018

Вопрос такого плана: нужно выводить частоту инвертора регулировки оборотов двигателя (пределы частоты 1-500Гц), то есть не большие значения.

Ставить двухстрочный экран 16х2 накладно, проще 3-х разрядный семисегментник (может быть со сдвиговыми регистрами)

Да и ардуину для этого жалко, лучше Tiny13 (ардуиновский код в нее заливается)

Есть ли готовый для допиливания код? Ткните пожалуйста ссылку

Может ли кто поопытнее чтобы переделать Ваш код под эту задачу?

 

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Подскажите ,какая версия скетча рабочая?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

fly245 пишет:

Подскажите ,какая версия скетча рабочая?

Вот эта - http://arduino.ru/forum/apparatnye-voprosy/chastotomer-na-arduino-uno-i-lcd-keypad-shield#comment-160321

Electrobit
Offline
Зарегистрирован: 19.09.2021

==Диапазон измеряемых частот от 100 Гц...

С чем связано ограничение нижней измеряемой частоты 100 Герцами?

В большинстве случаев, нужно иметь возможность измерять частоту от 20 Герц, а желательно даже ещё ниже.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Для измерения от 1 гц и до 250 кгц скоро выйдет другая прошивка. Пока некогда для нее подготовить описание.

Electrobit
Offline
Зарегистрирован: 19.09.2021

)))

Я собственно ожидал ответа, что для измерения низкочастотных сигналов нужен другой подход. Но вы  прям сразу перешли к делу. Это хорошо. Ждем новую версию.

Electrobit
Offline
Зарегистрирован: 19.09.2021

Хочу добавить в тему, что если говорить о практическом применении частотомеров вообще, то самым востребованным всегда был диапазон 20-20 000 Гц. 

Buldakov
Offline
Зарегистрирован: 17.01.2016

Если я не ошибаюсь частотомер на 2 таймерах. Кажется коэффициент деления одного из таймеров около 50 или 100. Точно не помню. Который считает такты вх. частоты. для получения большой максимальной частоты. Если этот коэффициент уменьшить то и минимальная частота тоже уменьшится.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Electrobit пишет:

Хочу добавить в тему, что если говорить о практическом применении частотомеров вообще, то самым востребованным всегда был диапазон 20-20 000 Гц. 

А можно поподробнее, каков именно практический смысл измерения частоты в указанном диапазоне?

Electrobit
Offline
Зарегистрирован: 19.09.2021

Для измерения частоты колебаний струн. (например)

nik182
Offline
Зарегистрирован: 04.05.2015

Это звучит больше как диапазон наушников. Мне например чаще надо часто измерять частоту в полосах 0- 20 Гц, 16-24 кГц, 100-400кГц, ну и до 4ГГц иногда надо. Ну так по жизни сложилось. Можно я тоже скажу что это самые востребованные диапазоны? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Electrobit пишет:

Для измерения частоты колебаний струн. (например)

Слишком экзотично, чтобы говорить о "самом востребованном".

Да и вообще, зачем ее, частоту эту, измерять?

Electrobit
Offline
Зарегистрирован: 19.09.2021

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

Electrobit
Offline
Зарегистрирован: 19.09.2021

==Слишком экзотично, чтобы говорить о "самом востребованном".

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы хотите сказать, что металлодетектор - совершенно необходимый в быту прибор?

Вот, например, у меня немало самых различных приборов, включая 4 осциллографа, 2 частотомера, шумомер, люксометр, спектранализатор и пр., а вот металлодетектора нет.

Может, я чего-то не понимаю?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

Вы хотите сказать, что металлодетектор - совершенно необходимый в быту прибор?

Вот, например, у меня немало самых различных приборов, включая 4 осциллографа, 2 частотомера, шумомер, люксометр, спектранализатор и пр., а вот металлодетектора нет.

Может, я чего-то не понимаю?

интересно, а чем ты орехи колешь если нет металлодетектора, микроскопом что ли? )))

rkit
Offline
Зарегистрирован: 23.11.2016

Струны можно измерить просто телефоном.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

интересно, а чем ты орехи колешь если нет металлодетектора, микроскопом что ли? )))

Смотря какие орехи. Если кедровые - можно и микроскопом, а кокосовые, очевидно, телескопом.

Buldakov
Offline
Зарегистрирован: 17.01.2016

Если настраивать гитару то вполне подойдет что то типа такого:

https://myguitartuner.com/ru/gitara/

Хотя можно поискать на телефоне программу тоже.

Если на компьютере - то самое лучшее для таких частот типа этого:

https://cxem.net/software/spectraplus.php

Скачать программу лучше с торента вместе с лекарством последняя версия вроде 5.0.27.5

Измеряет частоту с точностью до 0.001 Гц. Для настройки металлоискателя подойдет. Диапазон зависит от звуковушки и составляет от 20 до 48000 Гц в простейшем случае.

rkit
Offline
Зарегистрирован: 23.11.2016

Никакая звуковуха 48 кГц не пропустит. Ты путаешь с частотой дискретизации АЦП.

Electrobit
Offline
Зарегистрирован: 19.09.2021

== Вы хотите сказать, что металлодетектор - совершенно необходимый в быту прибор

Нет, конечно. Я говорил только о практическом применении низкочастотных частотомеров. И только о тех случаях, когда никаких приборов кроме мультиметра нет. Если у вас 4 осциллографа и 2 промышленных частотомера, то на кой чёрт вам вообще "частотомер" на arduino?

Electrobit
Offline
Зарегистрирован: 19.09.2021

Спасибо за ссылки.  Большинство решений в этой области мне известно. Измерители частоты через звуковую плату компьютера делали ещё в 90-е годы, но потом от этого отказались. Потому что АЦП для таких измерений - это вообще лишнее  и даже вредное звено. Сложные компьютерные программы цифровой обработки сигналов - это только для специалистов. На практике,  для того чтоб измерять допустим частоту струн, необходим перестраиваемый полосовой фильтр и простейший частотомер. До эпохи цифровых частотомеров люди вообще мерили  аналоговыми и у них получалось.  

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:
а вот металлодетектора нет. Может, я чего-то не понимаю?

Эх, не теряла Ваша внучка любимую серёжку во время "баскетбола на газоне с участием всей семьи и собаки".

Green
Offline
Зарегистрирован: 01.10.2015

)) В молодости подруга потеряла серёжку... Где мы её только не искали - миноискатель не помешал бы. Где-то через неделю нашлась у меня в нагрудном кармане пиджака. И это была не ловкость рук, хотя...)

nik182
Offline
Зарегистрирован: 04.05.2015

andriano пишет:

Вы хотите сказать, что металлодетектор - совершенно необходимый в быту прибор?

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

По поводу частотометров на avr в классе "из палок и г@вна" наверно самый лучший был от Матиаса Хопфа, он работает в режиме обратного счёта (reciprocal frequency counter по-буржуйски). Режим этот программный конечно, что не мешает иметь приличные параметры, цитата слов автора:  Работает на ATtiny2313 с диапазоном частот 0 Гц..10 МГц (при тактовой частоте 20 МГц), разрешением до 1e-6 Гц с максимальным Точность повторения 10 ppm (относительная погрешность, абсолютная погрешность зависит только от кварца). 

Я как-то заинтересовался им, переписал код в стиле arduino-friendy для меги328, вот только тестировал потом или нет -подзабыл, склероз однако.

 

 

 

 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dimax пишет:

Я как-то заинтересовался им, переписал код в стиле arduino-friendy для меги328, вот только тестировал потом или нет -подзабыл, склероз однако.

это не склероз, это ретроградная амнезия )))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

nik182 пишет:

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

?????????????????

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