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
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.
Einen scheusslichen Sinus hast du da implementiert, Lothar, schäm' Dich :-) Den muss man noch schwer filtern. :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.