[ mikikg @ 23.11.2013. 19:27 ] @
Pozdrav svima,

treba da napravim jedan BUCK regulator koji ce biti digitalno upravljiv (dsPIC ili ARM, nebitno).

Interesuje me kako odraditi regulaciju u potpuno digitalnom domenu.

Dakle za izlaz imam nekli PWM (cca 100-200kHz) kome ce da se menja duty.
FB naponski signal ce da se dovede na 12bit A/D.

Sta je sve potrebno u SW da se odradi (PID regulacija ili feed-forward ili DSP LPF) da bi to na kraju lanca odrzavalo napon konstantnim?
Naravno u interesu mi je sto bolja i sto brza regulacija. Bio bih zadovoljan i sa cca nekoliko procenata stabilnosti izlaznog napona.
[ mikikg @ 23.11.2013. 21:28 ] @
Evo shema za primer, moze drugi i pic.



Koliko vidim treba pomnoziti duty sa FB naponom i to je to, zar ne? :) Bez kompenzacije, a sa tim mora jedan ili vise FIR da se stave. Dodatno treba da se utrimuju vrednosti + limitiraju.
http://ww1.microchip.com/downloads/en/appnotes/00216a.pdf
Interesantno je tu sto su radili na interapt od pwm-a, a sad vidim i sto (po prilozenom algoritmu), radili su PSM, jedan bit :)
Hmm, zanimljivo, nije neizvodljivo, to mozda i proradi.



[Ovu poruku je menjao mikikg dana 23.11.2013. u 22:39 GMT+1]
[ goran_68 @ 23.11.2013. 22:33 ] @
Možda ti posao olakša ova familija PIC kontrolera:

http://www.microchip.com/wwwpr...Devices.aspx?dDocName=en552744

Pogledaj jednu od karakteristika:

3 x PSMC (Programmable Switch Mode Controller)- Dedicated 16bit PWM- Digital and/or analog feedback control of PWM frequency- Dead-band control / auto-shutdown & restart

Ne znam detalje jer se time nikad nisam bavio ali mi se čini da ti može biti prečica.
[ mikikg @ 24.11.2013. 12:38 ] @
Ok hvala za info.

Konkretno ovde mi nije bitan toliko HW kao ni konkretan model PIC-a.
Za probu trenutno radim sa dsPIC (verovatno ce na kraju biti Cortex F4) ali mi je poenta tu da matematiku skontam kako da odradim.
Da bih jos vise uprostio matematiku trenutno sam se bazirao na 10bit A/D i PWM (odgovara mi ta rezolucija zbog ucestanosti PWM-a).

Dakle imam sledecu postavku:

- A/D sa opsegom 0 - 1023
- PWM sa opsegom 0 - 1023
- REF SET POINT npr 500

E sad, prvi slucaj, recimo ja postavim 500 (REF) za PWM.
Na izlazu iz konvertera recimo da dobijem isto 500 u slucaju bez opterecenja (pricam u neoznacenim jedinicama sad, to predstavlja neki napon).
U ovom slucaju greska je 0, nema sta da se "koriguje".

Drugi slucaj, isto setovano 500 za PWM ali na izlazu sam dobio npr 490 pri nekom opterecenju.
Ovde je greska +10 i za toliko trebam da povecam PWM varijablu (dakle 510) da bi pri tom opterecenju dobio tacno 500.
Slicno bi bilo da sam dobio i negativnu gresku (nebitno zasto se to desilo, "nesto" je upumpalo napon na izlazu ili se povecao ulazni napon), opet za toliko moram da korigujem PWM varijablu.

Da li je to u sustini sve sto treba da se uradi?
Da li treba greska da se pomnozi sa nekim gain (za ove gore primere predpostavimo da je sad G=1) i od cega on zavisi?

Za frekvetnu kompenzaciju (da ne proosciluje sistem) koliko shvatam samo trebam izmerenu vrednost sa A/D da provucem kroz FIR filter (LPF)?
Sama definicija filtera je vezana za izlazni stepen i njegove osobine ali da ne komplikujem sad pricu oko toga, dakle neki LPF ce tu biti.


[Ovu poruku je menjao mikikg dana 24.11.2013. u 14:25 GMT+1]
[ bogdan.kecman @ 24.11.2013. 18:01 ] @
ako mnozis sa koef to je proporcionalni, on oce da prebaci, to kod napajanja mozes da vidis kod jeftinih kineza, ono prebacis sa 3 na 5v (zahtev) on skoci na 6 pa se spusti na 5 .. ako ti je zakacena osetljiva oprema taj overshoot oce da napravi ... jel .. znas i sam .. e sad cak ni sa PI kontrolom ne mozes da izbegnes skroz overshoot tako da se bojim da ces morati full PID da ganjas... nisam to nikad implementirao sa nekim smps-om ali pretpostavljam da moze, sa pid-om da ganjas obican izlaz na ADC-u preko pwm-a sam probao i to radi 1/1 i to kalibrises onim znikom bez prevelikih problema .. ne znam koji su dodatni problemi sa smps-om ali kapiram da vecina ovih smps cipova radi prilicno sporo
[ npejcic @ 24.11.2013. 19:54 ] @
Mislim da se za ovu primenu koristi "pulse skipping" tehnologija i PID.
Evo jednog linka koji će ti sigurno pomoći:
http://mondo-technology.com/Bench.html

Nisam pravio, ali cenim coveka koji je kreirao ovaj projekat. Na žalost (ili mozda na srecu :) kod je u assembleru.

Takođe znam da sam čitao i neki AppNote od Microchipa, ali to moram malo žešće da potražim....

Zatim kao što ti je @goran_68 savetovai OBAVEZNO pogledaj i PIC16F178x seriju mikrokontrolera.
Oni su baš pravljeni za te zezalice:
http://ww1.microchip.com/downloads/en/AppNotes/01468A.pdf
Tabela na strani 6

Ja sam ih koristio i lepo to radi, kad ukapiraš kako to radi :)
[ goran_68 @ 24.11.2013. 20:22 ] @
Ta serija PIC16F178x može izgleda da izgeneriše prilično kompleksan PWM. Interesantno je to što u zavisnosti za koji se način rada opredeliš preko kombinacije tri tipa event-a možeš varirati frekvenciju, fazu i duty. Možda da pored PID, u tvom slučaju, duty variraš i kombinacijom tajmerskog rada u saradnji sa komparatorskim izlazima sync_CxOUT. To ovako teoretski liči meni izdaleka na nešto izvodljivo :). I to samo iz datasheet-a, od prakse nemam ništa sa tim. PIC16F178x ima 4 komparatora i 3 OP. E sad ja sam naišao i da neki dsPIC imaju ove periferije ali sad da me ubiješ ništa od toga ne nalazim na sajtu.
[ mikikg @ 24.11.2013. 20:50 ] @
Pa ovako, za sad kao sto rekoh imam na lageru samo dsPIC33EP64MC502 i sklopljen neki mini HW za simulaciju postavke.
Konkretan tehnicki zahtev je prilicno kompleksan, radi se sa cca par kW, imace jedno 4 razlicita swichera koji ce da rade svi zajedno u cilju dobijanja tamo nekog DC napona.
Bice tu i kontrola struje i neka vremena, dakle bas gusto i zato u startu moram da idem na jace procesore.

Trenutno me vise interesuje teorija procesa regulacije kako bih to kasnije implementirao u C4.
Zato nebih ulazio u specificne forice koje imaju ovi neki PIC-evi vec to razbiti u neki diskretan racun, imam ulaznu var, imam izlaznu var, sta izmedju :)
[ veselinovic @ 24.11.2013. 21:06 ] @
Generalno,
P regulator nece napraviti preskok. Stvarna vrijednost ce se asimptotski priblizavati ( priblizavati znaci teziti ka, ali ne i dostici) zeljenoj. Odziv relativno spor.
Ako se doda I i D dejstvo moze se dobiti nesto brzi odziv, moze se staticka greska svesti na minimum, ali se onda primice ka nestabilnom ( ne oscilacijama ) podrucju. Bice nesto preskoka.
Pa sad ko sta voli i sta se vozi doticnim izvorom bira se P, PI, ili PID.
I da, Miki, ne moras ti racunati faktor ispune za nove uslove. Ti mjeris trenutni napon, poredis ga sa zeljenim i na osnovu greske povecavas/ smanjujes faktor ispune.
E sad po kojoj matematici ostaje otvoreno.
[ mikikg @ 24.11.2013. 21:57 ] @
Citat:
veselinovic: P regulator nece napraviti preskok. Stvarna vrijednost ce se asimptotski priblizavati ( priblizavati znaci teziti ka, ali ne i dostici) zeljenoj. Odziv relativno spor.


To me interesuje!
Posto nije temperatura u pitanju vec mogu da kazem skoro pa aktivno opterecenje na DC izlazu, dakle nije bas inertan sistem vec relativno brz.
Tu neku inerciju ce da pravi vise neki izlazni kondenzatori za filtriranje a koji generalno nece biti preterano veliki.

Pa ok, da probam prvo P regulaciju da vidim kako ce to da radi a relativno je prosto da se realizuje.
Ako bude trebalo onda cu da vidim da dodam I ali to sad ne znam kako bih resio. Trebao bi verovatno da imam "predhodnu" izmerenu vrednost pa sa tim nesto muckati.
[ mikikg @ 25.11.2013. 16:39 ] @
Citat:
mikikg:
Drugi slucaj, isto setovano 500 za PWM ali na izlazu sam dobio npr 490 pri nekom opterecenju.
Ovde je greska +10 i za toliko trebam da povecam PWM varijablu (dakle 510) da bi pri tom opterecenju dobio tacno 500.
Slicno bi bilo da sam dobio i negativnu gresku (nebitno zasto se to desilo, "nesto" je upumpalo napon na izlazu ili se povecao ulazni napon), opet za toliko moram da korigujem PWM varijablu.
[Ovu poruku je menjao mikikg dana 24.11.2013. u 14:25 GMT+1]


Odradio sam P regulaciju (prosto sabiranje/oduzimanje greske) i u sustini to radi.
Bez regulacije mi zavisno od opterecenja varira dosta napon, sa regulacijom dosta manje.

Ali sad mi iskace problem sto mi ovo proavilo nije koegzistentno. Neka dodatna nelinearnost tu postoji. Treba mi prakticno sve veci gain za gresku zavisno od opterecenja (jer rastu gubitci u pretvaracu, zici itd).
To moram da vidim kako da resim …
[ bogdan.kecman @ 25.11.2013. 17:30 ] @
samo P kod grejanja pravi oscilacije i ili imas overshoot ili si uvek ispod zadate vrednosti i beskonacno joj se priblizavas .. ako hoces brzu reakciju mora ubacis full pid

struja se sigurno ponasa drugacije, promene su mnogo brze no i reakcije treba da budu brze .. da li si gledao kako rade uopste komercijalni cipovi

[Ovu poruku je menjao bogdan.kecman dana 25.11.2013. u 18:55 GMT+1]
[ veselinovic @ 25.11.2013. 17:59 ] @
Stvari se nennadano komplikuju kad u sistemu imas (transportno) kasnjenje.
E onda samo sa P dobijas oscilacije.
Miki, ne kontam to da trebas sve veci P zavisno od opterecenja.
Recimo, imas singal (S) od recimo 500 i zeljeni napon.
Neka napon padne za neku vrijednost i ti ces ocitati gresku od recimo 20 ( skalirane velicine nije bitno V, kV, ili sta god).
Ti sada dizes S na 520. Napon na izlazu raste, i kad dostigne razliku od 19, ti vozis S sa 539.
I tako dalje.
Znaci ako fino skaliras onda moze biti da signal greske sabiras sa trenutnom vrijednoscu S-a i tako brzo stignes do zeljene velicine.
Samo ne smijes raditi semplovanje sa velikom frekvencijom. Makar 20 perioda PWM-a. Mozda i vise, treba malo mjeriti, zavisi od kondenzatora ( ako je DC u pitanju) i unutrasnje otpornosti izvora.

[ bogdan.kecman @ 25.11.2013. 18:02 ] @
pa da to je taj deo sto su kod struje promene trenutne a kod grejanja
mora sacekas da toplota "ode tamo" :D
no zar ne bi sa PI kontrolom imao brze stizanje na cilj?
[ veselinovic @ 25.11.2013. 18:13 ] @
Svakako da bi imao brze. Samo problem moze biti preskok.
Tesko je namjestiti PI(D) da bude aperiodski.
[ bogdan.kecman @ 25.11.2013. 18:21 ] @
a neka poluvarijanta, ako je delta > 1V onda PID a ako je delta < 1V onda P
[ veselinovic @ 25.11.2013. 18:54 ] @
Postoje razne varijante nelinearnih regulatora.
Najbolje da nam Miki malo pomogne.
Kad se napravi hardver i kad se zna namjena uredjaja bice malo lakse.
[ mikikg @ 26.11.2013. 01:39 ] @
Ovu temu pisem da kazem univerzalno, mozda ce nekome sve to koristiti jer je relativno malo obradjivana tema u pitanju na ovom forumu.
Konkretan uredjaj koji pravim je skoro nebitan, recimo da je u pitanju klasican DC regulator napona. Sta se sa tim naponom dalje radi nije toliko bitno.

Malo sam se raspitao kod kolege (jelte znate vec kog :)) i tu mi neke stvari pojasnio.
Za pocetak treba da uvedem koeficijent pojacanja greske Kp.

Kasnije mogu da dodam D (razlika sadasnjeg i predhodnog A/D uzorka = diferencijator) i isto koeficijent za to Kd.
Ovde je bitno spomenuti da se mesa i "vreme" tj treba se izbarati adekvatna sampling frekvencija.
To vreme uzorkovanja treba da bude oko 1/3 "death time". Ovaj death time nije vezan za FET-ove i njihovo upravljanje :) vec je to vreme kada se napravi npr promena REF SET POINT-a recimo sa 100 na 200 i odatle se meri koliko je trebalo sistemu vremena da na izlazu vidi da se nesto promenilo.
Tako bih dobio PD regulaciju.

Zadnji korak treba da bude da integriram vrednost sa A/D (ujednacavanje ili DSP LPF) i tako dobijem I i naravno koeficijent za to Ki.
Sve se to na kraju sabere i dobije se PID :)
Slikovito receno kao nekakva trokanalna audio mikseta (P, I, D) gde je izlaz upravljacki signal za PWM.

Podesavanje koeficijenata Kp, Ki i Kd se radi pomocu nekoliko metoda, cesto koriscene su "Ziegler–Nichols" i "Cohen–Coon". Ova druga Cohen–Coon metoda mi se cini nesto prostija i primenljiva je na prakticno sve sisteme, radi se step response sistema i odatle se izvlace ova 3 koeficijenta.

Jedno po jedno cu da resavam pa cu pisati kako napredujem.

Evo u prilogu fin pregled racuna.
U attachmentu je ceo dokument.




[Ovu poruku je menjao mikikg dana 26.11.2013. u 09:13 GMT+1]
[ goran_68 @ 26.11.2013. 07:45 ] @
Mali prilog temi. Atmelov AN i source za PID.



[ mikikg @ 29.11.2013. 17:12 ] @
Evo probao sam malo da se igram sa ovom regulacijom i nije bas sjajna situacija, ne znam u cemu je problem :(
Problem mi je u tome sto trenutno sa PD regulacijom mi stalno "bezi" nanize izlazni napon od zadatog.
Tehnicki radi regulacija ali nedovoljno, bez nje se sve (naravno) jos losije ponasa.

Racun koji sam koristio je sledeci

Code:
//-----
//regulaciona petlja, AD=12bit, PWM=12bit, zadato=2048 (50% duty), izmereno=Vrednost sa A/D preko naponskog delitelja
//Kp i Kd su iskazani kao integer da bih mogao sa debugerom u letu da ih menjam (nisam mogao direktno float da upisujem)

//PD
pre_greska = greska;
greska = izmereno - zadato;
outpwm = zadatao + (greska * (Kp / 1000)) + ((Kd/1000) * (greska - pre_greska));

SetPWM(outpwm);
//------


Koje god da koeficijente izaberem na isto se svodi, ne postize zadatu vrednost (fali jedno 10%), sa vecim vrednostima koeficijenata pocinju da se javljaju oscilacije, sa manjim se sve ponasa kao da nema FB.
Kada kao ustelujem korektno koeficijente, uvek mi bude izlazni napon ispod zadate vrednosti. Probao da menjam ulazni napon ili opterecenje na isto ispadne.
Menjao sam i "brzinu" (od 200Hz do 90kHz) kojom se vrti ova regulacijona petlja, ne pomaze.
Radio sam i ujednacavanje (od 2 do 2048 puta) za "izmereno", ne pomaze.
Imam tu i neku saturaciju greske, to pomaze samo da ne "ludi" previse.

Nisam stigao jos do integrala jer kako ljudi pisu i PD bi morao da radi korektno, integral bi trebao da bude sa relativno malim koeficijentom za postizanje dugorocne stabilnosti.

Ako nesto znaci, PWM ucestanost je oko 115kHz (probao sad zadnje i 25kHz), izlazna L=100uH, izlazi C=1000uF, ulazni napon 12V.

Mislio sam da me tu zeki Int/Float ali nije do toga problem, vidim u debugeru da to lepo sve racuna ali nekako taj racun (algoritam) nije dobar.

Dakle vidim da nekako radi regulacija, recimo dobijem "slicnu" povrsinu aktivnog PWM impulsa, sa vecim ulaznim naponom je uzi impuls i obrnuto sa nisim naponom je siri impuls ali mu fali jos malkice da to bude idelano i ne znam kako to da nadoknadim.

Da li ima neko predstavu o cemu se ovde radi, gde ja to gresim ili ima tu jos neka caka?


[Ovu poruku je menjao mikikg dana 29.11.2013. u 18:30 GMT+1]
[ veselinovic @ 29.11.2013. 17:41 ] @
greska=zadato-izmjereno
Naravno sve ovo skalirano kakko treba.
[ mikikg @ 29.11.2013. 18:00 ] @
Nije do toga, probao sam tako i obrnuto. To je bitno zbog znaka greske ali mi je trenutno tako posto mi je na HW nivou invertovan PWM.
Kada taj predznak ne "uparim" sa PWM nece uopste da radi, zakuca se u jednu stranu izlaz.

Skaliranje (FB otpornicki razdelnik, stavio 10k helikoidni trimer) je korektan, podesen je tako da za max 12V ulaza ocitam 4095 na A/D.
Imam tu i buffer OP da ne bude nesto sporno sa ulaznom impedancom od A/D ali nista mi to nije bitno poboljsalo situaciju.
[ mikikg @ 29.11.2013. 21:53 ] @
Hmm, mislim da sam nasao deo problem, typecasting (XC32)!

int Kp = 700;
float tmp_p;
tmp_p = Kp / 1000; //<< ovde ocekujem rezultat 0.7 ali dobijem 1.00000 !!!??

Sad vidim mora da se napise Kp / 1000.00 ...
[ bogdan.kecman @ 29.11.2013. 21:57 ] @
delis dva inta naravno da ce dobijes int :D
/1000.00F resava problem
[ mikikg @ 30.11.2013. 06:01 ] @
Ah, imao sam fundamentalne greske u postavci.
Ovaj doc mi je pojasnio neke stvari.
http://www.microchip.com/stell...raining_Tutorials/en527885.pdf

Glavni problem mi je bio sa vremenika tj brzinom kontrolne petlje.
Da bi sve imalo smisla, kontronla petlja mora da se vrti minimum 3 puta brze nego sto je odziv sistema.
Tehnicki, LC filter mi je relativno spor (100uH / 1000uF), pa po sledecem obrazcu dobijam cut-off (corner freq) oko 503Hz:
Fcorner = 1 / 2*pi * koren(L*C)

Ja sam se tu mlatio sa oversampling (a jos presao na sporiji 12bit A/D) pa mi se ta vremena skroz zaludela.

Sad cu da pustim kontrolnu petlju na cca 10Khz pa da vidm kako se ponasa ...
[ mikikg @ 30.11.2013. 09:32 ] @
Pihh, sad sam skontao jos jedan problem, pa OP buffer ispred A/D me zeki, koristio sam MCP652 koji je RR-output ali nema RR-input i tu mi nastaje greksa koja mi se posle provlaci dalje … :(

Poceo ja da snimam "linearnost" PWM-a (znam da bi trebao da bude linearan al ajd kao da proverim)

Ulaz 10V, i menjao duty (4095 max)

409 - 1.027V
819 - 2.027V
1229 - 3.027V
1638 - 4.026V
...
3686 - 9.036V

To je skoro pa savrseno linearno.

Posle gledao sa A/D vrednosti, ma to se zesce "razilazi" (skoro u nekim tackama po 450 odabiraka) i to je u stvari problem koji me sve vreme zeki :(
Sa ili bez oversampling (cak 2048 puta), ma isto izmeri, dakle nije do shuma/smetnji nego verovatno do stupid OP-a.
Moram prvo to da resim pa posle da se vratim na PID …

Jedno pitanje, da li imaju ovi dsPIC-evi zastitne klamp diode na ulazu u A/D i kolika je ulazna impedanca?
Ovo pitam da bi znao koji otpronik da izaberem za donji (koji ide prema masi) od naponskog razdelnika.

[Ovu poruku je menjao mikikg dana 30.11.2013. u 10:59 GMT+1]
[ pedja089 @ 30.11.2013. 18:34 ] @
Miki
Sto se tice samog P dejstva, ono ce uvek da ima gresku u ustaljenom stanju. Sto znaci da ako zadas na neku vrednost, on je nikad nece postici, jer je pwm srazmeran gresci. Moze da dodje prilicno blizu zadanoj vrednosti ukoliko je pojacanje Kp jako veliko. A ako je Kp veliko docice do oscilacija, tj sistem nije stabilan.
D dejstvo ce samo da ubrza dinamiku sistema. U ustaljenom stanju nista ne menja.
Gresku u ustaljenom stanju jedino I moze da resi. Ali tu sad vec treba lepo ustelovati sve. Jer ukoliko je greska velika, kao u slucaju paljenja, I dejstvo ce brzo da se nagomila... Koliko je to brzo zavisi od odziva sistema.

Kad sam radio kontrolu brzine i pozicije na DC motoru koristio sam PI i lepo se ponasalo. Samo sam ostavio da I dejso pocinje tek negde kada greska padne ispod 30%...

Sto se tice SMPS pravio sam boost sa PIC18F14K50 sa kojim sam dizao 5V sa usb-a. Podesio sam frekfenciju i maksimalnu sirinu PWM-a na 70%(kod boost ne moze do 100% iz ociglednih razloga).
Koristio sam interni DAC(5-6 bita) za referentni napon komparatora, sa razdelnika na drugi ulaz komparatora, izlaz komparatora koristio za gasenje PWM-a.
Na ovom picu komparator moze ugasiti pwm pre isteka punog perioda, drzi pwm ugasen sve dok tako naredjuje komparator, i po nestanku signala sa komparatora, pwm se pokrece pocetkom prve sledece periode. Ja sam sa tim prezadovoljan kako to radi, pogotovo sto je potrebno podesiti par registara, i sa softverske strane nema vise nikakvih zanimacija.
[ mikikg @ 30.11.2013. 22:12 ] @
Hvala pedja089 na odgovoru.
Meni je sad malo jasnije kako koji od P,I,D parametara tu radi radi i koje dejstvo ima.
Samo evo posle sam ustanovio da mi svi problemi poticu od A/D jer ne vraca ispravnu gresku (FB) i onda to na kraju bude problem.
Trebam to prvo da rascistim pa onda da idem dalje.
Kada se to fino usteluje to bi trebalo vec da radi vrlo fino.

Sve ovo mi je prakticno experimentalni poligon, trebace mi to posle za X nekih drugi stvar, uglavnom u SMPS tehnici (100W do par kW). Regulacija brzine ili temperature mi sad nisu toliko zanimljivi, mada mu to dodje na isto. Tu ce tek biti zanimljivo kada pocnem da "jurim" ZVS, ZCS i slicno ;)
Zato se trudim da to sve skontam u najsitnije detalje, sada je dsPIC tu, sutra ce biti Cortex F4, prekosutra mozda TSM320 Piccolo …
[ pedja089 @ 30.11.2013. 22:20 ] @
I mene zanima, ali nazalost nemam puno vremena da se bakcem oko toga. Ove 2 stvari su trebale da se odrade za posao, lepo proradilo i na tome ostalo...
Nadam se da ces pisati kako napredujes...
[ veselinovic @ 30.11.2013. 23:01 ] @
Miki,
vec sam rekao, ali da jos jednom ponovim.
Opasno je uzimati veliku frekvenciju semplovanja.
Lako mozes pobjeci u nestabilno podrucje.
Olaksavajuca okolnost je sto na izlazu imas alko koji je sam po sebi integrator, pa fino pegla sitnije oscilacije.
[ mikikg @ 01.12.2013. 03:30 ] @
Sampling rate sam ispostovao, napisah i ja gore
Citat:
Ovaj doc mi je pojasnio neke stvari.
http://www.microchip.com/stell...raining_Tutorials/en527885.pdf
...


Tehnicki mi je sad sampling rate oko 5ksps, tj toliko cesto mi se cela regulaciona petlja poziva (definisano tajmerom / interaptom).
U jednom prolazu te petlje uradim ja 64x oversampling (ujednacavanje), imam vremena za to jer je A/D podesen na 12bit / 500ksps.

Dakle u jednom prolazu petlje ja izmerim FB napon, odradim PID kalkulaciju i setujem izlazni PWM.

Nisam stigao juce da prebudzim A/D ulaz, zato sam danas malo poranio pa da to sredim.
Dok ja ne dobijem izmerenu vrednost sa AD koja je ista ili vrlo slicna kao sto je generisani PWM bez opterecenja u celom opsegu (iste su mi rezolucije A/D i PWM) ne mogu da idem dalje jer mi je to preduslov za sve ostalo, dzaba PID kad nemam ispravnu povratnu informaciju.

Zaludeo me bezveze OP koji sam stavio ispred A/D, trebao sam odmah samo otpornicki razdelnik da stavim, nego mi to tako vec nesto bilo spojene od ovog mog Class-D AMP-a pa rekoh da ne razbuvacam sve ali cu morati :)
[ mikikg @ 01.12.2013. 07:45 ] @
Snimio sam step-response (open-loop), iscrtao one linije prema Ziegler-Nichols metodi ali nesto ne mogu da se pohvatam kako te rezultate da pretocim u neke koeficijente :(

Jedino sto mi se poklapa po proracunu je 500Hz L/C vremenska konstanta, to je vreme izmedju prve gornje (over-shot) i donje (under-shot) grbe …

Ako moze neko da mi pomogne u tumacenju ovoga …
Vremenska podela je 1ms po kvadratu.

[ RoRa @ 01.12.2013. 11:58 ] @
Dobar opis eksperimentalnog podešavanja parametara PID regulatora po metodi Ziegler-Nichols-a može se naći u knjigama o kontinualnim sistemima automatskog upravljanja, naprimer:
autor: Dr. Milić Stojić
naslov: Kontinualni sistemi automatskog upravljanja, četvrto izdanje, strana 615
izdavač: IDP "Naučna knjiga" Beograd 1984
[ veselinovic @ 01.12.2013. 12:58 ] @
Ovo nije open loop.
Negdje u sistemu imas povratnu spregu i neki zakon upravljanja sto se vidi po prigusenim oscilacijama sistema.
Inace za Z/N trebas uvesti samo P i povecavati ga dok ne dobijes neprigusene oscilacije.
E sad si dobip Kpkriticno i Tkriticno
Da bi podesio PID uzimas da je:
Kp=0.6Kpkrit
Ti=0.8Tkr
Td=0.2Tkrit

Sve ovo vazi za linearne PID regulatore.
Za digitaliju stvar moze a ne mora biti takva.
[ mikikg @ 01.12.2013. 14:26 ] @
@veselinovic Sad si me tek totalno zbunio :(
Hmm, prilicno sam siguran da je ovo open loop, tako sam program postavio, setujem Duty sa 1024/4096 na 2048/4096 i obrnuto (na nize nisam snimio) u nekoj sporoj petlji od cca 0.5s, A/D odkacen totalno, nema sta tu da radi regulaciju?? Tu u toj petlji mi je samo jos jedan togle pomocnog izlaza da bih mogao da sinhronizujem oscilogram (donji kanal).
Ovo je snimljeno bez opterecenja na izlazu, kada stavim neko opterecenje samo su nesto malo manje priguseni ovi over i under shot. Sa npr vecim elco na izlazu se te oscilacije uspore sto je za ocekivati.

Ceo taj izlazni stepen (dakle sinhroni buck) napajam iz nekog stabilisanog izvora napona, cca 5A, ne verujem da mi on moze toliko problema pravi, ajd provericu to mada mi se to totalno kosi sa logikom.

Nisam pametan sad sta je tu problem …

@RoRa pokusacu da nadjem tu knjigu

[Ovu poruku je menjao mikikg dana 01.12.2013. u 18:45 GMT+1]
[ veselinovic @ 01.12.2013. 17:51 ] @
Logika je da sistem u otvorenoj petlji nema i ne moze da ima oscilacije.
Pazi, povratna sprega je i ako ispravljac nema snage pa opadne napon.
Otpronici R5/R6 pa na A1 cine povratnu spregu.
Jesi li je raskacio?
[ mikikg @ 01.12.2013. 18:27 ] @
Otpornike za FB razdelnik sam ustelovao, 1k+3k. Sa njima se drasticno poboljsala situacija oko ocitavanja A/D.
Pri naponu napajanja mosta od nekih 13V, dobijem skoro jedinicno procesno pojacanje. Varijacije su oko +/- 10 odabiraka u celom opsegu. Pre toga (sa OP) je to bezalo po 500 odabiraka.

Kod snimanja step-response sam na nivou SW-a iskljucio A/D.

Jedino sto mi pada napamet da je ipak mozda do ispravljaca jer je moguce da se tu pojavljuje "bus pumping" efekat. To moram da proverim ...
[ pedja089 @ 01.12.2013. 20:35 ] @
A da ubacis neki low esr kondezator izmedju napajanja i tranzistora. I to sto blize tranzistoru. Proveri da ti veze od mase izlaznog kondezatora, i do napajanja budu sto krace...
[ bogdan.kecman @ 01.12.2013. 21:28 ] @
> Hmm, prilicno sam siguran da je ovo open loop,


open loop je "pwm = f(target);"

closed loop je "pwm = f(target,feedback);"

obzirom da pricas o ADC-u i citanju date sa izlaza radi se o closed loop
sistemu. ni P ni PD ni PI ni PID ne mozes da uradis u open loop
sistemu... ti mozda pricas o open loop arhitekturi SMPS-a gde ti onda sa
mcu-om kontrolises isti no to su 2 odvojene stvari .. vezano za
kontrolu, ovo je, naravno, closed loop sistem
[ mikikg @ 02.12.2013. 00:01 ] @
@pedja089 Low-esr elco probao, nista mi bitno nije promenio tj ne vidim na osciloskopu nikakvu primetnu razliku.

@bogdan.kecman znam sta je open/closed loop :) Kad se A/D odkaci (bilo u SW ili HW) onda je to open loop :)

Ovde se definitivno desava bus-pumping efekat, tj vracanje dela energije nazad u ispravljac. To je stara boljka kod half-bridge postavke kao sto je moj sinhroni buck.
Kod full-bridge topologije nema tog efekta.

Kod SMPS izgleda da vaze malo drugacija pravila nego kada je npr temperatura u pitanju.

Nisam pametan sta da radim, morace ovo da saceka cika Macolu.



[Ovu poruku je menjao mikikg dana 02.12.2013. u 01:18 GMT+1]
[ pedja089 @ 02.12.2013. 01:04 ] @
A da za pocetak probas nesto kao iz drugog posta sa prve strane sto si postavio?
EDIT:
Sad mi pade na pamet, da ti kojim slucajem ne dolazi do uzduznog provodjenja kroz oba mosfeta, pa da ti to malo cima strujno ogranicenje u napajanju?
[ mikikg @ 02.12.2013. 01:33 ] @
Mislio si na shoot-trouh, zbog death-time?
Nije zbog toga, imam HIP4081A driver i steleovanje death-time-a, probao sa min i max vrednostima, isto se ponasa.

Spomenuo sam da ce konkretno to na kraju da bude za cca 50A struje (drugi fetovi, mozda SIC ili IGBT + vrlo specificni drajveri) i moram da idem na sinhronu varijantu.

Cela ova moja trenutna probna plocica je bila Class-D digitalni audio pojacivac, open-loop, doduse u full-bridge postavci i to mi je sviralo stvarno dobro.
Sad sam samo iskoristio pola mosta.
[ pedja089 @ 02.12.2013. 11:42 ] @
Na to sam mislio.
Jedino mi onda na pamet pada napajanje...
Zasto ne probas da snimis izlaz napajanja sa osciloskopom?
[ mikikg @ 02.12.2013. 12:55 ] @
Gledao sam Vbus (napajanje), tacno se dobije invertovana slika onih prigusenih oscilacija.
Probao posle i drugo napajanje, slabije dosta, neki LM317, najludje je sto se dobiju te prigusene oscilacije iste ucestanosti ali manjeg intenziteta.

Nebi mi bilo to toliko sporno nego se pitam pa kako se onda uopste resava takav problem (predpostavljam kontrolom ΔU/t ili ΔI/t)?
Jedino sto mi logicno pada napamet je da ceo sistem "umrtvim" tj da moja regulaciona petlja bude sporija nego sto treba vremena ovim oscilacijama da se smire (cca 10ms).

Rascisticu to sa Macolom, trenutno ima neke druge obaveze pa kad bude imao vremena pogledacemo to sve zajedno.
U svakom slucaju cu pisati kad budem imao neke nove/korisne informacije.

[Ovu poruku je menjao mikikg dana 02.12.2013. u 14:10 GMT+1]
[ bogdan.kecman @ 02.12.2013. 13:32 ] @
ako se dobro secam kolega veselinovic rece da moras da imas sporiju
kontrolnu petlju

i da, cela pid prica ovde radi mnoooogo drugacije od temp, i tu kolega
spomenu ono bitno "jedno je kad imas transportno kasnjenje.."
[ pedja089 @ 02.12.2013. 18:39 ] @
Po meni ti onda samo tu fali gomila kondezatora na Vbus. Koja ce obezbediti da ti Vbus bude stabilan pri ukljucenju tranzistora...
Drugo pitanje je kalem. Da on ne ode zasicenje, pa onda povuce prilicno veliku struju. Prakticno ti onda ostaje otpor zice namotaja... Ili je njegova induktivnost suvise mala...
[ mikikg @ 03.12.2013. 03:25 ] @
Heh, nista bez cika Macole ;)
Pomogo mi je dosta da ovo debugiram.

Elem, problem je bio u tome sto nisam cuvao vrednost PWM-a za sledeci prolaz.
Tehnicki gledano, i kada je greska=0 ja i onda moram da imam neku vrednost za PWM jer mora i dalje da se ulaze energija da bi to radilo.
Ovo se svodi na princip da PID odrzavanja recimo nekakvu brzinu a ne poziciju. Kada bi odrzavao pozicuju, kada stignem na zadatu tacku vise nema potrebe da se ulaze energije i tu je bila moja greska jer to u svim ovim primerima koje sam gledao nije pisalo.

Sad sam napravio samo P kontrolu koja radi extra dobro, sto se kaze NE MRDA :)
Odrzava izlazni napon jako dobro i pri promeni opterecenja i pri promeni ulaznog napona.

Evo kako to programski izgleda, manje-vise lici na pseudo code:

Code:
       
    //izracunaj gresku
    greska = zadato - izmereno;

    //P algoritam (Kp je celobrojna vrednost, npr 100)
    greska = greska * (Kp / 1000.00);

    if (greska == 0) {
        outpwm = old_outpwm;
    } else {
        outpwm = old_outpwm + greska;
    }

    //Saturacija, drzimo se nekih limita, npr max_pwm = 4096
    if (outpwm > max_pwm - 2) outpwm = max_pwm - 2;
    if (outpwm <= 0 ) outpwm = 2; //ovde sam popravio gresku

    //sacuvaj trenutno stanje za sledeci prolaz
    old_outpwm = outpwm;

    //Postavi sad PWM
    SetHSPWMDutyCycle1(outpwm);

Sad vec imam solidnu bazu za igranje sa I i D.
To cu sledece da uvedem.

[Ovu poruku je menjao mikikg dana 03.12.2013. u 05:05 GMT+1]
[ bogdan.kecman @ 03.12.2013. 03:42 ] @
Citat:
mikikg:

Code:
   
    greska = greska * (Kp / 1000.00);

    if (greska == 0) {
        outpwm = old_outpwm;
    } else {
        outpwm = old_outpwm + greska;
    }



to ti je dupli kod .. ako je greska 0 outpwm = old_pwm + greska je isto sto i outpwm=old_outpwm tako da gubis vreme na pitanje
takodje nije max_pwn=2 :D

ako radis samo p, varijabla greska ti je visak a i oldpwm ti je visak .. dakle nesto ovako:

Code:

#define max_pwm 4094
#define min_pwm 2
void kontrola(int zadato){
    static int pwm=0;
    pwm += (zadato - izmereno) * Kp / 1000.00F; 
    if (pwm > max_pwm) pwm = max_pwm;
    if (pwm < min_pwm) pwm = min_pwm;
    SetHSPWMDutyCycle1(pwm);
}


ovako je malo citljivije
[ bogdan.kecman @ 03.12.2013. 03:56 ] @
ako hoces pid

Code:

#define max_pwm 4094
#define min_pwm 2
#define P 100.0F
#define I  3.0F
#define D 0.5F

void pid(int zadato){
    static int pwm=0;
    static int izmerenoStaro=0;
    static float Iterm = 0;
    int error;
    float DTerm;

    error = zadato - izmereno;
    ITerm += I * error;
    DTerm = D * (izmerenoStaro - izmereno);
    pwm +=  P * error + ITerm + DTerm; 
    izmerenoStaro = izmereno;

    if (pwm > max_pwm) pwm = max_pwm;
    if (pwm < min_pwm) pwm = min_pwm;
    SetHSPWMDutyCycle1(pwm);
}


uzdravlje
[ mikikg @ 03.12.2013. 03:59 ] @
Ah u pravu si, jeste greska jer sam prepravljao napamet da bude adekvatno za forum, drugacije mi je prakticno u code-u.

Dodatno imam malo vise varijabli da bih mogao da pratim u debugeru.

Super, probacu i tvoj code. Bitno mi je bilo da sam se pomerio sa mrtve tacke :)

PS: Prepravicu gore moj code za ovu jednu greskicu da ne buni nekoga ko bude to eventualno probao.
PS2: Da se ja pitam i P mi radi super al ajd kad sam se vec uhvatio toga da izguram do kraja sa PID ;)
[ bogdan.kecman @ 03.12.2013. 04:07 ] @
inace za pid, tako kako sam ti stavio radi super "kad upalis" masinu ali ako hoces da u pola rada promenis "zadato" onda je zgodno da imas setzadato odvojeno kako ne bi imao skokove kod nagle promene zadatog vremena

Code:

#define max_pwm 4094
#define min_pwm 2
#define P 100.0F
#define I  3.0F
#define D 0.5F

int zadato; //dakle zadata vrednost ti je globalna varijabla
float ITerm; // ITerm vise nije staticka unutar pid-a vec je ona globalna
int izmerenoStaro; // isto kao za ITerm
int pwm; // isto kao za ITerm

//ovde inicijalizujes pid 
//da pri promenama zadate vrednosti ne poludi
void setujZadato(int x){ 
  zadato = x;
  izmerenoStaro= izmereno;
  ITerm = pwm;


void pid(int zadato){
    int error;
    float DTerm;

    error = zadato - izmereno;
    ITerm += I * error;
    DTerm = D * (izmerenoStaro - izmereno);
    pwm +=  P * error + ITerm + DTerm; 
    izmerenoStaro = izmereno;

    if (pwm > max_pwm) pwm = max_pwm;
    if (pwm < min_pwm) pwm = min_pwm;
    SetHSPWMDutyCycle1(pwm);
}


to obavezno ovako moras da radis kod PSU-a da ne bi promenuo zadato stanje a on onda poludeo zbog odjednom prevelike greske (ITerm)
[ bogdan.kecman @ 03.12.2013. 04:11 ] @
Citat:
mikikg:
PS2: Da se ja pitam i P mi radi super al ajd kad sam se vec uhvatio toga da izguram do kraja sa PID ;)


pa zgodno bi bilo da napravis P, PI, PD i PID i da onda nacrtas krivu kako dize napon sa 0 na 5V (5V zadato), sa 5V na 10V (10V zadato na prethodnih 5) pa spusta sa 10V na 5V (opet jeli 5V zadato pre toga bilo 10V) i da slikas na skopu kako to izgleda sa kojom kontrolom :) sigurno ce da bude mega zanimljivo svima ... samo P kako rece kolega sa iskustvom jos na pocetku price ne bi smeo da napravi overshoot jer ti nemas kasnjenje, nije prica kao kod grejanja, tebi je promena trenutna ... I moze da uvede overshoot ali bi trebalo da ubrza priblizavanje zadatoj vrednosti a D bi trebalo da ti omoguci da pipnes zadatu vrednost posto samo sa P ne mozes nikad da je pipnes beskonacno joj se priblizavas..

takodje isto sa P, PI, PD i PID slikas kako izgleda kada imas 5V i onda dodas 1A load na tih 5V, da vidimo kako se i kojom brzinom vrati nazad na 5V

[ mikikg @ 03.12.2013. 04:22 ] @
Hocu obavezno, snimicu razna ponasanja.

Treba jos malkice da ufasujem izlaznu prigusnicu, premala mi je induktivnost pa posledicno veliki Iripple (pocinje da se greje kod veceg ulaznog napona).
Tu treba neku vecu budzu da stavim, reda 1mH na nekom EE jezgru.

Sad mi se PWM vrti na nekih 25kHz, ne moze ovaj dsPIC da ima bolju rezoluciju od 12bit pri tim frekvencijama (zato one moje teme sa Piccolo i mega brzim/preciznim PWM ;)

Super, sad imam scime da se igram. Pre nego sto sam konsultovao Macolu sam bio zakucan u mestu ...

[ mikikg @ 03.12.2013. 04:39 ] @
Ah da i ovo da dodam, onaj overshot sto sam imao kod snimanja step response, to je prouzrokovano Q faktorom prigusnice.
Moze to da se recimo delimicno smanji dodavanjem jednog otpornika paralelno prigusnici, dampuje se tako Q faktor ali to ima neke onda druge posledice.
Isto mi je Macola spomenuo da slicne probleme imaju i ATX napajanja, i oni imaju overshot, posebno kada se naglo promeni (otkaci) opterecenje, npr skoci na 6V pa se vrati na 5V ali na srecu u PC nema bas tako drasticnih promena opterecenja pa ta pojava nije tolika kriticna ali definitivno postoji.
A i ovo je zanimljiv podatak, isto za ATX, ona su prilicno lenja, tu je regulacija (postizanje zadate vrednosti) relativno spora, reda 20-30ms!
[ mikikg @ 03.12.2013. 09:54 ] @
Ih sto je sad milina da se ovo cacka kad radi kako treba :)

Uveo sam sad dodatno D, tacno se sad ponasa kako ljudi kazu.



Nego ne moze i jare i pare :)
PID (trenutno PD) moze da se vrlo lepo podesi za "neki" rang ulaznih i izlaznih napona.
Tu je sad interesantno sto bi valjalo da se meri i ulazni napon na osnovu kojeg ce da se menjaju koeficijenti. Tu sad na delo moze da dodje feed-forward pa da se to preko nekih look-up tablica izvlaci.

Sad su mi relativno mali koeficijenti (tako mi najbolje izgleda da radi), Kp=0.08, Kd=0.1.
Opet sam se vratio na onaj step response pa menjam zadatu vrednost i pratim krivuljice.

Fino, fino, bice od ovoga nesto :)
Kad tu bude doslo jos merenje i struje to ce tek biti prava stvar (AKA jedan fin LAB PS ;) ...

PS: Integrator cu da resim ili sa velikim oversampling kod A/D ili FIR filterom jer je to klasican LPF filter.
[ bogdan.kecman @ 03.12.2013. 10:32 ] @
obrati paznju da ti je to tablica za grejanje, ne ponasa se smps identicno tome

Pk ti je realno link izmedju pwm vrednosti i izlaznog stepena tako da tu nemas sta mnogo da stimas, izmeris koji ti je pwm potreban za koji izlaz bez opterecenja i tako stelas P, onda I i D koeficijente mozes malo da siljis ali nema tu prevelikog zezanja, oba moraju da budu vrlo malecni jer realno ti taj smps teras sa P, dok su I i D tu malo da pomognu
[ bogdan.kecman @ 03.12.2013. 10:33 ] @
nego ima druga stvar, onaj pwm+=pid sistem mozda mozes malo da razmotris jos jednom
[ mikikg @ 03.12.2013. 10:59 ] @
Citat:
bogdan.kecman: nego ima druga stvar, onaj pwm+=pid sistem mozda mozes malo da razmotris jos jednom


Prepravio sam sad moj program da buds indentican kao tvoj. Radim bas to, pwm += pid.

Nego za integrator, nekako se "bolje ocesecam" kad radim oversampling :) Tako sam nekako siguran da mi nece uleteti brljotine (tranzienti, smetnje itd) iz izlaznog stepena. Imam ciklusa na pretek pa mi nije to kriticno.
A i tako mogu da ucarim jos koji bit rezolucije iz A/D a tako nesto ce mi zatrebati kad budem presao na ARM ili Piccolo jer realno treba da popnem PWM frekvenciju, malo je 25KHz, jedno pola MHz ce biti taman ;) Secas se ovoga

Koliko sam ja skontao, PID algoritam moze na vise nacina da se resi.
Ovo sto je prikazano gore je najprostija varijanta.
Druga varijanta moze da bude sa jednim malo kompleksnijim filterom sto u sustini sam PID i jeste. To je spoj LPF + HPF. Samo je to malo cimanje napraviti i nebi moglo tek tako da se menjaju u letu koeficijenti ali kao mogucnost definitivno postoji.

Inace PID nije jedini nacin za regulaciju kod SMPS. Ima daleko bolji i brzi "One Cycle Control". To je Slobodan Ćuk smislio, posle je to mislim licencirao IRF-u.
Kako mi Macola prica, to radi fenomenalno, na nivou jednog PWM impulsa se racuna ali je u digitalnom domenu veoma zahtevno jer trebaju A/D konverteri reda 20-30MSPS ili vise.
Mada sam cuo da ce Microchip pocetkom 2014 godine da izbaci nove PIC-eve sa 20+ MSPS i 200MIPS pa mozda i to probamo ;)


[Ovu poruku je menjao mikikg dana 03.12.2013. u 12:39 GMT+1]
[ macolakg @ 04.12.2013. 03:26 ] @
Citat:

samo P kako rece kolega sa iskustvom jos na pocetku price ne bi smeo da napravi overshoot jer ti nemas kasnjenje, nije prica kao kod grejanja, tebi je promena trenutna


Bogdane,

Sa ovim boldovanim delom citata se ne slažem (takođe ni sa mišljenjem tvog kolege sa iskustvom).

PID za power suplly je istog karaktera kao i za regulaciju po brzini ili za regulaciju temperature, samo su sva vremena drastično kraća.
Transportno kašnjenje povratne informacije postoji i određeno je kašnjenjem koga prouzrokuje izlazni LC filter.

Transportna kašnjenja su tipično 5-10 puta veća od jednog PWM perioda, pa automatski je overshut sasvim prirodna pojava kod klasičnog PID upraljanja sa smps.
To značajan odnos pwm perioda i kašnjenja povratne info, pa je to nalik na termoregulaciju lemilice na primer ili regulaciju nekog manjeg elektromotora po brzini.

Zakoni su potpuno isti samo je sve mnogostruko brže.

Često se najpre zbog velike brzine odziva rade polifazni konvertori raznih tipova, a usputna pogodnost su bolja efikasnost i filtracija, kao i bolje distribuirana toplota zbog relativne razuđenosti komponenti.

Priča oko load transient response uopšte nije tako naivna kako se misli.

Evo Mikiju i tebi nešto literature oko toga:

http://www.google.rs/url?sa=t&...39Zg&bvm=bv.57155469,d.d2k

http://www.google.rs/url?sa=t&...GBCg&bvm=bv.57155469,d.d2k

https://www.google.rs/search?q...la:en-US:official&start=20


Biću na liiji događaja da pomognem koliko budem mogao da stignem.


Pozdrav drugari


[ macolakg @ 04.12.2013. 03:30 ] @
Evo i nekih dobrih naprava kojima se može napraviti load tranzijent i isti meriti:

http://www.google.rs/url?sa=t&...w2JQ&bvm=bv.57155469,d.d2k

Pozz
[ bogdan.kecman @ 04.12.2013. 08:07 ] @
zanimljivo, nisam uzimao u obzir taj lc na izlazu, gledam to kao 1bit
dac i nekako uzimam da je pwm->voltage trenutna transformacija :D
ako kasnjenje postoji onda naravno vazi sve isto kao za grejanje,
overshoot, vreme stabilizacije, oscilacije kada se stabilizuje etc etc
.. bice zanimljivo kada miki zavrsi ceo taj sklop mozda nesto naucim o
smps-ovima kako valja najzad :D
[ mikikg @ 04.12.2013. 08:20 ] @
Imas like od mene za ovu izjavu :D
[ mikikg @ 06.12.2013. 10:16 ] @
Evo jos malo, (bar meni) prilicno "teske" literature :( …

http://www.ee.bgu.ac.il/~pel/presentation/PET06/PET06.pdf
http://power.eecs.berkeley.edu...terchev_Dissertation_06-05.pdf
http://www.ti.com/download/trng/docs/seminar/Topic_7_Hagen.pdf

Nije ovo ni malo naivan task, posebno ako treba napraviti nekakav regulator za veliki rang IN/OUT napona ili veliki rang promene opterecenja.
Stvar se dodatno komplikuje jos kod prelaza iz CCM u DCM mod rada …

Dalje, za jos bolje perfomanse treba da se meri i ulazni napon. Drugacije se konverter ponasa recimo kada trebam na izlazu 5V a ulaz 12V nego recimo kada je ulaz 30V.
Za veci ulazni napon mora da se smanjuje Kp inace ima veci overshot. To je FEED-FORWARD! Racunam nesto pre nego sto to utice na izlaz ili krajnju gresku.

Ovde inace ostaje jos jedno vrlo diskutabilno pitanje a to je da li uopste ova topologija sa sinhronm buck lezi za npr nekakav laboratoriski ispraljac, ono tipa "hocu" od 1 do 30V i regulaciju struje od 10mA do 5A a da imam u celom opsegu "perfektnu" regulaciju, tezi slucaj izgleda :)
Mozda bi moglo delimicno da se to prevazidje iz programa biranjem nekih predefinisanih "postavki", tipa daj mi optimalan setings za 5V/1A ili biranjem nekakvog moda "brzi odziv/losija naponska regulacija" ili "sporiji odziv / bolja naponska regulacija".
Tu najvise prigusnica pravi zalud jer je fixna i onda ne moze da ima perfektne karakteristike za neki veoma sirok opseg.
Koliko kontam tu bi jedino Ćuk konverter pomogo ali treba stici do njega (u digitalnom domenu) ...

[Ovu poruku je menjao mikikg dana 06.12.2013. u 15:11 GMT+1]
[ macolakg @ 07.12.2013. 01:28 ] @
Da. Kontrolne petlje i jesu najteža oblast kod SMPS i svakodnevno se dodatno unapređuju nelinearnim modelima kontrole u digitalnom svetu.

Inače, Ćuk konvertor sa "one cycle control" je definitivno konvertor sa najbržim odzivom pri najnižoj frekvenciji nosioca (u odnosu na ostale konvertore koji mogu imati sličnu brzinu odziva, ali moraju imati znatno veću frekvenciju rada).

Ima još tipova no ripple konvertora (Ćuk je jedan od takvih), i svi su veoma kompleksni za rešavanje frekventne kompenzacije povratne veze.

"One cycle" kontrola rešava ozbiljan probem stabilnosti i velike brzine odziva, no vrlo je "nezgodna" za digitalnu implementaciju jer za vreme od jednog jedinog impulsa moramo imati A/D i integrator koji je sposoban da usempluje koju hiljadu puta za to vreme i zaustavi sam impuls.
Ono što je tu problem je rezolucija i brzina tog integratora, jer za na primer rad na 100KHz, a sa kratkim impulsom reda <500nS, za to vreme moramo uzeti stotinak semplova minimalno, sabirati ih, uporediti sa referencom i zaustaviti taj impuls digitalno kontrolisanog pwm. To otprilike znači da sampling rate A/D konvertora mora biti reda oko 10Msps, i pri tom da nam ostane vremena za matematiku u MCU (dakle i visok klok, kao i velika širina "reči" samog MCU).

Na analogni način to se rešava jednim vrlo brzim op-ampom (ili par tranzistora + RC komponene) i jednim komparatorom, a na to se dodaje outloop petlja koja je PID, ali benignih performansi jer rešava samo load probleme zbog nesavršenosti zamajne diode i otpora zavojnice, tj. PID-ić koji to rešava radi u uskom opsegu sa skoro linearnim promenama, te je stoga vrlo jednostavan (par otpornika i par kondenzatora na FB amp).
OCC vrši suštinsko dimenzionisanje svakog impulsa sa ultrabrzim odzivom i sjajnom kompenzacijom veoma snažnih promena ulaznog napona, a na njega se superponira veoma blago dejstvo PID radi visoke preciznosti izlaza.

Tako ja to mogu da vam opišem sa analognog gledišta, jer i pored toga što se bavim programiranjem u nekom domenu, nisam do sada rešavao SMPS na digitalni način, jer kao pretežni "analogac" uvek koristim taj vid koji sam navikao.

Možda bi bio veoma interesantan pristup da se analogno reši OCC integrator, koji bi delovao na brzi OCP komparator u MCU koji ima specijalizovane pwm poput nekih PIC, Ti ili St itd., a pošto tada treba veoma nezahtevan PID, njega rešiti u MCU.

Čini mi se da bi se tako mogle dobiti bolje performanse i od čisto analognog rešenja i od čisto digitalnog rešenja, gde bi se imala neverovatna brzina odziva i ekstra korekcija (bolja od feed forward) ulaznih promena napona pomoću analognog OCC koji bi delovao direktno na OCP komparator u MCU (cena je samo jedan brzi op-amp), a u MCU PID sa adaptivnom logikom za one sitne korekcije zbog nesavršenosti izlaznih ispravljačkih i akumulacionih elemenata (dioda, kalem i elko kod npr. buck konvertora) sa naravno ukupno odličnim odzivom.

Mislim da bi vredelo razmisliti o takvom hibridu.

Pozdrav

[ goran_68 @ 07.12.2013. 08:40 ] @
O tome sam pisao na prvoj strani kad sam pominjao Microchipovu PIC16F178x seriju kontrolera sa integrisanom analogijom na čipu (par OP i brzih komparatora). Izgleda, bar po datasheet-u, da su je tome namenili. Fora je da se u jednom ciklusu duty cycle može podešavati pomeranjem bilo prednje ili zadnje ivice aktivnog pwm signala i to na osnovu spoljnih događaja. Pretpostavljam da se PID načinom upravljanja modifikuje duty, ovako kako to radi Miki klasično pomoću tajmera, a da se dodatno radi modifikacija na nivou jednog ciklusa. Performanse analognih delova kontrolera mogu biti sporne, nisam to gledao jer me više zanimao način generisanja pwm. Nemam nikakvo praktično iskustvo sa svim tim a slažem se da bi vredelo probati.
[ npejcic @ 07.12.2013. 12:35 ] @
@goran_68 "Performanse analognih delova kontrolera mogu biti sporne, nisam to gledao jer me više zanimao način generisanja pwm. Nemam nikakvo praktično iskustvo sa svim tim a slažem se da bi vredelo probati"

Ja sam realizovao uređaj sa PIC16F1783 kontrolerom (u pitanju je termoregulator) i mogu vam reći da Operacioni i DAC odlično rade. Pojačavao sam diodu kao termo senzor i dobio na 0.1°C stabilno merenje. Operacioni su "Rail-to-rail". Jedan OP sam koristio kao pojačavački, drugi sam koristio kao DAC buffer (za DAC obavezan je izlazni buffer). Internim DAC-om sam podešavao offset zbog pojačanja. Tako da mogu reći da sam pozitivno iznenađen da sve to radi Ok. Mereno kvalitetnijim DVM-om sam dobijao baš ono što sam mu "rekao" u firmware-u :)

Komparatore nisam koristio ali je tu Microchip verujem vec senior, tako da pretpostavljam da i taj deo radi Ok.

Inace PIC16F1783 sam koristio i kao PWM generator i potvrđujem da ima jako fleksibilan PSMC "engine".
Međutim 16bit PWM može ići do max (ako se ne varam) do 1kHz izlazne frekvencije.

Podešavanje PSMC-a je takođe malo nezgodno objašnjeno tako da treba se malo prekopati po net-u šta i kako.

Procesorska snaga je daleko od potreba iz @macolakg opisa, jer ovaj PIC ima svega 8 MIPS-a, AD je MAX 100ksps.

Iz ovog ugla, ipak je hibridno rešenje bolje, jer iako sam prilično u digitaliji, moram priznati da se neke stvari lakše rade klasičnim analognim pristupom :)

@mikikg je najavio u prethodnim postovima da je Microchip najavio drastično naprednije mikrokontrolere PIC32MZxxx za narednu godinu, pa možda će on biti pogodan za ove potrebe da se kompletno uradi u digitaliji. Kod njega je ADC 28 Msps, CPU je 330DMIPS-a, i ima ugrađenu standardnu dsPIC matematiku.
[ bogdan.kecman @ 07.12.2013. 13:39 ] @
iskustvo sa smps je pateticno ali za neke druge stvari se vrlo lepo vidi
da je hibridni pristup brzi i laksi zato i ima dobar broj kontrolera sa
analognim stvarima direkt u sebi (microchip je poceo od skoro, neki to
rade oduvek), elem, ono sto se da primetiti je da mchip gubi bitku za
nove ali je poceo da gubi bitku i za stare projekte, prepisuju se za
druge kontrolere posto ima "jacih i boljih za manje pare" ako se zdrakne
konkurencija, posebno kada je brute force potreban .. sa varijantom gde
od atmela preko motorole i ti-a sve do intela svi imaju licencu za arm
jezgro mchip pokusava da svoje mips jezgro (extra kvalitetno jezgro btw)
gurne kao validnog takmicara sa podrskom klasicne microchip price
(kvalitetni i jeftini razvojni alati, objedinjeni, dobri app notes,
odlicni primeri ... generalno znacajno profesionalniji pristup od nekih
ogromnih igraca poput TI ili ST, da ne spominjemo firme "bez pristupa"
poput NXP, Motorola, Intel ...) ... sve to ima vrlo smisla ... iz mog
hobi pogleda mchip pravi opet iste greske zbog nerazumevanja hobi
marketa i cele open price no sta je tu je ..

gledajuci smps, meni je, recimo, ova mikijeva prica idealna u varijanti
"skontati kako radi smps" u "kompletu" ... dakle steci iskustvo ... sto
se smps-a kao finalnog proizvoda tice u 90% slucajeva gotovo
komercijalno resenje je znatno jeftinije od svega sto ja mogu da
napravim a u onih 10% najcesce je 100% analogno resenje dovoljno dobro,
veci problem je razumeti celu pricu kako valja, a kada se ista "razume"
lako je onda delove "spore u digitaliji" zameniti brzom analogijom :)
[ mikikg @ 07.12.2013. 13:53 ] @
Postavicu u toku dana neke oscilograme da vidite nasta mi sad to lici.
Napravio sam ceo PID i to radi onako fino.
Recimo za integrator trenutno imam izuzetno male koeficijente, tipa 0.0005.

Za pocetak su mi tu limiti prvo A/D kovertera 12bit kao i HRPWM-a isto 12bit ali pri nosecoj frekvenciji od svega 25kHz.
Dakle u najboljem slucaju za recimo 30V ulaznog napona i 5V izlaza mogu da dobijem "finocu" izlaznog napona od cca +/- 10mV, ne moze bolje od toga (samo gore) sta god da implementiram. Za bolju rezoluciju mora da se radi veoma veliki oversampling (teoretski x256 za dodatna 4bita, prakticno verovatno mora i vise) + mora veca ucestanost i rezolucija PWM (samo ARM, GS PIC-evi ili TI Piccolo).

Setting time mi je sad isto limitiran L/C konsantnom filtera (300uH + 1000uF), sto dodje negde oko 300Hz i dakle ni preko te brzine/vremena ne mogu brze da se "nacrtam" na zadatu vrednost. Opet samo povecavanje PWM ucestanosti i smanjivanje L ili C moze da ubrza to.

@bogdan.kecman Da isti slucaj je i kod mene, ja pokusavam da kroz ovu digitaliju skontam osnove SMPS-a jer mogu da digitalno muckam vremena, paramtre i ostalo umesto da prckam neki analogni HW.
[ npejcic @ 07.12.2013. 14:03 ] @
Da ne skrećemo previše sa teme, samo kratko.
Slažem se da je Microchip debelo upropastio i upropaštava nekada odličan prilaz i pristup svojim kupcima.
Danas je situacija jako loša. Ima odlične proizvode, imao je odličnu podršku, a sada sve "fušari". Još jedan trzaj je i "MPLAB Harmony framework".
Ali možda kasno, jer je pokopao nekada fenomanalne proizvode npr. PicKit2, fenomenalni TCP-IP stack itd...

Ja lično imam gomilu kupljenih alata baš za njih, znam dosta bubica istih tih alata i kako da ih rešim i ko sada da menja proizvođača.
A stojim iza toga da PIC mikrokontroleri jesu itekako upotrebljivi i stabilni.
[ mikikg @ 07.12.2013. 14:30 ] @
BTW: Spominjemo PIC16F1783 koji ima 16bit @ 1KHz, ekvivalenta rezolucija od 12bit je na 16KHz sto je duplo losije od trenutnog dsPIC iz MC serije (~8ns PWM rezolucija)!
Kod GS serije piceva je ~1ns PWM rezolucija, slicna kao kod ARM Cortex F4, dakle moglo bi da se (teoretski) izvuce 12bit na cca 128KHz PWM.
Znaci ne moze ni ovaj PIC16F bolje da radi jer i on ima neku kvantizaciju koja je limitirana prakticno brzinom njegovog clock-a.
Zato sam se ja bio zaprepastio kada sam video Piccolo gde ispada da mu je clock za njegov PWM negde oko 6.6GHz!!! Nije direktno tako napravljeno, nesto je drugo u pitanju ali je to ta aproksimacija.
[ goran_68 @ 07.12.2013. 14:50 ] @
Taj PSMC kod ove serije je traljavo objašnjen i možda ga ja ne kapiram baš najbolje ali mi se čini da ti 16bit pwm i brzi ADC nije neophodan jer duty možeš dodatno da kontrolišeš brzim komparatorima koji su na čipu. Response time je po datasheet-u 30ns kod komparatora. Dakle, pre nego PID odreaguje, još u istom ciklusu možeš delovati na PWM signal.
Da se razumemo, ja tvoj pristup Miki potpuno podržavam jer ćeš imati prenosivu varijantu i za drugi kontroler samo mislim da je ovaj PSMC ko stvoren za to što radiš. Kad ga dodaju na dsPIC uz ostalu analogiju, eto kontrolera.
[ mikikg @ 07.12.2013. 17:24 ] @
Pa kao sto rekoh, ona PSMC varijanta ima ogranicenu rezoluciju, to je tako kako je, ogranicena je rezolucijom od 30ns (master clock-a).
Njegov PWM je diskretizovan u vremenu, to je problem :) Da je to full analogno resenje (koje se inace praktikuje) to bi bila neka druga prica.

Sad je tu jedina dobra stvar sto moze prakticno kontrolna petlja da bude daleko brza jer nema digitalne kalkulacije, to odraduje taj analogni komparator pa zato moze "manje" jezgro, manje MIPS itd.
Ali opet stara boljka, niska PWM frekvencija sama po sebi daje relativno spor odziv + tesko moze da se detektuje promena po naponu ako ne prodje bar 3,4,5 PWM perioda.
I to sa relativno malim L/C na izlazu ali ako njega preterano smanjimo onda raste naponski ripple koji vise ne moze tako lako da se kontrolise.

Kod PWM / SMPS tehnike ima X nekih faktora gde npr jedni povecavanjem vrednosti dobiju jednu bolju osobinu ali neku drugu onda mora da pokvari.
Dobro "ustelovan" SMPS je kompromis svih tih faktora.

Kod digitalnog PWM (DPWM) koji je diskretizovan, samo smanjivanjem vremena jednog njegovog "step" moze da se ide ka boljim sveukupnim perfomansama.
[ bogdan.kecman @ 07.12.2013. 17:26 ] @
obrati paznju da obzirom da moze da prekine pwm van ciklusa analognim
fb-om rezolucija nije toliki problem
[ goran_68 @ 07.12.2013. 17:33 ] @
Takođe, pored toga što može da ubije/skrati pwm impuls, može i da ga pokrene/produži ako se desi Rising edge event a on takođe može da bude analogni signal. Ta fora sa Rising edge i Falling edge event-ima je ustvari ono što taj PWM čini moćnim.
[ mikikg @ 07.12.2013. 17:37 ] @
Hmm, nesto mi to ne pije vodu. Da li moze nesto (bilo sta, makar doslo iz analognog FB) da napravi promenu brzu nego sto je master clock??
Recimo da imamo neku vrednost za njegov duty cycle od 2048 (od max 4096), ne moze da se napravi 2048.123 vreme duty-a :) On mora da izbroji ili 2048 ili 2049 ne moze izmedju i to je ta kvantizacija o kojoj pricam pa posledicno i rezolucija. Unutra postoji nekakav brojac koji sa konacnom rezolucijom.

Ispravite me ako gresim ali ja mislim da je to tako.
[ bogdan.kecman @ 07.12.2013. 17:47 ] @
naravno da moze :) cela poenta tih sprava je sto im pwm nije klasican
(e)ccp vec je spregnut sa analogijom i sad se zove PSMC :D
Citat:

16bit PWM with dedicated 64 MHz clock
6 steerable outputs or 3 steerable output pairs
Blanking Control for transient filtering
Independent rising/falling output control
Dead band with independent rise & fall control
Polarity Control / Auto Shutdown & Restart

Rail to Rail 50nS response time for high speed switching frequency


dakle umesto klasicnog CCP modula ti imas analogno spregnut pwm

vidi:
http://ww1.microchip.com/downl...ess%20Presentation%20Final.pdf
odlicna prezentacija u nekoliko strana kako to sve sljaka, pogledaj LED
BUCK kontroler (strana 13) gde imas i voltage sensing i current sensing
i time direktno kontrolises pwm a ti samo regulises koje nivoe hoces
internim dac-om
[ goran_68 @ 07.12.2013. 17:49 ] @
Baci pogled na stranu 205 datasheet-a i sliku BASIC PWM WAVEFORM GENERATION
[ mikikg @ 07.12.2013. 17:57 ] @
Ok sad cu da pogledam DS ali bar oko jedne stvari sam potpuno siguran a to je da bez FB ne moze da ima bolju rezoluciju, kao sto rekoh ili ce da upisemo npr u registar 2048 ili 2049, ne moze izmedju.
Da ima mogucnost da u okviru tog jednog impulsa skrati bar jos na pola (to bi bio jedan dodatni bit) ili na cetvrtinu (dva dodatna bita) to vreme impulsa onda bi to bilo izvodljivo.

ALI pogledajte karakteristike komparatora, 50ns (a rezolucija PWM 30ns)!!!
Kako sad to? :)

Koliko shvatam kod tog PIC su stvarno izvukli maksimum na 8bit jezgru ali to ne znaci da je on bolji od konkurenata iz 16 ili 32bit serije procesora.

Lepo oni kazu, "Puls skiping", preskace se nekoliko impulsa. Daleko je to od onoga sto je Macola pricao "Single cycle" kontrola nasta malo podseca taj pristup ali nije to to.

[Ovu poruku je menjao mikikg dana 07.12.2013. u 19:18 GMT+1]
[ bogdan.kecman @ 07.12.2013. 18:18 ] @
> da bez FB ne moze da ima bolju rezoluciju

naravno tome sluzi feedback

> to bi bio jedan dodatni bit

pa taj deo radi analogno u tome i jeste fora, nema bitova

> ALI pogledajte karakteristike komparatora, 50ns!!!

20MHz ti je malo ?
[ goran_68 @ 07.12.2013. 18:25 ] @
U okviru istog ciklusa možeš da deluješ na PWM ukoliko je recimo ispunjen uslov spolja. Pogledaj šta kaže:

Rising edge event sources include any combination of the following:
• Synchronous:
- PSMCxTMR time base counter match
• Asynchronous:
- PSMC input pin
- sync_C1OUT
- sync_C2OUT
- sync_C3OUT

Falling edge event sources include any combination of the following:
• Synchronous:
- PSMCxTMR time base counter match
• Asynchronous:
- PSMC input pin
- sync_C1OUT
- sync_C2OUT
- sync_C3OUT
[ mikikg @ 07.12.2013. 18:25 ] @
>> ALI pogledajte karakteristike komparatora, 50ns!!!
>20MHz ti je malo ?

Da ali kako onda mogu da odlucim da skratim jedan impuls od 30ns sa komparatorom od 50ns???
A tek da ne pricam da iza L/C nema teorije da dobijem ta vremena!
[ goran_68 @ 07.12.2013. 18:27 ] @
Odakle ti taj impuls od 30ns! To ne možeš da generišeš.
[ bogdan.kecman @ 07.12.2013. 18:34 ] @
kakav bre impuls? nesto ti tu nisi skontao kako treba .. ne procesiras
ti datu sa komparatora, data sa komparatora direktno kontrolise pwm
izlaz, nemas ti to kad da "obradis" to se desi sve unutar jednog
takta... aj uzmi pogledaj app note i primer kako je izveden buck sa tim
pwm-om posto pokusavas nacin na koji radis sad da primenis na ovom
slucaju a to ne moze, fora je sto sa ovakvim mcu-om ti pravis hibridno a
ne digitalno resenje
[ goran_68 @ 07.12.2013. 18:37 ] @
Ma malac je extra, ja o tome zvocam još od prve strane :). Samo šteta što je 16F.
[ mikikg @ 07.12.2013. 18:38 ] @
Pa to je ta muka :)

Evo ovako, da uprostim, recimo da sam ja upisao vrednost npr 1000 nekih CCP jedinica za PWM i da mi to daje tamo aktivan impuls od 1us + 30ns, za 1001 jedinica bi recimo bilo 1us + 60ns, za 1002 jedinica bi bilo 1us + 90ns vreme trajanja tog impulsa.

Ja sa komparatorom od 50ns ne mogu nikako da se "umetnem" izmedju tih stepova, mogu negde izmedju 2-3 stepova!

Komparator bi morao da bude brzi od rezolucije PWM ako hocemo tu rezoluciju da extendujemo (da skracujemo vreme impulsa sa analognim FB)!
[ goran_68 @ 07.12.2013. 18:44 ] @
Ma odakle ti 1GHz frekvencija PWM!
[ mikikg @ 07.12.2013. 18:52 ] @
Pa to isto pitanje postavi i Texasu za njihov Piccolo, odakle njima 6.6GHz clock za 150ps rezoluciju PWM :)
Ili za Delfino sa 45ps rezolucijom :)
[ bogdan.kecman @ 07.12.2013. 18:56 ] @
ali ne treba da se umetnes :D
ti kazes da ti je PWM u njegovoj klasicnoj rezoluciji a onda preko FSB
analogno kontrolises taj pwm, pogledaj primer
[ bogdan.kecman @ 07.12.2013. 18:58 ] @
na pikolu bi radio full digitalni a tu opet imas problem sto za full
digitalni da bi radio dovoljno brzo (ma koliko ti je brz sam pwm) moras
da radis i vrlo brz ad da bi radio integraciju u hw-u .. ja to gledam sa
ugla obicnog pwm->dc sto je 100x lakse od smps-a ali opet vrlo slicno
[ goran_68 @ 07.12.2013. 19:15 ] @
Piccolo HRPWM je druga priča, ja sam mislio na PIC :). OK imaš 1GHz! Šta je sa matematikom i uzorkovanjem?
Kod ovog PIC-a odgovor na poremećaj veličine koju regulišeš može biti trenutan (dobro, plus tih 50ns).
Još nešto pic ima tri PSMC modula, Piccolo samo jedan HRPWM.
[ mikikg @ 07.12.2013. 19:17 ] @
Citat:
bogdan.kecman: ali ne treba da se umetnes :D


Pa kako sad da se ne umetnem a hocete da skracujete impuls preciznije nego sto je jedan step od 30ns? :)

PMW ima linearnu transfer funkciju, koliko rezolucije je u digitaliji toliko je i na kraju u analogiji :)
[ mikikg @ 07.12.2013. 19:22 ] @
Citat:
goran_68: Piccolo HRPWM je druga priča, ja sam mislio na PIC :). OK imaš 1GHz! Šta je sa matematikom i uzorkovanjem?
Kod ovog PIC-a odgovor na poremećaj veličine koju regulišeš može biti trenutan (dobro, plus tih 50ns).
Još nešto pic ima tri PSMC modula, Piccolo samo jedan HRPWM.


Matematika i uzorkovanje je tu jos i najmanji problem. Glavna uzrok svih problema je transportno kasnjenje od L/C filtera, direktno utice na odziv, nema tu govora izpod 1us nekakvog odziva …

Mora fazna margina da se ispostuje, ako ode preko 90 stepeni bude belaja, proosciluje sistem.

A Piccolo jeste da ima 1 HRPWM modula ali sa 4 potpuno nezavisna izlaza (8 linija) ;)
Moze jedan par da se fura na jednoj frek, drugi na drugoj, sinhrono ili ne medjusobo i vazdan jos nesto oko toga.
[ goran_68 @ 07.12.2013. 19:30 ] @
Batali čas rezoluciju. Neka tvoja regulisana veličina na trenutak poraste. Odgovor ovog sa PIC biće da će duty biti nula (nema aktivnog impulsa na PWM izlazu) ako je izlazna veličina premašila komparatorom zadatu vrednost. I to gotovo trenutno (dobro nakon 50ns). I obrnuto.
[ mikikg @ 07.12.2013. 20:00 ] @
Evo kako sam ja skontao kako taj PIC radi.

Onaj komparator "gasi" PWM (jedan ili X ciklusa, NE na pola ili cetvrt impulsa kako smo prvo pomislili!) sto ce prouzrokovati da napon na izlazu pada. Kako napon na izlazu pada onda spomenuti komparator prelazi u suprotno stanje (pri nivou definisan sa Vref na jednom kraju i naponu sa FB na drugom kraju) i enabluje na dalje PWM. I tako se "vrti" oko neke vrednosti, pustajuci ili preskakajuci vise PWM ciklusa.
Prakticno ZAHTEVA da na DC-u postoji neki ripple da bu opste mogao da radi!

To bi trebalo da bude PULS SKIPING metoda. I nije bas neka sjajna metoda, jedino je ultra prosta za implementaciju :)

[ goran_68 @ 07.12.2013. 20:06 ] @
Ne, ne. PWM radi sve vreme normalno koristeći tajmerski metod. Napucaš mu registre za frekvenciju, duty.. Kada se desi neki spoljni događaj pwm aktivni signal se modifikuje u zavisnosti od toga kako si ga podesio. Baš kao na slikama koje si priložio.
[ mikikg @ 07.12.2013. 20:22 ] @
Pa radi PWM u njegovoj "glavi" ali dok je komparator sa logickim jedan npr, za to vreme je fizicki izlaz iz PWM potpuno iskljucen, nemam nikakvih impulsa na izlaznim pinovima.

Duty se steluje u postavci tako da moze da prekoraci krajnji/zadat napon da bi mogao kasnije iskljucivanjem/stopiranjem PWM da ga regulise.
Zato MORA da ima neki ripple na izlazu da bi to sve imalo smisla.

Mozda vam ova slika pojasni jos malo ovo sto pisem …

[ goran_68 @ 07.12.2013. 21:02 ] @
Baš tako. Samo, ripple je posledica ovakvog načina rada. Ukoliko je prihvatljiv onda OK. A da je jednostavno, jeste.
I da. Da ne bude zabune. Na toj slici je prikazan skok ulaznog napona i pwm izlaz. Sledeća slika iz tog dokumenta prikazuje izlazni napon čija se regulacija vrši.

[att_img]

[Ovu poruku je menjao goran_68 dana 07.12.2013. u 22:25 GMT+1]
[ mikikg @ 07.12.2013. 21:18 ] @
Da, to je bila slika za ulazni napon, kao primer.
Tehnicki ti je nebitno da li ti se menja ulazni napon (PWM ima linearnu transfer funkciju) ili opterecenje na izlaznom naponu, ti odrzavas regulaciju u toj jednoj (izlaznoj) tacki.

A ripple je neminovan u ovoj postavci.
Sa postavkom koju sam ja napravio prakticno bi mogao da imam napon bez rippla (kada je greska=0).
Sad prakticno postoji ripple u oba slucaja zbog opet famoznog L/C :)

Kao sto rekoh, SMPS je tehnika koja se sastoji iz gomile kompromisa.

Zato me uzasno interesuju konverteri bez rippla poput Ćuk-a.
Vecim delom sam shvatio njegovu sustinu ali bas zbog toga sto nema izlaznog rippla je FB totalna komplikacija :(

[Ovu poruku je menjao mikikg dana 07.12.2013. u 22:33 GMT+1]
[ macolakg @ 07.12.2013. 22:01 ] @
Za SMPS napajanja nije od kritičnog značaja visoka rezolucija pwm. Dovoljno je 10 bit (i više od dovoljnog).

SMPS u stacionarnom stanju uvek blago "leluja" (par mV) oko nominalne vrednosti zbog dejstva integratora koji uvek klizi tražeći preciznu vrednost izlaza.
PWM biva u nekom ciklusu setovan na neku vrednost xxx, pa u sledećem xxx+1, eventualno u sledećem plus još jedan bit, pa ga integrator opet vraća polako za po jedan bit prolazeći kroz tačnu vrednost izlaza.

Tako bi se to ponašalo sa perfektno podešenim PID. Posledica je veoma malecki ripple (par mV) na učestanosti nekoliko puta nižoj od nosioca, ali je to toliko malo da se osciloskopom ne vidi (veći je HF ripple zbog ESL i ESR elko). Osrednjena vrednost napona na izlazu je tačna, a PWM polako "skakuće" po bit dva levo desno oko potrebne vrednosti.

Kod npr 8 bit PWM će isto tako biti tačna osrednjena vrednost na izlazu, samo će taj maleni ripple zbog integratora da bude veće amplitude i njegova učestanost nešto niža.

Uostalom, izazivam nekog ko će sa povratnom vezom sa perfektno naštelovanim PID, konstantnim opterećenjem, konstantnim ulaznim naponom, da održi PWM nepromenljivim duže od par PWM ciklusa.

Narode, to se neprestano pomalo menja čak i u najstabilnijim uslovima napona i opterećenja, makar zbog temperaturnih uticaja na aktivne i pasivne komponente.

Tome PID i služi da neprestano održava što stabilnije stanje na izlazu. Čim tranzicija nekog uticaja bude "sređena", P i D prestaju da budu od značaja, preciznost na izlazu doterava integrator (koji jedini i može da reguliše spravu sa nevidljivim error signalom, praktično za nas smrtnike nulti error, zahvaljujući upravo tome što poseduje osobinu neprestanog blagog klizanja kao posledicu akumuliranog rezultata beznačajne greške u dugom periodu vremena).

Od PWM se kod SMPS i ne očekuje mirno stanje, tako da visoka rezolucija nije od značaja. Visoka rezolucija je bitna kada se PWM koristi za D/A konverziju.

Što se komparatora tiče, neki od MCU imaju fault komparator koji otkači PWM izlaz bilo gde u toku jednog impulsa, neki preskaču po jedan impuls.
Kod nižih frekvencija se možemo poslužiti prostom asm forom kod PIC, testirajući jedan običan digitalni ulaz na koji dovedemo izlaz iz OCP ili OCC komparatora i njim isprovocirati TRISx PWM pina.

To je nekoliko asm instrukcija (kod 40MHz oscilatora manje od 1uS), što je dovoljno čak i kod 100KHz, jer teško da će biti pametno da se SMPS dimenzioniše da trajno radi sa užim impulsom od 1uS (to je potrebno kod sasvim specifičnih izvedbi).

Na 100KHz bi to već bilo oko 10% PWM, ali znajte da najveći broj PWM kontrolera (analognih) veoma problematično pravi impulse kraće od 1uS.
To zna inače da bude štetno po gate drive pa se takvi režimi veoma izbegavaju (<1uS bio to impuls ili pauza).

Kada bude light opterećenje, ukoliko je potreban pwm < tih 1uS, sam PID će proizvesti pulse skiping.

Kada postoji komparator koji hardverski u MCU preseče impuls u toku (bilo gde u njegovom trajanju), što mnogi fault komparatori i rade, delay od 50nS je ekstra dobar, a to njegovo prekoračenje će integrator povući unazad smanjujući pwm za jedan bit na primer.
50nS je sasvim dovoljno za takve stvari, čak i prebrzo pa se obično kada se koristi za OCP ispred tog komparatora dodaje filter reda 300-400nS kao lead edge blanking.

Ako takav fault pin ili komparator postoji u MCU (koji hardverski deluje na PWM pin isključujući ga za 50nS po stimulaciji), perfektno je upotrebljiv i za OCP i za OCC.

Nemam vremena da se zakopam u dokumentaciju da vidim kako je koji izveden kod pojedinih MCU, a i nije mi baš dobar engleski.

Neko ko dobro barata engleskim treba da pretraži to, jer bih ja izginuo sa rečnikom.

Dakle, za OCP ili OCC je poželjan pin koji može prekinuti PWM izlaz u toku trajanja impulsa (bilo gde), dok njegov delay nije od kritičnog značaja (može biti i par stotina nS).
[ pedja089 @ 07.12.2013. 23:06 ] @
Neko spomenu steta sto je PIC16F...
PIC18F14K50 /13K50 ima bas taj pin. U bilo kojem trenutku kada komparator generise neku ivicu rastucu ili opadajucu, gasi pwm, sve se definise u registrima ulazi komparatora i izlaz invertovan ne invertovan.
Generisanje nove periode PWM-a moze da se podesi da bude automatsko, pri resetu brojaca, a moze da se programski generise. Isto tako nova perioda se nece generisati sve dok se taj signal sa komparatora ne ocisti.
Ono sto je jos zanimljivo kod ovog pica je da ima 2 komparatora, tako da se moze koristiti i za pracenje i napona i struje. 10 bita mislim da moze da kura na 40tak KHz. Ima podrsku za most, polumost, definisanje deadtime, ili kako se vec zove, i ima 10 bit ADC...
Mislim da bi on bio odlican kandidat da se potera neko hibridno resenje.
A to je ono sto mene najvise zanima:) Ja sam se poigrao sa njim i napravio boost oko pola W, vec sam ga spominjao.
Ta prica o ultra brzim GHz, nS, pS itd mi se cini malo preteranom...
[ macolakg @ 07.12.2013. 23:42 ] @
Potrebne su te priče o nekoliko nS rezolucije PWM (čak i nužne) za D class amp. Tu je sve bolji kvalitet reprodukcije što je finija rezolucija PWM.

Što je i najgore, za pristojan zvuk treba bar 16 bit pri bar 300-400KHz nosioca, a to je već zahtevan PWM.

Neki PIC iz serije 18F imaju ECCP modul sa takvim pinom, npr. 18F4620 koji češće koristim.
Ali nikad nisam pravio SMPS sa njim, već oba CCP modula koristim uglavnom kao D/A ili kao PWM bez povratne veze, a negde tamo dalje rešavam strujni limit (za proporcionalne hidraulične ventile).

Nisam nikada imao potrebe da koristim taj pin. Nisam ga isprobao pa ne mogu pouzdano nešto oko njega tvrditi, ali bi po opisu trebalo da radi korektno.

OCP bi mogao da se gurne u takav 8 bitni, samo se bojim da će biti tesno sa izračunavanjem PID.

Pretpostavljam da bi napisano u asm imalo dovoljno vremena, ali to baš i nije tako slatko za pisanje pogotovo ako se ne očekuje velika serija uređaja. Kod veće serije bi se i isplatilo mučenje.

Verujem da DsPic serija ima takav pin, osim toga je 16 bit i bitno brži, što je interesantno i jevtiniji.

Ipak bi to bilo bolje u njemu. Komfor je uvek prednost.

Nekad, kada je se pojavio PIC16F84, bio je uvek problem što zafali jedan pin ili dva bajta :-)
[ goran_68 @ 07.12.2013. 23:56 ] @
To kod 18F je auto shutdown mogućnost i nema istu funkciju kao kod ovog 16F. Koristio sam ga za prekostrujnu zaštitu sa 18F. Mislim, jeste slično ali nije isto.
[ macolakg @ 08.12.2013. 00:22 ] @
Citat:
goran_68: To kod 18F je auto shutdown mogućnost i nema istu funkciju kao kod ovog 16F. Koristio sam ga za prekostrujnu zaštitu sa 18F. Mislim, jeste slično ali nije isto.


Ma zemljače moj Gorane, ako može da zaustavlja trajanje impulsa bilo u kom trenutku potpuno je upotrebljiv, i naravno da se opet oporavi za nov impuls.

Kažem nisam ga probao jer mi nije zatrebalo.

[ pedja089 @ 08.12.2013. 01:27 ] @
Ok, slazem se za D klase u potpunitosti. Ali moj pristup je sledeci:
Zasto gurati silne bite, i muciti procesor i pwm sa GHz, kad ce jedan LM311 da odsvira to isto kao i taj procesor, za neuporedivo manju cenu(mislim na sve, i ulozen trud rad itd)...
Tako da po meni jedino opravdanje za tako nesto je da se nesto sustinski shvati kako radi, ali i tu mi se cini da ce se puno vremena potrositi na sve ostalo osim SMPS. U svakom slucaju podrzavam sve sto Miki radi, ako budem mogao da doprinesem, rado...
Ne bi voleo da protumaci moje postove kao odvracanje od toga sto radi...
[ macolakg @ 08.12.2013. 03:13 ] @
Mcu je prava stvar za složene zakone upravljanja sa više PWM odjednom, poput PSM, ZVS sa pomoćnim sw., ZCS sa pomoćnim sw, polifaznim napravama i slično tome.

Posebna prednost je tek u mogućnosti nelinearnih načina kontrole, adaptivnih filtera, autotjuninga i sličnih samoadaptivnih sistema.

Stoji da je složeno uraditi sve to, ali kasnije se svodi na čačkanje po tastaturi radi daljeg unapređivanja sistema.

Već je dosta SMPS kontrolisanih sa MCU u opticaju i njima se postižu bolji rezultati kod sistema koji zahtevaju visoku elestičnost, kao što su pretvarači za solarne panele, pretvarači napajani sa raznih tipova hemijskih izvora i slično, kao i kod pretvarača koji generišu sinusni napon nazad ka mreži.

Dobro je ući u taj način.
[ mikikg @ 08.12.2013. 05:14 ] @
Ja ljudi sve ovo pisem da bi svi po nesto naucili jer jer relativno nova stvar u pitanju.
Nacitao sam se krsa dokumentacije u predhodnih godinua dana, uglavnom teorisko razmatranje raznih postavki i topologija.
To su ili neke doktorske disertacije ili istrazivanja nekih fakulteta i sl.
Interesantno je da se skoro u svakom dokumentu spominje bar jedan Srbin :) Nekako nam to "lezi", mozda je genski :)

Stoji da jedan opican analogni komparator moze da radi fenomenalno dobro gde digitalija jako tesko moze da parira.
Posebno kod Class-D, sa bang-bang modulacijom i samooscilujucim principom rada na cca 400kHz to zvuci "boli glava".
Kod njega je FB sastavni deo rada, ne moze bez FB da radi tj ne moze da osciluje a postoj je FB sa jedne strane direktno u grani koja generise trajanje impulsa, sa druge strane je analogni ulaz (ili Vref kako god gledali), sa tim se prakticno sve kompenzira, i izlazni stepen a i krive-drine L/C filtera itd.
Taj Class-D i ako je mozda osmisljen kao Audio pojacivac, nista nas naravno ne sprecava da umesto audio signala dovedemo DC napon a da zadrzimo sve ove fine osobine + fenomenalan odziv sistema.

Tako nesto napraviti u potpuno digitalnom domenu je muka neopisiva, pocevsi od rezolucije PWM-a pa na kraju do filtriranja.
Najvise ih "muci" filtriranje, frekvencija PWM-a se penje zbog lakseg filtriranja ali tome kontrira opet rezolucija i procesorkso vreme.
Da znate samo kakve sve modulacija tu koriste, pali bi sa stolice. Da bi smanjili THD (nivo nepozeljnih harmonika) koriste DSP feed-forward + nekoliko PID-ova i ko zna sta jos.
Video sam jedan dokument gde su napravili audio pojacivac kome se PWM vrti na "svega" 50-ak KHz, to je skoro pri teoretskom minimumu po Nyquist-u ali su tu morali toliko da muckaju signalom da bi smanjili nivo harmonika da to nisu mogli bez 1000+ MIPS da rese!

BTW: Posotji i THD kod ispravljaca :) Samo vecinu nas to ne tangira previse ali kad se pravi npr regulator za CPU koji vuce "nasumice" izmedju 1 i 110A pri cca 1V eh to ima itekako veze :)

BTW2: Jako je tesko povuci crtu npr izmedju Class-D audio pojacivaca i nekakvog naponskog regulatora, svodi se na isto. Recimo dobar audio pojacivac moze da bude fenomenalan naponski regulator (ima na forumu jedna shema LAB PSU sa 2 x LM3886 od Macole) kao i sto brz naponski regulator moze da bude dobar audio pojacivac ;)

Ali opet kazem valja ovo sa digitalijom da se generalno iscacka, ima to i puno svojih dobrih osobina.

[Ovu poruku je menjao mikikg dana 08.12.2013. u 07:08 GMT+1]
[ mikikg @ 08.12.2013. 11:06 ] @
Hmm, nasao sam fin software za PID simulaciju:
http://www.calerga.com/download/index.html

U prilogu je projektni fajl.

I ovo je vrlo korisno:
http://www.ti.com/lit/an/slua622/slua622.pdf
http://www.ti.com/lit/ug/sluu490/sluu490.pdf
[ mikikg @ 08.12.2013. 16:41 ] @
BTW samo da znate da je ovaj PID prilizno zahtevan za racun po pitanju procesorskog vremena.
Na dsPIC treba oko 35us (28kHz) da uradi racun bez Floating point. Sa FP bude odprilike duplo duze! Mozda moze code da se optimizuje ali sigurno ne moze neko preterano ubrzanje da se dobije.
Naravno ovo diktira bandwidth kontolne petlje.
[ mikikg @ 08.12.2013. 17:23 ] @
Evo malo i krivuljica sa PID regulacijom.

Ovaj oscilogram je step response sa 3.3V na 5V pri ulaznom naponu od 12V


Ovaj oscilogram je step response sa 3.3V na 5V pri ulaznom naponu od 28V


Ocigledan je overshot kod veceg ulaznog napona i pri takvim uslovima mora da se smanjuje Kp (zato je zgodno da se meri i ulazni napon).
Sa porastom opterecenja se sve vise "smiruje", manje su ove prigusene oscilacije.

Takodje je overshot sa oscilacijama prouzrokovan Q faktorom izlaznog filtera a desava se tacno na rezonantnoj ucestanosti (~290Hz za L=300uH i C=1000uF) gde se inace naglo menja faza sto se vidi iz ove slike prenosne karakteristike tog filtera.



Sad ovo "ispupcenje" na bode-plot oko Fco bi trebao kompenzator (tj PID) da ispegla i spreci odlazak faze ispod 180 stepeni tako da mozemo da dobijemo brzi odziv i iza Fco.
Samo nesto mi ne ide za rukom da to ustelujem ...
[ mikikg @ 09.12.2013. 14:02 ] @
Huh, odprilike da sam tek sad shvatio kao da se upravlja frekvencijom a odnosi se na ono ispupcenje i promenu faze iz predhodnog posta i bode-plot-a.

Elem, kako baratati frekvencijom u vremenskom domenu? :)
Prati se promena sa jednog (naposnkog) stanja na drugo izmedju dva sempla, sadasnjeg i predhodnog, ne interesuje nas apsolutni nivo, samo razlika.
Npr, ako napon poraste sa 10 jedinica na 20 u nekom vremenu T to je jedna ucestanost. Ako poraste sa 10 na 30 to je neka duplo veca ucestanost.
Ko nam daje bas takvu informaciju?
Diferencijator! ;)

E sad opet pogledajte bode-plot, imamo onu grbu na Fco. Do frekvencija nesto ispred te grbe (dok je jos prava linija) tu treba da drzimo neko konstatno pojacanje, recimo da je to nekih nasih 0dB.
Kako se priblizavamo grbi, pocinje da se javlja pojacanje (manje vise samo-od-sebe, takva je karakterisika filtera, Q faktor itd), ne vazi nam vise 0dB nego mora npr -3dB kako bi tu krivu-drinu vrati nazad na 0dB.
Kako idemo udesno niz bode-plot, tako to pojacanje od filtera raste a mi moramo jos da smanjujemo (procesno) pojacanje da bi to kompenzirali.
I tako sve do grbe gde po onom bode-plot mora da postavimo skoro -20dB pojacanje.
Iza te grbe se opet sve slicno desava ali posto nam se pomerila faza preko 180 stepeni onda moramo i mi to da uracunamo i da promenimo predznak nasem signalu.

BTW: Da nekog ne zbuni, kako sad to moze nesto pasivno da daje na nekoj ucestanosti veci izlazni nivo nego sto je ulazni :) Moze NAPON da daje ali onda je manja struja (naravno energija je ista) i tu se vidi zavisnost promene kompleksne impedance (otpora).
Probajte jedan prost primer, uzmite recimo kristalni MF filter 455kHz iz radio aparata, one zute kockice sa 5 pinova, "pobudite" ga na ulazu sa tacno 455KHz ucestanoscu iz nekog kontrolera sa 5V naponskim nivoom.
Gledanjem osciloskopom na izlazu iz tog filtera ce te dobiti napon od cca 10-12-15Vpp :) To je moguce videti jer je ulazna impedanca osciloskopa/sonde relativno visoka (>1Mohm).
Takvi kristalni filteri imaju jako veliki Q faktor (neophodno za radio tehniku zbog selektivnosti) a inace se na izlazu iako smo ga pobudili sa kvadratnim signalom da dobijemo prelep skoro savrsen sinusni signal ;)

Ko se igrao sa DSP ovo ce mu odmah biti ocigledno i upadljivo da za definiciju naseg digitalnog filtera moramo da imamo skup parova i to tako da za vrednost diferencijala D imamo neki koeficijent (pojacanje) G.

NPR:
D=0 (DC u pitanju), G=1
D=1 (niska ucestanost), G=1
D=2 (niska ucestanost), G=1


D=250 (nesto smo ispred Fco), G=0.9
D=251 (jos blize smo Fco), G=0.8
...
D=300 (tacno smo na Fco), G=0.2
D=301 (tik iza Fco, promenila se faza), G= -0.2
D=302 (iza Fco, promenila se faza), G= -0.3

I tako redom.

Sto vise ovakvih parova imamo to je nasa definicija filtera za kompenzaciju (moze da ga nazovemo anti-filter) sve preciznija.
To je u sustini caka sa DSP/filtriranjem. Karakteristike filtera se prestavljaju ovakvim nekim skupovima koeficijenata da bi moglo u vremenskom domenu da se barata.
Prakticno treba da reprezentujemo/odradimo invertovanu sliku onog bode plote-a i zato se kod racunanja sve prakticno bazira na karakteristici L/C filtera.

BTW2: Kada je odziv sistema jos kompleksniji, jos vise krivudav/izlomljen bode-plot, ovi koeficijenti se vise "brljave", nisu ovako fino jedni za drugim vec to skoro lici na nasumice (ali naravno nije) jer kada se iz frekvetnog domena i Fourie-ovom transformacijom (FFT, tacnije discrete-time Fourier transformation) prebace sve komponente / harmonici tod filtera onda to na kraju ispada zbrka koeficejenata koje vaze u vremenskom domenu.
Ovo sto pricam bi prakticno bila direktna transformacija iz F u T domen. Postoji jos jedno 20-ak razlicitih transformacija a koja svaka za sebe ima neki kompromis perfomansi VS zahtev za procesorsko vreme tj kompleksnost racuna pa se tu biraju neke koji mogu da koriste HW matematicke rutine procesora poput MAC (Multiply And Accumulate) kako bi to sto brze mogli da racunaju.
Takodje, zarad ustede procesorskog vremena, rade se razlicite aproksimacije ponasanja filtera tako da dobiju neki "slican" odziv ali uz dosta manje racuna. Tako nesto sve radi onaj Texasov digitalni power kontroler za koji sam dao DOC nekoliko postova pre, pogledajte obavezno jako puno korisnih informacija tu ima.

Kod PID i auto-tuning tehnike se bas to i radi!
Sistem se pobudi (excitation) nekim signalom, obicno kratkim impulsom/dirak, korakom (step), belim shumom ili recimo sinusnim signalom promenljive ucestanosti (to je nabolja metoda jer pruza najbolji SNR rezultata) i onda se snimi po svakoj tacki (za D) ponasanje/odziv sistema koji hocemo da kontrolisemo (procesor onda dobije tu sliku bode-plot-a) i to se onda na kraju smesti u tablicu sa koeficijentima koji se koriste posle kod procesiranja/kompenzacije da bi dobili sveukupan "flat" odziv sistema, zaobisli onu grbu koja nas je pre toga limitirala na cca 300Hz kontrolnog bandwidth i pruzila mogucnost da kontrolni bandwidth "teramo" dokle mozemo tj do tacke gde vise nemamo dovoljno vremena za procesorsko racunanje (gde nije vise real-time).

Evo jedan vrlo lep primer efekta pojedinacnih P, I, D parametra u kontrolnoj petlji.
Ovde se odrzava pozicija ali isto sve vazi i kada se odrzava napon/temperatura/brzina.



[Ovu poruku je menjao mikikg dana 10.12.2013. u 04:30 GMT+1]