http://www.lothar-miller.de/s9y/archives/57-Sinusausgabe-mit-PWM.html Hallo. Ich probiere gerade die Sinusausgabe mit PWM von Lotahr Miller aus (s.o.). Als FPGA / VHDL Neuling habe ich dazu 2 Fragen: Im PWM Modul werden die Eingangswerte folgendermaßen definiert: Generic ( width: natural := 8; -- Breite fclk : integer := 50000000; -- Taktfrequenz fpwm : integer := 1000 -- PWM-Frequenz FRAGE 1: Kann ich die bordeigene Taktfrequenz von 50 MHz an dieser Stelle manuell verändern? -------------------------------------------------------- Im Quelltext von SinusPWM steht: begin I_ddfs : DDFS port map( CLK => clk, Freq_Data => x"cc", Dout => sinus); FRAGE 2: Was bedeutet "x"cc" ? Wie und wo kann ich die Frequenz vom Sinus verändern?
0xcc sind 252, wenn ich richtig rechne und das dürfte die Frequenz sein. Die Taktfrequenz sollte der Deines boards entsprechen, weil sonst die rechung nicht stimmt = frequenz nicht stimmt. was du anpassen muss, ist die pwm frequenz, die ist mit 1000 sehr niedrig
Stefan Marxsen schrieb: > FRAGE 1: Kann ich die bordeigene Taktfrequenz von 50 MHz an dieser > Stelle manuell verändern? Wie meinst du das? Willst du per Konstante die Frequenz eines 50MHz-Quarzoszillators umstellen? Kurz: diese Stelle hat wie shcon gesagt nichts mit "können" zu tun, sondern mit "müssen": hier muss der Takt eingetragen werden, mit dem die DDFS getaktet wird. > FRAGE 2: Was bedeutet "x"cc" ? Da ist ein Anführungszeichen zuviel drin... Mit X" beginnt in VHDL eine hexadezimale Zahl. Die kann also auch so aussehen: x"1" oder X"aa" oder x"1a2b3c4d" oder X"BADC0FFEE" oder x"BADCAB1E" oder X"deadbeef" > Wie und wo kann ich die Frequenz vom Sinus verändern? Du übergibst statt x"cc" einfach x"55" oder sonstwas. Siehe dort auch den Link auf http://www.lothar-miller.de/s9y/categories/31-DDFS Lars schrieb: > was du anpassen muss, ist die pwm frequenz, die ist mit 1000 sehr > niedrig Richtig. das hatte ich nur gemacht, dass man die Änderung der PWM in der Wveform auch hübsch sieht. In der Praxis sollte ein Sinus schon deutlich besser aufgelöst werden. Sonst ruckelts...
Ok, sehr gut. Danke. Das bedeutet, dass ich hexadezimal maximal Freq_Data= x"FF" angeben kann. Somit hätte der Sinus eine maximale Frequenz von 23.8Hz * 255 = 6080Hz. Kann ich den Sinus irgendwie noch schneller machen? Min. 10 KHz wären schon klasse... Mein Ausgangssignal auf dem Oszilloskop sieht noch sehr verrauscht aus. Ich möchte die Darstellung durch triggern verbessern. Wie kann ich an den vorgeteilten FPGA-Takt rankommen? Es reicht sicherlich nicht, "pre" auf einen Ausgang zu legen, oder?
Stefan Marxsen schrieb: > Kann ich den Sinus irgendwie noch schneller machen? Ja. Problemlos. > Min. 10 KHz wären schon klasse... Lies das, was im Link im Beitrag "Re: Verständnisfragen zur Sinusausgabe mit PWM von Lothar Miller" steht. Verstehe es, und du erkennst, dass die Frequenz deines Signals gleich der Überlauffrequenz des Akkumulators ist. Wenn dir das klar ist, dann mach den Akku kürzer oder summiere statt 8 Bit einfach 9 Bit drauf. Der Weg bis zum Kapieren ist mit Ausprobieren verbunden und nennt sich "Lernen"... > Mein Ausgangssignal auf dem Oszilloskop sieht noch sehr verrauscht aus. Warum? Welches Signal und welcher Ausgang? > Ich möchte die Darstellung durch triggern verbessern. Wie kann ich an > den vorgeteilten FPGA-Takt rankommen? Der bringt dir nichts, denn du must eigentlich mit dem MSB des Akkumulators triggern. Und ja, das kannst du einfach auf einen Pin legen... > Es reicht sicherlich nicht, "pre" auf einen Ausgang zu legen, oder? Ich habe sowas nie gefragt, sondern einfach mal probiert...
Danke für die Hilfe. Habe die Links gewälzt und das Prizip kapiert. Auch einige Probeläufe mit verschiedenen Frequenzen liefen erfolgreich. Einziges Problem für mich als VHDL-Newbie ist noch die Verkürzung des Akkus in der Praxis. Ziel ist ein Sinus mit 10.013 Hz. Den erreiche ich bei 50 MHz Taktfrequenz und einer verkürzten Akku auf insgesamt 20 Bits (inkl. Vorteiler) mit Freq_Data => x"D2". Also fout= (50*10^6/2^20)*210 = 10.013 Hz Ich habe vermutlich den Akku falsch verkürzt, denn am Oszi messe ich immer noch ca. 5 kHz :-( Habe statt 20 downto0 Accum auf 19downto 0 , also auf 20 Bits beschränkt: Architecture RTL of DDFS is signal Accum : unsigned (19 downto 0) := (others=>'0'); Ist meine Verkürzung falsch? Wenn ja, wie muss ich die Verkürzung richtigerweise programmieren?
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.