Hi Leute, ich hab den Code,der den Sinnussignal erzeugt, auf die Seite ''http://www.lothar-miller.de/s9y/archives/57-Sinusausgabe-mit-PWM.html#extended''; gefunden. Ich hab auch schon gecheckt und simuliert beim ModelSim.Der Frequenz von Sinnus ist 5 Hz.Er stellt den Wert "Freq_Data => x"CC"," ein.Aber ich kann nicht verstehen,wie er von x"CC" d.h 204 nach 5 Hz umrecht. Jemand kann mir helfen? Vielen Dank! ------------------------------- library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; Entity DDFS is Port ( CLK : in std_logic; Freq_Data : in std_logic_vector (7 downto 0); Dout : out std_logic_vector (7 downto 0) ); end DDFS; Architecture RTL of DDFS is signal Result : std_logic_vector (7 downto 0); 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 begin process begin wait until rising_edge(CLK); Accum <= Accum + unsigned(Freq_Data); end process; ............. ------------------------ und dann ----------------------- .................... begin I_ddfs : DDFS port map( CLK => clk, Freq_Data => x"cc", Dout => sinus); sinusplusoffset <= std_logic_vector(unsigned(sinus)+to_unsigned(128,8)); I_pwm : PWM port map( CLK => clk, pwmvalue => sinusplusoffset, pwmout => pwmout); end Behavioral;
> signal Accum : unsigned (20 downto 0) := (others=>'0');
Das ist ein 21-Bit Zähler von 0 bis 2097151, ein kompletter
Zählerdurchlauf hat also 2^21 = 2097152 Schritte.
Und der Increment Freq_Data ist 0xCC = 204.
Jetzt wird mit jedem Takt auf den Zähler Accum dieser Wert 204
addiert.
Bis der 1 mal überläuft dauert das dann 2097152/204 = 10280 Takte.
Und ein Durchlauf entspricht einem vollen Zyklus der Sinuskurve.
Also gilt
fsinus = fclk * Freq_Data / (2^21)
War das jetzt sooo schwierig?
Wenn deine 5Hz genau stimmen, hast du vermutlich eine Taktfrequenz von
fclk = 5 Hz * (2^21) / 204 = 51,4 kHz
BTW:
Bei der Klausur sitze ich nicht neben dir :-/
Ich werde mich bemühen darum,dass allein zu sitzen:D. Ich danke dir sehr viel.
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.