Подсчёт частоты импульсов
- Войдите на сайт для отправки комментариев
Ср, 15/06/2022 - 11:53
Как с помощью кода на ардуино uno реализовать подсчёт частоты импульсов в районе 300 кГц? На меньшей частоте считает по готовым скетчам, а выше нет.
взять более быструю "ардуину", например stm32F103
А на Уно это сложно... 300 КГц на МК с частотой 16 МГц - это всего 25 тактов на каждую полуволну... маловато для входа-выхода из прерывания, поэтому и не считает, видимо...
Настраиваешь таймер на тактование от внешнего источника, через равные интервалы времени считываешь состояние счетчика и высчитываешь частоту.
Можно какую нибудь библиотеку поковырять или поюзать как есть https://www.pjrc.com/teensy/td_libs_FreqCount.html
b707, рассмотрим этот вариант, но пока не уверены. спасибо за ответ!
Morroc, только что попробовали, и это не работает - пример на первой странице сайта выдаёт совсем не то, что нужно. мы переделали его под вывод на LED-дисплей, но не думаю, что это имеет значение.
rkit, что должно являться внешним источником?
мы переделали его под вывод на LED-дисплей, но не думаю, что это имеет значение.
а нахрена, спрашивается?
там же написано в описании, что любые иные прерывания мешают измерению частоты! А в вашем случае, когда контроллер и так работает близко к пределу - это может быть критично.
Неужели не пришло в голову сначала проверить как есть. а потом уже переделывать?
что должно являться внешним источником?
Может ты прочитаешь даташит?
мы переделали его под вывод на LED-дисплей, но не думаю, что это имеет значение.
а нахрена, спрашивается?
там же написано в описании, что любые иные прерывания мешают измерению частоты! А в вашем случае, когда контроллер и так работает близко к пределу - это может быть критично.
Неужели не пришло в голову сначала проверить как есть. а потом уже переделывать?
попробовали с выводом на монитор компьютера, но всё то же самое. при стабильном результате отклоняется приблизительно на 100кГц, но при изменении вообще никак не соотносится. код прям с сайта этой библиотеки.
Что на вход подается ?
rkit, что должно являться внешним источником?
Примерно как тут про внешний тактовый http://microsin.net/programming/avr/atmega-ct1-pulse-counting.html
Если подаете не прямоугольник >3В, то можно(нужно?) добавить схему-формирователь как в статье про библиотеку.
Если подаете не прямоугольник >3В, то можно(нужно?) добавить схему-формирователь как в статье про библиотеку.
нужно
Как с помощью кода на ардуино uno реализовать подсчёт частоты импульсов в районе 300 кГц? На меньшей частоте считает по готовым скетчам, а выше нет.
легко, у меня в катушке Мишина это делает кусок кода позаимствованный у Dimax
b707, рассмотрим этот вариант, но пока не уверены. спасибо за ответ!
Morroc, только что попробовали, и это не работает - пример на первой странице сайта выдаёт совсем не то, что нужно. мы переделали его под вывод на LED-дисплей, но не думаю, что это имеет значение.
rkit, что должно являться внешним источником?
Как с помощью кода на ардуино uno реализовать подсчёт частоты импульсов в районе 300 кГц? На меньшей частоте считает по готовым скетчам, а выше нет.
легко, у меня в катушке Мишина это делает кусок кода позаимствованный у Dimax
а можно этот код?
rkit, что должно являться внешним источником?
Видимо, тот сигнал, который надо измерить. А Вы что подумали?
а можно этот код?
вы для начала расскажите, что у вас за сигнал. А то может вам ничей код и не поможет....
то. что у вас код библиотеки из #3 не работает - наводит на размышления, что у вас какой-то сигнал нестандартный.
ну или руки кривые... сорри
попробовали с выводом на монитор компьютера, но всё то же самое. при стабильном результате отклоняется приблизительно на 100кГц, но при изменении вообще никак не соотносится. код прям с сайта этой библиотеки.
какой пример пробовали. вот этот?
Возможно в библиотеке нет контроля переполнения, тогда этот код будет работать только для частот менее 65 КГц. Для измерения частот порядка 300 КГц в 5 строчке интервал надо ставить например 100 или типа того. И полученное значение потом умножать на 10.
Попробуйте так:
Как с помощью кода на ардуино uno реализовать подсчёт частоты импульсов в районе 300 кГц? На меньшей частоте считает по готовым скетчам, а выше нет.
легко, у меня в катушке Мишина это делает кусок кода позаимствованный у Dimax
а можно этот код?
прям под рукой нету, но брал с этой ветки форума
Для определенности решил попробовал потестить библиотеку FreqCount.h
Взял две стандартные Нано атмега328 16 МГц
На одной Нано собрал генератор с частотой примерно 300 КГц, как у ТС:
на другую зашил пример из библиотеки
Получил результат 296 150 Гц. Как оказалось, библиотека отлично отслеживает переполнение счетчика, моя правка скетча, предложенная в #16, не нужна.
В описании заявлено, что на атмеге328 можно мерить частоты до 8 Мгц. Попробовал повысить
Меряет! И точность очень неплохая.
Вывод - библиотека вполне рабочая. Почему у ТС ничего не работало? - либо сигнал грязный, либо, банально, неумелые руки.
попробовали с выводом на монитор компьютера, но всё то же самое. при стабильном результате отклоняется приблизительно на 100кГц, но при изменении вообще никак не соотносится. код прям с сайта этой библиотеки.
какой пример пробовали. вот этот?
Возможно в библиотеке нет контроля переполнения, тогда этот код будет работать только для частот менее 65 КГц. Для измерения частот порядка 300 КГц в 5 строчке интервал надо ставить например 100 или типа того. И полученное значение потом умножать на 10.
Попробуйте так:
как раз-таки это и заработало. на частотах от ~260 до 310 всё хорошо. спасибо!
как раз-таки это и заработало. на частотах от ~260 до 310 всё хорошо. спасибо!
пример из библиотеки тоже рабочий, я проверил.
Может вы в своем коде переменную count описывали как int? - тогда будет считать неправильно
PS спасибо что написали о результате, а то новички обычно пропадают после получения ответа.
PS спасибо что написали о результате, а то новички обычно пропадают после получения ответа.
Это да. И не только новички. Сетевая этика, называется.
И 99% стем с вопросами на форуме заканчиваются: "Ок. Попробую и обязательно отпишусь!" ))))