<p style="padding:0 0 0 0; margin:0 0 0 0;">Děkuju, ještě si  s tím pohraju.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">Těch 16 prvků jsem vypsal protože i dál to bylo stejně.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">Intuitivně mi přišlo, že by to měla být perioda opakování toho vzoru.., <span style="font-size: 10pt;">pokud by se to měnilo přes delší periodu, zbytečně by to posouvalo spektrum rušení k nížším f </span></p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="font-size: 10pt;"></span><span style="font-size: 10pt;">v.p.</span></p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="font-size: 10pt;">  </span></p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">______________________________________________________________<br />
> Od: "Miroslav Mraz" <mrazik@volny.cz><br />
> Komu: hw-list@list.hw.cz<br />
> Datum: 03.01.2020 13:56<br />
> Předmět: Re: stm32 - dithering pwm pres dma, dotaz...<br />
></p>

To máte patrně dobře, ale 16 vzorků je na průměrování málo. Samozřejmě, <br />
 že tam ten dithering je, je trochu jiný než od ST, ale integrálně to <br />
 sedí a to potřebujete. Viz obrázek. Počítáno je to takto<br />
 <br />
 static const int      INPUT_BIT_RANGE = 14;<br />
 static const int      MAXIMUM_PWM     = 256;   // nemusí být nutně mocnina 2<br />
 static const unsigned SIGMA_MASK      = (1u << (INPUT_BIT_RANGE  + 0)) - 1u;<br />
 static const unsigned SIGNED_OFFEST   = (1u << (INPUT_BIT_RANGE  - 1));<br />
 // Předpokládá se na vstupu signed int o šířce INPUT_BIT_RANGE<br />
 // přičemž 0 na vstupu odpovídá MAXIMUM_PWM / 2 na výstupu<br />
 static const unsigned pwm_sd_1 (const int input) {<br />
   static unsigned sigma = 0;<br />
   const unsigned sample = (input + SIGNED_OFFEST) * MAXIMUM_PWM;<br />
   sigma &= SIGMA_MASK;<br />
   sigma += sample;<br />
   return sigma  >> INPUT_BIT_RANGE;<br />
 }<br />
 static const unsigned pwm_pure (const int input) {<br />
   const unsigned sample = (input + SIGNED_OFFEST) * MAXIMUM_PWM;<br />
   return sample >> INPUT_BIT_RANGE;<br />
 }<br />
 <br />
 Mrazík<br />
 <br />
 Dne 03. 01. 20 v 13:06 Vojtěch Petrucha napsal(a):<br />
 > diky za odpoved.<br />
 > <br />
 > jsem si to upravil a pustil na stm32f303 - misto do citace jsem vysledky <br />
 > (hodnoty pwm) zapisoval do bufferu na ktery jsem kouknul debuggerem<br />
 > <br />
 > zmensil jsem pridavek na 4 bity, aby se v tom clovek snadneji vyznal.  <br />
 > mozna jsem tim ale ten kod zprznil vic nez jsem mel<br />
 > <br />
 > protoze ono to v podstate dela to same co ta st appnota, ale "mene <br />
 > dokonale"  viz nize<br />
 > <br />
 > uint16_t indexX=0;<br />
 > <br />
 > uint16_t buffer[1024];//na ulozeni vystupnich hodnot<br />
 > <br />
 > uint32_t sigma=0;<br />
 > <br />
 > uint32_t sample=0;<br />
 > <br />
 > static uint16_t pwm; // šířka pulsu od 0 do maxpwm<br />
 > <br />
 > #define INPUT_x  2050;                                                <br />
 > -pozadovana hodnota - me jde v podstate o presne DC urovne..<br />
 > <br />
 > static const uint16_t maxpwm = 256;<br />
 > <br />
 > volano v main:<br />
 > <br />
 > void PWM_Timer_Interrupt (void) { // přerušení od časovače PWM na fN<br />
 > <br />
 > buffer[indexX] = pwm; // zapiš minulou šířku a pak v klidu počítej<br />
 > <br />
 > indexX++;<br />
 > <br />
 > if(indexX >1023){indexX=0;};<br />
 > <br />
 > sample = INPUT_x;<br />
 > <br />
 > sample *= maxpwm; // finta<br />
 > <br />
 > sigma += sample; // sigma<br />
 > <br />
 > pwm = sigma >> 12; // delta            //bylo 16<br />
 > <br />
 > sigma &= 0x0FFFu; // zůstatek do dalšího kola  //bylo FFFF<br />
 > <br />
 > }<br />
 > <br />
 > v ramci periody 16 vystupnich  hodnot to pro nahodne zvolene cislo 2048 <br />
 > a dalsi vypada nasledovne:<br />
 <br />
 <br />
 ----------<br />
 <br />
 _______________________________________________<br />
 HW-list mailing list  -  sponsored by www.HW.cz<br />
 Hw-list@list.hw.cz<br />
 <a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br />