Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 14:05:45

В той версии к которому относится сообщение так оно и было. В последней версии потенциально до F/2*8 = 192. Только вот я этого не проверял. Не на чем. Если вдруг соберетесь проверять, пишите, вышлю ссылку на схему.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 14:53:40

Не. Спасибо. До F/2 мне не интересно. Последний вариант в виде HEX тоже. А из вашего описания вообще ничего не понятно что там куда пробрасывается и как. Зачем там ДМА что оно делает?

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 14:59:03

Спасибо. До F/2 мне не интересно.
мне одному непонятно - зачем мерить ШИМ на частотах >1 МГц ? А прямым методом с внутренним делителем спокойно ловит 80..100 МГц
Зачем там ДМА что оно делает?
очевидно, контроллер программно не успевает обработать такую частоту прерываний

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 15:05:36

Мне тоже не понятно. Вообще ничего не понятно. Поэтому и спросил.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 16:07:53

В тех исходниках что я выложил не хватает только включения делителя, для того что бы увеличить частоту измерения в 8 раз.
Последний раз редактировалось Galizin Чт ноя 19, 2015 01:14:02, всего редактировалось 2 раз(а).

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 16:12:41

Уточните про какой делитель речь.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 16:36:21

CCMR1->IC1PSC

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср ноя 18, 2015 16:47:55

Но он не пропустит частоту выше Fclk/2. Вот в чём вопрос.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Чт ноя 19, 2015 09:42:42

Значит только до f/2 (;

Re: STM32. Быстрый частотомер. Reciprocal counter.

Пт ноя 20, 2015 00:44:42

Не зацвёл цветочек каменный. Включение отключение CCMR1->IC1PSC ни на чём не отразилось. Как будто его и нет. В общем без ETR никак.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср сен 06, 2017 11:35:05

Вероятно я не сделаю частотомер с интерполятором на stm32. Поэтому изложу основную идею, вдруг кому понадобится.
Идея в общем не моя и лежит здесь
http://leoniv.livejournal.com/129151.html
То есть использовать интерполятор на простых триггерах. Измерить напряжение на конденсаторе интерполятора до разряда и после разряда. По разнице судить о величине отставания фронта сигнала от фронта образцового генератора. Два таких измерения дадут две временные метки между фронтами измерительного сигнала. Временные метки определяются с помощью интерполятора с высокой точностью, так в 100-1000 превышающей период образцовой частоты.
Собственно после этого остается подсчитать количество периодов измеряемой частоты между этими двумя метками - и дело в шляпе. остается разделить одно на другое и получить требуемую частоту.
Вот тут то и заключена основная идея. Прямой подсчет вполне возможен, но при попадании фронта сигнала где то близко к фронту образцового возможна неточность в подсчете +-1 единица, связано с неопределенными задержками в контроллере и неизвестностью точного времени когда в каком такте контроллера будет точно захвачен фронт. Кроме того если сигнал измеряется с делением, то прямой подсчет вообще невозможен так как измерительная частота больше образцовой.
Поэтому предлагаю подсчитывать количество импульсов косвенно. Сначала подсчитать с помощью описанного здесь метода частоту приблизительно с достаточной степенью точности. Потом на основании подсчитанной частоты и временных меток путем расчета (деления) получаем количество периодов измерительного сигнала. Количество периодов округляется до целого (по смыслу это целое число), а потом уже на основании этого количества рассчитываем точное значение частоты или периода.
Точность измерения частоты цифровым способом должна быть такой что бы подсчет количества давал бы точность лучше чем +-0.5 периода частоты входного сигнала. Для сокращения времени измерения можно также применить регрессию по нескольким точкам. По моим прикидкам получалось что вполне можно измерять частоты до 100 мегагерц в течение примерно 100 микросекунд или даже лучше. Основная задержка была в необходимости перезарядки ищмерительного конденсатора в течение этого времени, ну и в мощности вычислителя, что бы успеть сделать все прикидки. С другой стороны можно сделать измерение всех значений, а расчет уже производить потом, вне измерительного интервала. Данный принцип применим не только к stm32, но и к любому другому, который реализует обратный частотомер. Просто на stm32 это можно сделать без каких либо внешних компонент. Также можно увеличивать точность делая регрессию по нескольким точкам измерения уже периода. То есть делать накопление данных как цифрового измерителя так и аналогового с последующим их обсчетом (или на лету если позволит мощность вычислителя).
Была даже идея калибровки нелинейности интерполятора. Нелинейность возникает из-за нелинейности зависимости емкости от напряжения на p-n переходах. Для этого нужно было использовать 2 близко настроенных кварцевых генератора, один как образцовый а второй как измерительный. Разность частот установить герц в 1-3. После измерить интерполятором расстояние от фронта измерительного сигнала до фронта образцового. Это расстояние нарастает линейно от измерения к измерению. Отсюда можно сделать выводы о линейности интерполятора и при необходимости скорректировать ее на основании таблицы или формулы полученной при калибровке и таким образом увеличить точность.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Пт окт 27, 2017 19:15:36

Проверил идею с пробросом входного сигнала. Работает. Собственно вот код Reciprocal counter stm32f030c4, lcd - nokia1202, keil 5. Должен мерить до f/2 то есть до 24 мегагерц. Проверял где то до 11 на макете.
Если есть заинтересованные в продолжении проекта - пишите. Для готовой конструкции нужно разработать схему входной части, печатную плату всего, ну и дописать всякие сервисные возможности, как то регулировка времени измерения, калибровка, включение делителя ну и т.д. насколько хватит фантазии. Я могу взять на себя программную часть.
Возможно потом можно будет приделать аналоговый интерполятор. Я прикидывал, сделать вроде можно (а может и нет, макетирования не проводил).


Нашел проблему, в 16 битный регистр пишем 32битное значение

Код:
    TIM3->CCR3 = MeasureInterval; // в 16 битный счетчик пишем 48000000????? по факту 27648
    RefNextCheck = MeasureInterval;

Re: STM32. Быстрый частотомер. Reciprocal counter.

Пн окт 30, 2017 17:24:58

Цобачкин писал(а):Нашел проблему, в 16 битный регистр пишем 32битное значение

У всех бывают ошибки ...

Re: STM32. Быстрый частотомер. Reciprocal counter.

Вт окт 20, 2020 19:47:51

PWM input mode

Извините за глупые вопросы, есть уже период входного сигнала в тиках тактирующего , можно ведь сразу перевести его в частоту. Зачем ещё gate вычислять. По одному периоду входящей , что нельзя считать частоту. Точность , изменение частоты, что мешает?

Добавлено after 6 minutes 21 second:
Изображение
От количества измеренных периодов входной частоты, точность не изменится. Погрешность возникает от несовпадения фронтов тактируемой и входной частоты. Так это пол периода тактируемой и от неё не избавится никак по принципу Reciprocal counter.

Добавлено after 2 hours 18 minutes:


"В Reciprocal counting увеличение точности достигается накоплением измерительных импульсов за некоторое количество периодов входной частоты."
Кто обоснует это формулами ,графиками, поподробнее. Какая разница в точности между одним периодом и несколькими периодами. Частота может убежать в любой момент, хоть одна хоть другая

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 04:52:44

Начинал с этого.
СпойлерИзображение
Изображение
Вложения
book5.GIF
(37.58 KiB) Скачиваний: 277
book3.GIF
(63.44 KiB) Скачиваний: 263

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 08:23:19

akl, книжку озвучь, плиз...

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 08:33:19

СпойлерИзображение
Вложения
book1.GIF
(18.7 KiB) Скачиваний: 243

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 12:22:47

Спасибо.Формулы красивые. Погрешность квантования входит в формулу(50) в знаменателе, чем больше период измерения, тем меньше погрешность.Появление этой формулы для меня не очевидно. По временным графикам для таймеров это не очень очевидно.Если частота входящая кратна опорной , так погрешность буде одна не зависимо от колличества периодов. Что то формула эта меня не убедилаПОгрешность квантования это у нас погрешность из-за ресинхронизации таймеров, я так понял. У нас берётся системная частота,она от кварца внешнего умножается делится(вообщем в Кубе там хорошо видно-больше куб не на что не годится, а ещё ножки сразу все видны и усё). Вот этот кварц , чтобы точно мерить нужно поместить в герметичный сосуд всунуть туда печку на градусов 40С . Это получатся термостат. Так делал частотомеры Бирюков при Союзе. А так просто от кварца на плате мерить частоту, это так, что один период возьмём входящей что 10 периодов. Эту погрешность потом какими то программными манипуляциями надо вычислять. Я так понял. Как железом поймать вот эту разность в фронтах между тактовой и входной?Ведь входная может немножко плавать.И погрешность будет плавать. За 10 периодов она конечно сильно не уплывёт. Вообщем я прямой счёт на 176 ещё в 1984 делал. Часовой кварц. 176ие12 опорная секунда, АЛС324Б индикация. Шото мерял. Разобрал. А жаль память о молодости.... :cry: На STM32 не пойму как за счёт увеличения периодов улучшается точность..... :)))Пример с цифрами ппостенький кто то кинет. Допустим входящая 9000 герц опорная 100мгц для примера. И разность в одном периоде и в 10 периодах входящей
Последний раз редактировалось shalfey Ср окт 21, 2020 13:52:33, всего редактировалось 1 раз.

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 13:46:10

Один период
100'000'000*1/11'111=9000,09Гц при погрешности квантования ±0,81Гц
10 периодов
100'000'000*10/111'111=9000,009Гц при погрешности квантования ±0,081Гц

Re: STM32. Быстрый частотомер. Reciprocal counter.

Ср окт 21, 2020 14:04:27

Если брать формулу 50 за чистую монету то правильно.Но меня смущает сама эта формула.Ладно надо пробовать кодить, а то это пустая трата времени.Есть f4 discоvery ухожу кодить
Ответить