Forum: HF, Funk und Felder Phase-locked loop Parameter ermitteln


von Timo W. (timo_w93)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier einen Videoempfänger uC (RTC6715) welchen ich über SPI 
ansteuere. Um die Empfangsfrequenz einzustellen, müssen 3 Register 
beschrieben werden R N und A. Die Frequenz des lokalen Oszillators 
berechnet sich nach folgender Formel:

FLO = 2*(N*32+A)*(Fosc/R)

Fosc = 8MHz Quarzoszillator, welcher an einem Pin des Chips hängt.

R ist 15 bit breit, N ist 13 bit breit und A ist 7 bit breit.
Sinnvolle Frequenzen für den Empfang liegen zwischen 5645 und 5945Mhz. 
Das ganze wird intern auf 479 MHz Zwischenfrequenz heruntergemixt und 
dann demoduliert. Sprich für die LO Frequenz wäre sinvolle Frequenzen
5166MHz bis 5466MHz.

Das ist das erste mal, dass ich mit so einem PLL arbeite / diesen 
bediene. Vielleicht habe ich etwas total falsch verstanden, aber 
eigentlich machen doch für R nur werte < 1000 Sinn, da N max 8191 werden 
kann (2^13-1). Warum gibt es dann aber 15 bit? (0-32767).

Wie ermittelt man die 3 Werte für N A und R, wenn man z.B. auf 5671 MHz 
empfangen möchte oder so? Aktuell habe ich einfach 3 verschachtelte for 
loops, welche den gesamten Parameterraum durchlaufen und dann halt das 
nähste Ergebnis verwenden.. Allerdings ist das natürlich sehr sehr 
langsam, da es ja 2^35 Möglichkeiten gibt. (von denen die meisten keinen 
Sinn ergeben).

Ich habe mal einen Screenshot der betreffenden Sektion im Datenblatt 
angehängt, die Info finde ich sehr dürftig. Aber eine nähere 
Beschreibung gibt es nicht.

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

FLO = 2*(N*32+A)*(Fosc/R)

479 MHz Zwischenfrequenz

Empfang 5671 MHz

Flo=f(empf)-f(zf)=5671-479=5192

R setzen wir 8 und erhalten so 1 MHz Schritte

sodann

5192/2=2596

2596/32=81,125

N kann nur ganzzahlig sein

N=81=0x51=0b1010001

A=2596-N*32

81*32=2592

A=4=0x04=0b0000100 (7 bit von 8)


Durch die Verschiebung um ein Bit
lsb von N geht in Bit 7

10100010000100 = 0x02884

: Bearbeitet durch User
von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

wenn du in  1 Mhz Schritten scannen willst


R=8

N=(f(emf)-f(zf))/64 (nur ganzzahliger Anteil)

for N= Nmin to Nmax

for A = 1 to 31

Next A

Next F

: Bearbeitet durch User
von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

sorry weiter oben schrieb ich 1 MHz Schritte das war nicht korrekt durch 
den Faktor 2 vor der Klammer wird die Schrittweite verdoppelt. Um also 
1MHz schritte zu erhalten must du R=16 setzen und erhälst so 0,5Mhz takt 
aus dem 8MHz Quartz

!

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Sorry weiter oben schrieb ich 1 MHz Schritte das war nicht korrekt durch 
den Faktor 2 vor der Klammer wird die Schrittweite verdoppelt. Um also 1 
MHz Schritte zu erhalten mußt du R=16 setzen und erhälst so 0,5 MHz Takt 
aus dem 8MHz Quartz entsprechend ist N dann zu verdoppeln

!

: Bearbeitet durch User
von Timo W. (timo_w93)


Lesenswert?

Winfried J. schrieb:
> R=8
>
> N=(f(emf)-f(zf))/64 (nur ganzzahliger Anteil)
>
> for N= Nmin to Nmax
>
> for A = 1 to 31
>
> Next A
>
> Next F

Das klingt einleuchtend, Danke!

Mich wunderte nur etwas wieso die so große Register machen. Gerade für A 
hätten ja mit der 32 in der Formel auch 5bit gereicht.

Aber klar, umso größer R umso kleiner die Frequenzschritte beim 
verändern von N und A. Warum dann aber überhaupt N und A man hätte doch 
gleich N einfach 5 bit breiter machen können und hätte das selbe 
Ergebnis.

Oder hat das elektronische Hintergründe das die einzelnen Frequenzteiler 
nur max so und so oft teilen dürfen und es danach fehleranfällig wird?

Wenn R fix ist (16) dann liese sich ja auch das näheste N leicht 
bestimmen und A = Flo%N denk dann bräuchte ich gar keinen 
rechenintensiven Loop.

Flo = gewünschteFrequenz - 479
R = 16
N = Flo/32
A = Flo%N

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Das ist schon o.k. mit R wird die Quartzoszillatorfrequenz herunter 
geteilt.

Mit dem 1. Term hingegen wird die Eingangsfrequenz geteilt.

 Die Teilung durch 2 bewirkt eine Signalsymmetrierung unabhängig vom 
Tastverhältnis dieser. Sie garantiert das die PLL einrasten kann. 
Deshalb ist sie fix.

 N ist ein Zähler für den 2exp5 Teiler. Mit ihm lassen sich hohe 
Teilungswerte erreichen. Da diese aber nur Werte welche Vielfache von 32 
erreichen sind bedarf es einer Restzählung durch A.
 Für niedrige Frequenzen kann es aber sinnvoll sein N auf Null zu setzen 
und nur A zu zählen.


p.S. Verfahren dieser Art Überlappungen dieser Art gibt es auch bei der 
Segmentadressierung  in Prozessoren


Siehe auch Teilung mit Rest. Dieser ermöglicht kontinuierliche 
Wertebereiche bei Operationen mit Divisionen im natürlichen Zahlenraum.

Gruß Winne

von Lattice User (Gast)


Lesenswert?

Timo Witte schrieb:
>
> Aber klar, umso größer R umso kleiner die Frequenzschritte beim
> verändern von N und A. Warum dann aber überhaupt N und A man hätte doch
> gleich N einfach 5 bit breiter machen können und hätte das selbe
> Ergebnis.

Ja, hätte man können, aber nur wenn man grosse Teile des digitalen 
Bereich für eine Taktfrequenz >5 GHz ausgelegt hätte.

Deswegen werden die 5 GHz aus dem VCO erst halbiert und dann nochmal 
durch 32 geteilt. Um aber die Frequenzauflösung zu erhalten, wird der 
32Teiler als "Dual-Modulus-Prescaler" ausgeführt.

http://en.wikipedia.org/wiki/Dual-modulus_prescaler

Das steht jetzt zwar nicht im Datenblatt, aber die Formel 32*N+A verrät 
es.

Mann hätte zwar die Frequenzausflösung auch durch grössere N und R Werte 
erreichen könne, aber das hätte eine um den Faktor 32 kleinere Frequenz 
am Phasenkomperator bedeutet. Und je kleiner diese ist, des länger zum 
Einschwingen und in der Regel sehr viel höhreres Phasenrauschen.

>
> Flo = gewünschteFrequenz - 479
> R = 16
> N = Flo/32
> A = Flo%N

Festes R ist sinnvoll, denn die Bandbreite des Loopfilter muss darauf 
abgestimmt werden. Ist sogar sinnvoll dass man den vom Beispiel 
vorgegebenen Wert von R=8 beibehält, da der Loopfilter laut Datasheet 
zwar programmierbar ist aber keineswegs dokumentiert, bleiben da nur die 
Resetwerte die zum R=8 aus den Beispiel passen dürften.

Ein Blick in das Datenblatt des ADF4360-3 von Analog Devices verrät 
etwas mehr über die Hintergründe.

von Timo W. (timo_w93)


Lesenswert?

Danke für die Erklärung Lattice User! Wieder was dazugelernt 
(Dual-Modulus-Prescaler).

Es gibt bei dem Chip noch einen "Simple Channel Selection Mode". Bei dem 
man einfach über 3 Pins vorgegebene Kanäle wählen kann. Dort gibt es 
Kanäle mit geraden und ungeraden MHz Frequenzen.. Theoretisch müsste 
also dann bei geraden Frequenzen ja R = 16 sein, da die Zwischenfrequenz 
ja auch ungerade ist.

Es gibt außerdem noch einen haufen Register mit Namen wie "Prescaler 
tail current control (20 ~ 140uA).", "VCO current control", "Loop filter 
C3 control", "Loop filter CZ control", "Loop filter RZ control" u.s.w.
Man kann also scheinbar den Loopfilter irgendwie auch selbst noch 
abstimmen,  wenn man den Divider auch selbst programmiert. Allerdings 
ist das also überhaupt nicht dokumentiert.

Danke auf Jedenfall für die Hilfe! Hat mir sehr weitergeholfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.