Hallo,
ich hab mir hier schon einige Texte zur Tonerzeugung via PWM
durchgelesen.
Trotzdem verstehe ich einiges nicht.
Ich gebe über die serielle Schnittstelle 115200 Baud die PCM Rohdaten
eines WAV Files mit 11khz und 8 Bit Auflösung auf ein CPLD Board mit
angeschlossenenm Lautsrecher. Das Board ist das Pollin CPLD Board.
Den RS232 Code hab ich auch hier aus dem Forum.
1 | process(clk, s_rs232_dat_out)
|
2 | begin
|
3 | if rising_edge(clk) then
|
4 | PWM_Accumulator <= ("0" & PWM_Accumulator(7 downto 0)) + ("0" & s_rs232_dat_out);
|
5 | end if;
|
6 | end process;
|
7 |
|
8 |
|
9 | led(8 downto 1) <= s_rs232_dat_out(7 downto 0);
|
10 | audio_out <= PWM_Accumulator(8);
|
Mein Takt ist 16 Mhz. Es Funktioniert auch alles, es klingt nur sehr
krauselig.
Ich ändere jetzt je nach dem was von der RS232 kommt, einfach die
Frequenz auf den Lautsprecher, je nach dem wieviel ich aufaddiere.
Bei 8 Bit wave File, Auflösung 2^0 = 1 --> 62 khz und max = 2^8 = 256
--> 8 Mhz
So, das ist das erste was ich nicht verstehe. Was passiert genau mit dem
Lautsprecher dass er einen Ton ausgibt obwohl der Freuquenzbreich so
hoch ist ? Normal dürfe da ja nix mehr rauskommen.
Weil das ist ja jetzt nicht so wie bei PWM, da werden ja VERSCHIEDENE
analoge werte generiert durch das Ti/Tp verhältnis. Aber hier ist ja das
Verhältnis immer gleich.
Das nächste ist, wenn ich jetzt mit 11 khz streame kommt ja alle 90 ns
ein neuer wert, den ich mit einer bestimmten Frequenz ausgeben muss.
Jetzt muss doch die Frequenz sehr hoch sein, damit se in dem kurzem
Zeitfenster eine paar Schwingungen fahren kann oder ?
Weil wenn ich den Takt auf 4 Mhz reduziere, dann hör ich nix mehr.
Mit dem Verfahren geb ich Töne als direkte Frquenz aus.
Was anderes ist doch PWM, hier hab ich nur eine Frequenz z.B. 200khz und
ändere nur das Impuls Pausen verhältnis. Damit bekomme ich einen
analogen wert, und durch die ver. Abfolgde der Werte ergibt sich ein
Sound. Wäre das die bessere Idee ? bez. den krachenden Ton , den ich mit
ersterem Verfahren habe.
Warum muss ich die PWM Frequenz dann mit einem Tiefpass rausfiltern, hab
ich aus den ganzen Beitragen zum Thema nicht verstanden.
Das sind jetzt viele Fragen, sind aber alle durch das lesen der anderen
Beiträge entstanden. Ich hoffe durch die Beantwortung schließt sich der
Kreis auch für andere Leser.
Viele grüße david