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

Кто любит RISC в жизни, заходим, не стесняемся.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

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

Сообщение Galizin »

В той версии к которому относится сообщение так оно и было. В последней версии потенциально до F/2*8 = 192. Только вот я этого не проверял. Не на чем. Если вдруг соберетесь проверять, пишите, вышлю ссылку на схему.
Реклама
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Не. Спасибо. До F/2 мне не интересно. Последний вариант в виде HEX тоже. А из вашего описания вообще ничего не понятно что там куда пробрасывается и как. Зачем там ДМА что оно делает?
Реклама
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

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

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

Сообщение scorpi_0n »

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

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

Сообщение Galizin »

В тех исходниках что я выложил не хватает только включения делителя, для того что бы увеличить частоту измерения в 8 раз.
Последний раз редактировалось Galizin Чт ноя 19, 2015 01:14:02, всего редактировалось 2 раза.
Реклама
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

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

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

Сообщение Galizin »

CCMR1->IC1PSC
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

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

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

Сообщение Galizin »

Значит только до f/2 (;
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Не зацвёл цветочек каменный. Включение отключение CCMR1->IC1PSC ни на чём не отразилось. Как будто его и нет. В общем без ETR никак.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

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

Сообщение Galizin »

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

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

Сообщение Цобачкин »

[uquote="Galizin",url="/forum/viewtopic.php?p=2498295#p2498295"]Проверил идею с пробросом входного сигнала. Работает. Собственно вот код Reciprocal counter stm32f030c4, lcd - nokia1202, keil 5. Должен мерить до f/2 то есть до 24 мегагерц. Проверял где то до 11 на макете.
Если есть заинтересованные в продолжении проекта - пишите. Для готовой конструкции нужно разработать схему входной части, печатную плату всего, ну и дописать всякие сервисные возможности, как то регулировка времени измерения, калибровка, включение делителя ну и т.д. насколько хватит фантазии. Я могу взять на себя программную часть.
Возможно потом можно будет приделать аналоговый интерполятор. Я прикидывал, сделать вроде можно (а может и нет, макетирования не проводил).[/uquote]

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

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

    TIM3->CCR3 = MeasureInterval; // в 16 битный счетчик пишем 48000000????? по факту 27648
    RefNextCheck = MeasureInterval;
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

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

Сообщение Galizin »

Цобачкин писал(а):Нашел проблему, в 16 битный регистр пишем 32битное значение
У всех бывают ошибки ...
shalfey
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

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

Сообщение shalfey »

PWM input mode

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

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

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


"В Reciprocal counting увеличение точности достигается накоплением измерительных импульсов за некоторое количество периодов входной частоты."
Кто обоснует это формулами ,графиками, поподробнее. Какая разница в точности между одним периодом и несколькими периодами. Частота может убежать в любой момент, хоть одна хоть другая
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Начинал с этого.
СпойлерИзображение
Изображение
Вложения
book5.GIF
(37.58 КБ) 392 скачивания
book3.GIF
(63.44 КБ) 379 скачиваний
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

akl, книжку озвучь, плиз...
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

СпойлерИзображение
Вложения
book1.GIF
(18.7 КБ) 352 скачивания
shalfey
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

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

Сообщение shalfey »

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

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

Сообщение akl »

Один период
100'000'000*1/11'111=9000,09Гц при погрешности квантования ±0,81Гц
10 периодов
100'000'000*10/111'111=9000,009Гц при погрешности квантования ±0,081Гц
shalfey
Встал на лапы
Сообщения: 123
Зарегистрирован: Ср май 16, 2012 20:44:38
Откуда: Харків-Україна.

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

Сообщение shalfey »

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

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