Linearyzacja

Aug 21, 2007 4 Replies

U¿ywam timera do generowania czêstotliwo¶ci w granicach do kilku kHz. Wzór na czêstotliwo¶æ jest postaci: f = fclk/(n*(65536-x)) gdzie n i fclk s± sta³ymi a x zmienn±.



Podstawiaj±c kolejne warto¶ci x otrzymujê mocno nieliniowy rozk³ad czêstotliwo¶ci. Potrzebowa³bym funkcjê lineraryzuj±c±, tak aby dla kolejnych wyliczonych warto¶ci x otrzymywaæ liniowo (lub mo¿liwie blisko liniowo¶ci) zmieniaj±c± siê czêstotliwo¶æ.



Inny pomys³ to zastosowanie LUT. Tabela mia³a by powiedzmy 64 pozycje, ale mo¿e s± jakie¶ prostsze metody, mo¿liwe do implementacji na 8-bitowym kontrolerze..


np. PCA w '51 (Silabs) w trybie frequency output mode wzór na czestotliwo¶æ jest taki: fwy = f_pca/(2 * PCA0CPH) gdzie PCA0CPH to rejestr 8-bitowy.

B.

U¿ytkownik "Piotr "PitLab" Laskowski" snipped-for-privacy@pulapka.wp.pl> napisa³ w wiadomo¶ci news:faehpj$l8r$ snipped-for-privacy@node1.news.atman.pl...

zapomnia³em dodaæ, ¿e dla PCA0CPH wiêkszego od 15 liniowo¶æ jest ju¿ przyzwoita B.

Zrobi³em z tego wykres i wygl±da praktycznie tak samo. Po prostu liniowo zmienaj±cy siê mianownik daje nieliniow± warto¶æ funkcji. Na razie doszed³em do etapu ¿e odwróci³em funckjê i liczê 'x' dla danego 'f'. Kolejne warto¶ci 'x' wstawiam do LUT i indeksuj±c tablicê otrzymujê liniowo zmieniaj±c± siê czêstotliwo¶æ. Dla tablicy liczb 8-bitowych uda³o mi siê uzyskaæ 48-pozycyjn± tablicê.

Zauwa¿y³em z ¿e 8 bitowy timer liczy siê pro¶ciej: f = fclk / (12 * n). Po odwróceniu kota ogonem: n = fclk / (12 * f) => (fclk/12) / f Je¿eli f zmienia siê liniowo o jak±¶ warto¶æ mo¿na to przedstawiæ jako: f = k * x; gdzie k to krok czêstotliwo¶ci a x jego indeks St±d n = (fclk / (12*k) ) / x Czyli po pewnych uproszczeniach da siê to sprowadziæ do jednego dzielenia

16-bitowego.

Wygl±da na to ¿e ju¿ mam to czego szuka³em. Do funkcji podam indeks czêstotliwo¶ci i otrzymam warto¶æ rejestru do za³adowania do timera.

G...uzik prawda. Powinno byæ f = fclk / (12 * (256-n)). A to ju¿ znacz±co zmienia postaæ rzeczy.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required