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: > Hat sich vielleicht in den letzten 6 Jahren da was > ergeben? Dazu nimmt man einen FPGA, ggf. einen SRAM und einen DAC. Grüße, Heinz
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"
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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.
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.