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

Re: STM32 - частотомер.

Пн июл 16, 2012 15:45:58

Леонид Иванович писал(а):
Мрак мрачный. Так Вы никогда точности не получите. Хотя бы из-за непостоянного значения interrupt latency. А если обработка прерывания будет задержана другим прерыванием? Используйте аппаратный захват и метод обратного счета.


В STM32 фиксированный по времени вход и выход из прерывания, если нет более приоритетного.
Вход в прерывание на любом такте, длина входа и выхода 12 тактов.

Re: STM32 - частотомер.

Пн июл 16, 2012 15:47:12

какая разница если захват аппаратный

Re: STM32 - частотомер.

Пн июл 16, 2012 22:58:24

makser писал(а):В STM32 фиксированный по времени вход и выход из прерывания


Пусть так, STM32 я совсем не знаю. Но все равно здесь все сосредоточились на методе прямого счета.

qwerky писал(а):какая разница если захват аппаратный


Так народ не хочет использовать аппаратный захват.

Re: STM32 - частотомер.

Чт ноя 01, 2012 22:58:46

Применение захвата даёт вменяемые результаты только на низких частотах...

Игрался как-то на эту тему с STM32F0XX... У него TIM2 32-ух разрядный... Подавал до 24МГц, при 48МГЦ тактовой, на вход ETR TIM2... всё было зашибись...
Выше не пробовал...
Могу только сказать, что всё, практически, было хардварным... кроме начальной настройки периферии и BIN2BCD, которая в вечном цикле гнала данные в буфер 8-ми разрядного LED... Прерывания не использовались... Один таймер TIM17 дёргал DMA для индикации... TIM1 в режиме Master выдавал секундные импульсы на TIM2, который был настроен как Slave mode: External Clock mode 2 + gated mode... TIM2 осуществлял подсчёт импульсов по входу ETR...
В принципе... и всё... Ничего сложного там нет...

Re: STM32 - частотомер.

Пт ноя 02, 2012 12:17:17

HHIMERA писал(а):Применение захвата даёт вменяемые результаты только на низких частотах...

Игрался как-то на эту тему с STM32F0XX... У него TIM2 32-ух разрядный... Подавал до 24МГц, при 48МГЦ тактовой, на вход ETR TIM2... всё было зашибись...
Выше не пробовал...
Могу только сказать, что всё, практически, было хардварным... кроме начальной настройки периферии и BIN2BCD, которая в вечном цикле гнала данные в буфер 8-ми разрядного LED... Прерывания не использовались... Один таймер TIM17 дёргал DMA для индикации... TIM1 в режиме Master выдавал секундные импульсы на TIM2, который был настроен как Slave mode: External Clock mode 2 + gated mode... TIM2 осуществлял подсчёт импульсов по входу ETR...
В принципе... и всё... Ничего сложного там нет...

поделитесь пожалуйста наработками, то же интересно "поиграться" .
Только начинаю осваивать STM32, практика поспособствует лучшему изучению. :beer:

Re: STM32 - частотомер.

Пт ноя 02, 2012 17:02:05

Та какие там наработки...
Изначально это был тест STM32F0 на предмет некоторых нюансов и возможностей... в частности DMA и так, по мелочам...
Т.е. ... о частотомере первоначально и мыслей не было... я не собирался его делать... это было побочным продуктом и результатом любопытства... :))
Не было схемы, монтажки, платы, корпуса... была только STM32F0 Discovery и 9-ти разрядный LED индикатор (9-ый разряд не использовался) с полки...
Мне нужен был только один таймер способный дёргать DMA, и всё... Залез в даташит, увидел, что TIM2 32-ух разрядный, ну и... получился "частотомер"... :))
После чего всё успешно перекочевало в разобранном виде обратно на полку...

Re: STM32 - частотомер.

Пт ноя 23, 2012 10:15:21

HHIMERA писал(а):Применение захвата даёт вменяемые результаты только на низких частотах...


Метод обратного счета хорош тем, что относительная погрешность измерения не зависит от измеряемой частоты, а только от измерительного интервала и опорной частоты.

Re: STM32 - частотомер.

Пт ноя 23, 2012 11:56:32

Только толку с этого никакого...

Re: STM32 - частотомер.

Пт ноя 23, 2012 13:13:45

Поясните? Этот метод применяется в большинстве современных промышленных частотомеров, их разработчики почему-то видят толк.

Re: STM32 - частотомер.

Пт ноя 23, 2012 14:33:06

"Обещаю говорить ИМХО, только ИМХО, и ничего кроме ИМХО!"(С)
Я не являюсь разработчиком современных частотомеров... и быть может мы говорим о разных вещах...
Поэтому я и написал на основании своего опыта и "случайного частотомера на STM32F0XX":
Применение захвата даёт вменяемые результаты только на низких частотах...

На частотах в несколько МГц результаты просто удручающие... по сравнению с "классическим" методом...

Re: STM32 - частотомер.

Пт ноя 23, 2012 15:49:30

Ну почему "удручающие". "Классический" частотомер при времени измерения 1,(0) сек измерит частоту 10МГц с погрешностью +/-10Гц; частотомер по "методу захвата" при том же времени измерения и частоте тактирования 10МГц +/-1Гц. Другое дело, что это сходу не у всех получается. Есть еще полезные моменты "метода захвата" - это возможность применения любых кварцев и довольно свободный выбор времени измерения. Попробуйте, например, сформировать интервал измерения 1,(0) сек при имеющемся кварце 10'003'857,197Гц. По "методу захвата" такой кварц запросто подойдет.

Re: STM32 - частотомер.

Пт ноя 23, 2012 15:59:58

HHIMERA писал(а):На частотах в несколько МГц результаты просто удручающие... по сравнению с "классическим" методом...


Метод прямого счета (который Вы называете "классическим") имеет уменьшающуюся относительную погрешность измерения с ростом частоты. Метод обратного счета (reciprocal counting) имеет постоянную относительную погрешность измерения. При равных измерительных интервалах оба метода дадут одинаковую погрешность при значении измеряемой частоты, равном значению опорной. При измерении частот выше опорной метод прямого счета дает лучшие результаты. Но при построении частотомеров на "голом" микроконтроллере речь не идет об измерении частот выше половины тактовой из-за синхронизаторов на входах. Поэтому метод обратного счета будет всегда иметь преимущество.

akl писал(а):Ну почему "удручающие". "Классический" частотомер при времени измерения 1,(0) сек измерит частоту 10МГц с погрешностью +/-10Гц; частотомер по "методу захвата" при том же времени измерения и частоте тактирования 10МГц +/-1Гц.


Ваш пример неправильный. В таких условиях оба метода дадут одинаковую погрешность ±1 Гц. Но если рассматривать входную частоту, скажем, 5 МГц, то метод обратного счета будет в два раза точнее.

akl писал(а):Есть еще полезные моменты "метода захвата" - это возможность применения любых кварцев и довольно свободный выбор времени измерения.


А кто мешает при прямом счете выбрать любой кварц и любой измерительный интервал? Потом нужно будет лишь результат умножить на коэффициент - и всё.

Re: STM32 - частотомер.

Пт ноя 23, 2012 16:26:05

Вот не пойму, причем тут STM32?
Частоту сигнала можно мерять 2-мя способами. Считаем измеряемую частоту постоянной. Иначе разговор будет "ни о чем".
1 - прямой способ. Меряется именно частота как отношение количества импульсов к времени измерения.
Считаем количество импульсов за выбранный период времени. Хорош для относительно больших частот, плох для низких. Пример "на пальцах": период 1 сек. Если частота > 1000 кГц, то и точность выше 0.1 %. Точность определяется отношением периода измерения к периоду сигнала. Больше частота сигнала - выше точность при том же периоде измерения. А вот для получения приемлемой (0.1% например) точности - для низких частот период измерения становится неприемлемым :). Для 100 Гц -1 кГц например - 10 сек надо. Чтобы отличить 100 Гц от 100.1 Гц.
2 - обратный способ. Меряется длительность импульса, а частота определяется как обратная величина.
Считаем, за какое время пройдет выбранное количество импульсов. Хорош наоборот для относительно низких частот, плох для высоких. Поскольку точность измерения времени определяет точность результата. Пример "на пальцах": количество импульсов - 1. Шаг квантования времени - 1 мкС. Тогда для точности 0.1% период должен быть больше, чем 1 мкС*1000 = 1 мС, т.е. частота - ниже 1 кГц. Увеличиваем количество импульсов - увеличиваем точность и время измерения. Точность - отношение шага квантования к частоте сигнала * кол-во импульсов.
Т.е. в результате - при изменении частоты сигнала от очень низких значений до высоких и фиксированных времени измерения и шаге квантования времени на очень низких частотах у 2 способа наилучшая точность, у 1 - никакая, дальше у 1 способа точность растет, у 2-го падает, в конце (на пределе разрешения - максимум частоты) - у 1 способа точность максимальная, у 2-го никакая.
А будет время измерения (1 способ) или количество импульсов (2 способ) отсекаться прерываниями или как-то по-другому - по большому счету неважно.
У обоих способов метод повышения точности фактически одинаков. Увеличиваем время измерения. Только для 1 способа это нужно для уменьшения измеряемой частоты при заданной точности, а у 2-го - наоборот для увеличения измеряемой частоты.

Re: STM32 - частотомер.

Пт ноя 23, 2012 17:26:50

SergeBS писал(а):Вот не пойму, причем тут STM32?

А почему нет???
Т.е. в результате - при изменении частоты сигнала от очень низких значений до высоких и фиксированных времени измерения и шаге квантования времени на очень низких частотах у 2 способа наилучшая точность, у 1 - никакая, дальше у 1 способа точность растет, у 2-го падает, в конце (на пределе разрешения - максимум частоты) - у 1 способа точность максимальная, у 2-го никакая.

Именно такие результаты я и получил... исходя их своих знаний и опыта...

Но подозрения были... что что-то не так:
и быть может мы говорим о разных вещах...

Поэтому фраза:
Леонид Иванович писал(а):Но если рассматривать входную частоту, скажем, 5 МГц, то метод обратного счета будет в два раза точнее.

... мне не совсем понятна... т.к. о каком новейшем способе идёт речь мне неведомо... здесь я не в теме... но в теме STM32... :))
Вот так всегда... "Низы не хотят (делать частотомер), а верхи не могут."(С)
:))

Re: STM32 - частотомер.

Пт ноя 23, 2012 18:31:25

SergeBS писал(а):Т.е. в результате - при изменении частоты сигнала от очень низких значений до высоких и фиксированных времени измерения и шаге квантования времени на очень низких частотах у 2 способа наилучшая точность, у 1 - никакая, дальше у 1 способа точность растет, у 2-го падает, в конце (на пределе разрешения - максимум частоты) - у 1 способа точность максимальная, у 2-го никакая.


Выводы неправильные. При фиксированном времени измерения и фиксированном шаге квантования (фиксированной опорной частоте) точность у способа 2 будет неизменной для любой измеряемой частоты. Другое дело, что при входной частоте больше опорной частоты способ 1 по точности обгонит.

HHIMERA писал(а):"Низы не хотят (делать частотомер), а верхи не могут."(С)


Похоже, не хотят не только делать частотомер, но даже почитать о методах измерения частоты, а литературы на эту тему в Сети море.

Re: STM32 - частотомер.

Пт ноя 23, 2012 18:47:44

Леонид Иванович писал(а): а литературы на эту тему в Сети море.

Здесь два варианта... либо литература никудышняя, либо оно действительно мало кому надо и мало кому интересно...

P.S: Леонид Иванович, извиняюсь если где что не так сказал... но не проникся я этой темой как Вы... может поэтому мне некоторые вещи и непонятны...

Re: STM32 - частотомер.

Пт ноя 23, 2012 19:15:57

Леонид Иванович писал(а):Ваш пример неправильный.
Да, конечно, я ошибся. :oops:
Леонид Иванович писал(а):А кто мешает при прямом счете выбрать любой кварц и любой измерительный интервал? Потом нужно будет лишь результат умножить на коэффициент - и всё.
Ничего не мешает, но назвать "классическим" уже, наверно, нельзя.
HHIMERA писал(а):...либо оно действительно мало кому надо и мало кому интересно...
Так и есть. К сожалению.

Re: STM32 - частотомер.

Пт ноя 23, 2012 19:47:17

HHIMERA писал(а):P.S: Леонид Иванович, извиняюсь если где что не так сказал... но не проникся я этой темой как Вы...


Извиняться не за что. Почему я влез в это обсуждение - Ваше представление о методе обратного счета ошибочное. Такое впечатление, что Вы имеете в виду измерение одного периода сигнала методом заполнения опорной частотой. Возможно, виновата русскоязычная терминология. На самом деле метод reciprocal counting даёт значительные преимущества, и если когда-нибудь появится задача построить измеритель частоты, это нужно иметь в виду. Присоединяю рекламный буклет, где рассмотрена эволюция частотомеров.
Вложения
Modern Frequency counting principles.pdf
(885.66 KiB) Скачиваний: 756

Re: STM32 - частотомер.

Пт ноя 23, 2012 20:59:04

Леонид Иванович писал(а): Такое впечатление, что Вы имеете в виду измерение одного периода сигнала методом заполнения опорной частотой.

Ну да...
На самом деле метод reciprocal counting даёт значительные преимущества

Всё... теперь понял о чём речь... :))

Спасибо!!!
Как нибудь подумаю на досуге... прикину что к чему...

Re: STM32 - частотомер.

Сб ноя 24, 2012 18:12:12

Леонид Иванович писал(а):Выводы неправильные. При фиксированном времени измерения и фиксированном шаге квантования (фиксированной опорной частоте) точность у способа 2 будет неизменной для любой измеряемой частоты.

Формулировка неправильная. У 2 способа фиксировать время измерения по самому его определению (измеряется период) невозможно. И соответственно утверждение о точности при этом фиксировании никакого смысла не имеет. Пример "от противного": зададим допустим время измерения 1 сек. Тогда для 1 кГц - это измерение времени 1000 периодов, а для 1 МГц - измерение времени 1000000 периодов. Получаем - чтобы иметь фиксированное время измерения надо знать период измеряемой частоты и изменять количество измеряемых периодов.
Повторю:
1 способ - прямой. Фиксируется время измерения, считается количество периодов измеряемой частоты. Отношение количества периодов (ПЕРЕМЕННОГО) к времени измерения (ФИКСИРОВАННОМУ) - частота.
2 способ - обратный. Фиксируется КОЛИЧЕСТВО измеряемых периодов. Считается время, за которое это количество прошло. Отношение количества периодов (ФИКСИРОВАННОГО) к времени измерения (ПЕРЕМЕННОМУ) - частота.
Соответственно не надо путать, при каком способе что постоянно, а что измеряется.

HHIMERA писал(а):... мне не совсем понятна... т.к. о каком новейшем способе идёт речь мне неведомо...

Да нет никакого "новейшего способа". Обратным отсчетом просто задается количество измеряемых периодов. И меряется время.

Как ни хитри, а сущность одна:
- при больших частотах нужно мерять количество импульсов для высокой точности ("на пальцах" +- 1 импульс, если их насчитано 1000 - это точность 0.1%)
- при больших периодах нужно мерять период для высокой точности ("на пальцах": +- 1 мкС, если намеряно 1000 мкС - это точность 0.1%)
Что больше, то и меряем. Хитростями типа увеличение времени измерения (для 1) или количества измеряемых периодов (для 2) просто делаем измеряемое побольше.
В рекламке швед как раз увеличивает точность 2 способа на больших частотах увеличением количества импульсов, для которых меряется период. На стр. 10 это отчетливо изображено.
Самое "смешное" - рассуждения о 10-12 цифровом разрешении и НИ СЛОВА, а где найдется источник опорного сигнала с такой стабильностью (10-10..10-12). "В каждый частотомер - водородный эталон!" Пустяк вопрос - вшивые сто баксов :).
Ответить