RTV forum PL | NewsGroups PL

Jak uzyskać liniowy rozkład częstotliwości dla timera z nieliniowym wzorem?

Linearyzacja

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak uzyskać liniowy rozkład częstotliwości dla timera z nieliniowym wzorem?

Piotr \"PitLab\" Laskowsk
Guest

Tue Aug 21, 2007 11:32 am   



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..

--
Piotrek.
http://www.pitlab.pl

Blue
Guest

Wed Aug 22, 2007 9:02 am   



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" <pitlab@pulapka.wp.pl> napisał w
wiadomości news:faehpj$l8r$1@node1.news.atman.pl...
Quote:
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..

--
Piotrek.
http://www.pitlab.pl



Blue
Guest

Wed Aug 22, 2007 9:16 am   



zapomniałem dodać, że dla PCA0CPH większego od 15 liniowość jest już
przyzwoita
B.

Piotr \"PitLab\" Laskowsk
Guest

Wed Aug 22, 2007 10:57 am   



Quote:
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))
Podstawiając kolejne wartości x otrzymuję mocno nieliniowy rozkład
częstotliwości. Potrzebowałbym funkcję lineraryzującą

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

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.

--
Piotrek.
http://www.pitlab.pl

Piotr \"PitLab\" Laskowsk
Guest

Wed Aug 22, 2007 1:37 pm   



Quote:
Zauważyłem z że 8 bitowy timer liczy się prościej: f = fclk / (12 * n).

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

--
Piotrek.
http://www.pitlab.pl

elektroda NewsGroups Forum Index - Elektronika Polska - Jak uzyskać liniowy rozkład częstotliwości dla timera z nieliniowym wzorem?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map