sound pomocí PWM
Moderátor: Moderátoři
sound pomocí PWM
potřebuji ubastlit velice jednoduchý přehrávač wavu. Zvuk bude uložen ve flash paměti AVR procesu a pomocí PWM a RC filtru 1. řádu bych měl generovat zvuk.
Jelikož mám zvuk ve wavu vzorkovaný 8kHz, je mi jasné, že každých 1,25 ms bych měl změnit střídu PWM signálu podle daného vzorku v datovém souboru. Problém je, že perioda PWM v AVR je 320ms, takže počet period na jeden vzorek zvuku je pouze 4. To se ani nestihne ustálit stejnosměrná hodnota na konzátoru na PWM. Nebo by to mělo pracovat na jiném principu a mě něco uteklo. Za jakékoliv rady budu vděčný.
Kromě vzorkovací frekvence je u signálu ještě důležitý parametr šířka pásma, od toho se dále odvíjí požadavky na rekonstrukční filtr. Předem se rozluč s tím, že bude stačit RC článek. Takže je potřeba, abys udal šířku pásma toho navzorkovaného signálu, tj. jakou maximální frekvenci ten signál před navzorkováním obsahoval, resp. jakou max. frekvenci chceš při tom přehrávání zachovat nepotlačenou.
Ohledně šířky pásma. Nároky na kvalitu mám minimální. Jedná se o dva kratičké příkazy, dlouhé cca 1s.
R-R2 převodník jsem již použil a přehrávání fungovalo. Momentálně však nemám k dispozici dostatek IO a tak jsem na netu našel přehrávání zvuku pomocí PWM. Nikde jsem však nenašel vysvětlení, spíše jen předvedení výsledku.
Díky
-
McLareniak
Priponu suboru premenuj na zip a rozbal si to niekde na disk
- Přílohy
-
Zvuk v PIC.pdf- (488.73 KiB) Staženo 213 x
Ale v případě toho PWM ne. Nechápu jak PWM může stihnout vytvořit na svém vystupu nějaký stejnossměrný vzorek, když na to má v případě AVR jsem 4 periody.
Kdyby mi to někdo vysvětlil, tak bych byl rád. Nechci stavět něco, čemu moc nerozumím.
Díky
pitrssimi píše:No nějakou dobu trvá, než se kondenzátor na výstupu PWM nabije. Jestliže mám k dispozici jen 4 periody na jeden vzorek, nemusí se na kondenzátoru ustálit požadované napětí.
Podle mě tedy, neříkám ale, že mám pravdu. Kvůli tomu jsem založil toto vlákno.
Doba potřebná na nabití kondenzátoru snad závisí na časové konstantě, tj. na jeho kapacitě a odporu, přes který se nabíjí. Když vhodně zvolíš časovou konstantu, není důvod, aby to nefungovalo.
Když mám chci rychlé nabíjení z důvodu nedostatku času na vzorek, tak zvolím malou T (podle R a C). Je pravda že kondenzátor se pak rychle nabije, jenže se také rychle vybije v době, kdy PWM výstup bude v nule. Když čas. konstantu zvětším, pak se zas nestihne nabít.
Nemám pravdu?
pitrssimi píše:Tak na to mám zase námitku
Když mám chci rychlé nabíjení z důvodu nedostatku času na vzorek, tak zvolím malou T (podle R a C). Je pravda že kondenzátor se pak rychle nabije, jenže se také rychle vybije v době, kdy PWM výstup bude v nule. Když čas. konstantu zvětším, pak se zas nestihne nabít.
Nemám pravdu?
Ten RC článek funguje jako filtr, který slouží k získání střední hodnoty z PWM průběhu. Ale jak už jsem napsala na začátku, RC článek nestačí, je potřeba filtr vyššího řádu. RC článek by se dal použít, kdybys měl frekvenci PWM třeba 200kHz. Když máš frekvenci PWM jen 32kHz, budeš potřebovat strmější filtr.
Stejně tak když máš vzorkovací frekvenci 8kHz a chtěl bys přehrávat signál obsahující frekvence do 3kHz, potřeboval bys rekonstrukční filtr, který by na 3kHz ještě netlumil a na 8-3=5kHz už měl dostatečný útlum. To taky neuděláš RC článkem, na to potřebuješ filtr tak 8.řádu. Pokud bys ten signál převzorkoval na 32kHz (a použil PWM 64kHz), dosáhl bys stejného výsledku s filtrem 2. řádu.
Je to bráno pro dosažení kvality zvuku alespoň trochu připomínající analogový záznam. Pokud ti stačí, když mcu přehraje jakési polosrozumitelné sekundové "zachrochtání" smixované s 8kHz pískáním, možná si vystačíš jen s RC článkem se zlomem na 3kHz