|
Измерение частоты, алгоритм |
|
|
|
Mar 1 2006, 18:48
|
Группа: Новичок
Сообщений: 13
Регистрация: 2-07-05
Из: Киев
Пользователь №: 6 471

|
Подскажите пожалуйста алгоритм измерения частоты микроконтроллером(AT90S2313). А именно как принять частоту до нескольких МГц, с точностью до 1Гц ??
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Mar 2 2006, 00:29
|
Группа: Новичок
Сообщений: 13
Регистрация: 2-07-05
Из: Киев
Пользователь №: 6 471

|
T1-двухбайтный, т.е. max счёт будет 65535Гц за 1с.
|
|
|
|
|
Mar 2 2006, 05:18
|

Частый гость
 
Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614

|
только вчера тахометр писал  -- запускаю прерывание по переполнению дабы получить управление каждые 100 Гц. -- запускаю pragma на внешнее прерывание int0, в котором просто тупо i++ -- когда приходит прерывание от таймера, просто вывожу i на дисплей после этого i=0 -- всё по кругу  главное! прескалер и коефициент (слово-то какое) для кварца посчитать и настроить таймер -- см аттач (протеус, иар)
Прикрепленные файлы
taho.rar ( 47.42 килобайт )
Кол-во скачиваний: 306
--------------------
нет ничего невозможного, есть трудные пути... других не ищем
|
|
|
|
|
Mar 2 2006, 13:05
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-04-05
Пользователь №: 4 598

|
Прошу прощения. Хочу задать этот же вопрос в несколько другом ракурсе. Задача таже - измерение частоты. Контроллер тот же - ат90s2313. Пожелания те же: 1. Точность измерений. 2.F верх. еденицы МГц. А теперь вопросы: 1.Зависит ли от F кварца F верх (для прямого метода отсчета).? 2.Возможно ли для решения данной задачи использовать прямой метод отсчета частоты и какие при этом могут быть ограничения? 3.С точки зрения точности что предпочтительней прямой или косвенный отсчет?
|
|
|
|
|
Mar 2 2006, 15:21
|
Группа: Новичок
Сообщений: 13
Регистрация: 2-07-05
Из: Киев
Пользователь №: 6 471

|
[/quote] считайте еще количество прерываний по переполнению. [/quote] Наверное так и сделаю
|
|
|
|
|
Mar 2 2006, 20:01
|
Группа: Новичок
Сообщений: 13
Регистрация: 2-07-05
Из: Киев
Пользователь №: 6 471

|
Цитата(WHALE @ Mar 2 2006, 23:54)  а почему at90?их вроде и не выпускают.Делай на tiny2313,она до 20мгц. До 20Мгц меряет? Разберусь с at90, и думаю перейти на ATMega.
|
|
|
|
|
Mar 3 2006, 03:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Цитата(defunct @ Mar 3 2006, 06:12)  Поставьте внешний делитель "на много", захватывайте импульсы аналоговым компаратором по Timer Capture и меряйте их длительность, будет вам 1Ghz с точностью до 0.01 Гц  если найдете такие быстродействующие элементы.. К примеру у серии К1533 кажется быстродействие до 100Mhz, можно сделать делитель на ней будет у вас частотомер до ~70Mhz. AVR имеют синхронные счетчики, измерять можно максимально Fmax = Fbq/2.5. Ставить внешний делитель "на много" - решение корявое, т. к. на выходе такого делителя будет уже сигнал с утраченной точностью. Например, для делителя на 250, погрешность будет такая же. Не для всех применений это приемлемо. Лучше использовать метод досчета. Суть метода в неоходимости уметь точно прочитать содержимое счетчика-предделителя в данный момент, чтобы корректно вычислить измеряемую частоту.
|
|
|
|
|
Mar 7 2006, 15:51
|
Группа: Новичок
Сообщений: 13
Регистрация: 2-07-05
Из: Киев
Пользователь №: 6 471

|
Не совсем разобрался с приоритетом рываний, от сюда вопросы: -если во время обработки прерывания от Т0, произойдет прерывание от Т1, как поведёт себя программа, и куда вернётся после подпрограммы обработки прерывания Т1 ?? -и тот же вопрос, но если во время обработки прерывания от Т1, произойдет прерывание от Т0 ??
Сообщение отредактировал Kotjara - Mar 7 2006, 15:53
|
|
|
|
|
Mar 22 2006, 07:26
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 3-03-05
Пользователь №: 3 055

|
В журнале "Схемотехника"' №5 за 2004 год есть статься в которой описывается устройство измерения частоты (автор вроде Николай Заец, ой в имени могу ошибиться). Построено по принципу уже изложенному в данном топике - аналоговый компаратор и таймер. Однако в данном способе есть несколько НО. Главное из них задержка срабатывания компаратора которая для mega составляет 500-750нс. То бишь определять с точостью до 1Гц на частотах в единицы МГц ИМХО не получится. Сам использую данную схему, но рассчитываю частоты до 1-10кГц - мне точнее просто не надо.
Сообщение отредактировал Z0Rk - Mar 22 2006, 07:28
--------------------
Victoria Concordia Crescit
|
|
|
|
|
Mar 22 2006, 13:48
|
Группа: Участник
Сообщений: 14
Регистрация: 18-01-06
Пользователь №: 13 317

|
Вообще-то из официальной документации ATMELа ясно видно, что при входе в подпрограмму прерывания запрещается обработка любых других прерываний, если не указано обратно. НО контроллер запоминает какие были прерывания в момент запрещения.
|
|
|
|
|
May 6 2006, 07:07
|
Участник

Группа: Новичок
Сообщений: 42
Регистрация: 12-03-06
Пользователь №: 15 158

|
Расскажите попопулярно о методе досчета предварительного делителя (алгоритм досчета).
|
|
|
|
|
May 6 2006, 19:01
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 30-11-05
Из: С-Пб
Пользователь №: 11 619

|
я конечно не супер спец как некоторые может так реализовать: -таймер 0 запустить на отсчет времени скажем 1 секунда -- прерывания от таймера0 защелкивают данные в регистре = значение таймера1+переполнение -прерывания таймер1 переполнения добовляют к long регистру 0х1000 частота равна long регистр + значение таймера1 при таком измерении(если все реализовано максимально быстро(код маленький) получится погрешность около 320гц, толи при 50МГц толи при 20МГц, покрайне мере такой способ позволял измерить до 2 МГц с погрешностью около 16герц, кому интересно может посчитать сам. Максимальная частота измерения = максимальной частоте работы таймера1. Для измерения частоты скажем 100(150)МГц нужен тригер вроде 1554ТВ1 (если интересно уточню) другая не катит. Суммарная погрешность будет равна погрешности кварца+ длинна проги до считывания данных, а если использовать внешнии опорный импульс нужно по его фронту блокировать счетный вход перед контроллером(реакция на прерывание 2+2такта минимум да на код погрешность выростет) и чтоб контроллер после окончания защелкивания данных сам разрешил повторный отсчет...
|
|
|
|
|
May 7 2006, 19:52
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 30-11-05
Из: С-Пб
Пользователь №: 11 619

|
Цитата(prottoss @ May 7 2006, 21:20)  Привет всем! А еще есть метод сравнения частот http://roknroll.narod.ru/ALTERA/Chastotomer.htmhttp://cepera.h1.ru/isa/2_1_12.htmОчень интересный метод. Правда, необходима ПЛИС. Никто не пробовал реализовывать? как я понял способ не очень сложный и все зависит от максимальной частоты и точности. При частотах в районе кГц можно и досчетным методом (считать кол-во опорных импульсов за 1 или несколько входных импульсов) выше точность будет заметно падать, для МГц проще кол-во импульсов за периуд также можно для вычисления не целых периудов совместить оба способа только 1ый способ прировнять по периуду ко 2у, но как я понимаю нет необходимости знать у вас 100МГц или 100 000 000,5Гц разница не большая. Таким образом можно в разумных пределах обойтись и MCU (давным давно была схемка с програмкой для частотамера до 50МГц на контроллере ВЕ1) если есть желание выше то либо брать проц мощнее либо плис с параметрами подходящими.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|