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.
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
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
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 !
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
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.