Forum: FPGA, VHDL & Co. Impulsgenerator mit CPLD MaxV Altera bauen (Einstellbar)


von Harald G. (hallo_s)


Lesenswert?

Ich eröffne mal ein neuen Fred, damit die Überschrift auch zum Thema 
passt, abgeleitet aus meinem vorherigen Fred:
Beitrag "BCD zu Binär Konverter 74er Reihe?"

Die Frage ist folgende:

Ich möchte mit einem MaxV CPLD von Altera ein einstellbaren
Impulsgenerator bauen. 3 BCD Codierschalter habe ich, welche eine
Frequenz vom 100Hz (entspricht die einer Stelle) bis 99900Hz einstellbar
machen soll. (Impulsfrequenz ist 100x höher als eingestellter 
Zahlenwert)

Das Funktioniert auch zwar, aber bei den höheren Frequenzen ist es,
wegen der Rundungsfehler, ungenau.
Ich nehme ein 20Mhz Oszillator.
100000 teile ich durch den eingestellten Wert. Mit dem Ergebnis lade ich
ein Zähler und zähle rückwärts auf 0. Dann toggele ich ein FlipFlop,
damit Impuls und Pausenzeit gleich lang werden, daher die 20Mhz
Taktfrequenz beim Zähler und keine 10Mhz.

Nun reicht, wie ich rechne, die Auflösung von 10Mhz nicht aus, um einen
unterschied ersichtlich zu machen, z.B wenn ich 901,902,903,904
einstelle, ist das Ergebis jedesmal gleich und gibt immer 90900Hz aus.
Wo liegt mein Denkfehler?
Oder muss ich Faktor 10 höher gehen mit meiner Taktfrequenz (100MHz)?

Klar dass man sowas einfacher mit ein Mikroprozessor machen kann, aber
der CPLD ist gerade in der Schaltung enthalten und noch genug Platz im
CPLD frei.

von Andi (Gast)


Lesenswert?

Google mal nach DDS (Direct Digital Synthesis).

von J. S. (engineer) Benutzerseite


Lesenswert?

Die DDS hat er ja faktisch schon, wenn er Takte teilt und Rechtecke 
absendet. Genauer geht es so eben nicht. Die Phasensprünge, die er jetzt 
hat, sind dieselben, die man mit einem Phasen-Akku erhalten würde, nur 
anders verteilt:

http://www.96khz.org/oldpages/limitsofdds.htm

Die so erzeugte Welle springt in der Frequenz statistisch um das 
eigentliche Ziel herum, trifft es aber nicht. Das merkt man sogar bei 
Audio-Synthese, da dort nur mit 192kHz abgetastet wird. Faktor 10 reicht 
da einfach nicht.

Was man hier braucht, ist eine zweistufige DDS, die einen ersten Takt 
mit den typischen Phasensprüngen erzeugt, der dann nochmal 
(analogtechnisch) gefiltert wird und später auf die benötigte Frequenz 
hochmultipliziert wird:

Beitrag "Re: Universell programmierbarer DDS-Funktionsgenerator"

Die dort gepostete Schaltung sollte für die hiesige Anwendung 
dahingehend modifiziert werden, dass stärker gefiltert wird. Die 20MHz, 
2MHz z.B. auf 5MHz herabsetzen, dafür den zweiten weglassen. Gfs auch 
den zweiten DAC weglassen.

: Bearbeitet durch User
von Andi (Gast)


Lesenswert?

Der Takt von 20 MHz bestimmt halt das Raster in dem die Frequenzen 
erzeugt werden können. Um 90000 Hz (90.0 kHz) sind folgende Frequenzen 
möglich:
1
20MHz / 111 / 2 = 90.1 kHz
2
20MHz / 110 / 2 = 90.9 kHz
Willst du jetzt z.B 90.5 kHz einstellen, so wird die DDS abwechselnd 
eine Periode mit 90.1 und eine mit 90.9 kHz erzeugen, im Mittel ist das 
90.5 kHz.

Bei 90.3 werden 3 Perioden mit 90.1 und eine mit 90.9 erzeugt.
Die DDS macht das automatisch indem der Fehler zur richtigen Frequenz 
aufsummiert wird, und wenn der Fehler zu gross wird eine um 1 Takt 
kürzere Periode erzeugt wird.

Mit DDS wird die Frequenz, bei nicht ganzzahligem Teiler, also leicht um 
die exakte Frequenz herumeiern, aber im Mittel stimmt's ziemlich genau. 
Je nach Anwendung ist das akzeptable, oder auch nicht.

von J. S. (engineer) Benutzerseite


Lesenswert?

Nun ja, das stimmt, aber wenn ich an einem Gerät einen Takt digital, 
also mit numerischen Werten ausdrücklich vorgeben kann, hätte ich die 
Erwartungshaltung, dass der Generator die dann auch so bringt und nicht 
drum herum hampelt :-)

Weil, dann brauche ich das auch nicht digital bauen, sondern nehme einen 
analogen Schwingkreis und stelle ihn ein. Dann braucht es nur ein Chip 
mit zwei Monoflops für a) die Wiederholrate und b) die Dauer des 
Impulses.

von Harald G. (hallo_s)


Lesenswert?

Ich frage mich nur wie die Hersteller von Frequenzgeneratoren das 
machen. Da kann man von mHz bis mehrere MHz alles einstellen auch z.B 
30.000.001Hz genau.

von A. F. (chefdesigner)


Lesenswert?

Die verwenden hochgenaue Oszillatoren, z.T. mit Chips, die bis zu 500MHz 
exakt einstellen können. Diese werden mit PLLs betrieben, um den Takt zu 
stabiliseren.

von Freundlicher Hinweisgeber (Gast)


Lesenswert?

Sowas wie den AD9833? Der kann bis 50MHz, liefert etwa 10MHz per DDS. 
Gibt es bei EBAY zu 3,95 die komplette Baugruppe mit DAC und Quarz.

von J. S. (engineer) Benutzerseite


Lesenswert?

Die oben erwähnten AD-Chips arbeiten auch nicht anders. Vektor und 
Tabelle mit Phasensprüngen der DDS. Die Glättung erfolgt teilweise 
intern, muss aber extern weiter betrieben werden.

Will man das phasenrein haben muss man auch dann zweistufig arbeiten. 
Das hat auch ein FAE von AD schon eingesehen ;.)

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.