sound pomocí PWM
Moderátor: Moderátoři
sound pomocí PWM
Ahoj,
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ý.
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ý.
Jo a taky s 320ms periodou toho moc nepřehraješ, chtělo by to udělat si nejprve jasno v jednotkách.
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.
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.
S těma 320ms je to samozřejmě špatně, měl jsem si to po sobě přečíst, jedná se o 32us. Vzorky se mění každých 125us. Poměr je pořád stejný (4x).
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
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
Skus pozret toto.
Priponu suboru premenuj na zip a rozbal si to niekde na disk
Priponu suboru premenuj na zip a rozbal si to niekde na disk
- Přílohy
-
- Zvuk v PIC.pdf
- (488.73 KiB) Staženo 171 x
Na tento článek a projekt už jsem při svém hledání také narazil. Pořád ale nechápu princip. Když jsem to stavěl pomocí R-2R, tak to bylo jasné, každých 125us jsem na výstupu převodníku vytvořil požadované napětí podle daného vzorku a prohlal skrz rekonstrukční filtr. Zde mi je princip naprosto jasný.
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
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
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.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.
Tak na to mám zase námitku ![Smile :-)](./images/smilies/icon_smile.gif)
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?
![Smile :-)](./images/smilies/icon_smile.gif)
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.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?
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
![Smile :)](./images/smilies/icon_smile.gif)