Forum: FPGA, VHDL & Co. DAC Ausgabe unerwartete Peaks


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade mit dem AD5064 mittels eines VHDL Modells eine 
statische Spannungsausgabe zu realisieren.
VDD=5V
Vref=5V

Hierbei habe ich den DAC auf midscale ausgesteuert sodass bei der 
angelegten Referanzspannung von 5V also eine Ausgabe von 2,5V zu 
erwarten wäre,
dies geschieht auch, allerdings kommen dazu noch peaks von etwa 3,7V wie 
im Bild zu erkennen.
Dem DAC Ausgang ist nichts weiter "nachgeschaltet".

Link 
Datenblatt:http://www.analog.com/static/imported-files/data_sheets/AD5024_AD5044_AD5064.pdf

Hat jemand eine Ahnung für die Ursache der Peaks?

Gruß Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Hat jemand eine Ahnung für die Ursache der Peaks?
Als Musiker fällt mit auf: die Abstände sind verdächtig gleich...
Wie oft und wie gibst du den Wert an dan DAC?

von Ingo L. (Gast)


Lesenswert?

Oder gibt es etwas was sich mit diesem Muster deckt (LCD Ausgabe etc. )

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang mein VHDL Modell..
Ich gebe den festen Wert immer wieder drauf, also in dem Abstand wie 
eben ein Schreibzyklus vom DAC dauert(Taktfrequenz sind 100MHz.. also 
ist ein Schreibzyklus ca 300µs lang wenn ich mich jetzt nicht verrechnet 
habe).

Gruß Stefan

von Reiner D. (reiner1967)


Lesenswert?

Glitch Impulse? (siehe Datenblatt S. 17)

Gruß, Reiner

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Im Anhang mein VHDL Modell..
1
process(clk)
2
  variable counter:integer range 0 to 999:=0;
3
      begin
4
      
5
          if(rising_edge(clk)) then
6
            if(counter<500) then
7
                sclk<='0';
8
                counter:=counter+1;
9
            elsif(counter<999) then
10
                sclk<='1';
11
                counter:=counter+1;
12
            else  sclk<='1';
13
                counter:=0;
14
            end if;
15
          end if;
16
  end process;
Hoppla, diese Takterzeugung ist aber aufwendig, wenn man bedenkt, dass 
SPI nur gekoppelte Schieberegister sind. Und dass darin eigentlich kein 
Multiplexer vorkommt:
1
  d_in<=dac_data_sequenz(conv_integer(dac_cnt));


Stefan schrieb:
> wenn ich mich jetzt nicht verrechnet habe.
Was sagt das Oszi?
Passt dein Timing auf der SPI-Schnittstelle zum Datenblatt?

von Achim S. (Gast)


Lesenswert?

Hallo Stefan,

täusche ich mich, oder ist deine sclk Erzeugung nirgends synchronisiert 
zum Datenstrom auf d_in?

Falls dem so ist, dann sieht der AD5604 im Lauf der Zeit alle möglichen 
Setup-Zeiten von d_in bezogen auf sclk. Von Zeit zu Zeit könnte es dann 
zu einer Setup-Zeit Verletzung kommen und der AD5604 interpretiert sein 
Kommando falsch. Oszi oder Simulation sollten das Problem sichtbar 
machen.

schöne Grüße

Achim S.

von Stefan (Gast)


Lesenswert?

Ich werde das am Montag nochmal genauer mit dem Oszi überprüfen.
Danke für eure Anregungen.

Gruß Stefan

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.