Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Измерение частоты сигнала при помощи ADC
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Alkaline2080
Доброго времени суток!

Есть такая вот задачка:

Проц STM 32 F105 RCT6, свободной оперативки не более 2х кБ
Входной сигнал: меандр с сильно заваленным передним фронтом (напоминает лезвие ножа в профиль), задний четкий
Есть канал АЦП с частотой дискретизации 20 кГц
Амплитуда входного сигнала 3 В

Необходимо мерить частоту в диапазоне от 30 Гц до 2 кГц с точностью +- 3 Гц
Для измерения частоты доступен только АЦП


Подскажите пожалуйста как тут действовать.
Решение в лоб дает проблемы на высоких частотах - алгоритм выдает частоту от 1920 до 2020 Гц при истинной 1850.
telix
Зачем Вам АЦП. Не важно по какому фронту Вы измеряете частоту, заваленному или крутому. Число периодов в единицу времени будет одно и то же.
И неточность тут может быть либо потому что Ваш процессор не имеет кварца на часах, либо частота входного сигнала "гуляет".
Заваленный фронт в Вашем случае будет влиять на гистерезис компаратора и давать ложные срабатывания. Если все дело в этом, так настройте на срабатывание по заднему фронту и все.
Кроме того ложные срабатывания можно отсекать программно, сделав короткий замер и получив примерную величину периода, затем использовать эту цифру как исходные данные для замера частоты.
Если очень хочется использовать АЦП, то тут все тоже самое только математики больше. Задаете порог срабатывания "вверх" и "вниз".
Скажем порог "вверх" 2.2V, а порог "вниз" 1.0V.
Далее при замере запускаете таймер счетчик, который будет отсчитывать "тики" между отсчетами. Ну и все.
Измеряем входной сигнал. Ждем когда он станет больше порога 2.2V , счетчик тиков запомнили, и установили флаг, далее чтоб он там ни делал ждем когда пересечет порог 1.0V, флаг сбросили, теперь ждем когда опять пересечет порог 2.2V и станет больше. Пересек. Запомнили второе значение счетчика тиков. Вычислили разницу. Прибавилиж в накопительную сумму. Нарастили счетчик периодов на 1. Дальше все повторяется некоторое время. Остановились. Вытаскиваем накопленную сумму и счетчик числа периодов. Делим сумму на число периодов получаем длительность периода в тиках с высокой точностью. Фсе.
Alkaline2080
Цитата(telix @ Jan 28 2013, 21:43) *
Зачем Вам АЦП. Не важно по какому фронту Вы измеряете частоту, заваленному или крутому. Число периодов в единицу времени будет одно и то же.
И неточность тут может быть либо потому что Ваш процессор не имеет кварца на часах, либо частота входного сигнала "гуляет".
Заваленный фронт в Вашем случае будет влиять на гистерезис компаратора и давать ложные срабатывания. Если все дело в этом, так настройте на срабатывание по заднему фронту и все.
Кроме того ложные срабатывания можно отсекать программно, сделав короткий замер и получив примерную величину периода, затем использовать эту цифру как исходные данные для замера частоты.
Если очень хочется использовать АЦП, то тут все тоже самое только математики больше. Задаете порог срабатывания "вверх" и "вниз".
Скажем порог "вверх" 2.2V, а порог "вниз" 1.0V.
Далее при замере запускаете таймер счетчик, который будет отсчитывать "тики" между отсчетами. Ну и все.
Измеряем входной сигнал. Ждем когда он станет больше порога 2.2V , счетчик тиков запомнили, и установили флаг, далее чтоб он там ни делал ждем когда пересечет порог 1.0V, флаг сбросили, теперь ждем когда опять пересечет порог 2.2V и станет больше. Пересек. Запомнили второе значение счетчика тиков. Вычислили разницу. Прибавилиж в накопительную сумму. Нарастили счетчик периодов на 1. Дальше все повторяется некоторое время. Остановились. Вытаскиваем накопленную сумму и счетчик числа периодов. Делим сумму на число периодов получаем длительность периода в тиках с высокой точностью. Фсе.


Все решилось, бились данные при передачи из АЦП в DMA. Сейчас работает с погрешностью 3 Гц. Для моих задач хватает.

За совет спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.