mikrocontroller.net

Forum: FPGA, VHDL & Co. Frequenz DDFS


Autor: Burkhard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann packen wir mal unsere Finger aus und beginnen abzuzählen... ;-)
Der Akkumulator ist 21 Bits breit.
  signal Accum   : unsigned (20 downto 0) := (others=>'0'); 

  alias  Address : unsigned (6 downto 0) is Accum(Accum'high-1 downto Accum'high-7);
  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.
     wait until rising_edge(CLK);
     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.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

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

Den muss man noch schwer filtern. :-)

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
filtern muss man eh, wenn man was damit anfangen will

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.