Hallo,
vielleicht kann mir jemand von euch einen gezielten Tip in Sachen
Taktteilung geben.
Ich suche eine Möglichkeit mit einem Virtex4 FX20 einen Takt von 4.8 kHz
zu erzeugen. Dieser wird für 2 mal 6-Channel ADCs benötigt. Mit DCMs
wäre die Sache kein Problem, gibt allerdings einen Haken mit den
Ausgangssignalen.
Als Ausgangssignal hab ich ein 100MHz (onboard) und ein 1Hz (1PPS von
GPS) Signal. Mit DCMs komme ich nicht bis 4.8 kHz, da nur ein Faktor von
maximal 16 möglich ist.
Als Entwicklerboard verwende ich das ML405.
Als Lösung würde ich gerne eine Art Taktteilung auf Basis eines Zählers
favorisieren. Leider gibts bei 100Mhz zu 4.8 kHz nur ungerade Teiler,
d.h. ich würde irgendwann Timingfehler bekommen.
Eine weitere Lösung wäre einen 76.8 kHz Oszillator mit aufs Board zu
bringen. Dann klappts wieder mit ner DCM und dem Faktor 16.
Wäre euch super Dankbar für ein paar Hinweise
Viele Grüße
> d.h. ich würde irgendwann Timingfehler bekommen.
Müssen die 4.8 kHz sooooooo genau sein?
Mit 100MHz/20833 = 4800,07 Hz sollte das Design schon auch noch laufen.
Oder bringen dich 70 milli Hertz um?
Was wäre dan mit Frequenzschwankungen des Oszillators?
10 ppm sind schon scharfe Anforderungen.
> 76.8 kHz Oszillator mit aufs Board zu bringen.> Dann klappts wieder mit ner DCM
Lies mal das Datenblatt der DCM. IMHO sind die erst ab x MHz sinnvoll
einsetzbar. Und wie gesagt: wenn der 76,8kHz-Oszillator 20 ppm
Abweichung hätte, wärst du gleich weit wie mit dem Teiler.
EDIT:
Du weißt schon, dass man mit einem Zähler Frequenzen auch durch z.B. 23
teilen kann? Und wie man z.B. einen Teiler durch 20833 macht?
Super schnelle Antwort, danke.
Ich geh noch mal bisschen mehr ins Detail Richtung Anwendung.
Mit den 4.8 kHz werden Stom und Spannung in einem 60Hz
Wechselspannungsnetz abgetastet. Das sind 80 Abtastungen pro Periode.
Der Abtastzeitpunkt soll aber nicht mehr als 4us jittern. Wenn ich nun
den Zähler bis 20833 laufen lasse und dabei die Drittel immer unter den
Tisch fallen lasse, hätte ich pro Abtastung ein Abweichung von
-3.3333..ns wenn ich mich nicht irre. Nach 80 Abtastungen wären das
dann -266.666..ns, soweit OK. Das 1PPS Signal ist für die
Synchronisierung zuständig, das kommt immer nach 80*60 Abtastungen. Bis
dahin hätte ich dann 15.999..us Abweichung in der steigenden Flanke des
ADC Clock Signals.
Wahrscheinlich müsste ich versuchen aus dem 1PPS bzw 1Hz Signal
irgendwas schnelleres erzeugen um dann schon eher zu synchronisieren. 60
Hz wäre optimal, da könnte pro Periode 1 mal synchronisiert werden.
Wie könnte man aus 1Hz 60 Hz erzeugen?
Hab den 20833er Zähler bereits umgesetzt und es stellt sich eine
Frequenz von 4.799xx kHz ein.
> Hab den 20833er Zähler bereits umgesetzt...Frequenz von 4.799xx kHz...
Der zählt vermutlich um 1 zu weit ;-)
100MHz / 20833 = 4800,0768 Hz
100MHz / 20834 = 4799,8464 Hz
> Wie könnte man aus 1Hz 60 Hz erzeugen?
Das wird dir auch nichts bringen, denn das 1 Hz ist ebenfalls asynchron
zur Netzfrequenz... :-/
Wenn du es unbedingt sooo genau haben willst:
Zähl einfach 2x auf 20833 und das 3. mal auf 20834. Dann hast du eine
Frequenz von (4799,0768+4799,0768+4800,8464)/3 = 4800Hz
So z.B.
Die Stabilität des Taktes und die Grundgenauigkeit eines Quarzes lassen
eine so exakte Teilung nicht zu. Das mag zwar examplarisch zu einem
bestimmten Zeitpunkt und bei einer bestimmten Temperatur zutreffen.
Reproduzierbarkeit, Langzeitstabilität und thermische Stabilität wird
man dadurch nicht erreichen.
Ich hoffe ich gehe recht in der Annahme, dass das "1pps" aus der
Netzfrequenz hergeleitet wird. Dass ist es besser die Zeit von einem zum
anderen "1pps" zu messen (100MHz-Takte zählen) und diesen dann
rechnerisch für die näschten 80 Messungen einteilen. Das ist dann
kurzeitstabil und gleicht sowohl die Netz-Frequenzschwankungen als auch
die Quarzschwankungen aus.
Im übrigen prinzipielle Überlegungen zu der Messaufgabe:
Die Netzfrequenz ist aus sicht der Kraftwerke Lastabhängig. Daher
schwankt diese über den Tag verteilt sehr. Nur im Langfristigen Mittel
(über Tage oder sogar Wochen) werden die 50 Hz exakt eingehalten. Wir
hatten einmal eine Digitaluhr direkt mit den 50 Hz aus dem Trafo
getaktet aufgebaut. Die hatte über Monate keine Abweichung. Innerhalb
eines Tages war die Abweichung zeitweise über eine halbe Minute. Daher
30s = 30 Mio us. Bei 12h in der diese Differenz zustande kahm sind 12h *
60min 60sec 50Hz = 2,16 Mio Perioden. Daraus ergibt sich eine
mittlere Abweichung von fast 14us.
"Im Verbundnetz der westeuropäischen Länder darf die Netzfrequenz nur um
etwa 0,05 Hertz von der 50-Hertz-Norm abweichen", heißt es bei folgender
Seite:
http://members.magnet.at/alpha-channel/electro/Lastvert/inetz.htm
Das sind immerhin 20us / Periode. Das das nicht so weit hergeholt ist,
zeit die Uhr. Da muss ich die 4us maximalen Jitter mal grundlegend
hinterfrage. Vielleicht sollte die Messaufgabe deshalb nicht auf die
Frequenz sondern auf die Phasenlage bezogen betrachtet werden.
Die Netz- und die Quarzfrequenzen sind von Sekunde zu Sekunde sehr
stabil und ändern sich nur sehr wenig. Eine Messung des
Synchronisationsintervalles läßt eine ausreichende
Genauigkeitsbestimmung für die nächste Periode zu.
Die Lösung des Problems in VHDL:
Zeit Messen in dem man Takte zählt. Dann gibt es zwei
Lösungsmöglichkeiten:
1. CPU
2. Tabellen (in RAM-Blöcken)
Wahrscheilich ist die letztere die praktikablerere. Es müssen ja "nur"
alle Frequenzen von 48,95 Hz bis 49,05 Hz abgedeckt werden. Die
Quarzgenauigkeit spiel da schon keine nennenswerte Rolle mehr.
Rechnerisch sollten es genau 250 Schritte sein um die 4us einzuhalten.
Mit einer Tabelle von 512 Werten sollte man also hinreichen genau
werden.
> Wahrscheilich ist die letztere die praktikablerere. Es müssen ja "nur"> alle Frequenzen von 48,95 Hz bis 49,05 Hz abgedeckt werden.
Es ist ein 60Hz-Netz ;-)
>> Mit den 4.8 kHz werden Stom und Spannung in einem 60Hz>> Wechselspannungsnetz abgetastet. Das sind 80 Abtastungen pro Periode.> Vielleicht sollte die Messaufgabe deshalb nicht auf die> Frequenz sondern auf die Phasenlage bezogen betrachtet werden.
Unbeantwortet ist z.B. die Frage, warum die Abtastzeitpunkte so
dermaßen genau an jeweils derselben Stelle sein müssen. Ich würde z.B.
ganz pragmatisch die Zeit zwischen zwei Nulldurchgängen ermitteln, und
dann die 80 Messungen (warum so ein unbinärer Wert? Von 360° kann der
kaum kommen...) so aufteilen, dass die nächste Halbwelle phasengenau von
Nulldurchgang bis Nulldurchgang mit 80 Messungen erfasst wird.
> Zeit Messen in dem man Takte zählt.
Und den ermittelten Wert durch 80 teilen, fertig.
Wunderschönen Guten Morgen, ich bedanke mich nochmal für die zahlreichen
Antworten.
Das 1PPS Signal stammt von einem GPS-Empfänger und ist auf 1us genau.
Das Signal aus den 50 bzw. 60 Hz zu nehmen macht ja keinen wirklichen
Sinn. Es soll ja Strom und Spannung (aller 3 Phasen) überwacht werden.
Evtl muss zur Synchronisierung (80 Samples pro Periode) die 50 oder 60
Hz herangezogen werden.
> Das 1PPS Signal stammt von einem GPS-Empfänger und ist auf 1us genau.
Das Hilft Dir dann leider nichts
> Das Signal aus den 50 bzw. 60 Hz zu nehmen macht ja keinen wirklichen> Sinn. Es soll ja Strom und Spannung (aller 3 Phasen) überwacht werden.
Das GPS hift vielleicht einen exakten Zeitstempel der Messung zuordnen
zu können, aber um eine Synchronisation zu den 50Hz, bzw. 60Hz kommst Du
nicht herum. Auch bei einem 3-Phasensystem kann man auf eine Phase
synchronisieren. Die beiden anderen Phasen laufen ja nicht weg. Sonnst
Misst Du alles, nur nicht eine Phase.
> Evtl muss zur Synchronisierung (80 Samples pro Periode) die 50 oder 60> Hz herangezogen werden.
Nicht nur evtl..
> Mit DCMs komme ich nicht bis 4.8 kHz, da nur ein Faktor von
maximal 16 möglich ist.
100 MHz durch 25 gleich 4 MHz. Mit DCM mal 6 gleich 24 MHz. Dann durch
5000
teilen. Das Ergebnis müsste dann eigentlich 4,8 kHz lauten (und nicht
42,
wie ansonsten).