STM32 PWM

Tu bo govora o vseh mogočih mikrokontrolerjih ne glede na tip ali zgradbo

Moderator: tilz0R

STM32 PWM

OdgovorNapisal/-a zanka » 19 Nov 2021, 12:30

Zdravo

Gledam PWM in me zanima, kako bi prišel do dveh signalov X in Y. Imam 3 vrednosti: A, B in ARR, za katere velja 0 < A < B < ARR. Ko števec doseže ARR, se postavi na 0 in nadaljuje navzgor.
Ko je 0 < i < A, želim X = 1 in Y = 0.
Ko je A < i < B, želim X = 0 in Y = 1.
Ko je B < i, želim X = 0 in Y = 0.

Še bolje bi bilo, da se na 1. prehodu iz X = 1 in Y = 0 do X = 0 in Y = 1, doseže, da tudi X = 0 in Y = 0, torej se X in Y izmenjujeta z različnim vmesnim časom, ko sta oba 0.
Uporabniški avatar
zanka
 
Prispevkov: 3310
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 125 krat
Prejel zahvalo: 399 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 79

Re: STM32 PWM

OdgovorNapisal/-a zanka » 19 Nov 2021, 12:57

Drugače rečeno, za push-pull krmiljenje z nastavljim (ne nujno simetričnim) časom popolnega odklopa. Skratka neka posplošitev zmožnosti "complementary PWM outputs with dead time".
Uporabniški avatar
zanka
 
Prispevkov: 3310
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 125 krat
Prejel zahvalo: 399 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 79

Re: STM32 PWM

OdgovorNapisal/-a Sigi » 19 Nov 2021, 14:09

Ali lahko narišeš časovni diagram, pa še povej kateri uc uporabljaš (ali pa vsaj kateri TIMx). Pa kakšna je frekvenca PWM
lp Žiga
Sigi
 
Prispevkov: 384
Pridružen: 23 Jan 2015, 00:57
Kraj: Kamnik
Zahvalil se je: 313 krat
Prejel zahvalo: 226 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 48

Re: STM32 PWM

OdgovorNapisal/-a zanka » 19 Nov 2021, 16:22

Lahko je F3 ali G4, bilokateri TIMx, zaenkrat to ne igra vloge.
Priponke
pwm.png
pwm.png (5.17 KiB) Videno 217 krat
Uporabniški avatar
zanka
 
Prispevkov: 3310
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 125 krat
Prejel zahvalo: 399 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 79

Re: STM32 PWM

OdgovorNapisal/-a Sigi » 19 Nov 2021, 17:25

Aha, zdaj razumem kaj rabiš.
Če bi uporabil opcijo PWM z komplementarnim izhodom te omejuje nastavitev deadtime, kar si že sam ugotovil.
Morda bi bila za tvoj primer boljša rešitev da uporabiš dva izhoda ter compare opcijo, kjer definiraš čas preklopa za vsako tranzicijo, s skupnim ARR, se pravi boš nastavil 4 compare vrednosti ter ARR za periodo. Sem naredil eno grdo skico.
Pišem ti pa to na pamet, če boš rabil pogledam v datasheet.
Boš pa moral pazit pri nastavitvah, ker tako lahko narediš tudi prekrivanje A-B, če izhodni driver ne preprečuje shot-trougha je lahko tudi dim.
Priponke
grdaskica.jpg
lp Žiga
Sigi
 
Prispevkov: 384
Pridružen: 23 Jan 2015, 00:57
Kraj: Kamnik
Zahvalil se je: 313 krat
Prejel zahvalo: 226 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 48

Re: STM32 PWM

OdgovorNapisal/-a Sigi » 19 Nov 2021, 21:49

Opa, preveril v dokumentaciji in to kar sem opisal zgoraj ne bo šlo. Se opravičujem.
Razvadil sem se na HRTIM, ki pa ga najdeš le v par izvedbah STM32. Pri TIMx ne moreš po želji kombinirati compare->output, kot sem predlagal zgoraj...

Bi pa moralo it če bi uporabil Combined PWM Mode. STM32G serija to omogoča. Nisem sicer še uporabljal, ampak glede na datašit bi moralo ustrezat.
Če boš rabil lahko preskusim pri meni.
lp Žiga
Sigi
 
Prispevkov: 384
Pridružen: 23 Jan 2015, 00:57
Kraj: Kamnik
Zahvalil se je: 313 krat
Prejel zahvalo: 226 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 48

Re: STM32 PWM

OdgovorNapisal/-a tilz0R » 20 Nov 2021, 17:12

G474 ima hrtim.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2030
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 240 krat
Prejel zahvalo: 623 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 179

Re: STM32 PWM

OdgovorNapisal/-a zanka » 21 Nov 2021, 21:27

HRTIM je kar obetaven, vendar je toliko različnih poti oziroma rešitev (četudi strojnih), da se kar izgubim.
Natuhtal sem sledeče, idejno: vrednosti A in B naložim v HRTIM_MCMP1R in HRTIM_MCMP2R.
Za kanal A1 (za moj X) nastavim HRTIM_SETA1R na MSTPER, HRTIM_RSTA1R na MSTCMP1.
Za kanal B1 (za moj Y) nastavim HRTIM_SETB1R na MSTCMP1, HRTIM_RSTB1R na MSTCMP2 in EXTEVNT1 (za primer predčasnega zaključka).
Potem vklopim DTEN tako za A kot tudi za B, da se omejim na spreminjanje samo 2 vrednosti: MSTCMP1 ter MSTCMP2.

Še bolje bi bilo uporabiti samo A, brez B, vendar se potem bojim, da ni mogoče imeti "dolgega stanja", ko sta ob izhoda enaka 0, kajti, če predčasno zaključim 2. stanje (X = 0, Y = 1), se sistem vrne v 1. stanje (X = 1, Y = 0) - tako namreč razumem. Seveda bi lahko tudi oba kanala (A in B) nastavil enako, uporabil pa A1 za moj X in B2 za moj Y, kajti ko predčasno zaključim B, se bi postavil B1 na 1, kar pa ne vpliva na A1 (moj X)
Uporabniški avatar
zanka
 
Prispevkov: 3310
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 125 krat
Prejel zahvalo: 399 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 79

Re: STM32 PWM

OdgovorNapisal/-a Sigi » 21 Nov 2021, 23:10

zanka je napisal/-a:HRTIM je kar obetaven, vendar je toliko različnih poti oziroma rešitev (četudi strojnih), da se kar izgubim.
Natuhtal sem sledeče, idejno: vrednosti A in B naložim v HRTIM_MCMP1R in HRTIM_MCMP2R.
Za kanal A1 (za moj X) nastavim HRTIM_SETA1R na MSTPER, HRTIM_RSTA1R na MSTCMP1.
Za kanal B1 (za moj Y) nastavim HRTIM_SETB1R na MSTCMP1, HRTIM_RSTB1R na MSTCMP2 in EXTEVNT1 (za primer predčasnega zaključka).
Potem vklopim DTEN tako za A kot tudi za B, da se omejim na spreminjanje samo 2 vrednosti: MSTCMP1 ter MSTCMP2.

Še bolje bi bilo uporabiti samo A, brez B, vendar se potem bojim, da ni mogoče imeti "dolgega stanja", ko sta ob izhoda enaka 0, kajti, če predčasno zaključim 2. stanje (X = 0, Y = 1), se sistem vrne v 1. stanje (X = 1, Y = 0) - tako namreč razumem. Seveda bi lahko tudi oba kanala (A in B) nastavil enako, uporabil pa A1 za moj X in B2 za moj Y, kajti ko predčasno zaključim B, se bi postavil B1 na 1, kar pa ne vpliva na A1 (moj X)


Res je, HRTIM ima toliko nastavitev, da je kar klavstrofobično, pa tudi na netu ni veliko o HRTIM. HRTIM Cookbook si najbrž našel. Upam, da uporabljaš CubeMX ali IDE, ker drugače zna bit muka.
To, kar si natuhtal se sliši v redu. Po tvojem časovnem diagramu sem razumel, da želiš oba časa v periodi, ko sta oba izhoda nizka (recimo temu dead-time1 in dead-time2), različna in prosto spremenljiva. Podoben problem sem s HRTIM rešil tako, da sem lahko povsem prosto nastavljal vsa štiri stanja. Morda tebi to ni tako bistveno.
Za dosego tega rabiš uporabit en kanal HRTIM (G474 ima 6 enakih), za primer Timer A nastaviš kot "TA1 and Ta2 outputs active". Uporabiš 3 compare vrednosti.
Tule je so screenshoti nastavitev za kanal A in skica delovanja (klobaso sem moral posneti v treh delih). Fajlov ti ne morem pošiljat, ker je to komercijalni projekt. Uporabil sem še fault vhode za zaščite, ti morda tega ne rabiš. Pa pri vnosu vrednosti je treba biti previden, ker se da nastavit tudi tako da odpreš oba kanala istočasno. Matematika za nastavitev razmerij časov je trivialna, G474 niti trznil ni pri delu z vsemi šestimi kanali hkrati. Preload je obvezen.

HRTIM1.jpg

HRTIM_2.jpg

HRTIM3.jpg

skica.jpg


Preveri tudi način "Push-Pull mode". Meni ni uspelo v tem načinu usposobit fault funkcije, sicer bi mi ustrezal.
Pa ne se sekirat če ne bo vse "s prve", da je meni tole vse steklo kot je treba, je minil kak teden :roll: .
lp Žiga
Sigi
 
Prispevkov: 384
Pridružen: 23 Jan 2015, 00:57
Kraj: Kamnik
Zahvalil se je: 313 krat
Prejel zahvalo: 226 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 48


Vrni se na Hardware

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost