Programmering af "Fractional-N PLL"
Hej med jer.
Jeg ved ikke om det er det rette sted at spørge, men nu prøver jeg
alligevel, så I må bære over med mig.
Jeg står for at skulle lave noget C-kode som udregner 3 parametre for
opsætning af en "Fractional-N PLL". Disse 3 parametre bestemmer
deleren i PLL'ens feed-back loop. Reference frekvensen er 1MHz. N
udregnes på følgende måde:
N = B*32 + A + NF/5
De tre parametre er altså: A, B og NF og udregnes ud fra N på følgende
måder:
B = int( N/32 )
A = int(N) - 32*B
NF = ( N*5 ) mod 5
Her er mod operatoren lig:
d mod n = d - n * int( d / n )
PLL'en skal bruges i en GSM applikation, så derfor skal PLL'en kunne
indstilles til frekvenser med 200kHz "opløsning". Hvis man ønsker at
sende i uplink på GSM900 kanal 2 (ARFCN = 2) kan følgende opstilles:
PLL'ens "udgangs" frekvens:
F-PLL = 890MHz + 424MHz + 2 * 0.2MHz = 1324.4MHz
Hvis PLL'ens reference frakvens så er på 1MHz (og ikke 200kHz som
ville være en del mere beregnings venligt), kan delerens værdi, N
beregnes:
N = F-PLL / 1MHz = 1324.4MHz / 1MHz = 1324.4
Ud fra denne værdi kan A, B og NF så beregnes med "floating point".
B = int( 1324.4 / 32) = 41
A = int( 1324.4 ) - 32*41 = 12
og endelig kan NF beregnes:
NF = ( 1324.4 * 5 ) mod 5 = 2
Det gik jo altsammen fint! MEN med floating point og divisioner med
alt andet end tal af modolus 2. Det går alt for laaaaaannngsomt!!!!
Er der nogen derude som har prøvet at lave noget kode som beregner
noget lingende ud fra et kanal nummer? så ville jeg meget gerne høre
fra dem....
På forhånd mange tak.
Mvh
Thomas