реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Измерение частоты сигнала при помощи ADC
Alkaline2080
сообщение Jan 28 2013, 17:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 29-07-12
Пользователь №: 72 938



Доброго времени суток!

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

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

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


Подскажите пожалуйста как тут действовать.
Решение в лоб дает проблемы на высоких частотах - алгоритм выдает частоту от 1920 до 2020 Гц при истинной 1850.


--------------------
Go to the top of the page
 
+Quote Post
telix
сообщение Jan 28 2013, 17:43
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767



Зачем Вам АЦП. Не важно по какому фронту Вы измеряете частоту, заваленному или крутому. Число периодов в единицу времени будет одно и то же.
И неточность тут может быть либо потому что Ваш процессор не имеет кварца на часах, либо частота входного сигнала "гуляет".
Заваленный фронт в Вашем случае будет влиять на гистерезис компаратора и давать ложные срабатывания. Если все дело в этом, так настройте на срабатывание по заднему фронту и все.
Кроме того ложные срабатывания можно отсекать программно, сделав короткий замер и получив примерную величину периода, затем использовать эту цифру как исходные данные для замера частоты.
Если очень хочется использовать АЦП, то тут все тоже самое только математики больше. Задаете порог срабатывания "вверх" и "вниз".
Скажем порог "вверх" 2.2V, а порог "вниз" 1.0V.
Далее при замере запускаете таймер счетчик, который будет отсчитывать "тики" между отсчетами. Ну и все.
Измеряем входной сигнал. Ждем когда он станет больше порога 2.2V , счетчик тиков запомнили, и установили флаг, далее чтоб он там ни делал ждем когда пересечет порог 1.0V, флаг сбросили, теперь ждем когда опять пересечет порог 2.2V и станет больше. Пересек. Запомнили второе значение счетчика тиков. Вычислили разницу. Прибавилиж в накопительную сумму. Нарастили счетчик периодов на 1. Дальше все повторяется некоторое время. Остановились. Вытаскиваем накопленную сумму и счетчик числа периодов. Делим сумму на число периодов получаем длительность периода в тиках с высокой точностью. Фсе.

Сообщение отредактировал telix - Jan 28 2013, 17:58


--------------------
улыбаемся ...
Go to the top of the page
 
+Quote Post
Alkaline2080
сообщение Feb 7 2013, 12:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 29-07-12
Пользователь №: 72 938



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


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

За совет спасибо!


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 15:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016