Sinus-Generator von FPGA an DAC analog umwandeln

Gast #1946455
Hallo,

ich habe auf einem ML505-Board von Xilinx testhalber mal einen 
Sinus-Generator in Verilog erzeugt, der mein Signal aus dem FPGA analog 
umwandeln soll. Als DAC verwende ich einen DAC5686 von TI.
Das ist ein zweikanaliger 16-Bit DAC, bei dem ich umgewandelt auf dem 
einen Kanal einen Sinus und auf dem anderen einen Cosinus erwarte.
Nun ist das aber so, dass ich aus beiden Kanälen ein und das selbe 
Signal bekomme, obwohl ich (schon gemessen) andere Zahlenwerte an den 
Biteingängen habe. In der Simulation hat es eigentlich soweit gepasst 
und auch am Eingang des DAC messe ich die richtigen Werte.
D.h. ich müsste den DAC nun auch so einstellen, dass er mir beide 
Signale die ich haben möchte auch richtig, also um 90° phasenverschoben, 
liefert. Habe schon alle erdenklichen Einstellungen probiert: 
2-Komplement ist eingestellt, DAC Coarse Gain auf Maximum usw. ich 
hoffe, dass mir jemand bei diesem Problem helfen kann.
Gast
Entweder hast Du einen Fehler in Deinem Code oder Du misst halt Mist!

Oh man! Denk mal darüber nach: Wie soll jemand aus Deinen 933 Anschlägen 
umfassenden Gefasel schlau werden?
Gast
hmm okay - dann halt in der Praxis:

- folgender Code:
module sin_gen(clk, reset, sin, cos, send_clk);
  //Variablen
   input clk, reset;
   output[15:0] sin, cos;
   output send_clk;
  reg[15:0] sin_r, cos_r;

  //Berechnung
  assign      send_clk = clk;
   assign      sin = sin_r + {cos_r[15], cos_r[15], cos_r[15], 
cos_r[15], cos_r[15], cos_r[15], cos_r[15], cos_r[15], cos_r[15:8]};
   assign      cos = cos_r - {sin[15], sin[15], sin[15], sin[15], 
sin[15], sin[15], sin[15], sin[15], sin[15:8]};


   always@(posedge clk or negedge reset)
     begin
         if (!reset) begin
             sin_r <= 0;
             cos_r <= 32752;
         end else begin
                 sin_r <= sin;
                 cos_r <= cos;
             end
     end
endmodule

- folgendes Simulationsergebnis:
Sinus: 1 ....32755 32756 32755 ... 1 0 -1 ... -32755 -32756 -32755 ... 
-1 0 1 ...

Cosinus: 32755 ... 1 0 -1 ... -32755 -32756 -32755 ... -1 0 1 ...

- folgendes real analog moduliertes Ergebnis:
siehe Bild im Anhang


Kann mir jemand verraten wie ich den Hilbert-Transformator im DAC 
abschalten kann bzw. Dual-DAC-Einstellungen vornehmen kann ohne, dass 
diese sich am Ausgang miteinander addieren bzw. der eine auf den anderen 
multipliziert wird?
Angehängte Dateien:
Gast
Das kann nur dein DAC Hersteller, würde sich sagen,

Aber was anderes: Mir scheint der Code so, als ob du beides tust: Cosinu 
nehmen und 90 Grad verschieben, sodaß sich das wieder aufhebt.
Gast
Danke, aber nö - Code hat gepasst!
Das Problem lag wirklich am DAC... auf dem Board waren vier 
0-Ohm-Widerstände, die NC sein hätten sollen, mit denen beide 
DAC-Ausgänge auf +3,3V kurzgeschlossen wurden, nachdem ich die 
rausgenommen habe war die Phasenverschiebung schön sichtbar.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.