sound pomocí PWM

Problémy s návrhem, konstrukcí, zapojením, realizací elektronických zařízení

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
pitrssimi
Příspěvky: 8
Registrován: 22 čer 2009, 02:00

sound pomocí PWM

#1 Příspěvek od pitrssimi »

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ý.

Uživatelský avatar
Bernard
Příspěvky: 3614
Registrován: 27 kvě 2005, 02:00

#2 Příspěvek od Bernard »

pitrssimi píše:....vzorkovaný 8kHz, je mi jasné, že každých 1,25 ms .....
Možná i častěji, 125 us.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#3 Příspěvek od Andrea »

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.

coat
Příspěvky: 68
Registrován: 13 čer 2007, 02:00
Bydliště: BRNO

#4 Příspěvek od coat »

A co to máš za zvuk že se ti vleze do flashky? Možná by bylo lepší použít D-A převodník R-R2 a za ním až dolní propust.

Uživatelský avatar
pitrssimi
Příspěvky: 8
Registrován: 22 čer 2009, 02:00

#5 Příspěvek od pitrssimi »

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

McLareniak

#6 Příspěvek od McLareniak »

Skus pozret toto.

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

Uživatelský avatar
caven
Příspěvky: 417
Registrován: 15 srp 2006, 02:00

#7 Příspěvek od caven »

nevím, ale nějak mi to pdf nejde stáhnout. Jde to někomu otevřít ?

Uživatelský avatar
mira2830
Příspěvky: 238
Registrován: 05 lis 2006, 01:00
Bydliště: Praha
Kontaktovat uživatele:

#8 Příspěvek od mira2830 »

jj, jde :wink: musis na to kliknout pravym mysitkem a dat "ulozit jako" (nebo obdobne) a, kdyz to budes mit na disku, zmenit priponu, jak psal McLareniak

Uživatelský avatar
caven
Příspěvky: 417
Registrován: 15 srp 2006, 02:00

#9 Příspěvek od caven »

nj kdybych si to alespoň přečetl ;) Díky

Uživatelský avatar
pitrssimi
Příspěvky: 8
Registrován: 22 čer 2009, 02:00

#10 Příspěvek od pitrssimi »

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

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#11 Příspěvek od Andrea »

pitrssimi píše: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
A co mu brání to stihnout?

Uživatelský avatar
pitrssimi
Příspěvky: 8
Registrován: 22 čer 2009, 02:00

#12 Příspěvek od pitrssimi »

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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#13 Příspěvek od Andrea »

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.

Uživatelský avatar
pitrssimi
Příspěvky: 8
Registrován: 22 čer 2009, 02:00

#14 Příspěvek od pitrssimi »

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?

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#15 Příspěvek od Andrea »

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 :)

Odpovědět

Zpět na „Řešení problémů s různými konstrukcemi“