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

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

Сообщение Galizin »

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

Сообщение scorpi_0n »

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

Сообщение ncp1400 »

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

Сообщение scorpi_0n »

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

Сообщение Galizin »

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

Сообщение scorpi_0n »

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

Сообщение Galizin »

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

Сообщение scorpi_0n »

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

Сообщение Galizin »

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

Сообщение scorpi_0n »

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

Сообщение 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

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

[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;
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

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

Сообщение shalfey »

PWM input mode

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

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

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


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

Сообщение akl »

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

Сообщение dosikus »

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

Сообщение akl »

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

Сообщение shalfey »

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

Сообщение akl »

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

Сообщение shalfey »

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

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