Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Частотомер
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Sneg_87
что есть в наличии:
отладочная плата AT91SAM7A3-EK, среда разработки IAR, такс еще есть JTAG, а остальное вроде генератора, COM-порта и проводов думаю не так существенно.

Объясняю ситуацию smile.gif Необходимо разработать алгоритм по измерению частоты (попросту частотомер). В институте дело с МК обстояло худо (одна всего дисциплина на обучении).

Из прочитанного на форумах и найденного в интернете, понял что для измерения частоты необходимо применение таймеров, а также АЦП для оцифровки входного сигнала. Частота измеряется с точностью 0,1 Гц, время измерения не более 100мс, в сигнале присутствует несколько шумов временных и амплитудных. Диапазон частот до 6,5 кГц.

Во-первых, хотелось бы убрать из сигнала постоянную состовляющую, насколько помню сделать можно с помощью цифровых фильтров. Вопрос в том каких, можно ли по другому убрать постоянную сост. сигнала?
Во-вторых, вопрос по алгоритму: сколько таймеров потребуется для измерения частоты. В какой книжке мона найти описание цифровых алгоритмов измерения частоты? Найденное мной в сети - описание МК, пару книжек по МК вообщем.
В-третьих, скажем частоту успеть померить надо за 0,1c, ну понятно будет есть частота равна 5кГц - будет несколько периодов, но в голове моей не помещается как можно за тоже время измерить скажем частоту 1Гц - не успеет же МК. Объясните, пожалуйста, как!
akl
Здравствуйте. Посмотрите эту веточку
http://electronix.ru/forum/index.php?showtopic=29796
Sneg_87
для измерения частоты необходимо два счетчика, режим их работы - захват? или один в режиме генератора, а другой на захват.
akl
В принципе, достаточно 1 таймера, имеющего прерывания по захвату и по переполнению. Числом переполнений определяете требуемое время измерения, а захватами- начало и конец счета (программным счетчиком) целого числа периодов измеряемой частоты. Это если делать методом "захвата". Например, так сделано здесь.
http://radioded.ru/index.php?option=com_co...1&Itemid=49
Если делать методом "временных ворот", то придется делать на двух таймерах. Один для формирования базы времени, другой для счета периодов измеряемой частоты.
Sneg_87
Подскажите, пожалуйста, последовательность действий при подключении в проекте IAR библиотеку?
Как делаю я: в листинге пишу строчку #include "conio.h" и при вызове свойств проекта нажимаю на Add->Add Files... далее выбираю файл.
Sneg_87
как проверить что прерывание по захвату произошло, в каком регистре у ARM можно найти это отражение?
aaarrr
Цитата(Sneg_87 @ Oct 19 2009, 13:49) *
как проверить что прерывание по захвату произошло, в каком регистре у ARM можно найти это отражение?

В TC_SR. Только не забывайте, что статусы сбрасываются при чтении.
Sneg_87
2 aaarrr Спасибо за ответ
Подскажите с помощью чего можно убрать постоянную составляющую из сигнала Uпост (на рисунке). Насколько знаю цифровая фильтрация в этом может помочь?
Sneg_87
у таймера есть регистр (IDR) запрещения прерываний от канала ТС, при конфигурации таймера я разрешил прерывания по захвату и переполнению. при вызове функции:

void DISABLE_INTERRUPT (AT91PS_TC pTc)
{
pTc->TC_IDR = 0x28;
}

будут запрещены все прерывания или по захвату?
aaarrr
Цитата(Sneg_87 @ Oct 21 2009, 13:48) *
будут запрещены все прерывания или по захвату?

Будут запрещены LDRAS: RA Loading и CPBS: RB Compare.

P.S. Старайтесь пользоваться именоваными идентификаторами для битов, запись типа Reg = 0xabcd - потенциальный источник грабель.
Sneg_87
Видимо не померить мне этими методами сигнал, который прикрепленн к #8 моему посту. Ведь сигнал не логический, а сложной формы.

Цитата(aaarrr @ Oct 21 2009, 16:23) *
Будут запрещены LDRAS: RA Loading и CPBS: RB Compare.

P.S. Старайтесь пользоваться именоваными идентификаторами для битов, запись типа Reg = 0xabcd - потенциальный источник грабель.

А по совпадению с RC?
aaarrr
Цитата(Sneg_87 @ Oct 21 2009, 22:39) *
Видимо не померить мне этими методами сигнал, который прикрепленн к #8 моему посту. Ведь сигнал не логический, а сложной формы.

Смотря что нужно измерять. Но сигнал, естественно, так или иначе придется сначала облечь в цифровую форму.

Цитата(Sneg_87 @ Oct 21 2009, 22:39) *
А по совпадению с RC?

По совпадению RC не будут.
Sneg_87
Цитата(aaarrr @ Oct 22 2009, 00:49) *
Смотря что нужно измерять. Но сигнал, естественно, так или иначе придется сначала облечь в цифровую форму.

Частоту сигнала необходимо померить, данные - оцифрованное напряжение на ацп, а не меандры.
Как применить таймеры для измерения сложного сигнала у меня пока в голове не укладывается ввиду малого опыта. Алгоритм предложенный =GM= читал не один раз
Lotor
Цитата(Sneg_87 @ Oct 22 2009, 06:41) *
Частоту сигнала необходимо померить, данные - оцифрованное напряжение на ацп, а не меандры.
Как применить таймеры для измерения сложного сигнала у меня пока в голове не укладывается ввиду малого опыта. Алгоритм предложенный =GM= читал не один раз

Ну можно даже и без таймеров померить частоту, только с помощью АЦП. Реализовать программно компаратор ничего сложного - сравнивать текущее и прошлые результаты измерения, ловля "смену знака". Определение производной, экстремумов помните? Ну вот, определив по смене знака максимумы и минимумы можно определить и частоту сигнала.
Только проще все же с помощью детекторов нуля привести сигнал к тому, что словит Ваш микроконтроллер и посчитать таймерами.
Sneg_87
Цитата(Lotor @ Nov 3 2009, 13:50) *
Ну можно даже и без таймеров померить частоту, только с помощью АЦП. Ну вот, определив по смене знака максимумы и минимумы можно определить и частоту сигнала.

В целом так и получается, правда смотрю не максимум и минимум у сигнала, а начинаю отсчет периода с точки пересечения среднего значения сигнала.
Для статических данных проводил и медианную фильтрацию и поиск экстремумов-работает просто на "УРА". Как перехожу к системе реального времени, медианная фильтрация искажает сигнал более существенно чем имп. помехи. Макс и мин тож не всегда получается словить smile.gif

Частоту с усреднением за 10 периодов я начал мерить, но сейчас у меня "нога застряла" на другой ступени лестницы. Сигнал у меня идет от низкочастотного генератора на ножку порта ввода-вывода, после идет оцифровка (на АЦП) и вычисление частоты. Так вот, как сделать, чтобы при выключении генератора можно было определить, что сигнал синусоиды не поступает на PIO?
ЗЫ может в регистрах ПВВ, может в AIC, и др. вообщем много пересмотрел и не нашел sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.