Forum: Mikrocontroller und Digitale Elektronik Digitale PLL in Software: Probleme mit dem Regler


von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Ich möchte mit dem 1PPS Signal eines GPS Empfängers eine 
Referenzfrequenz von 16MHz erzeugen.
Dazu habe ich einen Quarzoszillator, denn ich um ein paar 10ppm per 
Spannung verstimmen kann. Dessen Ausgangssignal wird mit dem 1 PPS 
Signal verglichen und die Phasendifferenz mit einem AVR gemessen. Ich 
erhalte so einen digitalen 16bit Messwert mit 62,5ns Auflösung der 
Phasendifferenz. Damit regele ich die Abstimmspannung für den Oszillator 
nach.
Ich möchte also sowas wie hier bauen, nur gefällt mir dessen extrem 
langsame Einschwingzeit von >5h nicht:
http://www.rt66.com/~shera/index_fs.htm
Dort werden nämlich 30s lang die Werte gemittelt und daraus dann der 
Korrekturwert berechnet.

Die Werte direkt zu verwenden reicht nicht, denn die Phasenauflösung von 
62,5ns ist mir zu ungenau (das sind gerade mal 0,6ppm, <0,1ppm wollte 
ich schon erreichen). Durch das Mitteln mehrerer Werte bekommt man mehr 
Auflösung, aber alles wird auch langsamer.
Mein Ansatz war ein einfacher Tiefpass, der jede Sekunde einen Wert 
ausspuckt, so dass die Regelung etwas schneller reagiert, aber eben 
dennoch eine Mittelung mehrerer Werte stattfindet.
Nur funktioniert das bei mir nicht so ganz.

Ohne diese Filterung, arbeitet meine Regelung recht stabil (nach etwa 15 
Minuten ist die Phase auf <+/-100ns eingeschwungen). Mit der Filterung 
jedoch bauen sich schöne Sinusschwingungen auf.
Rein durch ausprobieren der Regelparamter komme ich also nicht weiter.

Nun versuche ich das ganze mathematisch anzugehen und die 
Übertragungsfunktion aufzustellen:
Der Oszillator mit der Phasenmessung verhält sich wie ein Integrator: 
Die Abstimmspannung und somit die Frequenz bestimmen wie schnell die 
Phase wegdriftet.
Die Übertragungsfunktion müsste also G(s)=-1/62.5s betragen (mehr 
Abstimmspannung -> höhere Frequenz, Nulldurchgang kommt zu früh -> Phase 
wird negativ. Ein Abstimmwert von +10000 lässt die Phase um etwa 10µs/s 
wegdriften.)

Zum Filtern der digitalen Phasenmesswerte verwende ich folgende 
Funktion:
y=y-y/64+Messwert
Die Übertragungsfunktion müsste also so aussehen: H(z)=1/(1-0,984*z^-1)

Und jetzt stecke ich fest: Ein Teil der Strecke ist zeitdiskret, der 
andere zeitkontinuierlich. Das macht die Sache für mich etwas 
kompliziert.

Ich dachte mit das einfachste wäre das Bodediagramm zu erstellen und 
dann so wie hier die Parameter zu bestimmen:
http://www.rn-wissen.de/index.php/Regelungstechnik#Dimensionierung_mit_dem_Bodediagramm
Dazu habe ich die beiden Bodediagramme getrennt erstellt, den Anteil 
über 0,5Hz bei dem analogen Teil weggelassen und beide Diagramme 
addiert.
Ist das soweit ok?

Der Integratoranteil der Phasenmessung ergibt konstant -90°, das 
negative Spannungs->Frequenzverhältnis macht durch die zusätzlichen 180° 
+90° daraus. Der Filter der Messwerte macht je nach Frequenz ebenfalls 
-90° bis 0° Phasenverschiebung. Das ergibt dann obiges Bild: Die Phase 
liegt zwischen 0° und 90°. Der PI Regler würde nochmal -90° bis 0° 
Phasenverschiebung verursachen, ich käme damit also auf 0° bis +90° und 
müsste mich somit eigentlich im stabilen Bereich befinden. Nur leider 
ist das nicht so.
Wie komme ich ich also auf meine Parameter für den (vermutlich PID) 
Regler (möglichst ohne allzu tief in die Regelungstechnik einsteigen zu 
müssen)?

von ... (Gast)


Lesenswert?

Meiner Erfahrung mit Regelungstechnik ist, dass man jeden Sensor, den 
man hat auch verwenden sollte. Das bedeutet, den 1 Sekunden Vergleich 
ebenso wie laengere Vergleiche. Wenn der Sensor (1sek) eine Genauigkeit 
von 0.6ppm bringt ist das doch schon mal gut. Mehrere Sensoren 
verarbeitet man mit dem Zusatndsregler, im Wesentlichen eine Matrix 
ueber die Eingangsgroessen und deren Kopplung. Ohne simulation laesst 
sich nun sagen, dass der Einfluss des 10sek, oder 100sek Sensors ein 
Stueck kleiner wie der des 1sek Sensors ist. Falls man Zaehlerstaende 
vergleicht, so ist der Sensor selbst schon integrierend. Das sollte dann 
so gehen. -> Mit einer konstanten multiplizieren und gut ist.

von Falk B. (falk)


Lesenswert?

@  Benedikt K. (benedikt) (Moderator)

>Ich möchte mit dem 1PPS Signal eines GPS Empfängers eine
>Referenzfrequenz von 16MHz erzeugen.

Sportliche Herausforderung.


>Ich möchte also sowas wie hier bauen, nur gefällt mir dessen extrem
>langsame Einschwingzeit von >5h nicht:

Tja, wird aber wohl kaum anders gehen, wenn man eine hohe Genauigkeit 
und wenig Jitter haben will. Je langsamer der PLL Regelkreis, umso 
jitterärmer das Ausgangssignal, vereinfacht formuliert.

>Mein Ansatz war ein einfacher Tiefpass, der jede Sekunde einen Wert
>ausspuckt, so dass die Regelung etwas schneller reagiert, aber eben
>dennoch eine Mittelung mehrerer Werte stattfindet.
>Nur funktioniert das bei mir nicht so ganz.

Ist ja auch ein Widerspruch in sich ;-)

Abtastrate (1 Wert/s) hat erstmal nix mit Filterfrequenz zu tun.

>Ohne diese Filterung, arbeitet meine Regelung recht stabil (nach etwa 15
>Minuten ist die Phase auf <+/-100ns eingeschwungen). Mit der Filterung
>jedoch bauen sich schöne Sinusschwingungen auf.

Willkommen in Monty Phytons wunderbarer Welt der Regelungstechnik ;-)

>Rein durch ausprobieren der Regelparamter komme ich also nicht weiter.

Doch, man muss aber systematich Vorgehen. Stichwort Ziegler & Nicols 
Verfahren.

>Wie komme ich ich also auf meine Parameter für den (vermutlich PID)
>Regler (möglichst ohne allzu tief in die Regelungstechnik einsteigen zu
>müssen)?

2. Widerspruch ;-)
Aber wie gesagt, mit dem iterativen Optimierungsverfahren kommt man 
relativ gut hin, ohne zuviel Mathematik bewältigen zu müssen.

MfG
Falk

P S Das Ganze läuft sowieso nur dann halbwegs so wie du das wünschst, 
wenn den Quarz auch thermisch stabilisiert ist. Also mind. Einfachofen. 
Sonst läuft dir die Phase zu schnell weg. Denn wenn die Regelschleife 
zwecks Filterung so langsam sein muss, dann muss der lokale Oszillator 
eine ziemlich gute Kurzzeitstabilität haben, wobei Kurzzeit hier eher im 
Minutenbereich liegt.

MfG
Falk

von Falk B. (falk)


Lesenswert?

Ich würde fast meinen, dass es günstiger wäre, den lokalen Oszillator 
per DCF77 Träger zu synchronisieren. Die deutlich höhere Freqeunz ist 
das SEHR von Vorteil. Atomuhrgenaue Zeilenfrequenz vom ZDF gibt es ja 
nicht mehr mit Abschaffung es terestrischen Analogfernsehens.

MFG
Falk

von Benedikt K. (benedikt)


Lesenswert?

... schrieb:
> Meiner Erfahrung mit Regelungstechnik ist, dass man jeden Sensor, den
> man hat auch verwenden sollte. Das bedeutet, den 1 Sekunden Vergleich
> ebenso wie laengere Vergleiche.

So hatte ich das bisher auch gemacht:
Zunächst wird die Phase mit einem schnellen P Regler erstmal auf +/-10µs 
rangefahren, danach wird auf den eigentlichen Regler umgeschaltet.
Der Schwingt dann etwa 5 Perioden lang und kriecht dann an den richtigen 
Wert heran. Nach etwa 15 Minuten sind <+/-100ns erreicht. Sobald nun der 
Wert aber unter die +/-62,5ns fällt, kommt die Phasenverschiebung des 
Filters dazu, und die Schwingungen fangen an. Die direkte Auswertung des 
Signals mit den 62,5ns Auflösung dämpfen die Schwingungen wieder, so 
dass das ganze mit etwa +/-100ns Amplitude schwingt.

Falk Brunner schrieb:
>>Rein durch ausprobieren der Regelparamter komme ich also nicht weiter.
>
> Doch, man muss aber systematich Vorgehen. Stichwort Ziegler & Nicols
> Verfahren.

Damit erreiche ich obiges Ergebnis. Vorher lag die Amplitude der 
Schwingungen bei >10µs...

> Ich würde fast meinen, dass es günstiger wäre, den lokalen Oszillator
> per DCF77 Träger zu synchronisieren. Die deutlich höhere Freqeunz ist
> das SEHR von Vorteil.

Nur der Empfang des Signals ist alles andere als einfach: Ich habe es 
zumindest nicht geschafft, eine halbwegs vernünftige, und Jitter freie 
Flanke daraus zu gewinnen. Da ist der GPS Empfänger sehr viel besser.

von Patrick W. (seennoob)


Lesenswert?

Klingt interessant für was willst den so einen 16 MHz Quarz 
synchronisieren ?
Aber was ist den das 1PPS (puls per second?) was kann man sich darunter 
vorstellen find im inet ned wirklich was passendes.

MFG

von Falk B. (falk)


Lesenswert?

@  Benedikt K. (benedikt) (Moderator)

>Filters dazu, und die Schwingungen fangen an. Die direkte Auswertung des
>Signals mit den 62,5ns Auflösung dämpfen die Schwingungen wieder, so
>dass das ganze mit etwa +/-100ns Amplitude schwingt.

Na ich schätze mal, dass das "normal" ist. Der Quarz läuft dir halt in 
ein paar Minuten weg, wenn er nicht WIRKLICh gut stabilisiert ist.
Denn mit deinen +/-100ns bewegst du dich praktisch an der 
Auflösungsgrenze deiner Phasenmessung.

>Damit erreiche ich obiges Ergebnis. Vorher lag die Amplitude der
>Schwingungen bei >10µs...

Na dann war der Tip doch schon mal richtig, wenn gleich zu spät ;-)

>> per DCF77 Träger zu synchronisieren. Die deutlich höhere Freqeunz ist

>Nur der Empfang des Signals ist alles andere als einfach: Ich habe es
>zumindest nicht geschafft, eine halbwegs vernünftige, und Jitter freie
>Flanke daraus zu gewinnen.

Jitterfreiheit ist gar nicht sooo nötig. Bei 77,5 kHz kann man locker 
auf 1..10Hz Filterfrequenz runter und hat immer noch eine verdammt kurze 
Einschwingzeit.

> Da ist der GPS Empfänger sehr viel besser.

Wenn das mal kein Irrtum ist. Denn der hat auch einen Eigenjitter von 
irgendwas um die 50ns IIRC.

MFG
Falk

von Benedikt K. (benedikt)


Lesenswert?

Patrick Weinberger schrieb:
> Klingt interessant für was willst den so einen 16 MHz Quarz
> synchronisieren ?

Von da aus kann ich dann auf die benötigte Frequenz (z.B. 1MHz, 1kHz 
usw.) runterteilen.

> Aber was ist den das 1PPS (puls per second?) was kann man sich darunter
> vorstellen find im inet ned wirklich was passendes.

Es ist ein Impuls pro Sekunde, der exakt (bis auf wenige 10-100ns je 
nach Empfänger) mit dem Beginn einer Sekunde ausgegeben wird. Man hat 
damit eine extrem exakte Zeitreferenz, viel genauer als z.B. eine 
Funkuhr, die maximal ein paar ms Genauigkeit erreicht.

Falk Brunner schrieb:
> Na ich schätze mal, dass das "normal" ist. Der Quarz läuft dir halt in
> ein paar Minuten weg, wenn er nicht WIRKLICh gut stabilisiert ist.
> Denn mit deinen +/-100ns bewegst du dich praktisch an der
> Auflösungsgrenze deiner Phasenmessung.

Nein, wenn ich den Oszillator per Hand abstimme (per Software die 
Abstimmspannung einstelle) und dann frei laufen lasse, ist der Drift 
minimal, von daher gehe ich davon aus, dass ich <0,1ppm problemlos 
erreichen kann. Das Problem liegt definitiv an meiner Regelung.

> Jitterfreiheit ist gar nicht sooo nötig. Bei 77,5 kHz kann man locker
> auf 1..10Hz Filterfrequenz runter und hat immer noch eine verdammt kurze
> Einschwingzeit.

Mag sein, ich habe es jedenfalls nicht hinbekommen, das Signal sah 
einfach nur katastrophal aus. Daher habe ich mich für die GPS Lösung 
entschieden, die Schaltungstechnisch sehr viel einfacher ist.

>> Da ist der GPS Empfänger sehr viel besser.
>
> Wenn das mal kein Irrtum ist. Denn der hat auch einen Eigenjitter von
> irgendwas um die 50ns IIRC.

Stimmt, aber 50ns Jitter auf 1s sind sehr viel besser als die paar 100ns 
oder µs auf 12,9µs beim DCF.
Da die 50ns unterhalb meiner echten Messauflösung liegen bekomme ich die 
sowieso nur durch Mittelwertbildung über mehrere Perioden. Von daher ist 
das nicht wirklich störend.

von Falk B. (falk)


Lesenswert?

@  Benedikt K. (benedikt) (Moderator)

>Nein, wenn ich den Oszillator per Hand abstimme (per Software die
>Abstimmspannung einstelle) und dann frei laufen lasse, ist der Drift
>minimal,

Wie hast du das gemessen? GPS und Oszillator per Oszi verglichen?

> von daher gehe ich davon aus, dass ich <0,1ppm problemlos
>erreichen kann. Das Problem liegt definitiv an meiner Regelung.

Hmmmm.

von Arno H. (arno_h)


Lesenswert?


von Benedikt K. (benedikt)


Lesenswert?

Falk Brunner schrieb:
>
> Wie hast du das gemessen? GPS und Oszillator per Oszi verglichen?

Ich habe mir die Phasendifferenz anzeigen lassen. Das ist bequemer als 
auf dem Oszi zu schauen. Innerhalb von 5 Minuten sind die Werte nur um 
wenige 100ns gedriftet.

von Patrick W. (seennoob)


Lesenswert?

Benedikt das mit dem runterteilen ist mir schon bewusst, aber da gehts 
ja eher darum das man den Quarz synchronisiert auf den Sekundenimpuls.
Die frag wo bedarf es dann einer so genauen synchronisation ?

MFG

von ... (Gast)


Lesenswert?

Na, fuer Anwendungen, wo ein normaler Ofenquarz, der 10^-8 brint, zu 
ungenau ist. Mit diesem Seup kriegt man quasi eine Caesium Uhr fuer ein 
paar Groschen nach Hause. Und Wartung faellt auch keine an.

von Falk B. (falk)


Lesenswert?

@... (Gast)

>Na, fuer Anwendungen, wo ein normaler Ofenquarz, der 10^-8 brint, zu
>ungenau ist. Mit diesem Seup kriegt man quasi eine Caesium Uhr fuer ein
>paar Groschen nach Hause.

Sag das mal nicht den Leuten die WIRKLICH ne Caesiumuhr haben. Die 
könnten einen Lachkrampf bekommen.

Wenn gleich die Langzeitstabilität (Tage) atomgenau ist, so ist die 
Kurzzeitstabilität wahrscheinlich deutlich schlechter als ein Ofenquarz.
Und langzeitstabil bekommt man auch mit DCF77 hin.

Merke: Gute Normale fallen nicht vom Himmel.

MFG
Falk

von Patrick W. (seennoob)


Lesenswert?

In meinen augen wär es interessanter mehrere Quarze so zu 
synchronisieren das sie gleich schwingen zB für zeitkritische 
anwendungen (Schallortung usw)
als eine Atomuhr zu haben

MFG

von Hagen R. (hagen)


Lesenswert?

>In meinen augen wär es interessanter mehrere Quarze so zu
>synchronisieren das sie gleich schwingen zB für zeitkritische
>anwendungen (Schallortung usw

Und wie machst du das wenn die einzelnen Schaltungsteile nicht 
miteinander kommunizieren können ? Ich denke so wie es Benedikt macht.

@Benedikt: wie ziehst du den Quarz ? kann man die Schaltung sehen ?

Gruß Hagen

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.