Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PI regulacija,.............

[es] :: Elektronika :: Mikrokontroleri :: PI regulacija,.............

[ Pregleda: 4259 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon PI regulacija,.............29.07.2011. u 19:53 - pre 154 meseci
opet je zapelo,..

ne mogu da skontam kako da izvedem u programu PI regulaciju,...ako dobro kontam da mi baš ona treba,..


zadam temperaturu i zadam histerezis i zadam brzinu motora(to su tri parametra koja unosim tasterima)


treba da se dešava sledeće:

ako merena temperatura predje vrednost zadate + histereza brzina motora se povećava za 1


zadata temp. 20
histereza 0.5
brzina motora na primer 1

merena temperatura ode na 20.5 brzina motora treba da se uveća za 1 (znači da će sada brzina motora biti 2)
merena temperatura ode na 21.0 brzina motora treba da se uveća za 1 (znači da će sada brzina motora biti 3)

i tako dalje,...ali i sve to kontra

znači na svaki porast ambijentalne temperature u odnosu na zadatu plus vrednost histereze uvećava se promenljiva za brzinu motora
na svaki pad temperature u odnosu na zadatu plus vrednost histereze umanjuje vrednost promenljive za brzinu motora

probao sam svašta nešto ali skoro pa bez uspeha,..

prevrnuo sam pretragu ali ništa što bi mi pomoglo,...












1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: PI regulacija,.............31.07.2011. u 09:50 - pre 154 meseci
Citat:
lm741
ako merena temperatura predje vrednost zadate + histereza brzina motora se povećava za 1


to nije PI kontrola, to je obican bang control sa histerezisom

imas nekoliko nacina da to odradis, najlakse ti je sa flegovima

imas fleg koji definise da li temepratura raste ili pada i u zavisnosti od njega menjas "brzinu" sa gornje ili donje strane cetvrtke ...

donja strana cetvrtke ti je "temperatura - histerezis" a gornja strana cetvrtke ti je "temperatura" (moze da se definise i temperatura; temperatura + histerezis, to je vec do zahteva)

Code:

oldTemp = getTemp();

while(1){
  T = (T + getTemp()) >> 1;
  if( T > oldTemp ){
    // ako temp raste
    if (T > temperatura) coolerON();
  } else {
    // ako opada
    if (T < temperatura - histerezis) coolerOFF();
  }
  oldTemp = T;
  delay_ms(1000);
}


to ti je simulacija ponasanja obicnog manuelnog termostata samo sada to implementiraj sa promenom brzine na stepovima (imas nekoliko temepratura)

PI kontrola je skroz drugacija, ona ti vraca 0-1 (ili 0-100 ili 0-255 zavisi sta hoces) vrednost koju treba da pustis na motor u zavisnosti od trenutnog i prethodnog stanja (P deo radi u odnosu na trenutno stanje a I deo u odnosu na sta je bilo do sada) tako da ako uzmemo da tvoj motor ima 10 brzima to bi bilo nesto tipa

Code:

int T, error;
float P, I, Pk, Ik, scaleFactor;

oldTemp = getTemp();
I = 0;
while (1){
  T = (T+getTemp()) >> 1;
  error = temperatura - T;
  P = error;
  I = I + error;
  
  izlaz = (P*Pk+I*Ik) * scaleFactor;

  if (izlaz > 10) {
    izlaz = 10;
    I = I - error;
  }
  if (izlaz < 0){
    izlaz = 0;
    I = I - error;
  }

  setSpeed(izlaz);

  delay_ms(1000);
}



Pk ti je koeficijent proporcionalne kontrole
Ik ti je koeficijent integralne kontrole
scaleFactor sluzi da izlaz (koji se obicno pravi da bude 0-1) skaliras na tvoje potrebe (0-10 u ovom slucaju)

e sad Pk i Ik nije bas lako odrediti ako nemas dobar model toga sto kontrolises. Najlakse je sa zeigler nichols metodom (dovedes sistem u oscilaciju samo koristeci proporcionalnu kontrolu i onda odatle preracunas Pk i Ik)


 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............31.07.2011. u 13:38 - pre 154 meseci
Bogdane da samo znaš kako sam ti se obradovao,...
već ko zna koje jutro petlovi me potsećaju da treba na spavanje,..

to je ono isto kao što smo radili sa tri 7-segmentna i sondom za temperaturu LM335 a sada radim sa ds1820 i LCD-om

umesto 74hc595 gonjam ga PWM-om

umesto pica 16g870 koristim 16f628

i sve mi je proradilo super samo je ovo ostalo kao veliki mi problem

nešto malo sam postigao ali nisam zadovoljan


Code:
if temperatura >tz + his and temp1 >temp2 + his  and sp < 45 then 
   
    sp=sp+1





tz-zadata temperatura
sp-promenljiva kojom menjam odnos PWM-a
his-zadajem histerezu od 0.1 do 2.0 stepena
temp1 i temp2 uporedjujem novo sa starim stanjem ako je došlo do promene


i sve to za kontra stanje tj. kada temperatura ambijenta opada

PWM koristim u rasponu od 15 do 45 (to sam eksperimentom ustanovio )
pa sam formulicom napravio tako da mi na LCD-u prikazuje u procentu od 0-100 %
ii to super radi


Code:
oldTemp = getTemp();

while(1){
  T = (T + getTemp()) >> 1;
  if( T > oldTemp ){
    // ako temp raste
    if (T > temperatura) coolerON();
  } else {
    // ako opada
    if (T < temperatura - histerezis) coolerOFF();
  }
  oldTemp = T;
  delay_ms(1000)


delom razumem a delom ne razumem
za temperaturu zadatu+ histerezis cooler treba da poveća brzinu a ne samo da je ON
pri sledećem porastu temperature cooler opet samo povećava brzinu
pri opadanju temperature cooler smanjuje brzinu a ne da je off
moram napraviti novu pločicu pa ću da probam




1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PI regulacija,.............31.07.2011. u 14:11 - pre 154 meseci
Na sledecem linku ima simpatican i poucan clanak o PID kontroli:

http://www.eetimes.com/design/embedded/4211211/PID-without-a-PhD

.pdf verzija koja je na sajtu ponudjena za download izgleda nije sasvim u redu (barem se na mojoj kanti ne prikazuje bas najbolje: neki prazni box-ovi, nedostajuce recenice....), a ni html verzija se nije ubila od preglednosti, pa sam ja to nekad ranije kad sam to prvi put citao malo 'preformatirao'. Ako nadjem gdje mi je uploadovacu ovdje.

Na istom sajtu moze se pronaci jos dosta infromativnih tekstova o PID-u, kucanjem "pid" u polje za pretragu.

edit: evo nasao sam, link za download je ispod...
Prikačeni fajlovi
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............31.07.2011. u 19:27 - pre 154 meseci
Odine hvala ti na javljanju i na linku,..
jeste to slikovito pojašnjeno sam princip regulacije i dobrim delom sam to znao i ranije ali
ja nikako da skontam kako bi to primenio u programu a da mi radi

inače pločicu sam napravio ponovo i sad opet mogu da vršim probe,...

ček sad sam došao na jednu ideju,..






1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............31.07.2011. u 21:00 - pre 154 meseci
Code:
oldTemp = getTemp();

while(1){
  T = (T + getTemp()) >> 1;
  if( T > oldTemp ){
    // ako temp raste
    if (T > temperatura) coolerON();
  } else {
    // ako opada
    if (T < temperatura - histerezis) coolerOFF();
  }
  oldTemp = T;
  delay_ms(1000);
}


da li možete da mi pomognete da razjasnim ovo što je bogdan postavio
ja koristim picbasic pa ne razumem u potpunosti bogdanov kod



1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............01.08.2011. u 02:37 - pre 154 meseci
rešeno,..

hvala vam svima na pomoći,...
1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: PI regulacija,.............02.08.2011. u 10:13 - pre 154 meseci
taj kod koji "nisi razumeo" je super jednostavan ... dakle bitno je da znas na koju stranu se krece pritisak pa da u odnosu na to radis promenu na jednoj ili drugoj vrednosti ...

ali ako vec koristis PWM onda ti je bolje da koristis PI po kodu koji sam ti stavio za PI i samo preracunas koeficijente (+ ostavis mogucnost da se isti menjaju od strane klijenta kroz meni) i napravis da ti izlaz PI rutine bude 15-45 (ili cime vec ganjas pwm) sto podesavas sa onim scaleFactor

to sto je kod u c-u nema neke veze isto to u basicu izgleda prilicno identicno

Code:

oldTemp = getTemp();
I = 0
loop1:
  T = (T+getTemp()) >> 1;
  error = temperatura - T;
  P = error;
  I = I + error;
  
  izlaz = (P*Pk+I*Ik) * scaleFactor;

  if (izlaz > 10) then
    izlaz = 10
    I = I - error
  endif

  if (izlaz < 0) then
    izlaz = 0
    I = I - error
  endif

  setSpeed(izlaz);
  delay_ms(1000);
goto loop1



 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PI regulacija,.............02.08.2011. u 11:44 - pre 154 meseci
Code:

oldTemp = getTemp();

while(1){
  T = (T + getTemp()) >> 1;
  if( T > oldTemp ){
    // ako temp raste
    if (T > temperatura) coolerON();
  } else {
    // ako opada
    if (T < temperatura - histerezis) coolerOFF();
  }
  oldTemp = T;
  delay_ms(1000);
}


Pravo da ti kazem, i mene zbunjuje ovo shiftovanje:
T = (T + getTemp()) >> 1;
a mrzi me da se udubljujem :)
Koja je inicijalna vrednost za T?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: PI regulacija,.............02.08.2011. u 12:00 - pre 154 meseci
Inicijalna vrednost za T je getTemp()

"T = ( T + newT ) /2" predstavlja rudimentarni NF filter, nista posebno ... moze da ide cak i "T = (T*3 + newT) / 4" ili cak "T = (T*15+newT) / 16" ako hoces bas da mu odseces HF deo.

Shiftovanje je obicno deljenje
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PI regulacija,.............02.08.2011. u 12:49 - pre 154 meseci
^ @lm741 je koristio float (histerezis 0.5), a shiftovanje je celobrojno delenje bez ostatka, pa je zato izazivalo zbunj...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: PI regulacija,.............02.08.2011. u 13:01 - pre 154 meseci
float na 16F je gubljenje vremena. Sve pomnozis sa 10 i radis kao sa integerima (ili sa 100 zavisi koja ti preciznist treba). Zato i nisam obratio paznju na taj detalj
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PI regulacija,.............02.08.2011. u 13:45 - pre 154 meseci
Slazem se :)
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............03.08.2011. u 13:33 - pre 154 meseci
a,..evo i mene,..

ja sam napavi nešto u programu za šta baš nisam siguran kako bi ga nazvao,..ali radi
evo da vidite pa možda da prokomentarišete a možda i da dodate neke izmene

@bogdane,..u kom trenutku daješ vrednost za getTemp
ostatak programa sam ukapirao
pa ću večeras probati da ga realizujem,..
1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............03.08.2011. u 13:37 - pre 154 meseci
uf,...evo i deo koda


Code:
pocetak:

   hpwm 1,sp,15000                                                     
    if termicka = 1 then
    goto prekid
    endif    
pause 5


 

if temperatura > tz+skok then
greska = (temperatura-tz)

pause 2
novagreska=greska

pause 10
if novagreska>staragreska then
pause 100
sp=sp+1
 endif
 endif

pause 100

novatemperatura=temperatura
 
pause 500
if temperatura < staratemperatura  then


if sp>st then
pause 1000
sp=sp-1

endif
endif

1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: PI regulacija,.............03.08.2011. u 14:02 - pre 154 meseci
getTemp() u mom primeru je funkcija koja vraca trenutnu temperaturu
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: PI regulacija,.............03.08.2011. u 14:28 - pre 154 meseci
aa,..jasno,..
1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PI regulacija,.............

[ Pregleda: 4259 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.