Re: stm32 - dithering pwm pres dma, dotaz...

Vojtěch Petrucha petrucha na volny.cz
Pondělí Červen 15 18:50:31 CEST 2020


Zdravim,
 
pred casem jsem se ptal na STM32 - HRTIM a zvyseni rozliseni pomoci ditheringu.. 
 
Mam to implementovane v zarizeni co zpetnovazebne ridi proud do civek, takze tam umi nastavit libovolne magneticke pole a kompenzovat pritom okolni ruseni (oboji samozrejme v ramci nejakych mezi..)
Nejake fotky zde: https://maglab.fel.cvut.cz/arbitrary-magnetic-field-generator-system/
 
Zarizeni funguje pekne, ale vsiml jsem si, ze pokud tam vlozim magnetometr, dostanu na vystupu pilovity signal s amplitudou 1 nT a periodou cca 20-40s, typ. 30s, coz me pro prakticke pouziti prilis netrapi, ale trochu me to stve..  je to jen asi 5 ppm z rozsahu magnetometru (ale magnetometr rozlisi pri pomalejsim vzorkovani dobre i 0.5 ppm takze je to pekne videt).. 
 
Ruznym laborovanim jsem se snazil zjisit kde se to bere. Nejdrive primo v zarizeni, ale to k nicemu nevedlo. Dnes jsem vzal Nucleo-F334 a pokud MCU napajím z nizkosumoveho stabilizatoru (LT1763) a patricny vystup PWM merim DAQ kartou (primo, filtraci udela ta karta,, zalozena na ADS1281..), tak namerim to same.. pilovity prubeh napeti, amplitada cca 5 ppm rozsahu. Stejne vysledky davalo i logovani pomoci Agilent 34401, take ten obdelnik na 64kHz pekne sezere..
viz predposledni obrazek na strance vyse zminene - kanal X je vystup PWM (obdelnik 50:50 takze 1.6 V, konstantni nastavena strida), kanal Y byl zkratovany - jde videt sum karty - asi 0.1 ppm peak-peak (na +-10V rozsah, pri 1Sa/s), kanal Z je napajeci napeti MCU..  (je to SW pro zobrazovani dat z magnetometru s konstantou 100 kV/T, 33183 odpovida 3.318.. V)
 
Hned na zacatku laborovani jsem si vsiml, ze stejne pilovity prubeh ma odber proudu MCU (v mem zarizeni i na Nucleo F334, i treba F303), rozkmit pily cca 2 mA, viz obrazek na strance, logovan proud pomoci agilent 34401..  a ty dve pily jsou synchronni.. 
 
Netusi prosim nekdo cim je dan ten pilovity odber proudu? Predpokladam, ze se nejak fazove schazi prepinani tranzistoru rizenych z vice hodinovych zdroju nebo co? u nuclea je nastaven bypass a PLL, HSI-RC jde do FLITFCLK coz nevim co je..  u meho zarizeni mam klasicky krystal, asi 16.384 MHz a PLL a zas je tam ten asynchronni RC?  ..
 
Kdyby se menilo napeti jadra procesoru, chapal bych, ze by to melo vliv na frekvenci, ale proc by to melo ovlivnit stridu teda nevim.  Podotykam ze zmenit nastaveni HRTIM kalibrace (kratka, dlouha, zadna), vypnout dithering a podobne veci jsem zkousel bez vysledku..
 
diky
 
v.p.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
______________________________________________________________
> Od: "Vojtěch Petrucha" <petrucha na volny.cz>
> Komu: "HW-news" <hw-list na list.hw.cz>, "HW-news" <hw-list na list.hw.cz>
> Datum: 03.01.2020 14:45
> Předmět: Re: stm32 - dithering pwm pres dma, dotaz...
>
Děkuju, ještě si  s tím pohraju.
Těch 16 prvků jsem vypsal protože i dál to bylo stejně.
Intuitivně mi přišlo, že by to měla být perioda opakování toho vzoru.., pokud by se to měnilo přes delší periodu, zbytečně by to posouvalo spektrum rušení k nížším f 
v.p.
 
  
 
______________________________________________________________
 > Od: "Miroslav Mraz" <mrazik na volny.cz>
 > Komu: hw-list na list.hw.cz
 > Datum: 03.01.2020 13:56
 > Předmět: Re: stm32 - dithering pwm pres dma, dotaz...
 >
To máte patrně dobře, ale 16 vzorků je na průměrování málo. Samozřejmě, 
 že tam ten dithering je, je trochu jiný než od ST, ale integrálně to 
 sedí a to potřebujete. Viz obrázek. Počítáno je to takto
 
 static const int      INPUT_BIT_RANGE = 14;
 static const int      MAXIMUM_PWM     = 256;   // nemusí být nutně mocnina 2
 static const unsigned SIGMA_MASK      = (1u << (INPUT_BIT_RANGE  + 0)) - 1u;
 static const unsigned SIGNED_OFFEST   = (1u << (INPUT_BIT_RANGE  - 1));
 // Předpokládá se na vstupu signed int o šířce INPUT_BIT_RANGE
 // přičemž 0 na vstupu odpovídá MAXIMUM_PWM / 2 na výstupu
 static const unsigned pwm_sd_1 (const int input) {
   static unsigned sigma = 0;
   const unsigned sample = (input + SIGNED_OFFEST) * MAXIMUM_PWM;
   sigma &= SIGMA_MASK;
   sigma += sample;
   return sigma  >> INPUT_BIT_RANGE;
 }
 static const unsigned pwm_pure (const int input) {
   const unsigned sample = (input + SIGNED_OFFEST) * MAXIMUM_PWM;
   return sample >> INPUT_BIT_RANGE;
 }
 
 Mrazík
 
 Dne 03. 01. 20 v 13:06 Vojtěch Petrucha napsal(a):
 > diky za odpoved.
 > 
 > jsem si to upravil a pustil na stm32f303 - misto do citace jsem vysledky 
 > (hodnoty pwm) zapisoval do bufferu na ktery jsem kouknul debuggerem
 > 
 > zmensil jsem pridavek na 4 bity, aby se v tom clovek snadneji vyznal.  
 > mozna jsem tim ale ten kod zprznil vic nez jsem mel
 > 
 > protoze ono to v podstate dela to same co ta st appnota, ale "mene 
 > dokonale"  viz nize
 > 
 > uint16_t indexX=0;
 > 
 > uint16_t buffer[1024];//na ulozeni vystupnich hodnot
 > 
 > uint32_t sigma=0;
 > 
 > uint32_t sample=0;
 > 
 > static uint16_t pwm; // šířka pulsu od 0 do maxpwm
 > 
 > #define INPUT_x  2050;                                                
 > -pozadovana hodnota - me jde v podstate o presne DC urovne..
 > 
 > static const uint16_t maxpwm = 256;
 > 
 > volano v main:
 > 
 > void PWM_Timer_Interrupt (void) { // přerušení od časovače PWM na fN
 > 
 > buffer[indexX] = pwm; // zapiš minulou šířku a pak v klidu počítej
 > 
 > indexX++;
 > 
 > if(indexX >1023){indexX=0;};
 > 
 > sample = INPUT_x;
 > 
 > sample *= maxpwm; // finta
 > 
 > sigma += sample; // sigma
 > 
 > pwm = sigma >> 12; // delta            //bylo 16
 > 
 > sigma &= 0x0FFFu; // zůstatek do dalšího kola  //bylo FFFF
 > 
 > }
 > 
 > v ramci periody 16 vystupnich  hodnot to pro nahodne zvolene cislo 2048 
 > a dalsi vypada nasledovne:
 
 
 ----------
 
 _______________________________________________
 HW-list mailing list  -  sponsored by www.HW.cz
 Hw-list na list.hw.cz
 http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>
 
 
 ----------
 
 _______________________________________________
 HW-list mailing list  -  sponsored by www.HW.cz
 Hw-list na list.hw.cz
 http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200615/d251bce5/attachment.html>


Další informace o konferenci Hw-list