Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Измерване на честота (основи и принципи) 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение Измерване на честота (основи и принципи)
Говорим за честоти от 1Херц до под Мегахерц (даже се съмнявам , че ще стигна 30kHz). / въпреки че ми се иска да говорим и въобще , но считам , че за аналогов сигнал колкото по-конкретно се говри толкова по-добре.

Проблемат за мен е там , че не знам какви неща трябва да се вземат в предвид когато искаш да мериш честота на сигнал, но не искаш да променяш х-ките на сигнала. Т.е какво трябва да осигуриш, за да измериш качествено честота.

Гледам разни честотомери , няколко IC (коя за усилване на сигнала ,коя само за стабилизиране.) + кондензатори и резистори преди да се подаде сигнала в MCU-то.

А аз не мога да преценя какво трябва да сложа и въобще трябва ли да слагам нещо на линията към MCU-то , за да съм сигурен , че ще измеря правилната честота.

Не знам дали задавам правилните въпроси, но простете - ако знаех нямаше да питам. :roll:

Мисля ,че основното ми притеснение е как да гарантирам , че по линията няма да се насложи друг сигнал с честота Х , която да промени моят сигнал и/или честотата на моят сигнал.

Една добре опроводена , екранирана жица/кабел ще свърши ли работа и директно в мцу-то и меря.

Относно мцу-то ми се иска също да питам нещо:

С кой модул като цяло/общо е най-добре да се мери честота. Дотук мисля по 3-варианта:

с таймер (като гледам това е и най-често ползваният)
с компаратор (тук ми е интересно какво ще кажете)
със следене за смяна на фронта на сигнала

Ако някъде нещата ги има написани няма да Ви карам да ми "четете".

Доста време прекарах в google, но не мога да кажа че съм удоволетворен , но пак казвам не съм сигурен че задавам правилните въпроси, та може и там да е проблема :wink: :)

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пон Май 15, 2006 2:02 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Ако съм те разбрал правилно, на теб ти трябва сонда за осцилоскоп с подходящ буферен усилвател.


Пон Май 15, 2006 7:55 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами това какво д сложиш пред процесор зависи от това колко високоомен ти е източника на сигнал, ако говориш за тесен честотен диапазон в звуковия обхват, и искаш да си сигурен че няма да повлияеш на сигнала то най-добре сложи един операционен. Всусхност тои едва ли ще ти е излишен особенно ако мериш сигнали с ниско ниво. След това е е стествено да имаш формировател, така че да подаваш не синусоида а правоъгълен, това може и от сама ОУ да стане, там варианти много има. За високите естоти става по сложно, особенно акоискаш да мериш и сигнали с малка амплитуда, иначе до към 100 Мхз може да минеш с логически елементи за формиране а съм виждал и реализации с транзистори.
Самия уред може да натовари източника на сигнал, и евентуално да промени нивото, но да промени и честотата, т.е. да се отрази на точноста н измерването може да стане в много малко случаи, примеро ако мериш честотаат директно на някой трептящ кръг, или времезадаваща вирига, и капацитета на уреда се добавя към този на веригата.
А относно как да мериш, има няколко метода, з аниски честоти обикновенно по-точно да мериш период на сигнала, а за висока да броиш периоди за единица време. Има и един друг метод, който комбинира тези два, ткаа че да мериш с еднаква точност в целия диапазон. За целта имаш два брояча, единият брои периоди на входния сигнал за единица време, а другият брои еталонни импулси за цял брой периоди на входния сигнал. Примерно мериш 12 Хз, еталонния сигнал ти е 10 Мхз а времето за измерване 100 мс. Пускаш двата брояча едновременно, да предположим че броят по преден фронт. В този случай този който мери входни импулси ще се инкрементира два пъти, т.е. ще е две, след което времевата врата се затваря. Но този който брои еталонни импулси ще спре да брои едва когато постъпи третият преден фронт. Така ще имаш в единия брояч 2 а във втория 1666666. Честотат на входния сигнл е 1/(Бр.2/10.000.000*Бр1) = 12.0000048... така за 100 мс време на измерване ще получиш една доста добра точност. Същото ще е и при висока честота. Естествено за да не работиш с сложна математика, формилата малко трябва д си я префасонираш, но не мисля че това е проблем.


Пон Май 15, 2006 8:04 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение 
Ако е неоходимо измерващото устройство да има малък входен капацитет и голям импеданс, потърси в мрежата "FET probe". Имаше публикувани 2 - 3 любителски проекта на такава сонда и бяха с входен капацитет ололо 0.5 - 1 pf и входен импеданс 10 или 100 мегаома (цитирам по памет).


Пон Май 15, 2006 12:30 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
Ако сигнала е аналогов - FFT.

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пон Май 15, 2006 2:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
the_real_maniac написа:
Говорим за честоти от 1Херц до под Мегахерц (даже се съмнявам , че ще стигна 30kHz). /

С кой модул като цяло/общо е най-добре да се мери честота. Дотук мисля по 3-варианта:

с таймер (като гледам това е и най-често ползваният)
с компаратор (тук ми е интересно какво ще кажете)
със следене за смяна на фронта на сигнала




Останал съм с впечатление че с ПИК се занимаваш...

Ако е за ниски честоти - може би най-добре става с измерване на период , а не на честота - т.е. колко машинни цикли са изминали от преден до преден фронт - ССР модула на ПИК-овете е точно затова. Оттам честотата се смята лесно. А ако е за по висока - ТМР0 в режим на инкремент по фронт на РА4 и някой от другите таймери да го прекъсне в определено време - ей за това се сещам в момента. Иначе варианти много :)

За цифров сигнал от буфериране най-вероятно бъобще няма да има нужда, 4е и за аналогов може да мине без буфер ако ползваш някой вход с вграден тригер на Шмит, РА4 със сигурност е такъв, за другите забравих.
Всичко зависи от това какъв е източника на сигнала


Пон Май 15, 2006 4:55 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
1.Аз най-вече се бях ориентирал да меря по период (независимо от честотата)

2.Гледам се обединихте около едно:

ниски честоти - по период
високите - мери се с един таймер по външен фронт за единица време (отмервано от друг таймер).

--

Обаче ... :-)

Как да се изразя правилно.
Линията ще носи сигнали с различни честоти и амплитуди, и въпросът е че те не са постоянни.

Т.е примерно има 100Hz , в следващият момент има 200Hz, в по-следващият 10kHz. Като този момент колко ще е дълъг не е константа.

Та си мисля няма ли да е добре да меря само по период. А и тъй като не съм го направил засега не съм сигурен, че ще стане това различаване на отделните честоти. Въобще много неизвестни.

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пон Май 15, 2006 7:18 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
КОе различаване, аз ти писах как става ако искаш да мериш с еднаква точност в целия диапазон. А ако искаш да нзаеш точно каква е честоттаа в момента .. това вече е малко дуг въпрос,в смисъл ако искаш да откриваш кога се сменя.


Пон Май 15, 2006 9:27 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
А защо не FFT?

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Вто Май 16, 2006 10:47 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
FFT е идеален точно за задачи, които ще работят със зашумен сигнал, но изисква яко ядро, за да се сметне. ( BTW, точно така си намирам комарите в къщи.) Освен това FFT не е прецизен за измерване на честота. Ако имаш чист тон, класическото решение (формировател >> брояч или кепчър) е най-доброто. За ниски честоти кепчърът е за предпочитане, докато за високите броячът е по-добър. Най-добре е да ги има и двете, но иска по-сложен алгоритъм за обработка. Правил съм го на ПИК, ако те вълнува, обади се.


Вто Май 16, 2006 10:57 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
bateAz написа:
... ( BTW, точно така си намирам комарите в къщи.) ...

Това ми стана доста интересно :) Я разкажи пове4ко, плс.

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Вто Май 16, 2006 11:16 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами предполагам че батето първо пеленгова, като при това вема и в предвид нелинеиността и толерансите м-у левия и десни пеленгатор, след като определи ориентировъно местоположението, фокусира и прави FFT като ако честотниа спектър показва мъжки комар, или вече реял женски, това гооткрива п промяната в резонанса на търбуха, го оставя а по-късно, но ако открие че спектъра отговаря на гладен женски, сещате се че празния търбух има по висока резонансна честота, може би с ясно изразени аномалии, задеиства самонасоцващия се комаротрепец, а пък може и онова от снимката да е обучил.


Вто Май 16, 2006 7:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Да изровим една стара тема.
Имам следното задание: измерване на честота в диапазона 50Hz-400kHz с максимално отклонение +/-10Hz.

Използвам метода на броене на периоди за единица време. Времевият ми прозорец е 160ms, което ми определя 6.25Hz отклонение в целия диапазон. Посредством average на 8 стойности отклонението в областта до 10kHz се свежда до 3Hz. Ако искам да намаля грешката при ниските честоти трябва или да използвам корекция на дьлжината на прозореца, спрямо измерваната честота или да направя комбинация с метода на измерване дьлжината на един период. Или хибридния митод, който описва Тони по-горе.

Вьпросьт е как да го реализирам този метод. Брояча на цели периоди в рамките на прозореца е ясно. Как да измеря броя на еталонните 10MHz импулси за тези 2 периода. Единственото което се сещам е чрез Capture. Опитах и в действителност работи, но до 180kHz. Нагоре interruptite, които произлизат от този Capture ми размазват напьлно тaйминга. При 400kHz сигнал, това си е interrupt на всеки 2.5µs.
Тони ще дадеш ли жокер?
И по принцип как бихте подходили ако иската да сведете грешката в целия диапазон до минимум?


Пет Мар 30, 2007 4:58 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Ако обяснението ми не е разбирамо, това е кода, който скальпих относно метода на Тони.

Interrupt routines
Код:
void t3_overflow_int() interrupt 0x23   //105ms timewindow is over
{   ap2 = counting;                  //number of periods +1 during one timewindow
   ap = t3_value - t3_first_value;      //number of ticks in counting-1 hole periods
   counting = 0;                  //reset periods counter variable
   flag = 1;                     //new measurement's ready indication
}

void t2_capture_int() interrupt 0x22   //new period started (0-1 transition)
{   t3_value = T2;                  

   if(counting == 0)               //if this is the first period in the timewindow
   {   t3_first_value = t3_value;      
   }

   counting++;                     //increment number of periods
}



Timers Initialization Macro
Код:
#define INIT_TIMER_F   T3IC = 0x74; /* Core Timer T3 Priority Level 13, Group Level 0, interrupt enable*/ \
T2IC  = 0x54;          /* GPT1 T2 Priority Level 5, Group Level 0, interrupt enable*/ \
T3CON = 0x42;             /* Core Timer T3 in Timer Mode, 1.6µs resolution*/ \
T3 = 0; \
T2CON = 0x29;            /* GPT1 T2 in Capture Mode, interrupt on 0-1 transition*/ \
T2 = 0;




А това е частта от кода, която изчислява честотата.
Код:

if(flag == 1){
frequency_real2 = 625000000/(unsigned long)ap;                     
frequency_real2 *= ((unsigned long)ap2 - 1);
frequency_real2 /= 1000;
               
variable++;    // average variable
frequency_real3+=frequency_real2;   // buffer variable for averaging
               
               if (variable==16)
               {
                  frequency_real2=frequency_real3>>4;
                  frequency_real3=0;
                  variable = 0;
                  frequency_buffer=frequency_real2;
               }
      
flag = 0;
}   



P.S. Сега като поразширих програмкта с някоя друга екстра бачка само до 80kHz. С какво да заменя Capture-а?


Пет Мар 30, 2007 5:46 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение 
the_real_maniac написа:
...Обаче ... :-)

Как да се изразя правилно.
Линията ще носи сигнали с различни честоти и амплитуди, и въпросът е че те не са постоянни.

Т.е примерно има 100Hz , в следващият момент има 200Hz, в по-следващият 10kHz. Като този момент колко ще е дълъг не е константа.

Та си мисля няма ли да е добре да меря само по период. А и тъй като не съм го направил засега не съм сигурен, че ще стане това различаване на отделните честоти. Въобще много неизвестни.


Първо трябва да си изясниш какво точно искаш да мериш!

има:
1) периодични синусоидални сигнали - идеалния случай :)
2) периодични нехармонични - повтярят се нехамонични "картинки" (примерно: сдъФкани правоъгълни импулси)
3) непериодични (примерно говор) - дето няма нищо периодично
4) най-друго не остана :)

понеже честотомерите мерят всичко за единица време ... то те показват ~ вярно в 1) и 2)
за 3) остава спекралния анализ (FFT)

всъщност FFT-то става за всичко а точността му зависи от честотата с която се дискретизира и обхванатия период (брой "сампъли" степен на 2) ... т.е може да е изключително голяма и ... не се влияе от шумове и аплитуда на сигнала (поне няколко бита да мърдат :) ) :)
с две думи с FFT - можеш всичко :idea:

FFT си има доста тънкости и разновидности (за намaляване на сметките - иначе алгоритъма е 10-на реда на C)... и разбира се и много сметки/сек

P.S. има и WFFT (фурие на виноградов за нестепени за 2, ... но това си е друга тема) :)


Пет Мар 30, 2007 5:50 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни