Например TDA7294

Форум РадиоКот • Просмотр темы - STM32. Быстрый частотомер. Reciprocal counter.
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб мар 06, 2021 15:03:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 229 ]  1, , , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Чт мар 27, 2014 12:19:01 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
Дано:
1. Датчик у которого на выходе ЧМ сигнал (меандр) частотой 30..300 кГц;
2. Плата STM32F4Discovery (нужна большая внутр частота).
Задача: Получить показания датчика (измерить частоту) 10000 раз в секунду.
Решение.


Исходник main.c
Исходник stm32f4_it.c
Тут есть еще над чем работать...

Литература и ссылки:
1. DataSheet STM32F4;
2. Reference Manual STM32F4
3. соседняя тема "STM32 частотомер", мои сообщения со стр.6

P.S. Буду писать в несколько этапов. И изменять по ходу пьессы.


Последний раз редактировалось kybin Пт мар 28, 2014 10:35:14, всего редактировалось 5 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reprocical counter.
СообщениеДобавлено: Чт мар 27, 2014 12:54:03 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 3
Цитата:
Reprocical counter.
Reciprocal counting - http://www.spectracomcorp.com/Desktopmodules/Bring2Mind/DMX/Download.aspx?EntryId=446&PortalId=0

_________________
С уважением,
Виктор.


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reprocical counter.
СообщениеДобавлено: Чт мар 27, 2014 15:10:31 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
ut1wpr писал(а):

Да уж. Серьёзная ошибка :oops:
За ссыль спасибо.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Чт мар 27, 2014 15:13:09 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
4 знака и 16800 тактов на каждую итерацию... Если устраивает... то почему бы и нет...

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


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Чт мар 27, 2014 17:15:55 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
HHIMERA писал(а):
4 знака...
Это с точностью +-10Гц?
Так и есть, ~


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 14:22:20 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
Изображение


Тов. модератору. :write:


Последний раз редактировалось kybin Пт мар 28, 2014 17:10:36, всего редактировалось 1 раз.

Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 15:10:27 
Друг Кота

Карма: 59
Рейтинг сообщений: 866
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 3884
Откуда: Ижевск
Рейтинг сообщения: 0
Почему TIM4.CNT считает с 1, а не с 0?


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 15:31:05 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
А это точно... Reciprocal counter???

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 17:06:34 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
akl писал(а):
Почему TIM4.CNT считает с 1, а не с 0?
Потому что в 0 сбрасывается по событию Update Generation от TIM1. TIM4 считает фронты.
HHIMERA писал(а):
А это точно... Reciprocal counter???
Без сомнений. New frequency counting principle improves resolution 3.Reciprocal counting.
Изображение, where tc is the time of one clock cycle. MT = measuring time.

На самом деле диаграмма не отображает некоторых деталей процесса.. Но это очень важно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 17:39:51 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Это НЕ Reciprocal counter!!! :))

Должно быть так...

Finput = (Fref * Ninput) / Nref
где Ninput количество входных периодов за определённое время... а Nref - количество референсных периодов за это же время...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 17:55:33 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
HHIMERA писал(а):
Это НЕ Reciprocal counter!!! :))
Должно быть так...
Finput = (Fref * Ninput) / Nref
где Ninput количество входных периодов за определённое время... а Nref - количество референсных периодов за это же время...

Даже не знаю... :)) Чем ваша формула отличается от мной приведенных 2ух? Даже 3ёх - еще одна в коде.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 18:30:28 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Дык... ща ЛИ нарисуется... проведёт экспертизу метОды... и вынесет вердикт... мне лень... 8)

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пт мар 28, 2014 23:56:12 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1018
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Ну так я же не разбираюсь в STM32, поэтому прочитать программу не могу :) По временной диаграмме тоже ничего не понятно. Если бы было описание словами, что делаем шаг за шагом, я бы вынес вердикт.

P.S. Посмотрел немножко программу. Если по каждому фронту входного сигнала генерируется прерывание, так вообще таймера 4 не нужно, входные периоды можно считать программно. Такой частотомер реализуется на чем угодно, был бы только аппаратный захват таймера. Но такой вариант неинтересен, должна быть возможность измерять частоты до 1/2 Fclk.

Ваша формула написана некорректно, так как частота, умноженная на количество входных импульсов (безразмерная величина) и деленная на время даст размерность "секунда в минус второй степени", а никак не частоту. Делить надо на количество импульсов заполнения. Фактически здесь так и есть, но в формуле каким-то образом появилось время.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Сб мар 29, 2014 04:35:05 
Друг Кота

Карма: 59
Рейтинг сообщений: 866
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 3884
Откуда: Ижевск
Рейтинг сообщения: 0
kybin Вот картинка, представляющая метод. В вашем случае, при Fo=168МГц время измерения будет 16'800 тактов, по окончании которых будет последний активный фронт Fx.
Изображение
Вложение:
book3_1.GIF

Взято из книги, выжимку из которой выкладывал здесь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Сб мар 29, 2014 10:34:30 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
akl писал(а):
при Fo=168МГц время измерения будет 16'800 тактов, по окончании которых будет последний активный фронт Fx.

Если я правильно понял "курс ликбеза по Reciprocal counter" от ЛИ... то в данном случае - не более 16'800 тактов...
Т.е. таймер должен пинаться каждые 16'800 тактов... но измерительный интервал должен быть чуть короче... тем более... что на конечный результат это практически не влияет...

Для примера... STM32F0Discovery... 48MHz... древние опыты с Reciprocal counter...
Один из таймеров делит клок на 23...
Fclk = TIM_clk = 48004080 Hz
Fout = TIM_clk / 23 = 2087133,9130434782608695652173913

TIM2_freq = (TIM_clk * cnt_input) / cnt_ref;

=============
tизм = ~1сек
cnt_input _2086860 (видно, что интервал измерения чуть меньше 1 сек.)
cnt_ref __47997780

Частота в отладчике Кейл _2087133.913043
Ручной счёт _____________2087133,9130434782608695652173913

=============
tизм = ~0,9сек
cnt_input _1878174
cnt_ref __43198002

Частота в отладчике Кейл _2087133.913043
Ручной счёт _____________2087133,9130434782608695652173913

=============
tизм = ~1,1сек
cnt_input _2295546
cnt_ref __52797558

Частота в отладчике Кейл _2087133.913043
Ручной счёт _____________2087133,9130434782608695652173913

Как видим... девиации времени измерения практически не влияют на результат... в случае с синхронизированным внутренним сигналом картинка вообще идеальная...
При внешнем несинхронизированном сигнале всё заметно хуже... но результат из разрядной сетки не выходит... точность остаётся в пределах расчётной...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пн мар 31, 2014 09:43:40 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
HHIMERA, а что насчет tизм ~= 100 мкс?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пн мар 31, 2014 10:42:54 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Ну так я же не разбираюсь в STM32, поэтому прочитать программу не могу :) По временной диаграмме тоже ничего не понятно. Если бы было описание словами, что делаем шаг за шагом, я бы вынес вердикт.
Наверное картинка одному мне понятна потому как я ее рисовал :) :(
Шаг за шагом:
I. Настройка TIM4: Предназначен для счета импульсов измеряемого сигнала.
1. Считать внешние передние фронты (External trigger = ETR)
2. Подключить триггер TIM1 для сброса. По событию TIM1_Update счетчик будет сброшен.
II. Настройка TIM1:
1. One pulse mode. Запуск счета по внешнему триггеру (передний фронт измеряемого сигнала). Остановка и сброс по событию Update (CNT==ARR). Это можно сказать синхронизация
2. Захват по внешнему триггеру (передний фронт измеряемого сигнала). Это чтобы узнать tизм
III. Обработка прерывания TIM1_Update
1. Вычиление частоты
fизм = Base freq * Counted input cycles / Counted clock pulses
fизм = F_tim1 * TIM4_CNT / TIM1_CCR1
Вродк бы все.
Леонид Иванович писал(а):
P.S. Посмотрел немножко программу. Если по каждому фронту входного сигнала генерируется прерывание, так вообще таймера 4 не нужно, входные периоды можно считать программно. Такой частотомер реализуется на чем угодно, был бы только аппаратный захват таймера. Но такой вариант неинтересен, должна быть возможность измерять частоты до 1/2 Fclk.
1. исп-ся 2 таймера в связке.
2. прерывание по фронту генерируется для расчета длительности каждого импульса. Забивания их в массив. Вычисления ср. арифметического. Это пережиток прошлых вариаций. Его нужно убрать.
и сделать так:
Код:
void TIM1_UP_TIM10_IRQHandler(void)
{
   TIM1->SR = ~TIM_IT_Update; // сброс флага TIM1_Update
   freqW = HClkFreq * (impCount-1) / TIM1 -> CCR1;
}
Это и вся нагрузка на ядро :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пн мар 31, 2014 10:51:22 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 17, 2014 10:37:29
Сообщений: 28
Рейтинг сообщения: 0
HHIMERA писал(а):
Дык... ща ЛИ нарисуется... проведёт экспертизу метОды... и вынесет вердикт... мне лень... 8)
ага. вон какую петицию накатал... :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пн мар 31, 2014 11:37:38 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 64
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 878
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
kybin писал(а):
2. прерывание по фронту генерируется для расчета длительности каждого импульса. Забивания их в массив. Вычисления ср. арифметического. Это пережиток прошлых вариаций. Его нужно убрать.
и сделать так:...

Это не совсем тот метод о котором говорится - вся фишка в том, чтобы периоды измеряемой частоты считать аппаратно. Вычислять сразу по одному периоду и делать статистику на некотором числе измерений ОДНОГО периода не есть правильно - погрешность в этом случае уменьшаться не будет, вернее будет, но другая. Умозрительно это особенно заметно когда измеряемая частота будет приближаться к "линейке", т.е. к частоте измерительного таймера. В Reciprocal counting увеличение точности достигается накоплением измерительных импульсов за некоторое количество периодов входной частоты. Это число периодов (а также число переполнений измерительного таймера) можно считать в прерывании программно (и тут все понятно, реализация не будет отличаться от реализации на той же avr-ке), либо аппаратно с помощью каскадирования таймеров. Вторая задача, видимо, не слишком очевидно решается в STM, если решается вообще.
Еще есть вторичные нюансы, например введение таймаута, если входная частота отсутствует - чтоб не ждать до бесконечности

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Быстрый частотомер. Reciprocal counter.
СообщениеДобавлено: Пн мар 31, 2014 12:26:44 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
kybin писал(а):
HHIMERA, а что насчет tизм ~= 100 мкс?

А что не так??? Уже всё написали...

Fclk = TIM_clk = 48004080 Hz
Внешняя частота с STM8L151 1000045Hz ...

TIM2_freq = (TIM_clk * cnt_input) / cnt_ref;

=============
tизм = ~0,0001 сек
cnt_input _96 (видно, что интервал измерения чуть меньше 0,0001 сек.)
cnt_ref _4609

Частота в отладчике Кейл _999868.0147537

Премежёвывается с...

=============
cnt_input _96
cnt_ref _4608

Частота в отладчике Кейл _1000085

Если всё правильно считаю... 7 верных цифры - 4 теряем на временном интервале = 3 верных цифры имеются...

Цитата:
вон какую петицию накатал...

Ну да... чоть прорвало...

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 229 ]  1, , , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y