Frequenz DDFS

Gast #1850823
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1850949
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren