STM32-FreqM Модуль измерения частоты
STM32-FreqM Модуль измерения частоты
Какое-то время назад я занимался изысканиями в области измерения частоты средствами STM32. Задача состояла в быстром (частом) измерении входной частоты обходясь только лишь голым камнем и его мощными таймерами. Теперь решил часть кода сделать доступной для общества.
Модуль назван STM32-FreqM. Позволяет следующее:
1. измерять частоту в широком диапазоне. Максимальная частота ограничена пределителем и макс. частотой входного каскада. Точно не проверял.
2. задавать размер окна измерения.
3. измерять частоту с постоянной частотой выборок(дискретизации), или с переменной. Следует из п.2.
4. изменять некоторые параметры измерения на ходу.
В планах:
1. Измерять скважность.
2. Добавить 2ой канал, а может и 3й.
3. Доделать плюшки, которые заложены, но ещё недореализованы.
Данная версия, учитывая заложенную потенцильную гибкость - это стабильная альфа.
STM32-FreqM находится на bitbucket. Обзорная страница представляет небольшое сумбурное описание модуля. Начать советую с примера.
Пример проекта в Keil для STM32F4-Discovery STM32-FreqM-example также на bitbucket.
Всё это будет улучшаться по мере необходимости и свободного времени.
Отчеты о багах, вопросы по коду, его работе лучше публиковать в разделе Issues примера или модуля.
Модуль назван STM32-FreqM. Позволяет следующее:
1. измерять частоту в широком диапазоне. Максимальная частота ограничена пределителем и макс. частотой входного каскада. Точно не проверял.
2. задавать размер окна измерения.
3. измерять частоту с постоянной частотой выборок(дискретизации), или с переменной. Следует из п.2.
4. изменять некоторые параметры измерения на ходу.
В планах:
1. Измерять скважность.
2. Добавить 2ой канал, а может и 3й.
3. Доделать плюшки, которые заложены, но ещё недореализованы.
Данная версия, учитывая заложенную потенцильную гибкость - это стабильная альфа.
STM32-FreqM находится на bitbucket. Обзорная страница представляет небольшое сумбурное описание модуля. Начать советую с примера.
Пример проекта в Keil для STM32F4-Discovery STM32-FreqM-example также на bitbucket.
Всё это будет улучшаться по мере необходимости и свободного времени.
Отчеты о багах, вопросы по коду, его работе лучше публиковать в разделе Issues примера или модуля.
- Реклама
Re: STM32-FreqM Модуль измерения частоты
А как Вы переключаете делитель? По каким критериям? Ведь для низких частот хорошо использовать делитель 1, а для высоких необходимо использовать как минимум 2 в Вашем случае.
Контроллер у Вас 100 ногий F4, как я понял.
И еще вопрос: зачем входной сигнал подается на TIM4_ETR и TIM1_CH1 одновременно? Хотя последнее понятно. Одно для измерения частоты а второе для скважности и т.д.
Контроллер у Вас 100 ногий F4, как я понял.
И еще вопрос: зачем входной сигнал подается на TIM4_ETR и TIM1_CH1 одновременно? Хотя последнее понятно. Одно для измерения частоты а второе для скважности и т.д.
Re: STM32-FreqM Модуль измерения частоты
Я понял так... что исходники никто и не смотрел... а автор просто хочет чтобы за него всё сделали...
Оффтоп. Вы поняли? или это есть на самом деле? Предупреждение. FAKIR.
Оффтоп. Вы поняли? или это есть на самом деле? Предупреждение. FAKIR.
"Я не даю готовых решений, я заставляю думать!"(С)
Re: STM32-FreqM Модуль измерения частоты
Это пока в разделе ToDo. В моих задачах автопереключение не фигурировало.А как Вы переключаете делитель? По каким критериям? Ведь для низких частот хорошо использовать делитель 1, а для высоких необходимо использовать как минимум 2 в Вашем случае.
Точно F4. Пример для STM32F4-Discovery (STM32F4VGT6, 100pin). На друних не пробовал. Требования к камню в readme.Контроллер у Вас 100 ногий F4, как я понял.
Для захвата. Гарантия, что к моменту чтения счётного регистра, таймер не натикает лишнего. Там еще была хитрая фича (сейчас закоментирована) которая засылала по DMA, значения TIM1->CNT, и TIM4->CNT в массивы в ОЗУ, хранило историю. Нужно было для отладки.И еще вопрос: зачем входной сигнал подается на TIM4_ETR и TIM1_CH1 одновременно? Хотя последнее понятно. Одно для измерения частоты а второе для скважности и т.д.
Прошу заметить, что эти исходники - презентация. Могу сказать что основная, возложенная на них функция работает стабильно и давно. И готов помочь желающим разобраться в этом коде, модернизировать под свои нужды.
Re: STM32-FreqM Модуль измерения частоты
Честно говоря не понял принципа работы. Например зачем там ДМА. Могли бы описать основной принцип.
- Реклама
Re: STM32-FreqM Модуль измерения частоты
DMA для остановки таймеров. DMA загоняет значение в регистр опорного таймера, тем самым разрешая прерывание CC1, которое послужит сигналом для остановки счёта, значит измерение готово, поехали пересчитывать по формуле. DMA возбуждается по событию переполнения таймера, т.е основное окно измерения истекло. DMA делает модуль измерения частоты аппаратным аж до самого момента "измерение готово к пересчёту по формуле".
Принцип я попытался описать на странице проектаМогли бы описать основной принцип.
И я бы сказал, что находится в весьма зачаточной стадии. Постепенно напишу нормально.STM32-FreqM находится на bitbucket
Re: STM32-FreqM Модуль измерения частоты
А латентность ДМА... не смущает???kybin писал(а):DMA для остановки таймеров.
DMA загоняет значение в регистр опорного таймера, тем самым разрешая прерывание CC1, которое послужит сигналом для остановки счёта, значит измерение готово, поехали пересчитывать по формуле.
Витиевато... и непонятно... Оно хоть какой-то точностью обладает???DMA возбуждается по событию переполнения таймера, т.е основное окно измерения истекло. DMA делает модуль измерения частоты аппаратным аж до самого момента "измерение готово к пересчёту по формуле".
"Я не даю готовых решений, я заставляю думать!"(С)
Re: STM32-FreqM Модуль измерения частоты
Измеряемая частота 50 кГц +- 20 кГц. Частота дискретизации 2000 Гц. Точность в диапазоне не хуже чем +-10Гц. Выше крыши.
Измеряемая частота 1 Гц, дискретизация 1 раз в секунду, точность до 5-го знака. Мне выше крыши, дофига.
Измеряемая частота 50 Гц, частота дискретизации 3 Гц. Точность до 3-го знака включительно. Хватает.
Тестируйте, проверяйте. Нравится – юзайте. Пишите свои результаты. Дайвайте делать что-то вместе. Всем будет кайф и результат будет лучше, нежели колупаться поодиночке.
На самом деле огород я нагородил знатный. Нынче бы так не делал. Но шо маемо, как говорится.
Измеряемая частота 1 Гц, дискретизация 1 раз в секунду, точность до 5-го знака. Мне выше крыши, дофига.
Измеряемая частота 50 Гц, частота дискретизации 3 Гц. Точность до 3-го знака включительно. Хватает.
Тестируйте, проверяйте. Нравится – юзайте. Пишите свои результаты. Дайвайте делать что-то вместе. Всем будет кайф и результат будет лучше, нежели колупаться поодиночке.
На самом деле огород я нагородил знатный. Нынче бы так не делал. Но шо маемо, как говорится.
Re: STM32-FreqM Модуль измерения частоты
Полное окно измерения – время от начала до конца имерения. Моменты начала и завершения окна и всегда совпадают с моментами прихода первого и последнего фронтов. (в других реализациях с интерполяторами не обязательно). Не может превышать период дискретизации. Является косвенной, зависящей от входного сигнала величиной.
Основное окно измерения – время, которое является опорным для модуля. Определяет минимальный измерительный интервал. После него ожидается последний фронт.
Момент окончания этого окна – событие переполнение опорного таймера (или расширителя опорного таймера). В момент окончания основного окна аппаратно по DMA разрешается прерывание CC1, которое отметит окончание доп. интервала вместе с захватом текущего значения счётного регистра опорного таймера.
Дополнительное окно измерения – время, с момента окончания основного окна и до момента последнего пришедшего входного фронта. Зависит от входного сигнала.
Момент "измерение готово" наступает вместе с приходом последнего фронта и совпадает с завершением основного (также дополнительного) окна.
Нарушение правил. п - 2.2. FAKIR.
Код: Выделить всё
Полное окно измерения = осн. + доп.Момент окончания этого окна – событие переполнение опорного таймера (или расширителя опорного таймера). В момент окончания основного окна аппаратно по DMA разрешается прерывание CC1, которое отметит окончание доп. интервала вместе с захватом текущего значения счётного регистра опорного таймера.
Дополнительное окно измерения – время, с момента окончания основного окна и до момента последнего пришедшего входного фронта. Зависит от входного сигнала.
Момент "измерение готово" наступает вместе с приходом последнего фронта и совпадает с завершением основного (также дополнительного) окна.
Нарушение правил. п - 2.2. FAKIR.
Re: STM32-FreqM Модуль измерения частоты
Странный какой-то частотомер... Леонид Иванович заплакал бы... при виде этих цифр...kybin писал(а): Измеряемая частота 1 Гц, дискретизация 1 раз в секунду, точность до 5-го знака. Мне выше крыши, дофига.
Измеряемая частота 50 Гц, частота дискретизации 3 Гц. Точность до 3-го знака включительно. Хватает.
И точность странная... Это до... после запятой... или цифр всего???
"Я не даю готовых решений, я заставляю думать!"(С)
Re: STM32-FreqM Модуль измерения частоты
В соотв теме HIMERA описывал алгоритм измерения с настройкой таймеров. Ваш покорный слуга тоже это делал. Если автор темы сделаете то же самое, то по крайней мере будет понятно как это работает и возможно будет использовать.
5 знаков при времени измерения 1 сек - это 10 PPM. Нормальная точность кварца. Что бы увеличить точность нужно термокомпенсирование-термостатирование и калибровка.
5 знаков при времени измерения 1 сек - это 10 PPM. Нормальная точность кварца. Что бы увеличить точность нужно термокомпенсирование-термостатирование и калибровка.
Re: STM32-FreqM Модуль измерения частоты
Оффтоп - удалил.
Пишите по теме. FAKIR.
Пишите по теме. FAKIR.
"Я не даю готовых решений, я заставляю думать!"(С)


