Hallo,
ich habe im Prinzip das gleiche Anliegen wie hier beschrieben:
Beitrag "DDS mit arbitrary waveform?"
ich suche also einen DDS wo ich den LUT mit einer beliebigen Wellenform
neu beschreiben kann. Hat sich vielleicht in den letzten 6 Jahren da was
ergeben?
VG,
Ludwig
Ludwig schrieb:> ich habe im Prinzip das gleiche Anliegen wie hier beschrieben:> Beitrag "DDS mit arbitrary waveform?"> ich suche also einen DDS wo ich den LUT mit einer beliebigen Wellenform> neu beschreiben kann. Hat sich vielleicht in den letzten 6 Jahren da was> ergeben?
Was, seit sechs Jahren warst du nicht in der Lage, diese überaus
primitive Erweiterung zu einem der vielen existierenden frei verfügbaren
DDS-Codes hinzuzuprogrammieren? (von selbst Geschriebenem brauchen wir
wohl vermutlich erst garnicht reden?!)
Ludwig schrieb:> ich suche also einen DDS wo ich den LUT mit einer beliebigen Wellenform> neu beschreiben kann.
Das kann sehr einfach sein, das kann aber auch eine aufwändige
Angelegenheit werden. Das kommt sehr drauf an, was du für Anforderungen
an das Ding hast.
hp-freund schrieb:> AD9102 ?
ich denke, so einen konkreten IC kann man kaum empfehlen, wenn man nicht
weiß, was für Anforderungen oder zumindest Vorstellungen zu Frequenzen,
Bandbreite, Anzahl der Ausgabekanäle (IQ?), SNR bzw. SINAD und Auflösung
existieren.
Hallo Ludwig,
ich überlege gerade so etwas gerade mit dem AD9854 und einem FPGA zu
realisieren.
Der AD9854 hat 2 12Bit DAC, die man direkt mit 100 MByte/s ansteuern
kann
und damit müssten 1 Kanal mit 50Msps oder 2 Kanal mit 25 Msps machbar
sein.
Ich hab so ein China Modul mit dem Chip und einem ATMEGA32A darauf, aber
der ATMEGA steuert den AD9854 seriell über SPI an und die Verbindung zum
PC ist nur 9600Baud.
jetz muss ich erstmal die Firmware umschreiben auf parallel und 256
KBaud, dann kann ich die direkte Ansteuerung der DAC mal ausprobieren.
Wenn das funktioniert will ich den ATMEGA runterwerfen und ein FPGA
daran hängen.
siehe: Beitrag "DDS AD9854 China- Modul"
Erstmal vielen Dank für die (hilfreichen) Antworten.
Es geht darum ein Signal bestehend aus der Summe mehrerer
Sinusschwingung zu erzeugen. Die Frequenz der einzelnen Komponenten
bewegen sich zwischen 1 und 20 Mhz, Genauigkeit sollte bei mindestens 12
Bit liegen. Da ich im Frequenzbereich sehr dynamisch sein muss, wäre
eine hohe Sampling Rate von 150 MS/s praktisch.
Ich benutze dafür bis jetzt einen Waveformgenerator von Rigol. Ich hätte
aber gerne eine flexiblere Lösung. Ein eigenes FPGA dazu zu verwenden
möchte ich wegen des Programmieraufwandes wenn möglich vermeiden. Der
AD9102 sieht schon mal sehr interessant aus, ich werde ihn mir mal
genauer anschauen.
Viele Grüße,
Ludwig
Wie soll der DDS mehrere Sinusschwingungen gleichzeitig erzeugen? Das
geht doch nur, wenn in das RAM soviele Schwingungen reinpassen, dass das
kleinste gemeinsame Vielfache aller Frequenzen erreicht wird.
Also in ein RAM mit z.B. 128M*12Bit passen bei 100 MHz Auslesetakt 128
Schwingungen von 1 MHz oder 32 Schwingungen von 4 MHz usw., jedenfalls
immer eine ganzzahlige Schwingungszahl, sonst gibt es Sprünge in der
Sinusform.
Die kann man dann beliebig überlagern, eine Komponente dann aber nur
noch mit entsprechend reduzierter Amplitude.
Das DDS-Prinzip nutzt dabei nichts, es ist einfach ein Zähler mit
schnellem RAM.
Christoph Kessler (db1uq) schrieb:> Wie soll der DDS mehrere Sinusschwingungen gleichzeitig erzeugen? Das> geht doch nur, wenn in das RAM soviele Schwingungen reinpassen, dass das> kleinste gemeinsame Vielfache aller Frequenzen erreicht wird.
natuerlich muss man den sinus nur ein einziges mal ueber eine periode
abspeichern und nicht 128 mal... alle sinusse mit beliebiger frequenz
gehen durch einfache rechenoperationen daraus hervor.
Er will doch mehrere Sinusschwingungen unterschiedlicher Frequenz
gleichzeitig auf einem DA-Wandler ausgeben. Das geht mit einem einzigen
DDS nicht (Man kann höchstens viele DDSse parallel arbeiten lassen und
analog zusammenmischen).
Erst nach einer Zeitspanne, in der alle beteiligten Schwingungen wieder
denselben Zustand erreichen, z.B. alle einen Nulldurchgang haben, darf
der Kurvenformspeicher wieder von vorn anfangen. Sonst macht irgendeine
Sinusschwingung einen Sprung.
Es geht darum je Frequenz einen Phaserraum Register zu haben, mit diesem
in die Sinus Lookup table rein, der Wert rausziehen, Alle Werte
addieren, und ueber den DAC raus. Das waer dann am Besten ein FPGA.
Sorry, alles andere ist nur muehsam.
Christoph Kessler (db1uq) schrieb:> Er will doch mehrere Sinusschwingungen unterschiedlicher Frequenz> gleichzeitig auf einem DA-Wandler ausgeben. Das geht mit einem einzigen> DDS nicht
Natürlich geht das. Jeder primitive Funktionsgenerator für 4,95EUR oder
so bietet das. Der Trick ist einfach: Man berechnet eine beliebige
Waveform (z.B. die Überlagerung etlicher Sinusse) vor und spielt sie
dann ab. Die gesamte Waveform kann man dann beliebig DDS-mäßig "tunen",
wobei sich die Frequenz jeder einzelnen enthaltenen Frequenzkomponente
natürlich proportional ändert.
Eben ein arbitrary function generator. Steht fast genauso schon von
Anfang an als Thema des Threads...
Das Problem des TO ist nach wie vor, daß er wohl zu blöd ist, das selber
zu tun und daß er keinen fertigen Code findet, wo diese primitive
Scheiße (das Füllen eines Puffers mit einer berechneten Waveform)
explizit vorexerziert wird. Die typischen Probleme von
Copy&Paste-"Programmierern" halt.
Nicht weiter wichtig, darüber nachzudenken, das sind allein deren
Probleme.
Ludwig schrieb:> Es geht darum ein Signal bestehend aus der Summe mehrerer> Sinusschwingung zu erzeugen. Die Frequenz der einzelnen Komponenten> bewegen sich zwischen 1 und 20 Mhz, Genauigkeit sollte bei mindestens 12> Bit liegen. Da ich im Frequenzbereich sehr dynamisch sein muss, wäre> eine hohe Sampling Rate von 150 MS/s praktisch.
Also eine Bandbreite von 20MHz, und dabei 12Bit ENOB, also gilt mit
einer OSR von 75/20=3,5 (bzw. 150MS/s und 20MHz)
12 * 6 = N * 6 + 10 * lg(3,5) nach [1]
N=11
Also braucht der DAC 11 Bit ENOB bzw ein SNR von knapp 70 dB über die
vollen 75 MHz. Das ist schon mal nicht so wenig, also ich denke
mindestens 14 Bit Auflösung werden da schon nötig sein (je nach DAC
halt, siehe Datenblatt SINAD oder SNR). Das ist vom ganzen analogen Teil
(Masseführung, Versorgung sonstiges Layout) schon mal ein
anspruchsvoller Bereich.
> Ich benutze dafür bis jetzt einen Waveformgenerator von Rigol. Ich hätte> aber gerne eine flexiblere Lösung. Ein eigenes FPGA dazu zu verwenden> möchte ich wegen des Programmieraufwandes wenn möglich vermeiden. Der> AD9102 sieht schon mal sehr interessant aus, ich werde ihn mir mal> genauer anschauen.
Mit dem AD9102 wird das höchstwahrscheinlich nicht funktionieren, der
hat einen recht eingeschränkten internen Speicher. Also zumindest wenn
die Frequenzen relativ beliebige Vielfache voneinander haben können,
wird das aus schon genannten Gründen nicht funtkionieren, weil man das
kleinste gemeinsame Vielfache der Periodendauern speichern muss. Dann
kommst vermutlich um ein FPGA nicht herum ;)
> Das Problem des TO ist nach wie vor, daß er wohl zu blöd ist, das selber> zu tun und daß er keinen fertigen Code findet, wo diese primitive> Scheiße (das Füllen eines Puffers mit einer berechneten Waveform)> explizit vorexerziert wird. Die typischen Probleme von> Copy&Paste-"Programmierern" halt.
So einfach ist eine eine Digital-Analog-Wandlung mit den genannten
Parametern jetzt nicht aufzubauen, würd ich mal sagen. V.a. wenn dann
noch grundlegendere Kenntnisse fehlen. Also mit dem fertigen Code ists
da lange noch nicht getan... :D
[1]
https://de.wikipedia.org/wiki/Quantisierungsrauschen#Erh.C3.B6hung_des_SNR_durch_.C3.9Cberabtastung
Ok Kein Troll, das entspricht ja meinem Vorschlag für n überlagerte
Sinusschwingungen auch n DDSse aufzubauen. Mehrere DDS-Zähler (je ein
Addierer und Register) und mindestens eine Sinustabelle, die dann aber
seriell von allen DDSsen benutzt werden müsste, das kostet Zeit.
Mein Vorschlag war ein schnelles RAM mit ebenso schnellem
Synchronzähler, das so lang ist dass eine ganze Periode der arbiträren
Schwingung reinpasst. Ist die aus Sinusschwingungen zusammengesetzt,
dann ist ihre Periodendauer gleich dem kleinsten gemeinsamen Vielfachen
der einzelnen Sinus-Periodendauern. Wenn die Frequenzen nicht genau
vorgegeben sind, kann man sich passende wählen.
Die Amplitudenauflösung einer Einzelschwingung fällt aber mit deren
Zahl, pro Zweierpotenz ein Bit. Also ein 12 Bit DAC kann zwei Frequenzen
mit 11 Bit Auflösung oder 4 mit 10 Bit, 8 mit 9 Bit usw. erzeugen, ohne
einen Überlauf befürchten zu müssen. Die Verwendung eines 16 Bit DAC ist
also zu empfehlen.
Christoph Kessler (db1uq) schrieb:> Ok ...... wählen.
klingt ja ganz vernünftig (und schon fast nach FPGA;)
> Die Amplitudenauflösung einer Einzelschwingung fällt aber mit deren> Zahl, pro Zweierpotenz ein Bit. Also ein 12 Bit DAC kann zwei Frequenzen> mit 11 Bit Auflösung oder 4 mit 10 Bit, 8 mit 9 Bit usw. erzeugen, ohne> einen Überlauf befürchten zu müssen. Die Verwendung eines 16 Bit DAC ist> also zu empfehlen.
Das glaube ich nicht. Außerdem bringst du da wohl iwie Auflösung und
Genauigkeit durcheinander.
1) ein 12 Bit DAC hat keine 12 Bit Genauigkeit.
2) Dem Quantisierungsrauschen ist es egal, ob du da jetzt einen oder 10
Sinusse ausgibts, das bleibt (näherungsweise) immer gleich.
Ein 16 Bit-DAC wäre vermutlich aber aus Grund 1) nicht verkehrt.