Elektroda.pl
Elektroda.pl
X
Metal Work Pneumatic
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Algorytm samostrojenia PID.

zas 15 Gru 2008 12:05 8678 17
  • #1 15 Gru 2008 12:05
    zas
    Poziom 16  

    Witam,
    potrzebuję algorytm samostrojenia parametrów dla regulatora PID.
    Może być też jakiś programik w C lub Bascomie.

    Pozdrawiam

    0 17
  • Metal Work Pneumatic
  • #2 15 Gru 2008 12:36
    Balu
    Poziom 38  

    Powodzenia w poszukiwaniu:>
    Jedne z najbardziej strzeżonych algorytmów przez producentów:>

    0
  • #3 15 Gru 2008 12:54
    PabloL
    Poziom 11  

    Zobacz do Elektroniki Praktycznej, nr 10, 11 i 12 /2007 "Mikroprocesorowy regulator temperatury PID z interfejsem Modbus". Do tego projektu są nawet źródła w C.

    0
  • Metal Work Pneumatic
  • #4 15 Gru 2008 12:56
    zas
    Poziom 16  

    W ep10/07 jest projekt "Mikroprocesorowy regulator PID z interfejsem MODBUS"

    W programie mikroprocesora jest funkcja samostrojenia, o ile sam program rozumiem to za bardzo nie wiem dlaczego to jest tak wyznaczane.
    Poniżej funkcja samostrojenia z tego projektu.

    Code:

    #define MAX_TUNE_TIME (20*3600*10)

    //Samonastrajanie...
    //0 - Samonastrajanie zakonczone powodzeniem
    //1 - Wystapil Blad Przy samonastrajaniu
    //2 - Samonastrajanie w trakcie
    unsigned char SelfTunning(unsigned char *stan)
    {
       static idata float BegTemp;               //Komorka Tymczasowa Temperatury
       static idata float TPocz;
       idata float TDelay,T,K;
       switch(*stan)
       {
       //Stan Poczatkowy.. Wartosci poczatkowe Temperatury i czasu...
       case 0:
          TimL = MAX_TUNE_TIME;
          BegTemp = ActTemp;
          TPocz = ActTemp;
          pwm_p = 255;
          *stan = 1;
          break;
       //Wyznaczanie czasu Opoznienia
       case 1:
          if(!TimL) {*stan = 2;}               //Jezeli czas sie skonczyl to wyjdz z bledem
          else if(ActTemp + 0.1 < BegTemp) { *stan = 2; }
          else if(ActTemp > BegTemp + 0.25)
          {
             TDelay = (MAX_TUNE_TIME - TimL)/20;
             *stan = 4;
             TimL = TDelay * 20.0 * 1.5;
             T = 0;
             BegTemp = ActTemp;
          }
          break;
       //Wyjscie z bledem
       case 2:
          pwm_p = 0;               //Wylacz PWM
          D1 = 1;                  //Wylacz Diode
          TimL = 0;               //Skasuj Timer
          return 1;
       //Wyjscie bez bledu
       case 3:
          pwm_p = 0;
          D1 = 1;
          T = T - 3 * TDelay;            //Wyznaczenie Czasu T obiektu
          K = (K - TPocz)/8.0;         //Wyznaczenie wzmocnienia obiektu




          Pid[_TP] = T * 0.005 + 1;      //Czas Probkowania Regulatora
          Pid[_TI] = 2.5 * TDelay;      //Czas Calkowania Regulatora
          Pid[_TD] = 0.4 * TDelay;      //Czas rozniczkowania
          Pid[_KP] = T/(K * TDelay);      //Wzmocnienie Regulatora
          SaveBytes(0,(unsigned char*)Pid,sizeof(Pid));      //Zapamietaj nastawy Regulatora..
          TimL = 0;                  //Wyzeruj Timer
          return 0;
       //Znalezienie czasu T i wzmocnienia   
       case 4:
          if(!TimL)
          {
             T += TDelay * 1.5;
             if(ActTemp + 0.5 < BegTemp) *stan = 2;
             else if(ActTemp <= BegTemp + 0.2)
             {
                K = ActTemp;
                *stan = 3;
             }
             else
             {
                TimL = TDelay * 20.0 * 1.5;
                BegTemp = ActTemp;
                D1 = !D1;
             }
                
          }
          break;
        }
       
       return 2;
    }

    0
  • #5 15 Gru 2008 22:23
    bolek
    Specjalista - oświetlenie sceniczne

    W sumie kod chyba próbuje "wyczaić" bezwładnosć obiektu, nie mniej jednak też nie widzę, co podmiot liryczny miał na myśli.

    Na chłopski rozum, to jak to samostrojenie powinno wygladać?

    0
  • #6 16 Gru 2008 07:24
    DosinskY
    Poziom 18  

    Hej,

    Nie analizowałem zamieszczonego kodu ale szukajcie z googlami "dobór nastaw regulatora PID" a coś na pewno znajdziecie. Metod doboru nastaw jest kilka. Jedną, chyba bardziej znaną ("szkolną") jest metoda Zieglera-Nicholsa (np. https://www.elektroda.pl/rtvforum/viewtopic.ph...astawy&sid=e670375eda3163edc04a0f970cc5c31f).. Nie pomoże ona dobrać nastaw optymalnych ale gwarantuje, że układ regulacji będzie stabilny. Ponadto w tej metodzie trzeba w obiekcie wzbudzić oscylacje...a to może być niełatwe (czasochłonne) w procesach wolnozmiennych. Nastawy PID otrzymane z Z-N można przyjąć za punkty startowe optymalizcji by dostać nastawy "idealne" dla określonego kryterium optymalizacji...ale jeżeli w kosmos to nie leci ;) to nastawy zgrubne zapewne wystarczą. Warto też dobrać strukturę regulatora do obiektu sterowania...być może nie wszystkie człony PID-a będą potrzebne?

    Podsumowując...
    Napisałem się trochę ale czy coś z tego wynika to nie wiem :) Najlepiej chyba poszukać metody doboru nadającej się do określonego obiektu i strzelić sobie program na jej podstawie...bo czasem analiza zajmuje więcej czasu niż synteza :)

    Pozdrawiam

    1
  • #7 16 Gru 2008 11:29
    d3zerter
    Poziom 12  

    Jeśli chodzi o samostrojenie ja zrobiłem w ten sposób:
    1. najpierw przeprowadzam regulacje dwustanową (za duże wyłącz, za małe włącz) równocześnie całkując sygnał wejściowy i wyjściowy
    2. po paru machnięciach sygnałem otrzymuję przybliżone wzmocnienie układu k=Całka(y)/Całka(u)
    3. Z wyliczonego k wyznaczam wartość u taką żeby wyjście było pod wartością zadaną u = zad*0.9/k, czekam aż się ustali i robię skok jednostkowy u = zad*1.1/k. Zbieram próbki i mam charakterystykę skokową z której mogę wyznaczyć model 1 rzędu
    4. na podstawie modelu wyznaczam nastawy PID.
    Może nie jest to sposób specjalnie prosty, ale autorski wymyślony przeze mnie, i podczas strojenia pozwala mi na utrzymywanie wyjścia w okolicy wartości zadanej.
    Symulacji robiłem na atmega8 połączonej z simulink'iem przez port rs. Z racji ograniczeń czasowych próbkowanie mam co 1 sek więc mogę tak stroić układy wolne.

    0
  • #8 16 Gru 2008 12:54
    kemot55
    Poziom 30  

    Wypróbuj metodę przekaźnikową. Stosowana w większości rozwiązań przemysłowych. Ale ma też ograniczenia. Trzeba to inteligentnie używać!

    0
  • #9 16 Gru 2008 23:09
    zas
    Poziom 16  

    Witam,
    dziękuje za zainteresowanie tematem, dodam że celem regulacji w moim przypadku ma być utrzymanie stałej temperatury cieczy(wody).

    ->d3zerter mógłbyś przybliżyć jak z ch-ki skokowej wyznaczasz model i później nastawy??

    Googlując metodę przekaźnikową natknąłem się na "ciekawy"(na pierwszy rzut oka) wykład w pdf. Podaje linka, może się komuś przyda.
    Link
    Opisane są w nim różne metody doboru nastaw.

    Póki co czekam również na sugestie jak rozwiązane jest samostrojenie z projektu z ep.

    Pozdrawiam

    0
  • #10 17 Gru 2008 00:23
    kemot55
    Poziom 30  

    zas napisał:
    Googlując metodę przekaźnikową natknąłem się na "ciekawy"(na pierwszy rzut oka) wykład w pdf.


    No właśnie choćby ten artykuł miałem na myśli mówiąc "używać z głową"!
    Zauważcie, że autor uzyskuje ujemne poziomy cieczy w zbiorniku :|
    Poza tym pompa też może pracować w "stronę ujemną" -> co oznacza, że zasysa ciecz ze zbiornika.
    Poza tym wzorki OK. Działa skutecznej niż metoda Zieglera-Nicholsa (chociaż opracowana na bazie tej metody) i nie "demoluje" :D połowy zakładu jak może to mieć miejsce przy metodzie Panów Z-N w przypadku osiągnięcia nietłumionych drgań o "troszkę" za dużej amplitudzie.
    Wada: niestety nie działa dla obiektu inercyjnego pierwszego rzędu (np. pojedynczy zbiornik z wypływem grawitacyjnym) Niby nie potrzebne a jednak...

    0
  • #11 17 Gru 2008 10:34
    d3zerter
    Poziom 12  

    najpierw szukam punktu przegiecia (największy przyrost)

    Code:
                   
    
    for (int i=0;i<Strojenie->index2-1;i++)
    {
    if (ABS(Strojenie->Skok[i+1]-Strojenie->Skok[i])>max)
    {
          max = Strojenie->Skok[i+1]-Strojenie->Skok[i];
         PunktPrzegiecia = i;
    }
    }

    Jak mam punkt przegiecia max liczę stała czasową jako odleglosc miedzy punktami przecięcia z y0 (wartosc ustalona przed skokiem) i y1 (wartosc ustalona po skoku) przez styczną w punkcie przegiecia
    Code:

    Strojenie->T = ABS((Strojenie->Skok[Strojenie->index2-1] - Strojenie->Skok[0])/max);

    Wzmocnienie biorę z całek ale można wziąść dokładniej z charakterystyki.
    daje mi to model bez opoznienia g(s) = k/(Ts + 1)
    Jeśli chodzi o dobranie na tej podstawie nastaw to zależy konkretnie od transmitancji regulatora PID. Ja liczę transmitancję zamkniętego układu z parametrami ki kp kd i przyrównuje mianownik tej transmitancji do mianownik transmitancji porządanej transmitancji układu zamkniętego.

    0
  • #12 27 Gru 2008 17:34
    bolek
    Specjalista - oświetlenie sceniczne

    Czytam o tych nastawach i w sumie nie kapuje jak go ustawić :)

    Mam reg PI, grzeje mocna grzałką małą ilość wody. P wyregulowałem tak aby bez udziału I temperatura ustabilizowała się kilka % poniżej zadanej wartość.

    Natomiast włączenie członu I powoduje oscylacje. Co prawda jakoś trafiłem z ustawienim I, ale chciał bym to jakoś przewidywalnie zrobić.
    Powiedzmy że mam odchyłke o jakimś okresie i amplitudzie, do tego mam jakiś tam czas całkowania. Poradzcie jak z tego wyciągnąć prawidłowy wniosek

    0
  • #13 27 Gru 2008 17:41
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #14 30 Gru 2008 00:12
    aster11
    Poziom 19  

    Freddie Chopin napisał:
    prawidlowy wniosek to IMHO zastosowanie regulatora PD a nie PI.

    Przy regulacji obiektów cieplnych - (wielo)inercyjne z opóźnieniem - raczej nie stosuje się regulatorów bez całki. Proszę odwołać się zresztą do wykładu, do którego link został wcześniej podany.

    Wykorzystując tylko tor P, dostajemy jakiś tam przebieg regulacji, dla którego czas regulacji i uchyb ustalony maleją ze wzrostem kp. Jednak ze względu na opóźnienie w obiekcie, zbyt duże kp doprowadzi do oscylacji, trzeba zadowolić się zatem jakimś błędem ustalonym. Dodanie toru D spowoduje osłabienie (likwidację) oscylacji z jednoczesnym spowolnieniem regulacji i zachowaniem niezmienionego uchybu ustalonego. Użyciu struktur P lub PD będzie więc towarzyszyć "krótka kołdra", mniej lub bardziej kłopotliwa, zależnie od szczegółowych parametrów obiektu. Oczywiście wszystko zależy od wymagań, jeśli nie są one wielkie co do szybkości i dokładności, to w konkretnych sytuacjach spisałby się zapewne także regulator P.

    Typowo używa się struktur PI lub PID.
    Jeżeli chodzi o dylemat bolka , co do dokładnego wyznaczenia nastaw PI, można zrobić to łatwo, jeśli obiekt ma charakterystykę zbliżoną do jednoinercyjnej z opóźnieniem. W takim wypadku można go modelować transmitancją: G(s) = k*e(-Ds)/(Ts+1). Należy zidentyfikować parametry modelu, określając wzmocnienie statyczne (k), stałą czasową (T) i opóźnienie (D). Transmitancję regulatora PI można zawsze sprowadzić do postaci: Gr(s) = kr*(z*s+1)/s. Należy dobrać: z = T, co oznacza redukcję bieguna obiektu przez zero regulatora. Można powiedzieć, że jest to pewien "optymalny" wybór intensywności całkowania, przy którym układ powinien zachowywać się grzecznie. Wybór kr jest mniej krytyczny. Jego zwiększenie przyspiesza układ, ale nie można przesadzić, gdyż dojdzie do oscylacji lub znacznych ograniczeń sygnału sterowania.

    Dla sensownego użycia regulatora z całkowaniem trzeba by jeszcze dodać anti-windup. Zwłaszcza jeśli układ nie pracuje ciągle, tylko załączany jest dorywczo. Przy starcie, sterowanie zazwyczaj na pewien czas zatrzymuje się na ograniczeniu i jeśli nie ma anti-windup potrzeba trochę czasu, aby całka "wróciła do siebie".

    0
  • #15 17 Sty 2009 00:22
    Myrek1
    Poziom 23  

    Witam.
    Gdzie można znaleźć źródła do tego projektu z EP ( "Mikroprocesorowy regulator PID z interfejsem MODBUS" )?

    0
  • #16 17 Sty 2009 14:02
    teorom
    Poziom 13  

    Zalezy co sie rozumie przez samostrojenia PID ? Nie ma takiej matody ktora jednoznacznie wyznacza najlepsze sterowanie a to z prostego powodu - obiekt sterowania nie jest znany !

    0
  • #17 17 Sty 2009 22:02
    zas
    Poziom 16  

    Cytat:
    Gdzie można znaleźć źródła do tego projektu z EP ( "Mikroprocesorowy regulator PID z interfejsem MODBUS" )?


    ze strony ep Link

    Cytat:
    Zalezy co sie rozumie przez samostrojenia PID ?


    Chodzi aby program sam dobrał parametry PID na podstawie odpowiedzi obiektu na jakieś wymuszenie.

    0
  • #18 24 Sty 2009 12:33
    rpal
    Poziom 27  

    Także dołączę swoje 3 grosze do tej miłej regulacji temperatury.
    - gdy już zrobisz regulator to pomyśl na zabezpieczeniem się przed sytuacją kiedy cała ta regulacja padnie i się wysypie załączając na stałe grzałkę. Taki rodzaj bezpiecznika niezależnego od regulatora.

    Domyślam się że grzejesz wodę ale juz nie doczytałem ilości wody i czy jest w zamkniętym zbiorniku. Piszę o tym ponieważ na własnej skórze odczułem skutki przegrzania cieczy i jej gwałtownego wrzenia :)

    Koledzy polecają Tobie tutaj słuszne metody używając mądrych określeń. A chodzi o to że załączając grzanie albo je wyłączając należy uwzględnić inercję układu oraz to że temperatura może jeszcze rosnąć mimo że grzanie wyłączono (np. mieszanie się cieczy nie zostało uwzględnione) albo spadać pomimo że je załączono (np. czas niezbędny na "dotarcie" ciepła z grzałki do cieczy) :).

    Dla małych pojemności nie ma sensu zawracać sobie głowy ale kiedy ilość cieczy rośnie i trzeba to uwzględniać. Dlatego proponuję założyć sobie np. dwustopniową regulację mianowicie taką:

    - do jakiejś mniejszej (ile - musisz sam sobie to założyć np. o 5 stopni) od zadanej temperatury regulator dochodzi na zasadzie włącz/wyłącz.
    - powyżej tego zakresu regulator działa sterując grzaniem impulsowo wg algorytmu w którym proporcja miedzy czasem grzania a nie grzania zmienia się w trakcie "dochodzenia" do zadanej temperatury, aż do całkowitego jego wyłączenia po osiągnięciu zadanej wartości.
    Czyli zmienny w trakcie regulacji czas grzania, potem przerwa na osiągnięcie jej stabilnej wartości, kolejny pomiar i ew. korekta poprez kolejne dogrzanie ale już z innym czasem.
    Myślę że to to najprostszy sposób na regulację takiego układu. Jakby co służę radą na przyszłość. PZDR

    0
  Szukaj w 5mln produktów