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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.