STM32-FreqM Модуль измерения частоты

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
kybin
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн мар 17, 2014 10:37:29

STM32-FreqM Модуль измерения частоты

Сообщение kybin »

Какое-то время назад я занимался изысканиями в области измерения частоты средствами STM32. Задача состояла в быстром (частом) измерении входной частоты обходясь только лишь голым камнем и его мощными таймерами. Теперь решил часть кода сделать доступной для общества.

Модуль назван STM32-FreqM. Позволяет следующее:
1. измерять частоту в широком диапазоне. Максимальная частота ограничена пределителем и макс. частотой входного каскада. Точно не проверял.
2. задавать размер окна измерения.
3. измерять частоту с постоянной частотой выборок(дискретизации), или с переменной. Следует из п.2.
4. изменять некоторые параметры измерения на ходу.

В планах:
1. Измерять скважность.
2. Добавить 2ой канал, а может и 3й.
3. Доделать плюшки, которые заложены, но ещё недореализованы.

Данная версия, учитывая заложенную потенцильную гибкость - это стабильная альфа.
STM32-FreqM находится на bitbucket. Обзорная страница представляет небольшое сумбурное описание модуля. Начать советую с примера.
Пример проекта в Keil для STM32F4-Discovery STM32-FreqM-example также на bitbucket.

Всё это будет улучшаться по мере необходимости и свободного времени.
Отчеты о багах, вопросы по коду, его работе лучше публиковать в разделе Issues примера или модуля.
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32-FreqM Модуль измерения частоты

Сообщение Galizin »

А как Вы переключаете делитель? По каким критериям? Ведь для низких частот хорошо использовать делитель 1, а для высоких необходимо использовать как минимум 2 в Вашем случае.
Контроллер у Вас 100 ногий F4, как я понял.
И еще вопрос: зачем входной сигнал подается на TIM4_ETR и TIM1_CH1 одновременно? Хотя последнее понятно. Одно для измерения частоты а второе для скважности и т.д.
Реклама
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32-FreqM Модуль измерения частоты

Сообщение HHIMERA »

Я понял так... что исходники никто и не смотрел... а автор просто хочет чтобы за него всё сделали...

Оффтоп. Вы поняли? или это есть на самом деле? Предупреждение. FAKIR.
"Я не даю готовых решений, я заставляю думать!"(С)
kybin
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн мар 17, 2014 10:37:29

Re: STM32-FreqM Модуль измерения частоты

Сообщение kybin »

А как Вы переключаете делитель? По каким критериям? Ведь для низких частот хорошо использовать делитель 1, а для высоких необходимо использовать как минимум 2 в Вашем случае.
Это пока в разделе ToDo. В моих задачах автопереключение не фигурировало.
Контроллер у Вас 100 ногий F4, как я понял.
Точно F4. Пример для STM32F4-Discovery (STM32F4VGT6, 100pin). На друних не пробовал. Требования к камню в readme.
И еще вопрос: зачем входной сигнал подается на TIM4_ETR и TIM1_CH1 одновременно? Хотя последнее понятно. Одно для измерения частоты а второе для скважности и т.д.
Для захвата. Гарантия, что к моменту чтения счётного регистра, таймер не натикает лишнего. Там еще была хитрая фича (сейчас закоментирована) которая засылала по DMA, значения TIM1->CNT, и TIM4->CNT в массивы в ОЗУ, хранило историю. Нужно было для отладки.

Прошу заметить, что эти исходники - презентация. Могу сказать что основная, возложенная на них функция работает стабильно и давно. И готов помочь желающим разобраться в этом коде, модернизировать под свои нужды.
Реклама
Эиком - электронные компоненты и радиодетали
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32-FreqM Модуль измерения частоты

Сообщение Galizin »

Честно говоря не понял принципа работы. Например зачем там ДМА. Могли бы описать основной принцип.
Реклама
kybin
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн мар 17, 2014 10:37:29

Re: STM32-FreqM Модуль измерения частоты

Сообщение kybin »

DMA для остановки таймеров. DMA загоняет значение в регистр опорного таймера, тем самым разрешая прерывание CC1, которое послужит сигналом для остановки счёта, значит измерение готово, поехали пересчитывать по формуле. DMA возбуждается по событию переполнения таймера, т.е основное окно измерения истекло. DMA делает модуль измерения частоты аппаратным аж до самого момента "измерение готово к пересчёту по формуле".
Могли бы описать основной принцип.
Принцип я попытался описать на странице проекта
STM32-FreqM находится на bitbucket
И я бы сказал, что находится в весьма зачаточной стадии. Постепенно напишу нормально.
Реклама
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32-FreqM Модуль измерения частоты

Сообщение HHIMERA »

kybin писал(а):DMA для остановки таймеров.
А латентность ДМА... не смущает???
DMA загоняет значение в регистр опорного таймера, тем самым разрешая прерывание CC1, которое послужит сигналом для остановки счёта, значит измерение готово, поехали пересчитывать по формуле.
DMA возбуждается по событию переполнения таймера, т.е основное окно измерения истекло. DMA делает модуль измерения частоты аппаратным аж до самого момента "измерение готово к пересчёту по формуле".
Витиевато... и непонятно... Оно хоть какой-то точностью обладает???
"Я не даю готовых решений, я заставляю думать!"(С)
kybin
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн мар 17, 2014 10:37:29

Re: STM32-FreqM Модуль измерения частоты

Сообщение kybin »

Измеряемая частота 50 кГц +- 20 кГц. Частота дискретизации 2000 Гц. Точность в диапазоне не хуже чем +-10Гц. Выше крыши.
Измеряемая частота 1 Гц, дискретизация 1 раз в секунду, точность до 5-го знака. Мне выше крыши, дофига.
Измеряемая частота 50 Гц, частота дискретизации 3 Гц. Точность до 3-го знака включительно. Хватает.
Тестируйте, проверяйте. Нравится – юзайте. Пишите свои результаты. Дайвайте делать что-то вместе. Всем будет кайф и результат будет лучше, нежели колупаться поодиночке.
На самом деле огород я нагородил знатный. Нынче бы так не делал. Но шо маемо, как говорится.
kybin
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн мар 17, 2014 10:37:29

Re: STM32-FreqM Модуль измерения частоты

Сообщение kybin »

Полное окно измерения – время от начала до конца имерения. Моменты начала и завершения окна и всегда совпадают с моментами прихода первого и последнего фронтов. (в других реализациях с интерполяторами не обязательно). Не может превышать период дискретизации. Является косвенной, зависящей от входного сигнала величиной.

Код: Выделить всё

Полное окно измерения = осн. + доп.
Основное окно измерения – время, которое является опорным для модуля. Определяет минимальный измерительный интервал. После него ожидается последний фронт.
Момент окончания этого окна – событие переполнение опорного таймера (или расширителя опорного таймера). В момент окончания основного окна аппаратно по DMA разрешается прерывание CC1, которое отметит окончание доп. интервала вместе с захватом текущего значения счётного регистра опорного таймера.
Дополнительное окно измерения – время, с момента окончания основного окна и до момента последнего пришедшего входного фронта. Зависит от входного сигнала.
Момент "измерение готово" наступает вместе с приходом последнего фронта и совпадает с завершением основного (также дополнительного) окна.

Нарушение правил. п - 2.2. FAKIR.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32-FreqM Модуль измерения частоты

Сообщение HHIMERA »

kybin писал(а): Измеряемая частота 1 Гц, дискретизация 1 раз в секунду, точность до 5-го знака. Мне выше крыши, дофига.
Измеряемая частота 50 Гц, частота дискретизации 3 Гц. Точность до 3-го знака включительно. Хватает.
Странный какой-то частотомер... Леонид Иванович заплакал бы... при виде этих цифр...
И точность странная... Это до... после запятой... или цифр всего???
"Я не даю готовых решений, я заставляю думать!"(С)
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32-FreqM Модуль измерения частоты

Сообщение Galizin »

В соотв теме HIMERA описывал алгоритм измерения с настройкой таймеров. Ваш покорный слуга тоже это делал. Если автор темы сделаете то же самое, то по крайней мере будет понятно как это работает и возможно будет использовать.
5 знаков при времени измерения 1 сек - это 10 PPM. Нормальная точность кварца. Что бы увеличить точность нужно термокомпенсирование-термостатирование и калибровка.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32-FreqM Модуль измерения частоты

Сообщение HHIMERA »

Оффтоп - удалил.

Пишите по теме. FAKIR.
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

Вернуться в «ARM»