Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как определить частоту сигнала, используя микроконтроллер MSP430F1611
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
EasenMan
Не могу определить частоту сигнала с датчика. Датчик мереет ускорение, на выходе у него цифровой сигнал. Максимальная частота дискретизации 3200 Гц. Полезный сигнал находится в диапазоне 0 - 80Гц. В схеме используется микроконтроллер MSP430F1611, который собственно и измеряет частоту. Раньше использовался аналоговый датчик сигнал с которого оцифровывался с частотой 10 кГц. Накапливался буфер с 2000 отсчетами, отфильтровывался и пропускался через компаратор который детектировал переходы через 0. Вобсчем то частоту определял достаточно верно, но с переходом на новый датчик такой алгоритм не устраивает. Из за малой частоты дискретизации возникает большие погрешности. Как более точно рассчитать частоту сигнала?
rezident
Для определения периода используйте любой из двух таймеров в режиме захвата (capture). За подробностями использования обратитесь к User's Guide. Могу порекомендовать для расширения разрядности 16-и разрядных таймеров использовать 32-х битную переменную, которую инкрементировать в прерывании от переполнения таймера на величину его разрядности (65536). Сумма этой переменной и регистра CCRx даст вам возможность определять период довольно точно, даже для низкочастотных сигналов при высокочастотном тактировании таймера. На, а как пересчитать период в частоту, думаю, вы и сами знаете wink.gif
Кстати, нижний диапазон 0Гц не бывает. Всегда есть какая-то минимальная частота от значения которой выбирается период наблюдения. Потому как частоту 0Гц вы должны наблюдать бесконечно большое время, чтобы наконец сделать вывод, что частота именно 0Гц. laughing.gif
EasenMan
rezident
Спасибо за ответ, только я наверно неправильно задачу поставил, или вы меня не поняли. Сигнал с датчика приходит по интерфейсу SPI. В самом датчике Имеется АЦП с максимальной частотой дискретизации 3200Гц. Тоесть я накапливаю отсчеты некого сигнала (синусоида, с шумами, которая проходит простенький НЧ цифр. фильтр), а потом с помощью этого буфера надо рассчитать период этого сигнала. Дык вот тут то и вся загвоздка. Этот вопрос скорей всего к математике относится smile.gif . Так что таймер тут не поможет unsure.gif
MrYuran
Если по математике - надо засекать моменты перехода через ноль (производная равна нулю) и высчитывать период (или несколько периодов, потом усреднить).
Если отсчёты делаются с калиброванной частотой, никаких проблем не вижу.

Хотя вся система какая-то странноватая (мягко говоря).
Я бы лучше вместо АЦП компаратор поставил
EasenMan
MrYuran
Ну я так и делаю, ток опять же говорю, частота маловата, а увеличить не могу. Думаю может провести какую аппроксимацию в точках ближайших к 0. laughing.gif . Ну а в системе нет ничего санного, к МК подключен акселерометр ADXL345, с целью измерения вибрации rolleyes.gif
rezident
EasenMan, действительно, ваш вопрос относится к методам обработки сигнала и MSP430 тут не при делах. Если только учитывать его ограниченные ресурсы при выборе методов фильтрации.
SSerge
Цитата(EasenMan @ Jul 16 2010, 16:04) *
MrYuran
Ну я так и делаю, ток опять же говорю, частота маловата, а увеличить не могу. Думаю может провести какую аппроксимацию в точках ближайших к 0.

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

Нужно только для начала хотя бы грубо оценить период чтобы попасть в окрестность, далее медленные изменения частоты уже можно отслеживать системой типа ФАПЧ.

AlexU
Цитата(rezident @ Jul 16 2010, 15:01) *
EasenMan, действительно, ваш вопрос относится к методам обработки сигнала и MSP430 тут не при делах. Если только учитывать его ограниченные ресурсы при выборе методов фильтрации.

Точно, можно и спектр посчитать. Хотя так и не понятно какая нужна погрешность. Если диапазон 5..95 Гц и погрешность 0.1 Гц, то Mega8 (ближайший из авр-ок к MSP430F1611) 12MГц считает ~2.5 сек, а LPC1114 считает ~0.3 сек
EasenMan
Диапазон в районе 10-80 Гц. Допустима погрешность 0.1 Гц. Скорость обработки критична, т.к. информация выводится на дисплей, с частотой 1 Гц (можно конечно и увеличить, но не желательно). Попробую использовать систему с ФАПЧ, дабы грубо определить период возможно. Можно конечно определить спектр, но сдесь опыта нет , придется книжки читать smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.