Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Измерение частоты
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kotjara
Подскажите пожалуйста алгоритм измерения частоты микроконтроллером(AT90S2313).
А именно как принять частоту до нескольких МГц, с точностью до 1Гц ??
beer_warrior
Дык просто - посчитать количество импульсов за определенный период
времени. Чем выше точность, длиннее преобразование.
Для счета и интервала преобразования использовать таймеры -
один ведомый от внешнего источника, другой от кварца.
defunct
Хм требования сильно высокие.. попробуйте подсчет импульсов делать средствами таймера T1, в режиме Input Capture.. Возможно 1-2Mhz и вытянет с заданной точностью (если кварц будет 10Mhz и выше)...

Зы, а может на входе схемы поставить пределитель на 10 или 16, погрешность компенсировать более длительной выборкой.
Kotjara
T1-двухбайтный, т.е. max счёт будет 65535Гц за 1с.
_pv
Цитата(Kotjara @ Mar 2 2006, 06:29) *
T1-двухбайтный, т.е. max счёт будет 65535Гц за 1с.

считайте еще количество прерываний по переполнению.
d71
только вчера тахометр писал smile.gif
--
запускаю прерывание по переполнению дабы получить управление каждые 100 Гц.
--
запускаю pragma на внешнее прерывание int0, в котором просто тупо i++
--
когда приходит прерывание от таймера, просто вывожу i на дисплей
после этого i=0
--
всё по кругу smile.gif
главное! прескалер и коефициент (слово-то какое) для кварца посчитать и настроить таймер
--
см аттач (протеус, иар)
muravei
Этому господину уже предлогалось использовать предделитель как еще дополнительные мл. разряды, и досчитывать его программно.
Думаю, 24 р-р хватит.
Genri
Прошу прощения.
Хочу задать этот же вопрос в несколько другом ракурсе.
Задача таже - измерение частоты.
Контроллер тот же - ат90s2313.
Пожелания те же:
1. Точность измерений.
2.F верх. еденицы МГц.
А теперь вопросы:
1.Зависит ли от F кварца F верх (для прямого метода отсчета).?
2.Возможно ли для решения данной задачи использовать прямой метод отсчета частоты и какие при этом могут быть ограничения?
3.С точки зрения точности что предпочтительней прямой или косвенный отсчет?
Kotjara
[/quote]
считайте еще количество прерываний по переполнению.
[/quote]
Наверное так и сделаю cheers.gif
beer_warrior
2 Genri
все возможно - просто надо найти компромисс между точностью
и скоростью преобразования на заданном железе.
WHALE
а почему at90?их вроде и не выпускают.Делай на tiny2313,она до 20мгц.
Kotjara
Цитата(WHALE @ Mar 2 2006, 23:54) *
а почему at90?их вроде и не выпускают.Делай на tiny2313,она до 20мгц.


До 20Мгц меряет?
Разберусь с at90, и думаю перейти на ATMega.
defunct
Цитата(Kotjara @ Mar 2 2006, 22:01) *
До 20Мгц меряет?
Разберусь с at90, и думаю перейти на ATMega.

Поставьте внешний делитель "на много", захватывайте импульсы аналоговым компаратором по Timer Capture и меряйте их длительность, будет вам 1Ghz с точностью до 0.01 Гц smile.gif если найдете такие быстродействующие элементы.. К примеру у серии К1533 кажется быстродействие до 100Mhz, можно сделать делитель на ней будет у вас частотомер до ~70Mhz.
ivainc1789
Цитата(defunct @ Mar 3 2006, 06:12) *
Поставьте внешний делитель "на много", захватывайте импульсы аналоговым компаратором по Timer Capture и меряйте их длительность, будет вам 1Ghz с точностью до 0.01 Гц smile.gif если найдете такие быстродействующие элементы.. К примеру у серии К1533 кажется быстродействие до 100Mhz, можно сделать делитель на ней будет у вас частотомер до ~70Mhz.


AVR имеют синхронные счетчики, измерять можно максимально Fmax = Fbq/2.5. Ставить внешний делитель "на много" - решение корявое, т. к. на выходе такого делителя будет уже сигнал с утраченной точностью. Например, для делителя на 250, погрешность будет такая же. Не для всех применений это приемлемо. Лучше использовать метод досчета. Суть метода в неоходимости уметь точно прочитать содержимое счетчика-предделителя в данный момент, чтобы корректно вычислить измеряемую частоту.
defunct
Цитата(ivainc1789 @ Mar 3 2006, 05:42) *
Ставить внешний делитель "на много" - решение корявое, т. к. на выходе такого делителя будет уже сигнал с утраченной точностью.

Ой! а куда точность-то денется? цифровой делитель на паре счетчиков потеряет? smile.gif
отмерять длительность нескольких N = 10..20 импульсов, усреднить - 1/T будет частота.
ivainc1789
Цитата(defunct @ Mar 3 2006, 12:20) *
отмерять длительность нескольких N = 10..20 импульсов, усреднить - 1/T будет частота.


Получишь Fin = 1/T [+-] P, где P - коэфф. деления твоего предделителя "на много".
maximka
пусть F1=1МГц F2=1,000001МГц Сделаем делитель на 1024.
Т1=0,001024 с. Т2=0,001023999c. Т3=Т1-Т2=0,000000001c.
Значит Fзаполнения должна быть 1000 МГц.Много.
Сделаем делитель на 65536.
Т1=0,065536 с. Т2=0,06553593c. Т3=Т1-Т2= 0,00000007c.
Значит Fзаполнения должна быть 14285714 Гц. 14,3 МГц. Вполне реально.
А дальше выбираем исходя из условия что проще реализовать
GrayCat
Хмм. Вот на PIC-ах частотомер до 20...50 МГц был очень давно и успешно реализован:

http://ra3rbe.qrz.ru/digiscal.htm или http://www.cqham.ru/digi.htm

Практически, классика.
Kotjara
Не совсем разобрался с приоритетом рываний, от сюда вопросы:
-если во время обработки прерывания от Т0, произойдет прерывание от Т1,
как поведёт себя программа, и куда вернётся после подпрограммы обработки прерывания Т1 ??
-и тот же вопрос, но если во время обработки прерывания от Т1, произойдет прерывание от Т0 ??
beer_warrior
По команде call, адрес возврата заносится в стек, флажок прерывания
сбрасывается и если случается новое прерывание все повторяеться по той же схеме.
В асме приоритетами достаточно легко манипулировать, в С флажки
локальных прерываний и sei могут обрабатываться неявно.
Поэтому рекомендуеться смотреть доку на конкретный компилятор, а еще лучше листинг.
Z0Rk
В журнале "Схемотехника"' №5 за 2004 год есть статься в которой описывается устройство измерения частоты (автор вроде Николай Заец, ой в имени могу ошибиться). Построено по принципу уже изложенному в данном топике - аналоговый компаратор и таймер. Однако в данном способе есть несколько НО. Главное из них задержка срабатывания компаратора которая для mega составляет 500-750нс. То бишь определять с точостью до 1Гц на частотах в единицы МГц ИМХО не получится. Сам использую данную схему, но рассчитываю частоты до 1-10кГц - мне точнее просто не надо.
Pretorianec
Вообще-то из официальной документации ATMELа ясно видно, что при входе в подпрограмму прерывания запрещается обработка любых других прерываний, если не указано обратно.
НО контроллер запоминает какие были прерывания в момент запрещения.
SAU
Расскажите попопулярно о методе досчета предварительного делителя (алгоритм досчета).
Magnum
Чтобы измерить несколько МГц с точностю до Гц нужно иметь очень стабильныю опору с точностью порядка +/- 0,1ppm обычный кварц это врядли обеспечит. Высокостабильные генераторы имеют точноть +/-1..2ppm.
=AK=
Почти наверняка человеку нужна не абсолютная точность измерения, а разрешение. Если нужна именно абсолютная точнось в доли ppm, то проще всего для задания интервала измерения использовать секундные импульсы от GPS.
Magnum
Ну зачем же сразу GPS, антенны эти ставить, погоду хорошую ловить. Можно обойтись обычным рубидиевым генератором.
Rst7
Цитата(Magnum @ May 6 2006, 11:51) *
Ну зачем же сразу GPS, антенны эти ставить, погоду хорошую ловить. Можно обойтись обычным рубидиевым генератором.


А еще проще принимать сигнал эталонных частот, например 50 и 66 кГц - когда-то в журнале "Радио" была схемка простенького приемника... На худой конец для калибровки можно использовать сигналы точного времени по радиотрансляции - это тоже с эталона частоты wink.gif
=AK=
Цитата(Magnum @ May 6 2006, 18:21) *
Ну зачем же сразу GPS, антенны эти ставить, погоду хорошую ловить. Можно обойтись обычным рубидиевым генератором.

Причем здесь погода? И зачем нужен невесть-какой-дорогой рубидиевый генератор, если можно обойтись дешевым GPS-ом?
__nik__
я конечно не супер спец как некоторые может так реализовать:
-таймер 0 запустить на отсчет времени скажем 1 секунда
-- прерывания от таймера0 защелкивают данные в регистре = значение таймера1+переполнение
-прерывания таймер1 переполнения добовляют к long регистру 0х1000
частота равна long регистр + значение таймера1
при таком измерении(если все реализовано максимально быстро(код маленький) получится погрешность около 320гц, толи при 50МГц толи при 20МГц, покрайне мере такой способ позволял измерить до 2 МГц с погрешностью около 16герц, кому интересно может посчитать сам. Максимальная частота измерения = максимальной частоте работы таймера1. Для измерения частоты скажем 100(150)МГц нужен тригер вроде 1554ТВ1 (если интересно уточню) другая не катит.
Суммарная погрешность будет равна погрешности кварца+ длинна проги до считывания данных, а если использовать внешнии опорный импульс нужно по его фронту блокировать счетный вход перед контроллером(реакция на прерывание 2+2такта минимум да на код погрешность выростет) и чтоб контроллер после окончания защелкивания данных сам разрешил повторный отсчет...
prottoss
Привет всем!
А еще есть метод сравнения частот
http://roknroll.narod.ru/ALTERA/Chastotomer.htm
http://cepera.h1.ru/isa/2_1_12.htm
Очень интересный метод. Правда, необходима ПЛИС. Никто не пробовал реализовывать?
__nik__
Цитата(prottoss @ May 7 2006, 21:20) *
Привет всем!
А еще есть метод сравнения частот
http://roknroll.narod.ru/ALTERA/Chastotomer.htm
http://cepera.h1.ru/isa/2_1_12.htm
Очень интересный метод. Правда, необходима ПЛИС. Никто не пробовал реализовывать?

как я понял способ не очень сложный и все зависит от максимальной частоты и точности. При частотах в районе кГц можно и досчетным методом (считать кол-во опорных импульсов за 1 или несколько входных импульсов) выше точность будет заметно падать, для МГц проще кол-во импульсов за периуд также можно для вычисления не целых периудов совместить оба способа только 1ый способ прировнять по периуду ко 2у, но как я понимаю нет необходимости знать у вас 100МГц или 100 000 000,5Гц разница не большая. Таким образом можно в разумных пределах обойтись и MCU (давным давно была схемка с програмкой для частотамера до 50МГц на контроллере ВЕ1) если есть желание выше то либо брать проц мощнее либо плис с параметрами подходящими.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.