[ zivadin_despot @ 29.12.2014. 12:20 ] @
Pozdrav svima, interesuje me praktican postupak odredjivanja parametara PID regulatora metodom ZN sa relejem u povratnoj sprezi. Obicna ZN metoda bi isla ovako:
1. Podesimo Kp na neku pocetnu malu vrednost, uticaj ostali nuliramo (Ti-veliko,Td-0)
2. Ukljucimo regulator i pratimo odziv.
3. Kp povecavamo dok se ne dobiju neprigusene periodicne oscilacije oko reference.
4. Zabelezimo Kp (Kp-kriticno) i izmerimo periodu oscilacija (T-kriticno)
5. Na osnovu ovih vrednosti i tipa regulatora (P,PI,PID) uzimamo vrednosti iz tabele ZN.

E sad nije bas najjasniji postupak rada ukoliko imamo relej u povratnoj sprezi.
Evo kako sam ja shvatio:
1. Pocetne parametre podesimo kao prethodno
2. Na izlaz prosledjujemo relejni izlaz, tj. ukoliko je greska pozitivna izlaz je negativan i suprotno.
3. Meri se prioda izlaznog signala (perioda releja)
4. Meri se amplituda greske.

Nije mi jasno kad se staje sa postupkom, odnosno da li se prestaje kao i u prethodnom slucaju, ako je da, cemu onda ova metoda?
Mana metode u originalu je sto se sistem dovodi na ivicu stabilnog stanja, te je problematican u industriji.

Ovde je to delimicno objasnjeno i prilozen je C kod...

Svaka pomoc je dobrodosla...

Hvala
[ vladd @ 29.12.2014. 17:19 ] @
PID "na releju" zahteva konverziju napona u djuti sajkl, odnosno generisanje neke frekvencije rada relea.
[ zivadin_despot @ 29.12.2014. 20:10 ] @
Da to je ok kada je kao aktuator postavljen relej. Medjutim ovde se relej koristi za na drugi nacin. Ovde sam pronasao dobar tekst o nacinu odredjivanja parametara na ovaj nacin, pa ako je neko zainteresovan mozemo to sve ovde zajedno protumaciti...
Cilj mi je da pokusam realizovati samopodesivi PID regulator, nekim mikroprocesorom...

Na str 22 je objasnjenje...
[ Trick Fix @ 29.12.2014. 23:17 ] @
Citat:
zivadin_despot:sa relejem u povratnoj sprezi.....Mana metode...je sto se sistem dovodi na ivicu stabilnog stanja, te je problematican u industriji.


TAČNO !

Nikad mi se nisu sviđala inženjerska rešenja gde je mehanički rele u povratnoj vezi.

Takvi sistemi umeju da budu toliko "NERVOZNI" da sve u ormanu klacka,škljoca,štekče,brekče , trese se i na kraju propadne,
razglavi se i sve stane.....

Da ne pričam da i izvršni elementi (aktuatori, magneti, motori sa supčastim letvama itd ) su nahhebli od tog neprekidnog trzanja vamo-tamo.

-i sve to ne traje dugo,

Takva rešenja nisu Volkswagen Buba....


[ mikikg @ 30.12.2014. 06:28 ] @
@zivadin_despot Pogledaj ovu temu ako vec nisi, tu smo se u par zadnjih stranica teme dotakli PID regulacije u digitalnom domenu:
http://www.elitesecurity.org/t...PWM-regulacija-sa-naponskim-FB

Nebitno je sto tu pricamo o PWM i regulaciji napona, potpuno ISTA pravila za PID vaze za sve druge primene ...
[ zivadin_despot @ 30.12.2014. 22:36 ] @
Pozdrav, nisam detaljno sve procitao, vec delove...
Uglavnom ne pokusavam da realizujem PID regulator u digitalnoj tehnici, vec algoritam za odredjivanje parametara PID-a, konkretno ZN metodu.
Pronasao sam arduino biblioteku sa ovim algoritmom, i delimicno objasnjenje. Biblioteka je zasnovana na simulink modelu...
Ovo je kod:
h file
Code:

#ifndef PID_AutoTune_v0
#define PID_AutoTune_v0
#define LIBRARY_VERSION    0.0.1

class PID_ATune
{


  public:
  //commonly used functions **************************************************************************
    PID_ATune(double*, double*);                           // * Constructor.  links the Autotune to a given PID
    int Runtime();                                              // * Similar to the PID Compue function, returns non 0 when done
    void Cancel();                                           // * Stops the AutoTune    
    
    void SetOutputStep(double);                               // * how far above and below the starting value will the output step?    
    double GetOutputStep();                                   // 
    
    void SetControlType(int);                                // * Determies if the tuning parameters returned will be PI (D=0)
    int GetControlType();                                   //   or PID.  (0=PI, 1=PID)            
    
    void SetLookbackSec(int);                            // * how far back are we looking to identify peaks
    int GetLookbackSec();                                //
    
    void SetNoiseBand(double);                            // * the autotune will ignore signal chatter smaller than this value
    double GetNoiseBand();                                //   this should be acurately set
    
    double GetKp();                                        // * once autotune is complete, these functions contain the
    double GetKi();                                        //   computed tuning parameters.  
    double GetKd();                                        //
    
  private:
    void FinishUp();
    bool isMax, isMin;
    double *input, *output;
    double setpoint;
    double noiseBand;
    int controlType;
    bool running;
    unsigned long peak1, peak2, lastTime;
    int sampleTime;
    int nLookBack;
    int peakType;
    double lastInputs[101];
    double peaks[10];
    int peakCount;
    bool justchanged;
    bool justevaled;
    double absMax, absMin;
    double oStep;
    double outputStart;
    double Ku, Pu;
    
};
#endif


cpp file
Code:

#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

#include <PID_AutoTune_v0.h>


PID_ATune::PID_ATune(double* Input, double* Output)
{
    input = Input;
    output = Output;
    controlType =0 ; //default to PI
    noiseBand = 0.5;
    running = false;
    oStep = 30;
    SetLookbackSec(10);
    lastTime = millis();
    
}



void PID_ATune::Cancel()
{
    running = false;

 
int PID_ATune::Runtime()
{
    justevaled=false;
    if(peakCount>9 && running)
    {
        running = false;
        FinishUp();
        return 1;
    }
    unsigned long now = millis();
    
    if((now-lastTime)<sampleTime) return false;
    lastTime = now;
    double refVal = *input;
    justevaled=true;
    if(!running)
    { //initialize working variables the first time around
        peakType = 0;
        peakCount=0;
        justchanged=false;
        absMax=refVal;
        absMin=refVal;
        setpoint = refVal;
        running = true;
        outputStart = *output;
        *output = outputStart+oStep;
    }
    else
    {
        if(refVal>absMax)absMax=refVal;
        if(refVal<absMin)absMin=refVal;
    }
    
    //oscillate the output base on the input's relation to the setpoint
    
    if(refVal>setpoint+noiseBand) *output = outputStart-oStep;
    else if (refVal<setpoint-noiseBand) *output = outputStart+oStep;
    
    
  //bool isMax=true, isMin=true;
  isMax=true;isMin=true;
  //id peaks
  for(int i=nLookBack-1;i>=0;i--)
  {
    double val = lastInputs[i];
    if(isMax) isMax = refVal>val;
    if(isMin) isMin = refVal<val;
    lastInputs[i+1] = lastInputs[i];
  }
  lastInputs[0] = refVal;  
  if(nLookBack<9)
  {  //we don't want to trust the maxes or mins until the inputs array has been filled
    return 0;
    }
  
  if(isMax)
  {
    if(peakType==0)peakType=1;
    if(peakType==-1)
    {
      peakType = 1;
      justchanged=true;
      peak2 = peak1;
    }
    peak1 = now;
    peaks[peakCount] = refVal;
   
  }
  else if(isMin)
  {
    if(peakType==0)peakType=-1;
    if(peakType==1)
    {
      peakType=-1;
      peakCount++;
      justchanged=true;
    }
    
    if(peakCount<10)peaks[peakCount] = refVal;
  }
  
  if(justchanged && peakCount>2)
  { //we've transitioned.  check if we can autotune based on the last peaks
    double avgSeparation = (abs(peaks[peakCount-1]-peaks[peakCount-2])+abs(peaks[peakCount-2]-peaks[peakCount-3]))/2;
    if( avgSeparation < 0.05*(absMax-absMin))
    {
        FinishUp();
      running = false;
      return 1;
     
    }
  }
   justchanged=false;
    return 0;
}
void PID_ATune::FinishUp()
{
      *output = outputStart;
      //we can generate tuning parameters!
      Ku = 4*(2*oStep)/((absMax-absMin)*3.14159);
      Pu = (double)(peak1-peak2) / 1000;
}

double PID_ATune::GetKp()
{
    return controlType==1 ? 0.6 * Ku : 0.4 * Ku;
}

double PID_ATune::GetKi()
{
    return controlType==1? 1.2*Ku / Pu : 0.48 * Ku / Pu;  // Ki = Kc/Ti
}

double PID_ATune::GetKd()
{
    return controlType==1? 0.075 * Ku * Pu : 0;  //Kd = Kc * Td
}

void PID_ATune::SetOutputStep(double Step)
{
    oStep = Step;
}

double PID_ATune::GetOutputStep()
{
    return oStep;
}

void PID_ATune::SetControlType(int Type) //0=PI, 1=PID
{
    controlType = Type;
}
int PID_ATune::GetControlType()
{
    return controlType;
}
    
void PID_ATune::SetNoiseBand(double Band)
{
    noiseBand = Band;
}

double PID_ATune::GetNoiseBand()
{
    return noiseBand;
}

void PID_ATune::SetLookbackSec(int value)
{
    if (value<1) value = 1;
    
    if(value<25)
    {
        nLookBack = value * 4;
        sampleTime = 250;
    }
    else
    {
        nLookBack = 100;
        sampleTime = value*10;
    }
}

int PID_ATune::GetLookbackSec()
{
    return nLookBack * sampleTime / 1000;
}



[ Trick Fix @ 30.12.2014. 22:50 ] @
....Uuuu ebt,

Idem ja da dam babi lek...
[ zivadin_despot @ 30.12.2014. 22:54 ] @
Ovde je objasnjenje principa rada i eliminacija suma u povratnoj sprezi...
Ovo je primer koriscenja biblioteke:
Code:

#include <PID_v1.h>
#include <PID_AutoTune_v0.h>

byte ATuneModeRemember=2;
double input=80, output=50, setpoint=180;
double kp=2,ki=0.5,kd=2;

double kpmodel=1.5, taup=100, theta[50];
double outputStart=5;
double aTuneStep=50, aTuneNoise=1, aTuneStartValue=100;
unsigned int aTuneLookBack=20;

boolean tuning = false;
unsigned long  modelTime, serialTime;

PID myPID(&input, &output, &setpoint,kp,ki,kd, DIRECT);
PID_ATune aTune(&input, &output);

//set to false to connect to the real world
boolean useSimulation = true;

void setup()
{
  if(useSimulation)
  {
    for(byte i=0;i<50;i++)
    {
      theta[i]=outputStart;
    }
    modelTime = 0;
  }
  //Setup the pid 
  myPID.SetMode(AUTOMATIC);

  if(tuning)
  {
    tuning=false;
    changeAutoTune();
    tuning=true;
  }
  
  serialTime = 0;
  Serial.begin(9600);

}

void loop()
{

  unsigned long now = millis();

  if(!useSimulation)
  { //pull the input in from the real world
    input = analogRead(0);
  }
  
  if(tuning)
  {
    byte val = (aTune.Runtime());
    if (val!=0)
    {
      tuning = false;
    }
    if(!tuning)
    { //we're done, set the tuning parameters
      kp = aTune.GetKp();
      ki = aTune.GetKi();
      kd = aTune.GetKd();
      myPID.SetTunings(kp,ki,kd);
      AutoTuneHelper(false);
    }
  }
  else myPID.Compute();
  
  if(useSimulation)
  {
    theta[30]=output;
    if(now>=modelTime)
    {
      modelTime +=100; 
      DoModel();
    }
  }
  else
  {
     analogWrite(0,output); 
  }
  
  //send-receive with processing if it's time
  if(millis()>serialTime)
  {
    SerialReceive();
    SerialSend();
    serialTime+=500;
  }
}

void changeAutoTune()
{
 if(!tuning)
  {
    //Set the output to the desired starting frequency.
    output=aTuneStartValue;
    aTune.SetNoiseBand(aTuneNoise);
    aTune.SetOutputStep(aTuneStep);
    aTune.SetLookbackSec((int)aTuneLookBack);
    AutoTuneHelper(true);
    tuning = true;
  }
  else
  { //cancel autotune
    aTune.Cancel();
    tuning = false;
    AutoTuneHelper(false);
  }
}

void AutoTuneHelper(boolean start)
{
  if(start)
    ATuneModeRemember = myPID.GetMode();
  else
    myPID.SetMode(ATuneModeRemember);
}


void SerialSend()
{
  Serial.print("setpoint: ");Serial.print(setpoint); Serial.print(" ");
  Serial.print("input: ");Serial.print(input); Serial.print(" ");
  Serial.print("output: ");Serial.print(output); Serial.print(" ");
  if(tuning){
    Serial.println("tuning mode");
  } else {
    Serial.print("kp: ");Serial.print(myPID.GetKp());Serial.print(" ");
    Serial.print("ki: ");Serial.print(myPID.GetKi());Serial.print(" ");
    Serial.print("kd: ");Serial.print(myPID.GetKd());Serial.println();
  }
}

void SerialReceive()
{
  if(Serial.available())
  {
   char b = Serial.read(); 
   Serial.flush(); 
   if((b=='1' && !tuning) || (b!='1' && tuning))changeAutoTune();
  }
}

void DoModel()
{
  //cycle the dead time
  for(byte i=0;i<49;i++)
  {
    theta[i] = theta[i+1];
  }
  //compute the input
  input = (kpmodel / taup) *(theta[0]-outputStart) + input*(1-1/taup) + ((float)random(-10,10))/100;

}


Konkretno sta meni nije jasno:
Po teoriji na objekat upravljanja se dovodi diskretan signal koji zavisi od izmerene vrednosti i zadate vrednosti. Npr na grejac, ukoliko je temperatura manja od zadate grejac je prikljucen na maksimalan napon, ukoliko je temperatura veca od zadate onda se grejac ISKLJUCUJE. Tokom rada meri se maksimalna i minimalna vrednost oscilacija, kao i perioda oscilacija. Na osnovu ovih vrednosti proracunava se Ku i Tu, a zatim se parametri odredjuju na osnovu tabele.
Prvo pitanje da li se grejac ukljucuje na maksimalnu vrednost i iskljucuje ili se napon npr menja 220-100?
Tu je perioda oscilovanja i to je jasno. Prilikom proracuna vrednosti Ku=4*D/(A*PI), vrednost A je razlika maksimalne i minimalne vrednosti povratne sprege, i to je neka vrednost AD konvertora, interesuje me koliko je D, (to se ddefinise na pocetku, ali kako?) Na slici se vide ove vrednosti...


[ Trick Fix @ 30.12.2014. 23:07 ] @
..uuu bre... sad ču i sebi da dam lek..

Mislim da sistem lepše vrši regulaciju ako se pri nižoj temperaturi (a ima potrebe da se grejač uključi)

-Grejač ne "spuca" odma na direktnih 230Vac ....
..već se onako malo-po-malo dozira (klacka) ta "inekcija/ubacivanje" dodatne potrebne snage (energije)

..i tako se sa donje strane polako približis SET-POINT-u,


...a ne da ga rokneš odmah direkno na 230V... pa se SET-POINT ----onda "preleti" i ode isuviše preko zadate veličine,
[ zivadin_despot @ 30.12.2014. 23:13 ] @
Nije mi jasan izlaz u ovom primeru....Vidim da on na analogni izlaz prosledjuje oscilacije (softverski relej sa amplitudom D), koliko sam uspeo da ispratim kod. Interesuje me sta dalje radi sa tom vrednoscu, prakticno.
Ono sta sam ja poceo da radim je regulacija temperature u nekoj kutiji (eksperiment na stolu) znaci imama AC grejac 200W na keramici, zatvorenu kutiju, senzor (NTC) i stm32f4 plocicu. Relejem regulisem temperaturu, rezultat PID-a ide na relej. Pre zapocinjanja sa pid regulacijom ovaj algoritam treba sam da odredi parametre pida a zatim da nastavi sa regulacijom.
Ja bih to ovako uradio (algoritam podesavanja):
1. ukljucim grejac i zapocnem sa semplovanjem temperature
2. dok je merena temperatura manja od zadate ostavljam ukljucen grejac
3. kada je merena temperatura veca, grejac iskljucujem
4. ponovo ga ukljucim kada vrednost opadne ispod zadate
5. ovo sve ponovim 5 puta (eksperimentalno)
6. merenjem odredim maksimalnu i minimalnu vrednost merene vrednosti
7. algoritam se odvija u prekidu tajmera na svaki 50ms (npr)
8. na osnovu detekcije preseka merene i zadate vrednosti odredim preiodu oscilovanja (poznata vrednost tajmera i vrednost brojaca npr)
9. vrednost tu dobijam u ms ili s
10. vrednost ku dobijam na osnovu fomule gde mi je min i max vredsnot ad konvertora i lupam njihova razlika je 2000, ALI VREDNOST D JE PROBLEMATICNA, JA BIH UZEO MAKSIMALNU VREDNOST AD KONVERTORA (jer ako bih sve vrednosti normalizovao prema vrednosti ad konvertora ili prema nekoj drugoj vrednosti tako bi se dobilo, ovim se ne mesaju babe i zabe)

Naravno da bih izbegao nepotrebna ukljucenja i iskljucenja postavicu neki histerezis kao u primeru, ali za pocetak da ne komplikujem sebi zivot verovacu da nema nekih velikih pikova (usrednicu to)

Sta mislite da li mi je ovaj postupa za pocetak dobar, da li sam dobro skapirao kako to sve radi?

Hvala
[ zivadin_despot @ 30.12.2014. 23:17 ] @
Pozdrav Trick Fix,
misim da je bas fora da mu se gurne maksimalna snaga i prati se odziv sistema. Temperatura ce rasti neko vreme, i kada ona predje zadatu ja iskljucim grejac ali po inerciji ce temperatura nastaviti malo da raste. Kada opadne ispod zadate vrednosti ponovo ukljucim grejac. To vreme opadanja i rasta direktno zavisi od okoline (uslovi hladjenja u ovom slucaju) i tu se krije funkcija objekta koja je nepoznata. i na osnovu toga bi iz tog dela trebalo odredjivati parametre pid-a.
pozz
[ Trick Fix @ 30.12.2014. 23:22 ] @
Ne sme da se rokne na FULL snagu !

Može FULL snaga u početku ......ali kad se sa donje strane približiš SET-POINT-u onda pređeš na polago "klackanje" i

na lagano doziranje kao " kap-po-kap" i na lagano približavanje zadatoj vrednosti---tako NEČE da se puno/previše preleti "crta"


Današnji ,moderni regulatori to urade ---a zove se AUTO TUNING,

..usnime tromost/inertnost/odziv sistema dok si rekao "KEKS",



[Ovu poruku je menjao Trick Fix dana 31.12.2014. u 03:40 GMT+1]
[ zivadin_despot @ 30.12.2014. 23:32 ] @
Pazi ove delove
Code:

oStep = 30;
.
.
.
//oscillate the output base on the input's relation to the setpoint  
if(refVal>setpoint+noiseBand) *output = outputStart-oStep;
else if (refVal<setpoint-noiseBand) *output = outputStart+oStep;
.
.
.
void PID_ATune::FinishUp()
{
      *output = outputStart;
      //we can generate tuning parameters!
      Ku = 4*(2*oStep)/((absMax-absMin)*3.14159);
      Pu = (double)(peak1-peak2) / 1000;
}
.
.
.
analogWrite(0,output);


Ovde je amplituda diskretnog signala oStep=30 (odakle mu ovaj br nemam pojma), izlaz se prosledjuje na analogni izlaz i on osciluje oko outputStart sa amplitudom oStep. Znaci nema nekog postepenog doziranja na analognom izlazu vec ukljuci na +oStep i iskljuci na -oStep... Nisam uspeo da skontam kolika je vrednost outputStart da vidim oko cega osciluje.
Prakticno postoji mogucnost da se radi o sledecem da se grejac dovodi na lupam 220 i na 180, znaci da osciluje oko 200V sa amplitudom 20?
To nisam siguran...
[ Trick Fix @ 30.12.2014. 23:41 ] @
Pazi kad uopšte nemam pojma kakve Ti ovde kuke-kvake kačiš i kakve su to "Hieroglife" ???? (mislim na te tvoje kodove i tabele)

Ja ti samo pričam iz praxe kako sam podešavao silne regulatore,

..ali "pametni" regulatori umeju da prepoznaju strminu/brzinu približavanja (aktuelne vrednosti) ----> SET-POINT-u

i na osnovu toga formiraju to "klackanje" o čemu ti pričam,

Kad kažem : FORMIRAJU ----mislim na parametre: brzinu i na "DjutiSajkl" te klackalice....
[ zivadin_despot @ 30.12.2014. 23:55 ] @
Ok, jasno mi je o cemu govoris...Ovde konkretno pokusavam da razumem i realizujem ovaj algoritam...a ovi kodovi su vec napisane biblioteke za arduino
pozz
[ Trick Fix @ 31.12.2014. 00:00 ] @
Pozdrav,

Svako Dobro,
[ zivadin_despot @ 31.12.2014. 01:38 ] @
Sad sam iz navedenog koda pohvatao da pri startu samopodesavanja output dobija vrednost 100 i osciluje za 30, znaci izlazni signal imam vrednost 130 i 70.
Dakle u slucaju mog grejaca, potrebno je da napona na grejacu osciluje oko odredjene vrednosti, npr 150 i da ima vrednosti npr 170-130.
Znaci sistem je pre pocetka eksperimenta potrebno dovesti u ustaljeno stanje, a zatim upravljacki signal povecati za 3-10% i postupci su isti kao sto je navedeno. Ovo se vidi iz sledecih isecaka knjiga:





Nije mi jasno medju navedenim koracima kad kaze podignemo upravljacki signal za 5% i kada merena vrednost predje SP onda smanjimo za 5% i td. Koje je to sad SP?
Ja zadam temperaturu od 200 stepeni, ukljucim grejac sa 20% snage i u ustaljenom stanju imam 80 stepeni, dignem za 5% i moja t ne dostize 200 stepeni, sta sad?.
Moze li mala pomoc oko razumevanja ovog dela? Mozda cu malo kasnije i sam naci odgovor, ali verovatno jos neko prati pa ce biti jasnije...
Pozdrav

[Ovu poruku je menjao zivadin_despot dana 31.12.2014. u 02:48 GMT+1]

Ako nekoga interesuje kompletne knjige o ovom podesavanju parametara mogu mu poslati linkove...

[Ovu poruku je menjao zivadin_despot dana 31.12.2014. u 02:50 GMT+1]
[ bogdan.kecman @ 31.12.2014. 04:57 ] @
2 hinta ..
- ako vec imas mogucnost da turis triak zasto se zezas sa sporom relejnom kontrolom? pored toga sto je relejna kontrola opasnija za sistem i sto je sporija ne vidim nikakav benefit u odnosu na to da koristis klasican PID, ukines ID i dizes Pk dok ne dobijes stabilno stanje .. mnogo lakse nego da menjas F na releu
- NTC je spor, ja sam se zezao par nedelja nije mi autotune radio kako valja (isto ZN samo normalan nista releji u fb-u) dok nisam za senzor stavio termopar i resio problem .. dakle da bi uhvatio prvo stabilno oscilatorno stanje treba ti senzor sa manjom inercijom od toga sto meri :)

inace "stabilno" stanje sa relejnom kontrolom je klasican termostat sa histerezom, odredis gornji i donji limit i onda premeris oscilacije i dalje racunas Pk, Ik i Dk po ZN metodi ... sitno je brze od laganog dizanja Pk ali daleko stresnije, obicno se koristi za RUCNO setovanje pid-a, dakle ti u kontrolisanim uslovim odradis regulaciju releom, premeris oscilacije i preracunas pid koeficijente - to se skoro nikad ne stavlja u produkciju gde korisnik startuje spravu a ona krene da se aututunuje ... sa druge strane klasicna ZN metoda gde se Pk dize od 0 dok se ne dodje do stabilnog sistema je autotune koji smes da pustis u produkciju da klijent starta i da se sprava sama autotunuje .. doduse vidim po modernim spravama da autotune racunaju drugacije, nisam im provalio matis jos uvek ali nije ZN .. rekao bih da nije Cohen Coon, mozda je ATV nisam siguran, nemam sa ATV nikakvo iskustvo
[ veselinovic @ 31.12.2014. 05:01 ] @
Mnogo pitanja je postavljeno.
Koliko znam odgovoricu, iako se ogradjujem da cu mozda negdje i fulati.
Prvo oko parametra D.
Vidi, ti imas neki realan sistem - recimo grijanje vode.
Treba da drzis recimo 50 stepeni ( bojler) i to u nekom stacionarnom stanju postizes
sa recimo 100V na grijacu.
Zaljuljas sistem i regulator ( max P-ostalo iskljuceno) napon ide od 80V do 120V.
D je 20V.

Algoritam koji si ti opisao u 10 tacaka krije jednu zamku.
Ako tako ljuljas sistem gubis karakteristike regulatora. Dobijas karakteristike samo objekta.
A tvoj termicki objekat je sistem 1. reda bez transportnog kasnjenja. Sam regulator sa senzorom ce unijeti kasnjenja.
Drugo, vaznije, sistem se ljulja oko stacionarne tacke ( englezi kazu point- odatle ono SP) jer linearizacija radi korektno samo u uskom opsegu.
A tebe inace interesuje sistem samo u blizini SP. Ostalo te bas briga. Eto u zadnjoj poruci i ti pominjes 5% prebacaja/podbacaja. To je OK.
Pazi skoro svaki sistem ( a termicki svaki) se u okolini SP moze tretirati kao sistem 1. reda sa trensportnim kasnjenjem. U principu ne da moze nego mora jer je nama nepoznata matematika za sisteme veceg reda.
Naravno, ja sam vec poceo da lapim, a sa ovim se nisam sretao 10-tak godina pa su moguce rupe u sjecanju. Jos gore je sto sam mozda te rupe popunio izmisljenim podacima.
Tako da dobro izvagaj pre nego sto uzmes za tacno.
[ veselinovic @ 31.12.2014. 05:05 ] @
Kalman Bogdane.
Estimator stanja i Kalmanov regulator.
Na zalost tesko ga je svariti, jer nema analogni pandan, moze bit samo digitalni.
A tu su Z transformacije za koje nama analognim ljudima nema logike.
[ Trick Fix @ 31.12.2014. 06:16 ] @
Citat:
veselinovic: nama analognim ljudima nema logike.


...ja spadam u te što nemaju tu logiku
[ vladd @ 31.12.2014. 07:12 ] @
Tu postoje dva problema.
Samog algoritma grejanja, zbog inertnosti sistema, svakako ne moze biti slican "dostizanju napona" i regulaciji neke brze velicine, i drugi problem softverska realizacija.

TRI su parametra kod grejanja, naravno zadata temperatura, toplotna "inercija" grejnog sistema, i brzina postizanja temperature, od cega zavisi snaga i nacin regulacije grejaca.

Zadatoj temperaturi se prilazi asimptotski, mereci gradijent temperature, i postavljajuci odluku kolike su temperaturne granice("oscilovanja") oko zadate temperature. Sto zavisi od snage grejaca i inertnosti, odnosno mase i toplotne provodnosti grejnog tela.

Sistem ispada iz regulacije tek ako su neadekvatni parametri odabrani, prejak grejac na premalom grejnom telu, nedovoljno kratko vreme ukljucenja grejaca pri dostizanju zadate temperature.

Varijabile su gradijent temperature, i vreme rada grejaca, koji bi za univerzalnije primene morao da ima brzi prekidac, tiristor ili trijak i PWM regulaciju.

Kada se meri vreme izmedju dve promene temperature, ili prirastaj temperature za neki vremenski period, sistem prakticno ne moze da osciluje, posto mu je finalno ishodiste iskljucen.

P.S.

Uostalom, iz wiki definicije se neke stvari JASNO prepoznaju
Citat:
Z–N yields an aggressive gain and overshoot[2] – some applications wish to instead minimize or eliminate overshoot, and for these Z–N is inappropriate.


Tako da metoda NIJE za "grejanje"
[ zivadin_despot @ 31.12.2014. 12:40 ] @
Pozdrav, hvala na odgovorima i pojasnjenjima, ali nisam prokljuvio odgovor na moje pitanje...
Ovde je na strani 86 prikazan praktican proracun parametara PID-a na osnovu ovog algoritma. Da bi proces bio brzi, meri se toplota vazduha koji prolazi kroz grejac. (na ovo je sugerisao vladd)
Ovde takodje je lepo objasnjen deo kada se zapocinje sa radom releja osciluje oko neke vrednosrti i ostalo je poznato. Konkretno mene interesuje kada se zapocinje sa ovom manipulacijom, u mom prethodnom postu stoji da se sa manipulacijom zapocinje iz ustaljenog rezima, znaci stanje je ustaljeno i onda zapocinjem sa oscilovanjem, ali nije mi jasno poredjenje merene vrednosti i zadate, tj. sta je onda zadata vrednost.

Koliko sam zapazio u navedenom eksperimentu, zapocinje se od nule, ne iz nekog ustaljenog stanja. Znaci ukljuci relej na 5V kada t predje zadatu iskljuci grejac. Na osnovu oscilacija dobije parametre, koji se lepo pokazuju.

Code:

Conventional Relay Feedback Method
We consider a classical relay feedback system as shown in Figure 1 and Figure 2 to derive the required equations in this research. 
We start the relay feedback system at a steady state condition. The relay is first kept on until the process output rises up to a given
 level and then is set to the normal mode of switching at the instant that the process output crosses a given set point. 
This relay feedback system will produce a stable oscillation as shown in Figure 2. It is notable that we should set the given level in the 
beginning of the relay feedback to a significantly large value if we want to extract the zero-frequency information of the process. 
Otherwise, we cannot guarantee acceptable robustness in extracting zero frequency information from the relay responses.


Ovo je isecak clanka

Veselinovic je rekao:
Citat:

Drugo, vaznije, sistem se ljulja oko stacionarne tacke ( englezi kazu point- odatle ono SP) jer linearizacija radi korektno samo u uskom opsegu.

Ako sam dobro razumeo, stacionarna tacka je temperatura u ustaljenom (stacionarnom) stanju, i predlazes osilovanje oko te vrednosti. Primera radi, ustaljeno stanje mi je 80 stepeni, da to proglasim za SetPiont i da onda manipulisem izlazom za +-5% u zavisnosti da li je merena vrednost malo manja ili veca od 80. Mislim da to nije dobro, jer ako bi se gledao idealan slucaj, ako se postigne stacionarno stanje merena vrednost je 80, te ako to proglasim kao SP, razlika merene vr i SP je 0 i ne bih mogao da baratam....
[ bogdan.kecman @ 31.12.2014. 13:02 ] @
Citat:
zivadin_despot: Konkretno mene interesuje kada se zapocinje sa ovom manipulacijom, u mom prethodnom postu stoji da se sa manipulacijom zapocinje iz ustaljenog rezima, znaci stanje je ustaljeno i onda zapocinjem sa oscilovanjem, ali nije mi jasno poredjenje merene vrednosti i zadate, tj. sta je onda zadata vrednost.


?!

hoces da imas 100C u kutiji koju grejes grejacem. 100C ti je zadata vrednost, merena vrednost je ono sto citas sa senzora u kutiji.
zapocinjes sa procesom iz "bilo kog trenutka" (kada upalis masinu npr) onda kada zelis da radis autotuning. ne mozes da pocnes iz "stabilne" pozicije posto ti da znas sta ti je stabilna pozicija ne bi imao potrebu za autotuningom.

obrati paznju da "relay feedback" znaci ponasanje kao termostat obican, stim da za ovaj auto-pid histerezu smanjis na nula dakle ako je mereno > zadato -> ugasis rele, ako je mereno < zadato -> upalis rele. svaki put kada upalis i ugasis rele zapamtis vreme, stabilno stanje prepoznajes kada ti se X puta (recimo 3) uzastopce desi da ti on vreme traje isto i off vreme traje isto .. to izgleda otprilike (u zagradi je vreme trajanja u sekundama) on(90) off(7) on(10) off(6) on(8) off(5) on(8) off(5) on(8) off(5) - STABLNO STANJE, zadnja tri on su == 8 i zadnja tri off su ==5 dakle dosao si u stabilno stanje. dt je 13sec, frekvencija ti je 1/(8+5)= 0.077Hz, duty cycle ti je 8/(8+5) = 61% i sada dalje odatle racunas po formuli Pk, Ik i Dk ..

Citat:
zivadin_despot:
Koliko sam zapazio u navedenom eksperimentu, zapocinje se od nule, ne iz nekog ustaljenog stanja. Znaci ukljuci relej na 5V kada t predje zadatu iskljuci grejac. Na osnovu oscilacija dobije parametre, koji se lepo pokazuju.


nebitno je stanje iz kog polazis - ono svakako ne moze da bude "Stabilno/ustaljeno" posto, kao sto rekoh, ako znas isto ne treba ti da racunas ista - vec znas sve podatke

Citat:
zivadin_despot:
Veselinovic je rekao:


dobro slusaj sta covek prica, meni je spasao cudo i karate vremena sa pid kontrolom
[ zivadin_despot @ 31.12.2014. 13:33 ] @
Pratim svacije odgovore :D
Jasno mi je ovo o cemu mi pricas, relej ne treba skroz gasiti i paliti, vec za neki mali procenat da osciluje oko neke vrednosti. Uslovno je receno relej, to je npr trijak koji namece napon na grejacu cetvrtstog oblike vrednosti npr min=120, max=170. Za ustaljeno/STACIONARNO stanje mi nisu potrebni parametri pid-a, jednostavno ukljucim grejac i cekam da se temperatura stbilizuje oko neke vr i to je to (postignuto je stacionarno stanje).
Ne znam da li ja dobro postavljam pitanje (izvinjavam se ako nije dobro formulisano), ali iz svih ovih navedenih isecaka se zakljucuje sledece: proces odredjivanja parametara se zapocinje iz ustaljenog stanja. Vrednost ulaznog signala (napon npr) se poveca za 3-10% ako je merena vredsnot veca od zadate, a smanji se za 3-10% ako je suprotno. Ponavalja se dok se ne dobiju periodicne ne prigusene oscilacije (iste oscilacije po periodi i amplitudi). I onda se pracunava PID. Problem mi je samo taj prelazak iz ustaljenog stanja u stanje oscilovanja (sta je SP, koje je ustaljeno stanje, kakvo je stanje ulaznog signala u tom ustaljenom stanju), da li sam malo jasniji?
Pozdrav i hvala svima...
Takodje zelim lep provod veceras svima i srecne predstojece praznike...
[ bogdan.kecman @ 31.12.2014. 16:56 ] @
Citat:
zivadin_despot: Pratim svacije odgovore :D
Jasno mi je ovo o cemu mi pricas, relej ne treba skroz gasiti i paliti, vec za neki mali procenat da osciluje oko neke vrednosti


NE. poenta je bas u tome da ga palis i gasis. mozes ti da koristis triak umesto relea - rele je tu imenom nebitan, poenta je u "relejskoj kontroli" dakle pali se kad je ispod zadatog i gasi se kad je iznad - to je "relejska kontrola"

Citat:
zivadin_despot:
Za ustaljeno/STACIONARNO stanje mi nisu potrebni parametri pid-a, jednostavno ukljucim grejac i cekam da se temperatura stbilizuje oko neke vr i to je to (postignuto je stacionarno stanje).

pa vidi ja kad bi to na primer uradio na mom extruderu on bi se zagrejao na oko 600C onda bi krenulo da isparava cudo nekih otpora onda bi se zagrejao na jedno 800-1000C zavisi koliko moze da izdrzi onaj grejac i onda bi izgoreo grejac tako da - NE, nije to stacionarno stanje :D

[ zivadin_despot @ 31.12.2014. 17:10 ] @
Bogdane, ako pogledas navedeni code primetices da izlaz osciluje za 30 oko 100 na analognom izlazu (ne pada na nulu). Takodje to se nalazi i u isecku:

Poslednji prilozeni eksperiment je uradjen sa totalni ukljucenjem i iskljucenjem, mozda i to da dobre rezultate, ali u osnovi Astrom and Hagglund, kako se ova metoda precizno zove, a posnatija kao relay feedback, to nije tako, vec kako je navedeno... Prakticno cu ja eksperimentisati sa raznim vrednostima pa i do totalnog ukljucenja/iskljucenja.
Sto se tice stacionarnog stanja, ono je postignuto nakon 5 vremenskih konstanti sistema, a kod zagrevanja zavisi od izvora toplote i nacina tj kolicine odvodjenja toplote. Ako recimo motor napajas nominalno i opteretis ga nominalno, nkon nekog vremena bez promena uslova, on ce postici neku temperaturu i on ce ostati ne promenjena.
Na ovome je zasnovan jedan ceo deo ispitivanja masina (motori, transformatori,...)
I tvoj grejac, ako bi ostavio dovoljno dugo, stradala bi masina, ali bi on sigurno dosao u neko stacionarno stanje, ne moze beskonacno rasti mu temperatura (zanemarimo da ce biti unisten) :)


[Ovu poruku je menjao zivadin_despot dana 31.12.2014. u 18:20 GMT+1]
[ macolakg @ 31.12.2014. 17:31 ] @
Zdravo Živadine,

Oprostite mi svi što nisam imao vremena da čitam prethodne postove, pa ako ponovim nešto što je već rečeno nemojte mi zameriti.

Inače, svima vam od srca želim svu sreću i zdravlje u narednoj godini!

Za početak evo par interesantnih tekstova oko te teme: jedan oko analogne metode, drugi oko digitalne.

http://www.google.rs/url?sa=t&...=bv.82001339,d.d24&cad=rja

http://www.google.rs/url?sa=t&...=bv.82001339,d.d24&cad=rja

Nisu loši za pročitati, a i može se dosta toga uporediti na neki način.


Jedna od prvih firmi koja je napravila veoma uspešan model autotuninga kod termoregulatora je firma "Hitachi" u kojoj je inače razvijen i implementiran Fuzzy metod upravljanja, gde je važan učesnik (jedan od "očeva" Fuzzy) bio i jedan naš čovek iz Beograda kome se na žalost ne sećam imena.
Posle toga su većina ostalih proizvođača termoregulatora zdušno kopirali taj način, i skoro svi bolji termoregulatori koji naravno imaju autotuning imaju taj (hitachijev) postupak.

Strukturu tog hitachi algoritma ne poznajem unutra jer nisam imao mogućnosti da se dočepam tog programa, ali način obavljanja tog postupka je sledeći:

-U hladnom stanju sistema postavi se set point na potrebnu vrednost, a kod boljih regulatora i distanca od set point ukoliko je proces kritičan i ne sme premašiti zadatu veličinu.

-uključi se auto tuning funkcija i regulator uradi sledeće:

Prvo se sam setuje na on-off regulaciju sa tipičnim histerezisom od 0.1*C kod boljih, ili 1*C kod lošijih regulatora.
Potom uključuje (on) grejač čekajući prolazak temperature kroz set point. Za to vreme skuplja podatke za feed-forward koji će biti namenjen prvom zagrevanju ubuduće. Naravno, uzorkuje se kriva "zaletanja" u nekoliko segmenata, uzevši u obzir nagib i vrednost temperature. Podaci odatle će biti ubuduće upotrebljavani kada je u pitanju prvo zagrevanje, koje regulator "prepoznaje" po prevelikoj razlici zadate i ostvarene vrednosti. Cilj je da se ne preleti previše zadata vrednost kod prvog zagrevanja, a pri tom da se ono postigne što brže. Sačuvani delovi krive prvog zaleta će biti korišćeni prema veličini razlike zadato-ostvareno.
Po prvom prolasku kroz set point, na gore, iznad set pointa se pojavljuje akumuliran višak energije na grejaču i u medijumu, koji je tipičan za prvo zagrevanje, a koji zavisi od transportnog kašnjenja rezultata na sondi.
Potom sledi još dva on-off cilusa, i kod trećeg isključenja je autotuning gotov. Regulator automatski prelazi na PID regulaciju.
Za vreme ta naredna dva on-off ciklusa, jasno se vidi perida prirodnog oscilovanja on-off sistema, takođe odnos on i off vremena precizno govori o gubicima u stacionarnom stanju (opet se sjajno može upotrebiti za feed-forward, ujedno se već ima vrednost PWM za stacionarno stanje), a nagibi iznad i ispod zadate vrednosti daju podatke o transportnom kašnjenju.

Za vreme takvog autotuning procesa, korisnik ne treba sve da bude lenj, već treba da zapazi koja su vremena on i off bila u pitanju, i to radi budućeg postavljanja vremena izvršnog PWM (kome se perioda za termičke procese najčešće meri sekundama ili najmanje desetinkama sekunde kod mikro grejnih sistema).
Perioda (vreme ciklusa PWM) treba da bude dovoljno mala da se za jedan ciklus temperatura sistema ne može pod dejstvom grejača promeniti za više od jedne minimalne "porcije" rezolucije cele naprave. U prevodu, ako je rezolucija naprave na primer 0.1*C, jedan PWM period ne sme promeniti temperaturu sistema za više od tih 0.1*C. Tada će PWM izlaza sasvim korektno raditi, a naravno i sam PID.
Praćenjem on i off vremena kod on-off ili autotuning procesa, lako izvlačimo zaključak o potrebnom sample time, koji pak predstavlja minimalnu "porciju" digitalnog diferencijatora, i to bi valjalo da bude brže od trajanja promene za tih 0.1*C u sistemu (kada smo u mogućnosti da utičemo na taj parametar kod gotovih termoregulatora, a naravno da jesmo kada sami pišemo PID). Tada će diferencijator imati dobru rezoluciju i moći će da "zapazi" i veoma male promene nagiba, što nam daje mogućnost bržeg odziva na poremećaj.
Što se integratora tiče, kod upotrebe feed-forward u prvom zagrevanju, ili kod asistencije Fuzzy algoritma kada je velika razlika zadato ostvareno, integrator je prilično besmislen ako se zadato-ostvareno dosta razlikuju.
Njegov preveliki akumulat, kod velikih razlika zadato-ostvareno, može destabilizovati sistem i veoma produžiti vreme uspešnog ostvarenja rezultata.
Zato se nad integratorom obavlja limitiranje ili isključenje njegovog dejstva kada se zadato i ostvareno dosta razlikuju (na primer uslov nalik ovom: ako je razlika zadato-ostvareno veća od npr. 5 ili možda 10% opsega - isključiti integrator i resetovati mu akumulat na nulu, -ako razlika opadne na manje od toga, vratiti ga u sistem).

----------------------

Moderni i dobri termoregulatori najčešće koriste feed-forward kada je vrlo velika razlika zadato-ostvareno, potom kada se razlika smanji stupa na scenu Fuzzy način upravljanja, jer je daleko brži od PID za dovođenje izlazne veličine na vrlo blizu od zadate, potom se aktivira PID koji fino izravnava vrednost na nekoliko ili manje stepeni od zadate vrednosti. PID to uradi najsporije, ali i najtačnije.
Takvim kombinovanjem se dobiju najbolji rezultati za najkraće vreme.

Nadam se da sam sa ovih nekoliko rečenica doprineo kompletiranju slike onog što je potrebno.


Pozdrav

P.S.

Oko periode PWM izlaza, koji naravno može biti izveden i kontaktorom:

Kada je ukupno vreme zaleta sistema veliko i na primer reda nekoliko stotina sekundi ili više (masivni, inertni sistemi), sasvim će biti ok koristiti period PWM reda 10 sekundi, gde je sasvim upotrebljiv najobičniji kontaktor kao izvršni organ.
Kod malih i brzih sistema se već ne može dopustiti korišćenje kontaktora, jer ako bi se koristio period PWM ispod 10 sekundi, kontaktor bi se ubrzo raspao, već se uobičajeno koriste SSR ili trijaci, dok kod sistema sa još manjom inercijom, poput nekih mikrogrejača za specifične procese ili medicinsku upotrebu, mora se preći na jednosmernu struju i brzi PWM pomoću nekog čopera.

U svakom slučaju, jedan PWM period ne sme vidljivo promeniti temperaturu sistema, ukoliko misliš dobiti maksimalne rezultate.

[Ovu poruku je menjao macolakg dana 31.12.2014. u 19:02 GMT+1]

[Ovu poruku je menjao macolakg dana 31.12.2014. u 19:03 GMT+1]
[ zivadin_despot @ 31.12.2014. 17:50 ] @
Hvala na pojasnjenjim, dosta pomaze oko razumevanja cele stvari. Zamolio bih vas kada uhvatite vremena, da procitate postove od mog poslednjeg na prvoj strani, tu je sustina mog ne razumevanja (pre toga su neki kodovi i neke stvari koje sam kasnije shvatio)...
Hvala unapred
Sve najbolje
[ macolakg @ 31.12.2014. 17:56 ] @
I još nešto:

Samih rešeja za PID algoritam, kao i raznih autotuning metoda, imaš u skoro svim programskim jezicima na raznim mestima po netu. Nije ih teško pronaći kada se malopozabaviš tim.

Veća je filozofija iskombinovati nekoliko metoda, poput onih pomenutih: feed-forward (u šta spada i "one cycle control"), Fuzzy i PID.

Tada su sužene zone dejstva pojedinačnih metoda, i naravno da svaka pojedinačna metoda u svojoj zoni bude jednostavnija i drastično uspešnija, posebno kod sistema automatske regulacije koji poseduju jedan ili više "gap" negde u procesu (na primer zazori u zupčastom prenosu kod nekih pozicionoh regulacija elektromotorom, ili možda termo regulacija gde se prolazi kroz promenu agregatnog stanja medijuma, što takođe predstavlja masivan "gap")

Pozz
[ vladd @ 02.01.2015. 09:12 ] @
Samo da ne zamenite uloge.

Ne radi se kontrola radi (vezbanja)kontrole, vec da obezbedi odredjenu proceduru, i ispuni odredjene zahteve.

Primeri su sa prostim zahtevom i poprilicno uopsteni.

A cvrste regulacije se koriste za specificna i programirana zagrevanja, sa solidno dugim vremenskim periodima i razlicitim nagibima krivih, koje pride moraju da budu poprilicno linearne.

Auto tjuning prakticno sluzi za definisanje parametara potrebnog intenziteta grejanja za odredjeni prirastaj temperature, a onda se na osnovu tih podataka, jednostavno prati propisana "kriva" zagrevanja. Zadati platoi su bez prebacaja, sa minimalnim oscilovanjem oko zadate temperature.

Retko kada, osim u kuhinji(mada je i to za diskusiju), treba samo zagrevanje do jedne temperature.
[ veselinovic @ 02.01.2015. 13:01 ] @
Citat:
vladd:

Retko kada, osim u kuhinji(mada je i to za diskusiju):), treba samo zagrevanje do jedne temperature.


Zivadine, sali se vlada.
Preko 90% regulacija se odnosi na temperaturu.
Bogdan je muku mucio, i jos uvijek radi na regulaciji temperature.
Sacekajmo Roberta, covjek citav zivot mucka naftu na tacnoj temperaturi.
Prehrambena ind ne moze bez tacne temeprature ( kiselo mlikjeko, pastyerizacija, cips,...)
[ bogdan.kecman @ 02.01.2015. 13:44 ] @
ja sam odustao od univerzalnog autotuninga jer mi prevelik overshoot
predstavlja opasnost od pozara tako da sam napravio neki svoj autotuning
koji onda manualno dosiljis do savrsenstva .. mada i ovako radi ok posto
je to na stolu koji gde ima samo 3 temperature i kriva je nebitna ..
tako da ono zagrejes do Xc (sto brze mozes) cekas neki event, spustis na
Yc (bez forsiranog hladjenja, pa koliko mu treba, dal ce biti 3 minuta
ili 5 nije preterano znacajno) i drzis na Yc do kraja posla kada
forsirano hladis na sobnu temperaturu i to je to ... +-1C je meni super
precizno za to .. ono gde me zezao autotuning je u suvise velikoj
razlici grejaca, same ploce, izolacije okoline etc .. sa mojom plocom
npr koja je kilo aluminijuma 5mm debelog i grejacima ispod i odlicnom
izolacijom tu nema nekog problema overshoot nije frka, sa druge strane
postoji print bed koji je obican pcb sa traceom koji glumi grejac i tu
ako se pregreje izgori lak, pucaju trekovi, pre toga se usijaju, ako ih
nesto dodirne plane na dobar dan ... da ne spominjem da je moj grejac
recimo 0.7kW a taj grejac 100W .. tako da identican kod, kako god sam
probao, nije hteo da radi ... onda sam ja tu uglavio neki seljacki
phuzzy logic (ako je tante onda kukuriku, pa mnogo razlicitih tante-a)
tako da sprava nikako ne radi autotuning sama u startu vec ima poseban
mod za autotuning, gde ti dodatno pratis sve sta se desava, mozes da
reagujes etc i onda kada on dodje u neko stanje mozes ti rucno da siljis
pid koeficijente i kada si zadovoljan zapises te pid koeficijente i
prebacis u onaj glavni program i to je to za taj radni sto, ako imas
drugi radni sto uradis proceduru ispocetka ... nije lepo ali sljaka ..
na zalost imam samo hex od toga source mi nestao sa projektima u velikom
haosu ovde pre nekog vremena, no nije neko m00do da se to napise
ispocetka, sad kad krenem ovaj firmware za novu masinu baziran na armu
ucukacu to ponovo pa cu da podelim online (sve sto mi je ostalo zivo od
sorsova je samo ono sto je bilo podeljeno na sourceforge, github i
slicnim mestima :( ) .. no ne verujem da ce biti univerzalno korisno
posto to sto sam ja radio je definitivno specifican a ne univerzalan
slucaj .. za sam pid ono sto sam implementirao kod lemilice funkcionise
super po meni, jedino tamo nema autotuninga, mozes da siljis PID
koeficijente i to je to .. to sam namerno ostavio tako jer zavisnosti od
toga kakva ti je lemilica ti zelis overshoot, pitanje je samo koliki :)
[ mikikg @ 02.01.2015. 14:08 ] @
Odprilike sam i ja nesto slicno zakljucio kada sam se igrao sa PWM i regulacijom napona.
Moze da se usteluje PID vrlo fino za neki opseg parametara ali ako se parametri sistema menjaju u velikim granicama onda to ne ispadne tako dobro.
Ja sam u mojoj primeni uveo dodatni parametar koji je nadgledao ulazni napon i na osnovu toga korigovao Kp, prakticno napravio dvo-polnu kompenzaciju.
Sa tro-polnom komenzacijom odprilike bi moglo da se pokriju skoro sve situacije i to recimo TI koristi u svojim digitalnim power kontrolerima iz UCD3xxx i UCD9xxx serije.
Oni imaju za to GUI software koji radi "snimanje" sistema pa na osnovu toga preracunaju potrebne koeficijente. To mu dodje neki autotuning ali koji se radi jednokratno, ne radi stalno zajedno sa PID petljom.
Inace snimanje odziva sistema je najlakse odraditi sa step-response, moze i preko frequency sweep (ako "plant" to moze da odradi).
Cela caka je znati prenosnu krivu sistema koji se upravlja i onda to "obrnuti" tj napraviti takav kompenzator (jedan ili vise-polni PID) ali sa invertovanom slikom.

Spomenuo sam negde bio i jedno malo besplatno programce "Sysquake" koji radi razne matematicke funkcije i vizuelizacije i evo u prilogu skripta za PID.
Sa tim mozes malo da se igras i menjas P, I, D koeficijente i odmah da pratis odziv sistema.

[ vladd @ 02.01.2015. 14:59 ] @
Citat:
veselinovic:
Citat:
vladd:

Retko kada, osim u kuhinji(mada je i to za diskusiju), treba samo zagrevanje do jedne temperature.


Zivadine, sali se vlada.
Preko 90% regulacija se odnosi na temperaturu.
Bogdan je muku mucio, i jos uvijek radi na regulaciji temperature.
Sacekajmo Roberta, covjek citav zivot mucka naftu na tacnoj temperaturi.
Prehrambena ind ne moze bez tacne temeprature ( kiselo mlikjeko, pastyerizacija, cips,...)



Nisi razumeo moj komentar..

Ni MLEKO u industriji nije na JEDNOJ temperaturi, prvo se hladi(T1), zatim obradjuje..nebitno na kojoj, ali na kraju ide pasterizacija(T2)..ali je tecnost, i uz mesanje su moguce proste krive odredjenog gradijenta zagrevanja.

Ono na sta sam mislio je zagrevanje posebnih materijala, recimo keramike, metalnih komada velike zapremine..gde postoji odredjen nagib za prvu temperaturu, zatim drzanje na toj temperaturi(progrevanje po zapremini), pa onda po istoj ili drugacijoj(koliko materijal moze da trpi) krivoj dizanje do zeljene temperature, i na kraju hladjenje, sa povremenim dogrevanjem, formiranjem gradijenta gubljenja toplote...

Cak i za kuvanje, postoje procedure grejanja rerne na 200C, zatim pre ubacivanja jela spustanjem regulatora na 180, da ne bi unosenjem hladne posude i hladne mase, temperatura pala drasticno ispod 180...

Jedino nam se lemilice intenzivno greju do JEDNE temperature, ali za PID procese u industriji ili nekoj slozenijoj primeni, AUTOTJUNING nije opcija, kao ni STOHASTICKE metode.

[ veselinovic @ 02.01.2015. 15:05 ] @
Slazem se u potpunosti autotjuning ovakav nije za ozbiljnu primjenu.
Postoji i za ozbiljnu primjenu, ali ima malo vise matematike.
Postoji matematika koja u roku od par semplova shvati promjenu parametara sistema.
Ali uvijek mora ziv covjek dati inicijalne parametre.
Nema tu trte vrte, ukljucis i radi. Nije to pravio majkrosoft da radi tako samo od sebe.
[ shpiki @ 02.01.2015. 21:12 ] @
Ajd da se i ja umesam u raspravu. Nisam se sa ovim sretao ranije, ali mi je tema zanimljiva.
Da krenem iz pocetka:

koliko sam ja shvatio, sistem se iz ustaljenog stanja izbacuje povecanjem napona (iz Zivadinovog primera) za 5%. Nakon nekog vremena sistem ce ponovo doci u neko ustaljeno stanje (temperatura ce se povecati za nekoliko stepeni, srazmerno povecanom naponu). Povecanje vrsiti sve dok merena temperatura ne predje SP. U tom trenutku napon treba smanjivati za 5%, dok temp. ne padne ispod SP. Tada pocinje oscilovanje oko SP radi merenja amplitude i periode oscilacija. Nakon merenja, sistem prelazi potpuno na PID jer je moguce izracunati parametre sistema.

Da li sam dobro shvatio logiku?

@zivadin_despot:
koliko sam shvatio, tebi nije jasno kako sistem dovesti iz ustaljenog stanja u stanje oscilacija? Ili gresim...
[ zivadin_despot @ 03.01.2015. 00:03 ] @
Pozdrav,
da upravi mi taj deo nije jasan, moguce je da si u pravu, da se upravljacka velicina povecava konstantno dok merene na predje SP. Tacno ovi koraci koje si ponovo naveo mi nisu bas najjasniji. Konkretno pokusavam da mi neko ove korake objasni na srpskom, ne da se prevede, vec kako bi to neko korak po korak uradio. Dosta dobrih saveta i objasnjenja sam dobio u prethodnim odgovorima, i iz eksperimenta navedenog pri vrhu na str 86 se vidi prakticno kako je radjeno sa ukljucenjem i iskljucenjem releja (signala), ali mi se to ne poklapa sa ovim koracim. Bogdan mi je takodje taj postupak ponovo naveo.
Da se razumemo, resicu ja problem i sa on-off ili sa cistim ZN, ali me interesuje kako se ovaj postupak resava korak po korak...
Hvala svima
[ Trick Fix @ 03.01.2015. 01:58 ] @
Pročitah sve postove,neke i više puta i mogu da Vam kažem da :

-NE znam šta pametno da VAM kažem !....zato što ste SVI.....ama baš SVI u pravu !--po mom nebitnom mišljenju.

Ne mogu nikoga posebno da izdvojim, jer je svako "injektovao" debelu i žestoku Porciju Pametne Priče (3xP) u ovu diskusiju.

Već sam napomenuo da se ama baš DIBIDUS ne razumem u te za mene "hieroglife" od programiranja i tabela.

Navešću samo neke stvari (neke kockice od koji sam složio kavu-takvu sliku u glavi)
sa kojima se susrečem u tom "krčkanju" (kako kaže Jovan V.) ..nafte već skoro 30 god.

Po prirodi posla susrećem se sa stvarno 33 brda razno-razne regulacije u kojima učestvuje isti broj regulatora (+koji više).

Pre 3 decenije kad smo podešavali regulatore onda se ta igrarija svela na zavrtanje-odvrtanje finih ventilčiča,
jer su regulatori bili pneumatski i radili su sa instrumentalnim vazduhom kao "Power Supply"-om,

gde se signal o vrednosti merene veličine vračao (preko bakarne cevi Ø6mm iLi Ø1/4 ") sa ponekad i 200-300 metara udaljenog
mernog mesta (na pneumatski regulator u komandnoj sali ) u obliku : pritiska vazduha sa skalom 3-15psi što odgovara opsegu 0-100%.

Ee, onda je regulator razmislio malo, pogledao koliki mu je ulaz, to uporedio sa SET-POINT-om
i na osnovu podešenih PID parametra "išamarao" te svoje " Flapere" i pneumatske relee i na svom izlazu poslao pneumatski
signal napolje (u postrojenje) na izvršni element (ventil, aktuator, pneumatski motor itd) opet sa skalom od 3-15 psi
iLi sa opsegom od 0,2-1bar (0-100%).

Tako nekao je radila regulacija pre 3 decenije sa Taylor regulatorima koji "izprilike" liće na ovakvu smart bravariju:



Možete misliti na šta je ličila ona rupčaga na zidu ,na ulazu u komandnu salu,
kada kroz rupetinu zida prolazi "Žbunje" od 50-100 komada paralelnih,fino "išemiranih",složenih i estetski lepo spojenih bakarnih cevi.
___________________________________________________________________________________________________

Da se vratim u 2015.-u god (ne znam ni zašto sam tako daleko otišao,a otišao sam odavno :) )

Trenutna "situlacija" je takva da : Nema šta nema ! ...........(nema daj šta daš ?? -----ima svega!--- čudo, ma čudo technike)

Ima šurnaest vrsta regulatora , pa sam hteo reći da je :

-Ta smart "Auto-Tune" pamet zastupljena samo u regulacionim krugovima u kojima ne bude velikog "Kara-BUUMMM-a"
ako pamet odkaže (zbog svoje prevelike pameti).

To su uglavnom R.Krugovi u vezi snabdevanja hidrantskom vodom, neki pod-Sistemi koji i kad ispadnu iz koloseka
ne bude nikakve havarije/požara -samo sistem ne radi , a to se da primetiti za nekoliko sekundi (Alarmi,+razne dojave o "nemanju nečega").

Za ozbiljne Reg.krugove se koriste regulatori koji su (programski) smešteni u PLC-ovima iLi u DCS-ovimima.

PLC je plc,
a DCS je onaj RITAL-orman od 300 kg, sa duplim vratima s' obe strane, visine 2 metra, i kad otvoriš vrata i duže vremena gledaš u to
što tu ima unutra ----->> onda se levom rukom počeškaš po kosi , i prvo što Ti padne na pamet je da trebaš ići Tetki da daš Lek ! :)

.....i onda 12-16 tak'ih ormana, nanizanih i međusobno fixiranih u samo jednom (1) " Equipment-Room"-u.........Eeee, da ga je**m :)
Cela ta šklopocija ima između 1500-2000 ulaznih signala + ~tu negde i izlaznih kablova, ma......

I to je samo jedan od mnogih tih "Equipment Room"-ova ,a ima ih brojeva k'o : Punoletna devojka.
________________________________________________________________________________________

Da ne dužim i smaram više , udavio sam VAS načisto,
(i oteg'o ko bosanac kad satima mulja devojku, a ONA mu kaže: Meči ga više 'ehb*te ON ! :) )

U P R A V U ___S T E ! --kada kažete da :
-smart Auto-Tune pametovanje nije baš-baš najpogodniji za sisteme u kojima Ne sme da se desi da stvari "izmaknu kontroli",
jer će pola grada odleteti u vazduh ODMA----a okolina će da nahhebe čim svane nova zora !

Dosta su "mučne" te regulacije kad imaš grejanje/održavanje temperature u ne-izolovanom rezervoaru prečnika 32m visine 20m
a košava duva od 0-120 km/h, iLi :

-kad treba da se održi stabilnim protok u cevovodu kroz koji "roka " 300 kubika na sat nekog fluida-a
i uslov je da ne bude "udara" niti naglog polaska iLi nestanka tečnosti ,

-ima i regulacije nivoa tečnosti u koloni ( kolona je ona uspravna "Bomba" visine 50-70 m , kojoj samo Fitilj nedostaje)
regulacija je zahhhebana jer se na svaka 3-5 metara visine izdvojila druga vrsta fluida (zbog "kuvanja" )
i koji se na bočnim izvodima/ventilima "čupaju" napolje iz posude i pumpama guraju tamo gde treba,

-ili situacija kad se radioaktivnim izvorima "bombarduje" posuda u kojoj se od gore padajući slaže praškasti materijal ,
pa se meri nivo i strmina tog brdašceta unutar posude za skupljanje,
a senzor nivoa je jedan optički (višežilni) kabl u kom se dešavaju svetlucanja (scintifikacija) od prolaska zračenja kroz brdo od prašine,
sabiranjem i pravilnim rasporedom tih "scintifikacija" se dobije realno stanje količine prašine u "gvođanom " rezervoaru,
a posuda još treba i da se greje (od spolja) da se prašinčina ne ukruti i spoji , več da bude rastersita/homogena,

..ma idi...100 Q-a i vrsta Regulatora, -sve u svemu "Ringišpil" -raznih Špecija,

Naravno je danas sve u opsegu od 4-20mA + DATA prenos, bi-direkcionalno ( Mod-Bus, Profi-Bus,etc,etc)
po istim tim kablovima (2 žice-po Loop-u, iLi 2 provodnika na 20,30 --100 elemenata/transmitera/ventila u paraleli ).

...ali ja više nemam pojma šta je PID, FUZY, ON-OFF regulacija,.....čiste "Čuke" nemam....
sve je postalo jedna velika MIXTURA svega + svačega.....

IZVINITE na dužini post-a,

Ako neko misli da u nečemu mogu da mu barem malo pomognem,.....na IZVOLTE-sam,
(verujem da imate utisak da je veliko pitanje dal uopšte ikome mogu u ičemu da pomognem) :)

pOz

[Ovu poruku je menjao Trick Fix dana 03.01.2015. u 04:51 GMT+1]
[ veselinovic @ 03.01.2015. 06:35 ] @
Zivadine,
vjerovatno ti jepromaklo, pa cu ponoviti.
Nasa matematika postoji samo za linearne sisteme. Cak je i za linearn sisteme malko labava.
Za nelinearne sisteme civilizacija nema eksplicitno rjesenje.
A svi realni sistemi su nelinearni.
A ipak postoje upravljanja, pa cak i odlicna.
Na srecu postoji izlaz iz paradoksa.
Svaku nelinearnu funkciju mogu na dovoljno uskom podrucju linearizovati manje ili vise uspjesno.
Cak sta vise, bilo koju funkciju mogu linearizovati pravom linijom uz odredjena odstupanja.
Sto je opseg uzi to su odstupanja manja. Ne treba napominjati da linearizacija vrijedi samo u tom opsegu.
Npr, sin x = x u okolini tacke x=0 je OK, ali nikako nije na cijelom periodu.

Da bi ti upravljao svojim termickim procesom realni sistem se mora svesti na linarni sistem 1. reda sa transprtnim kasnjenjem, inace nema upravljanja.
E to mozes napraviti samo u bliskoj okolini neke tacke.
Posto je zadatak upravljanja ( regulacije- iako su to razliciti pojmovi) da stvar odrzi u jednoj tacki (SP) inzinjerski ( ne matematicki) stvar je skoro trivijalna. Treba uraditi linearizaciju bas u neposrednoj blizini SP, jer pristojan sistem nece mnogo setati. Cak i ako proseta ( prvo paljenje, gadni poremecaji....) potrudim se da brzo stignem u okolinu SP i onda vozim po matematici. Recimo ugasim kontroler i vozi ful snagom do blizu SP. Macola je pisao nesto o tome.
ZN su pretpostavili bas takav sistem 1. reda sa transp. kasnjenjem i napravili matematiku za taj sistem.
E sad ti je jasno da sistem ljuljas u neposrednoj blizini SP.
Sto ga manje zaljuljas bices sve precizniji ( matematicki gledano) ali onda mozes zbog smetnje ispasti iz opsega, pa treba naci optimiuum.
Tih +-5% djeluje inzinjerski razumno.

Cemu ovoliki post?

Napravis P regulator i dodjes do SP. Ondak zaljuljas sa 5% i to je to.
Naravno ako sistem smije da se zaljulja - a termika cesto smije.

PS Procitaj Robertov post barem 3 puta. A poslije toga barem 1. u dva dana.
[ zivadin_despot @ 03.01.2015. 13:13 ] @
Hvala na pojasnjenju...posle praznika cu poceti sa prakticnim eksperimentima. Probacu vise metoda na vise sistema a rezultate cu ovde postavljati, radi diskusije. Radi cu sa STM33F4, i sad pitanje za moderatora, da li da diskusiju oko programa ovde vodimo ili u posebnoj temi na mikrokontrolerim?
[ zivadin_despot @ 03.01.2015. 13:21 ] @
Jos neke literature vezano za ovu metodu...(i opste). Ovde na 175 strani je praktican eksperiment, gde je sistem ljuljao oko neke manje vrednosti, proracunao parametri i zatim pratio odziv kada zada neki veci SP (grafici). Ovde je na poslednje 2 strane takodje objasnjeno na kojim vrednostima odredjuje parametre, tkz faza 1 i faza 2. Tu je tacno navedeno stanje ono o kom sam ja pricao, da se sitem dovede u neko stanje, zatim se upravljacka digne za 5%, ali sta ako to ne rezultira dolazak do SP:
Citat:

The process output may be far from the desired
equilibrium condition when the regulator is
switched on. In such cases it would be desirable to
have the system reach its equilibrium automatically.
For a process with finite low-frequency gain there is
no guarantee that the desired steady state will be
achieved with relay control unless the relay
amplitude is sufficiently large. To guarantee that the
output actually reaches the reference value, it may
be necessary to introduce manual or automatic
reset.


Dakle zapocecu po savetima Veselinovica i Dragoljuba, on-off metodom dovesti sistem do SP i onda ga usko ljuljati oko te vrednosti....

Javljam se malo kasnije...
Srecni praznici
[ macolakg @ 04.01.2015. 00:54 ] @
Živadine,

Evo još par praktičnih saveta pošto ćeš verovatno za početak eksperimentisati sa sistemom prvog reda:

Ako želiš sve te probe izvršiti na nekom improvizovanom sistemu sa prilično malom inercijom, onda upotrebiš malu kartonsku kutiju, sijalicu unutra i sondu na izvesnom rastojanju od sijalice.
Sasvim jevtino i pravi se za 5 minuta od onog što uvek imaš u kući.
Transportno kašnjenje menjaš rastojanjem sonde od sijalice i (ili) promenom visine sonde u kutiji.
Gubitke namestiš nekom omanjom rupom na gornjoj strani kutije.
Istom kutijom možeš uz malo pomeranja sonde imati nekoliko različitih tjuninga PID-a.

Staviš bitno veću kutiju i promeni se sve to za red veličine veoma lako.
Sasvim jevtino a radi. Naravno za jedan eksperiment sonda ne sme menjati položaj dok taj konkretni eksperiment ne odradiš. Vežeš sondu na primer nekom žicom kroz sam karton (probušiš dve rupice).
Što se tiče same kartonske kutije, podneće i više od 300*C na površini kartona. Smrdeće malo ali se neće zapaliti na toj temperaturi. To je sasvim dobar raspon jer imaš na raspolaganju od sobne temperature do možda čitavih 300*C.

Napraviš izlaz sa trijakom kog pogoniš optotrijakom bez zero crossing, na primer MOC3021. Tako ti je galvanski rastavljeno od MCU, a može se LED od MOC3021 pobuditi direktno iz pina, eventualno sa emiter folower-om od nekog BC546 ili slično ako taj MCU ima manji kapacitet pina od 20mA.

Taj način je vrlo zgodan za vežbu jer možeš eksperimentisati sa vrlo sporim PWM, čiji je period nekoliko ili više sekundi (imitacija releja ili kontaktora), a možeš ga i "ubrzati" sve do faznog zaseka, gde ti sam period izvršnog organa bude 100Hz.
Takođe i možeš navežbati regulaciju celim periodama, čim odstranjuješ smetnje zbog toga što vršiš komutaciju oko prolaza kroz nulu.
Tako lepo možeš videti kako će se odraziti period PWM na ceo sistem, a u zavisnosti od inercije sistema.
To je vrlo bitna stavka između ostalih.

Ako ti pak treba vrlo inertan sistem, onda posuda sa vodom i neki omanji potapajući grejač.
Za samo litar tekuće vode treba čak oko 4186W unešene energije za prirast temperature od 1*C/sek.
Sistem je prilično linearan ako je posuda izolovana i ako ne stigneš do blizu promene agregatnog stanja.
Voda u tečnom stanju je tu pravi izbor jer ima veću specifičnu toplotu od svih ostalih materija na planeti.

Pozz



[ zivadin_despot @ 07.01.2015. 22:43 ] @
Pozdrav, evo kako izgleda kutija za eksperimentisanje...Dakle koristim grejac iz kucnog fena (800W), postavlja se u kutiju, gde sa jedne strane imam ventilator, a sa druge strane izlaz za merenje. Sistem lako mogu usporiti, tako sto kutiji zatvorim rupe, a ventilator skinem, a moze se ispitivati i brzi kada se ukljuci i ventilator...
Sledece nedelje ide i elektronika, a zatim i regulacija
Evo par slika.
Srećan Božić svima




[ zivadin_despot @ 18.01.2015. 22:28 ] @
Pozdrav...
Eksperimentisanje se privodi kraju. Ne znam da li sam opisao elektroniku, ali ovako ona principskie izgleda: Kontroler je STM32F4 i na upravljackoj PCB imam TRIJAK, detekciju prolaska kroz nulu (mrezni napon), regulacija ventilatora, i merenje temperature NTC 47k. Kao sto sam rekao, za prvi eksperiment cu raditi sa on-off (ventilator je na max), dakle postupak je da grejac drzim ukljucenim dok je PV<SP u suprotnom ga gasim i na osnovu toga odredim pid parametre. Radi sticanja osecanja ukljucivao sam grejac sa odredjenim faktorom ispune i cekao ustaljeno stanje, vidi se na slikama. Grejac je iz fena snage cca 1,2kW (prespojen je bimetal).
Nakon prvog eksperimenta sam dobio lepe rezultate, stabilne ne prigusene oscilacije iz kojih sam proracunao parametre. Vidi se sve na slikama.
Ostalo je samo da pokrenem pid i da vidim odziv. (upravljanje ce biti relejno a faktor ispune ce biti rezultat pida. Maksimalan prozor rada releja ce biti 1 do 2 sekunde, jer mi se za to vreme t promeni za oko 0,5-1 stepen). Okacicu rezultate samog pid-a. Sada su proracunati njegovi parametri.
Da ne dodje do zabune PI kontroler ce biti realizovan.

Faktor ispune: 40%


Faktor ispune: 16%



Na prvom grafiku se vidi da je stacionarno stanje na oko 70 stepeni, nakon cega je smanjen faktor ispune i t je oko 50 stepeni.
Ventilator je konstantan na max, za sada se ne regulise (ostavljena je mogucnost regulacije, radi testiranja sistema sa dve upravljacke velicine)
[ zivadin_despot @ 18.01.2015. 22:36 ] @
Prilikom proracuna Kp i Ki, izostavljena je prva oscilacije...!
[ macolakg @ 19.01.2015. 00:55 ] @
Super se snalaziš Živadine!

Primetio si da se nikada ne bavim onim što možeš naći na internetu, već obično dajem neke praktične savete koji se ređe nađu u pisanom obliku.

Citat:

Radi sticanja osecanja ukljucivao sam grejac sa odredjenim faktorom ispune i cekao ustaljeno stanje, vidi se na slikama.



Kao što sam ti ispričao u jednom od prethodnih postova, nikakvo sticanje osećaja ti nije potrebno.

Za pronalaženje faktora popune (faktora režima, duty ili PWM, kako god), bilo ti je potrebno samo da zadaš željenu temperaturu stacionarnog stanja, potom uključiš spravu kao običan off-on regulator. U tvom slučaju može i bez histerezisa pošto trijaku ni malo neće zasmetati kvazistabilnost dok ostvarena vrednost preseca zadatu vrednost.
Releju ili kontaktoru bi to bio problem ako je taj prolazak monoton, te bi se moglo javiti "treperenje", što za relejne naprave nije preporučljivo, dok sa trijakom nema tih problema.

Dakle, namestiš set point na željenu temperaturu stacionarnog stanja, uključiš najobičniju off-on regulaciju:
- iznad set point isključi
- ispod set point uključi.
I čekaš...

Sistem ima neminovno kašnjenje, te će kod prvog uzlaznog prolaska kroz set point slediti preskok, potom će opet zbog kašnjenja sistema slediti prolazak na dole i neminovan podbačaj.

Naravno prvu oscilaciju ne uzimaš ni ovde u obzir, već možda treću-četvrtu.
Te oscilacije će imati stabilnu periodu i amplitudu prebačaja i podbačaja, sve to zavisno isključivo od transportnog kašnjenja sistema i gubitaka stacionarnog stanja.

Osrednjena vrednost tog "talasanja", koje je uzgred veoma pravilno i ritmično ako ne menjaš karakteristike sistema, tj. gubitke i transportno kašnjenje, je strogo temperatura koju si i tražio.
Odnosno srednja vrednost temperature tvog sistema, koji je jednostavnih karakteristika i na temperaturama gde ne moraš brinuti o naglom prirastu gubitaka zbog infra emisije, će biti jednaka tvom set point.

Jednostavno izmeriš odnos vremena uključenog i isključenog stanja tih sopstvenih oscilacija i to ti je skoro precizno vrednost PWM stacionarnog stanja za tu temperaturu. Upravo tu vrednost PWM ćeš kasnije upotrebiti za ono što želiš, samo naravno sa višom frekvencijom tako da sistem tvoj pravi PWM dosta fino izintegrali zato što je mnogo puta sporiji od samog PWM, a ti pri tom posle imaš to što sada imaš za Zeigler-Nichols, što se tiče "ispeglanosti" tog tvog oscilograma.

Dakle, PWM nisi morao da napipavaš. Ovako se sam "kaže".

Dalje, off-on regulacija mora uspostaviti sopstvene oscilacije sistema, osim ako transportno kašnjenje nije nulto (što je u praksi nemoguće), i te oscilacije imaju jasan period i duty-cycle.
Nijhova perioda je potpuno srazmerna transportnom kašnjenju sistema, a dutu-cycle stacionarnim gubicima, onda vidiš jasno nagibe promena, površine prebačaja i podbačaja i td i td...

Pomnožiš snagu grejača sa tim duty i imaš savršen podatak o tome koliko W gubi sistem u stacionarnom stanju.

Kod sistema kod kog ne postoji opasnost od preskoka neke temperature, poput inkubatora za spermatozoide ili sličnih kontrola vezanih za organsku hemiju ili žive sisteme, ili možda neke druge ultra zahtevne procese, ti uvek možeš u prvom "udaru" uključiti najjednostavniju off-on metodu i iz nje jednopotezno saznati skoro sve potrebno o sistemu.

Tu saznaš stacionarne gubitke, transportno kašnjenje, da li ti je dovoljna snaga grejača i koliko "viška" imaš na raspolaganju, takođe sa istom tom metodom koju primeniš u nekoliko različitih set point, imaš odmah krivu gubitaka vs temperatura, odnosno svaki set point će imati svoju vrednost PWM koju upišeš lepo u tabelu.
U prevodu, već unapred imaš podatke za feed forward, ako ga nameravaš upotrebiti (a to je junačka stvar jer može veoma povećati brzinu odziva i smanjiti složenost samog PID).

I tako dalje i tako dalje...

Ako ne vršiš promenu agregatnog stanja materije koju zagrevaš (problem "zakucane" temperature bez obzira na snagu, a zbog latentne toplote), tvoj sistem možeš u nekim užim granicama smatrati prilično linearnim, i tome posvetiš PID, dok feed forward upotrebiš za grubo dovođenje do neke približne vrednosti ispod set point.

Nadam se da će ti ovi praktični saveti biti od pomoći?

Pozdrav drugar

P.S.

Zaboravih:

Čak i kod tih zahtevnih sistema gde je preskok potencijalno opasan, takođe možeš naterati sistem da ti se sam "izjasni", običnom off-on metodom, samo naravno sa predviđanjem (sada već iskustveno), dovoljno daleko ispod budućeg set point, tako da ti gornji pik nikad ne dohvati opasnu zonu.
Kod tih sistema koji nisu previše nelinearni, i ako to radiš na nekoj margini od radne set point ipak ćeš imati obilje korisnih podataka na raspolaganju.
[ macolakg @ 19.01.2015. 01:25 ] @
I još nešto korisno...

Ako na primer vršiš regulaciju nekog sistema gde se vrši promena agregatnog stanja materije, kao na primer kuvanje nečeg u vodi, topljenje metala ili slično tome, onda u neposrednoj blizini temperature koja je tačka promene agregatnog stanja, obavezno isključiš integrator jer bi njegov akumulat žestoko destabilizovao sistem odmah po izlasku iz latentne faze.

Na primer, ako želiš da neku količinu vode zagreješ do ključanja, potom nastaviš da je zagrevaš u vidu vodene pare,
pri 100*C gde započne isparavanje, bila bi ti potrebna beskonačno velika snaga da bi ti se nagib prirasta temperature nastavio na isti način kako je tekao tokom zagrevanja do tih 100*C.
Baš recimo kod vode, za podizanje temperature jednog kilograma vode za 1*C/sek ti treba snaga od približno 4,16 KW, dok za isparavanje tog istog kilograma vode, odnosno za dostizanje 101*C u sledećoj sekundi ti treba 2,2MW snage!!!

Sa nekim realnim snagama faza promene agregatnog stanja traje dugo, i temperatura bude "zakucana" na 100*C (ako je atmosferski pritisak od apsolutnih 1 bar), sve dok i poslednja kap vode ne ispari. Za to vreme integrator koji bi radio, "nakupio" bi ogroman akumulat jer se temperatura ne menja a zahtev za promenom postoji, potom bi taj isti akumulat potpuno i na duži period destabilizovao sistem.

Praktično kod takvih regulacija, integrator se na primer isključi na 99*C, "odspava" sa nultim akumulatom do na primer 101*C, potom mu ponovo dozvoliš aktivnost van tih granica.

pozz
[ zivadin_despot @ 19.01.2015. 01:30 ] @
Pozdrav,
hvala na svim savetima, uvek pomazu...:)
Evo zavrsio sam i PI regulator. Dakle u prvom delu program sam pronalazi parametre Kp i Ki na Sp=50 stepeni, kada ih pronadje, SP povecam na 75 i ukljucim PI regulator. Odziv se vidi. Preskok je 1,5 stepeni i pik to pik oscilacija je oko 1 stepen (lepo za pocetak)...
Evo i slika za prikaz...
Eksperimentisacu i sa PID pa cu okaciti rezultate.
Na ovom krafiku crvena boja je granica algoritma autotuning (prikaz), nakon odredjenih paramatera ukljucuje se PI regulator sa prozorom rada 2s, i onako kako sam vec naveo.
Na donjem baru se vide rezultati autotuning algoritma


[ zivadin_despot @ 19.01.2015. 01:34 ] @
Hvala na prakticnim savetima...Svakako mi je plan kad zavrsim eksperimentisanje na ovom sistemu, odradicu sistem sa dve upravljacke (ventilator + grejac), a zatim cu raditi sa vodom, tako da ce mi tad dobro doci saveti :)
[ macolakg @ 19.01.2015. 01:39 ] @
Lepo! Bravo Živadine! Samo napred drugar!

Drago mi je ako sam makar samo malo pomogao.
Probaj ono sa off-on i probaj da iz tog napraviš autotjuning. Većina tih skupljih regulatora upravo to radi, a za kritične stvari gde se ne sme preskočiti set point, kod njih postoji parametar gde uneseš distancu od set point na kojoj se dogodi autotuning, a posle se ako treba fino ručno dotera na onoj zahtevnoj set point. A neki čak imaju naknadni fini autotuning na toj konačnoj set point.

Pozz

P.S.

Kada budeš video oscilograme off-on regulacije, shvatićeš potpunu povezanost sa Zeigler-Nichols.

Na kraju, ništa te ne sprečava da eto radi zezanja napraviš autotuning za PWM, koji potom upotrebiš za Zeigler-Nichols ako baš tu metodu želiš na taj način kao sada što radiš.

Posle tri off-on ciklusa izmeriš njhov PWMi dodeliš ga tvom pravom PWM-u, i onda nastaviš sa autotuningom kao i do sada. Sve automatski.
[ zivadin_despot @ 19.01.2015. 01:45 ] @
Sutra cu isprobati to, pa okacim...Veceras za kraj prikaz kada SP spustim na 45 stepeni...Preskok je 2,5 stepeni, podbacaja nema.

[ macolakg @ 19.01.2015. 01:46 ] @
Vrlo pristojno za prvi pokušaj!
[ zivadin_despot @ 19.01.2015. 01:49 ] @
Hvala...
Nastavljam sutra :)
Pozdrav, sve najbolje
[ macolakg @ 19.01.2015. 01:51 ] @
Sad samo zamisli da si imao tabelu sa gubicima stacionarnog stanja, i feed forward metodom odmah dodeliš malo manji PWM nego što ti treba za tih 45*C. To samo lagano i lepo klizne na dole i sasvim fina korekcija posle toga treba.

Vrlo neuznemirujući način promene.

A kad budeš imao i ventilator kao izvršni organ onda ništa brže od toga :-)

Lep pozdrav!

P.S.
Kad budeš sutra ovo pročitao, zainteresuj se za histerezisnu metodu ragulacije kao jedan od najbržih metoda za dovođenje do blizu set point, ili "one cycle control" kao takođe jednu od najbržih metoda za isto to.
Potpuno je nebitno što se one cycle control koristi kod čopera. Pravila su ista i primenljiva na bilo kakvu regulaciju.

Obe metode su žetoko upotrebljive kod profilnih regulacija.

[Ovu poruku je menjao macolakg dana 19.01.2015. u 03:02 GMT+1]
[ macolakg @ 19.01.2015. 02:05 ] @
Pošto znam da si dosta dugo "navežbavao" sa čoperima (SMPS), shvati ventilator i grejač kao push-pull, transportno vreme kao storage kalem, medijum kao izlazni kondenzator i sve će ti biti jasno za trenutak.

I da ne zaboravim: naravno gubitke kao opteretni otpor.

- Samo grejač = buck
- Grejač-ventilator = sinhroni buck (half-bridge ispred storage)

P.S.

Jbg, uvek se naknadno setim nečeg što nisam rekao :-(

Onaj drugi primer sa sinhronim buck shvati kao half bridge sa tri state izlazom, odnosno treće stanje je "ne pipaj ništa :-)" odnosno sve off.

[Ovu poruku je menjao macolakg dana 19.01.2015. u 03:40 GMT+1]
[ zivadin_despot @ 20.01.2015. 14:18 ] @
U prethodnom programu sam uocio gresku...Amplitudu oscilacija sam racunao kao MAX-MIN, a treba (MAX-MIN)/2, potkralo se. Kada sam ovo ispravio, rezultati su jos bolji..
Evo i prikaza... Isti mi je odziv i na 90 i na 100 stepeni.

Dragoljube, za vikend cu eksperimentisati sa vasim predlozima, napisacu i prenosnu funkciju mog sistema na osnovu proracuna, i proracunacu gubitke (kao sto ste objasnjavali) pa cemo videti kako ce to sve izgledati. Do vikenda sam zauzet...
Pozdrav

[ zivadin_despot @ 03.02.2015. 12:52 ] @
Evo kako sve ovo izgleda u matlabu: