Hybrid ΣΔ a PWM -> Pasivni propust vyssiho radu

Miroslav Mraz mrazik na volny.cz
Pondělí Březen 20 18:30:17 CET 2017


Tak se podařilo, kocourovi se to pořád ještě nelíbí ale ten má moc 
citlivé uši, slyší i netopýra. Kdyby někdo potřeboval trochu zjemnit PWM 
tak kousek kódu je zde

static const unsigned maxpwm = 3000;
void Audio::irq (void) {      // přerušení od časovače PWM 16kHz
   static unsigned sigma  = 0, resample = 0;
   static unsigned sample = 0; // 16.bit signed, převedeme na unsigned
   static uint16_t pwm;        // šířka pulsu od 0 do maxpwm

   gTim.SR.BIT.UIF = RESET;    // nuluj přerušení
   gTim.CCR4       = pwm;      // zapiš minulou šířku a pak v klidu počítej
   if ((resample & 0x1u) == 0) {   // převzorkování 1/2, tedy 8kHz callback
     if (sampleCallback) sample = sampleCallback () + 0x8000;
     sample *= maxpwm;             // finta
   }
   sigma += sample;                // sigma
   pwm    = sigma >> 16;           // delta
   sigma &= 0xFFFFu;               // zůstatek do dalšího kola
   resample += 1;
}

Mrazík

Dne 20.3.2017 v 11:01 Miroslav Mraz napsal(a):
> Myslíte tohle
> http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/
> Náhodou to řeším teď taky pro audio signál a zatím mi vychází jako
> nejlepší hybrid čisté PWM a sigma-delta. Sigma-delta má střídu buď 0
> nebo 1, PWM jí může rozlišit podrobněji ale zase na vyšší frekvenci se
> už přesnost ztrácí. Zkusím to nějak zkombinovat, ale zatím nemám přesně
> promyšlené jak, resp. jak počítat hodnoty střídy PWM aby se ta přesnost
> neztrácela. Určitě to nějak půjde, zatím jediný hmatatelný výsledek je
> vyplašení kocoura.
>
> Mrazík
>
> Dne 20.3.2017 v 10:02 Jaroslav Lukesh (seznam IMAP) napsal(a):
>> Mrkněte jak je udělané PWM u Mozzi projektu
>>
>>
>>
>> ----- Původní zpráva ----- Od: "Miroslav Mraz" <mrazik na volny.cz>
>>
>>
>> Jde to udělat taky jako sigma-delta DAC, ale zase to chce rychlý
>> procesor. Zatím jsem nenašel žádný uP, který by to měl udělané jako
>> periferii i když by na tom nic nebylo - je to v podstatě jen akumulace
>> hodnoty a výstup přenosu na pin. Asi by šlo pro tt. účel využít třeba
>> SPI a nějak to alespoň částečně předpočítat a tabelovat. To by pak mělo
>> slušně zvládnout i takové AVRko.
>>
>> Mrazík


Další informace o konferenci Hw-list