Forum: FPGA, VHDL & Co. Frequenz DDFS


von Burkhard (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Mikrokontollerforum,
hat sich jemand von euch schon mal mit einer DDFS befasst.
Ich habe Code von Lothar M. dazu gefunden, nur ist mir nicht klar wie 
ich die Frequenz einstelle und nach welcher Auflösung. Wie funktioniert 
diese Einstellung? sind die 8 Bit unter "Freq_Data" von x01-xFF 
einstellbar? Welchen Frequenzbereich wird reguliert?

Mit freundlichen Grüßen,
Burkhard

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


Lesenswert?

Dann packen wir mal unsere Finger aus und beginnen abzuzählen... ;-)
Der Akkumulator ist 21 Bits breit.
1
  signal Accum   : unsigned (20 downto 0) := (others=>'0'); 
2
3
  alias  Address : unsigned (6 downto 0) is Accum(Accum'high-1 downto Accum'high-7);
4
  alias  Sign    : std_logic is Accum(Accum'high); -- MSB
Ein kompletter Zyklus ist also nach Sign&Adress = 256 Zählschritten der 
obersten 8 Bits des Akkus durchlaufen.
1
     wait until rising_edge(CLK);
2
     Accum <= Accum + unsigned(Freq_Data);
Der Wert von Freq_Data wird auf wird auf die unteren 8 Bit des Akkus 
aufaddiert.

> Wie funktioniert diese Einstellung?
Freq_Data wird auf den Akku aufaddiert und die obersten 8 Bit

> sind die 8 Bit unter "Freq_Data" von x01-xFF einstellbar?
Sie sind genau genommen von x"00" bis x"FF" einstellbar. Wobei x"00" in 
einer Gleichspannung resultiert, weil ja der Akku nicht mehr 
weitergezählt wird.

> Welchen Frequenzbereich wird reguliert?
Mit Freq_Data=1 braucht ein kompletter Sinusdurchlauf 2^21 Takte des 
Systemtaktes. Mit Freq_Data=2 sind es nur 2^20 Takte...
In Zahlen: wenn CLK 50 MHz sind, dann kommt mit Freq_Data=1 eine 
Frequenz von ca. 24Hz heraus, mit Freq_Data=2 sind es 48Hz, mit 
Freq_Data=3 sind es 72Hz...
Als Formel könnte man das so schreiben:
fdout = (fclk/2^21) * Freq_Data
mit fdout = Sinusausgangsfrequenz
und fclk = Taktfrequenz

Damit ergibt sich dann die höchste Frequenz zu 23.8Hz * 255 = 6080Hz.
Die Auflösung zwischen 2 Frequenzen ist der Schritt von fclk/2^21 = 
23,8Hz.

von J. S. (engineer) Benutzerseite


Lesenswert?

Einen scheusslichen Sinus hast du da implementiert, Lothar, schäm' Dich 
:-)

Den muss man noch schwer filtern. :-)

von Segor (Gast)


Lesenswert?

filtern muss man eh, wenn man was damit anfangen will

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.