Hallo, kann man mit LtSpice die Ausgangsspannung eines DDS-ICs simulieren? Mittels Sample-Hold-Block konnte ich quasi schon mal die Stufen eines DACs abbilden (nennt man das wertdiskret?). Was mir da jetzt noch fehlt, ist quasi der Akkumulator bzw. das TuningWord eines DDS-ICs. Plan B ist, dass ich eine kleine DDS-Software schreibe und die Werte über eine PWL Datei in LtSpice ausgebe. Unschön, jedoch machbar. Aber ich kenne LtSpice nicht gut genug, um zu wissen, ob's auch anders geht. Ralf
Ralf schrieb: > kann man mit LtSpice die Ausgangsspannung eines DDS-ICs simulieren? Natürlich. > Mittels Sample-Hold-Block konnte ich quasi schon mal die Stufen eines > DACs abbilden (nennt man das wertdiskret?). ??? Sicher ein falscher Ansatz. Du hast überverkompliziert umgesetzt, was du von der Sache verstanden hast, nicht die Sache selbst...
c-hater schrieb: > Sicher ein falscher Ansatz. Du hast überverkompliziert umgesetzt, was du > von der Sache verstanden hast, nicht die Sache selbst... Dann lass mich an deinem Wissen teilhaben :) Ralf
Ralf schrieb: > Mittels Sample-Hold-Block konnte ich quasi schon mal die Stufen eines > DACs abbilden (nennt man das wertdiskret?). Nö: der S&H macht bei dir wahrscheinlich zeitdiskrete Abtastungen, aber wertediskret wird dabei normalerweise nichts. Geht es dir nur darum, einen zeit- und wertediskreten Sinus zu erzeugen (so wie er aus dem DAC eines DDS-ICs rauskommt)? Das ginge z.B. per S&H und behavioral volags source, siehe Anhang. Oder willst du ein reales DDS-IC simulieren? Dann brauchst du dessen Modell (und keinen Sample&Hold) Oder willst du ein Modell eines DDS-IC nachbauen, um dessen Funktionsweise zu illustrieren? Dazu wäre wiederum kein S&H nötig (der kommt im DDS-IC auch nicht vor).
Hallo Achim, danke für deine Antwort. > Nö: der S&H macht bei dir wahrscheinlich zeitdiskrete Abtastungen, aber > wertediskret wird dabei normalerweise nichts. Okay, dann hab ich die Begrifflichkeiten wohl durcheinander gewirbelt. Das muss ich mir anschauen. > Geht es dir nur darum, einen zeit- und wertediskreten Sinus zu erzeugen > (so wie er aus dem DAC eines DDS-ICs rauskommt)? Genau, der Spannungsverlauf, wie er aus einem DDS-IC rauskommt würde schon reichen. Im ersten Schritt reicht auch Sinus, später beliebige Signalformen. Mittels Sample-Hold bekomme ich wie bereits erwähnt schon mal den "Treppen"-Sinus, nur eben gleichmäßig. Und das ist ja bei DDS nicht der Fall, weil ja innerhalb der LUT quasi gesprungen wird, und das würde ich gern in LtSpice abbilden. > Oder willst du ein reales DDS-IC simulieren? Dann brauchst du dessen > Modell (und keinen Sample&Hold) > Oder willst du ein Modell eines DDS-IC nachbauen, um dessen > Funktionsweise zu illustrieren? Dazu wäre wiederum kein S&H nötig (der > kommt im DDS-IC auch nicht vor). Nein, für die Illustration der Funktionsweise würde m.E. schon das "übliche" Blockschaltbild reichen. > Das ginge z.B. per S&H und behavioral volags source, siehe Anhang. Aaah, das sieht doch gut aus - das entspricht bereits meiner LtSpice-Schaltung, ich habe für B1 momentan
1 | V=int(V(vs0)) |
wobei vs0 die S&H-Ausgangsspannung ist. Soweit war ich also wohl gar nicht weg von der Lösung, nur musste ich mit einer Eingangsspanung im dreistelligen Bereich arbeiten XD Also schon mal vielen Dank hierfür. Zweieinhalb Fragen habe ich dazu: 1) Die Auflösung des "DACs" stellt man in deiner Variante
1 | V=round(V(Zeitdiskret)/50m)*50m |
über "50m" ein, habe ich das richtig verstanden? Wenn ich also beispielsweise einen 10-Bit DAC simulieren möchte, dann wäre es teilen bzw. multiplizieren mit 1024? 2) Das Ausgangssignal von B1 sieht auf deinem Bild "gleichmäßig" aus. Der Verlauf ist zwar nicht für jede Periode identisch, aber die "Treppen" sind bei jeder zweiten Halbwelle identisch. Das ist dem Umstand geschuldet, dass sich die 800kHz des Eingangssignals exakt durch die Samplefrequenz teilen lassen, ist das korrekt? 2,5) Ich habe bei meiner Suche nach dem korrekten Ansatz für LtSpice gesehen, dass nahezu alle Schaltungen für die Samplefrequenz ein unsymmetrisches Signal verwenden. Du verwendest 1% DutyCycle. Gibt es hierfür einen speziellen Grund? Soweit ich S&H verstanden habe, ist der Clock-Eingang flankengesteuert, während der S/H-Eingang pegelgesteuert ist - hier würde ich einen möglichst kleinen DutyCycle für diese Anwendung verstehen. Ralf
Ralf schrieb: > 1) Die Auflösung des "DACs" stellt man in deiner > VarianteV=round(V(Zeitdiskret)/50m)*50müber "50m" ein, habe ich das > richtig verstanden? Ja Ralf schrieb: > Wenn ich also > beispielsweise einen 10-Bit DAC simulieren möchte, dann wäre es teilen > bzw. multiplizieren mit 1024? Nein: du musst durch die Größe des Quantisierungsintervals teilen. Wenn dein 10 Bit DAC einen Spannungsbereich von 2V hat, dann musst du durch (2V/1024)=1,95mV teilen. Ralf schrieb: > 2) Das Ausgangssignal von B1 sieht auf deinem Bild "gleichmäßig" aus. Meinst du gleichmäßig bezogen auf die Zeitpunkte? Oder auf die Spannungswerte? Das sind halt die Werte, die bei 800kHz Sinus und 10MHz Abtastung rauskommen. Ralf schrieb: > Du verwendest 1% DutyCycle. Gibt es > hierfür einen speziellen Grund? Eher 10% als 1%. Aber der Grund ist einfach, dass ich auf diese Weise die Abtastperiode (in dem Fall 100ns) problemlos größer oder kleiner machen kann ohne dass der Puls schon länger wird als die gesamte Periodendauer.
Ralf schrieb: > Das ist dem > Umstand geschuldet, dass sich die 800kHz des Eingangssignals exakt durch > die Samplefrequenz teilen lassen, ist das korrekt? Ach, jetzt verstehe ich, was du meinst. Die Frequenz des Sinus ist 800kHz, die Periodendauer 1250ns. Das wird mit 10MHz (100ns) abgetastet. 1250/100 ergibt keine ganze Zahl, aber nach zwei Perioden passt die Abtastrate exakt in die doppelte Periodendauer rein (genau 25 Samples)
> Nein: du musst durch die Größe des Quantisierungsintervals teilen. Wenn > dein 10 Bit DAC einen Spannungsbereich von 2V hat, dann musst du durch > (2V/1024)=1,95mV teilen. Danke, schon ausprobiert :) > Meinst du gleichmäßig bezogen auf die Zeitpunkte? Oder auf die > Spannungswerte? Das sind halt die Werte, die bei 800kHz Sinus und 10MHz > Abtastung rauskommen. Bezogen auf die Spannungswerte. Hab mit den Frequenzen gespielt, je höher die Eingangsfrequenz, desto mehr Varianz in den Spannungswerten einer Halbwelle, passt. > Eher 10% als 1%. Bist du sicher? Soweit ich sehen kann, sind die beiden letzten Werte T(on) und T(period), und das gibt bei 1n und 100n 1%. > Aber der Grund ist einfach, dass ich auf diese Weise die Abtastperiode (in > dem Fall 100ns) problemlos größer oder kleiner machen kann ohne dass der > Puls schon länger wird als die gesamte Periodendauer. Ah, jetzt verstehe ich, dann muss man nur einen Wert ändern. Eine Frage ist doch noch aufgetaucht: Nach allem was ich über DDS gelesen habe, soll die Anzahl der LUT-Einträge (mindestens) das doppelte der DAC-Auflösung betragen. Also bspw. bei einem 10-Bit DAC 2048 Einträge. Spielt das bei dieser Simulation überhaupt eine Rolle? Als Simulationsneuling würde ich jetzt nein sagen, weil ein zeit- und wertkontinuierliches(*) Eingangssignal vorliegt. Oder doch nicht? (*) Wer übrigens wie ich die Begrifflichkeiten durcheinander würfelt, hier ein schönes Schaubild zu zeit-/wert-kontinuierlich/-diskret: https://www.eit.hs-karlsruhe.de/mesysto/teil-a-zeitkontinuierliche-signale-und-systeme/zeitkontinuierliche-signale/klassen-von-signalen/kontinuierliche-und-diskrete-signale.html Ralf
Ralf schrieb: > Bist du sicher? Soweit ich sehen kann, sind die beiden letzten Werte > T(on) und T(period), und das gibt bei 1n und 100n 1%. Ne bin ich nicht. Ich hab tatsächlich die Werte für t_on und t_fall vertauscht eingegeben. Macht aber nix: t_fall trägt ja auch zur Pulsdauer bei. Wenn ich die Pulsbreite bei halber Höhe betrachte, dann ist die Pulsdauer 1/2*(t_rise+t_fall)+t_on = 6,5 ns. Also ein Tastgrad von 6,5% ;-) Ralf schrieb: > Ah, jetzt verstehe ich, dann muss man nur einen Wert ändern. richtig. Wenn du das ernsthaft einsetzen willst, kannst du die Angabe auch parametrisieren. Also z.B. t_on auf {TP/2} und T_Period auf {TP} setzen und dann mit einem .param tp=... auf den gewünschten Wert setzen. Ralf schrieb: > Spielt das bei dieser Simulation überhaupt eine Rolle? Ist für eine echte DDS sinnvoll, damit man die Auflösung des DAC überhaupt ausnutzen kann. Aber bei dieser Simu spielt es tatsächlich keine Rolle.
> Ne bin ich nicht. Ich hab tatsächlich die Werte für t_on und t_fall > vertauscht eingegeben. Dann freut's mich, dass ich drauf aufmerksam machen konnte und somit wenigstens ein kleines bisschen von deiner großen Hilfe erwidern konnte :) > Wenn du das ernsthaft einsetzen willst, kannst du die Angabe auch > parametrisieren. Das hatte ich schon so gemacht, passt. Deswegen ist mir dann auch die Frage nach dem Tastgrad aufgekommen. > Ist für eine echte DDS sinnvoll, damit man die Auflösung des DAC > überhaupt ausnutzen kann. Aber bei dieser Simu spielt es tatsächlich > keine Rolle. Okay. Dann kann ich jetzt mal ein bisschen Richtung Rekonstruktionsfilter gehen. Das mit den behavioral sources ist nun auch noch ein bisschen klarer geworden, vielleicht werde ich es mal versuchen, auf diese Weise andere Signalformen zu generieren (im Notfall doch PWL Dateien). Nochmals vielen Dank für deine Hilfe, das hat mir sehr geholfen. Ralf
Hier mal ein Beispiel für eine DDS-Simulation basierend auf einem älteren Beispiel aus der LTspice-Yahoo-Group. Richtige Schreibweise: LTspice Die aktuelle Version ist LTspiceXVII.
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.