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

Regulator PID i zjawisko Windup

23 Lip 2018 18:31 942 7
  • Poziom 9  
    Witam.

    1. Wykorzystuję w swoim projekcie program regulatora PID, który sobie napisałem.
    Problemem moim jest zjawisko Windupu całkowania i pytanie jak i kiedy zerować całkę błędu, żeby nie było to ciągle całkowane bo błąd osiąga wtedy duża wartość i się nawija czyli zjawisko windup.

    2. I drugie pytanie czy w regulatorze trzeba wykorzystywać jakieś odmierzanie czasu i czy tak napisana funkcja jest wystarczająca? (kod poniżej)

    3. I zastanawia mnie jak dobrać dobrze współczynniki wzmocnienia regulatora wiem, że są różne metody zieglera nicholsa itd, ale nie za bardzo wiem jak je ruszyć w rzeczywistości.

    Regulator reguluje kąt załączenia triaka i steruje grzałką. Wszystko działa, ale widzę, że windup się ukazuje bo jak wyreguluje temperaturę to po pewnym czasie, chwili pomalutku sobie rośnie temperatura ponad zadaną więc błąd ciągle się całkuje

    Wszystko piszę w języku C na uC Atmega32
    Dodałem przerwanie co jedną milisekunde, i w pętli głównej do zmiennej ,,now" przypisuje milisekundy które przenoszę do funkcji regulatora PID, którego kod zamieściłem poniżej i czy jest on poprawny waszym zdaniem? Wychodzi, ze regulator uruchamiam co 200ms a czas jest chyba wystarczający.

    I nie za bardzo wiem jak zrealizować to antiwindup programowo.
  • Poziom 21  
    Ja zwykle ustawiam jakiś zakres maksymalny całki (dolny i górny) i zwiększam tylko, kiedy jeszcze go nie przekraczam. Jeśli błąd całkowania rośnie nieograniczenie, wygląda to na zbyt mała wartość współczynnika całkowego. Albo, co gorsza, jego zły znak.
  • Moderator Projektowanie
    To jest ciekawe, gdyż regulator ma nastawioną wartość zadaną i w procesie obliczania odejmujesz aktualną wartość od nastawionej wartości, więc mu być ona ujemna w pewnym czasie i ciężko by pomału wzrastała ta wartość, chyba że sterowanie nie wyrabia i triac podaje za dużo energii nadal na grzałkę?

    Inna to współczynnik k.

    Zacznijmy od członu proporcjonalnego, on nie może mieć za dużej wartości gdyż bardzo łatwo powoduje niestabilność układu. Jeśli sterowania triaca drga to może niestabilnie pracować i podnosić temperaturę. Myślę, że Twój układ jest niestabilny, ale to można bardzo łatwo określić na oscyloskopie. Jeśli sygnał bardzo gwałtownie zmienia wypełnienie raz w jedną raz w drugą (może to być praktycznie rozmazany obraz) to znaczy że w tym jest problem.
  • Poziom 9  
    Wszystko mam na razie zmontowane na płytce prototypowej. Posiadam oscyloskop i to fakt drga trochę w góre i w dół ta sinusoida zwłaszcza przy dużym kącie załączenia gdzieś tak 120 st elektrycznych i przy wyświetlaniu temperatury na LCD skacze ona tak. Nie do końca wiem czym to jest spowodowane ale wydaje mi się, że to przez stykówkę i po wykonaniu płytki PCB będzie ok.

    I co z tą funkcją regulatora jest ona poprawnie napisana? I chciałbym dodać ten antiwindup
  • Moderator Projektowanie
    Ustaw wartość graniczną dla SU. Jeśli nastawisz poprawnie współczynniki tak aby regulator działał bez overshoot'a to problem powinien zniknąć.

    Niestety problem dobrania odpowiednich parametrów nie jest banalny i najprostszym rozwiązaniem jest metoda prób i błędów. Oczywiście czas poświęcony na poszukiwaniu rozwiązania analitycznego nie będzie czasem straconym, jednak może to zająć naprawdę spory kawałek czasu.

    Jeszcze takie dwie porady:
    Spróbuj na początku tylko z członami PI. Człon D jest bardzo często pomijany co nie wpływa aż tak bardzo na jakość sterownika.
    Pętla histerezy. Najlepiej byś wprowadził do zadanej wartości górną i dolną wartość co pomoże uniknąć problemu drgania przy wartościach bliskich ustawionej.
  • Poziom 9  
    Rozumiem trochę lepiej, ale jak mam ustawić wartość graniczną SU czyli sumy błędu, skąd i jak wyznaczyć tą granicę?
    Histerezę dodam dam tak 3 stopnie Celsjusza
    Ogólnie działanie wygląda tak jak na wykresie regulatora, gdy nastawię 120 stopni to przekroczy tak do 130 opadanie do 120 i trzyma, lecz po chwili zaczyna wzrastać temperatura a prawidłowo dobrane współczynniki powinny powodować to, ze od razu uzyska 120 stopni i trzymać cały czas? Dobrze to rozumiem?
    Mierzę też napięcie na wzmacniaczu operacyjnym czyli po wzmocnieniu sygnału z termopary i widzę, że to napięcie wzrasta więc domyślam się, że przez to że błąd jest ciągle sumowany.

    Czyli też rozumieć mam, że funkcję napisałem poprawnie bo w sumie nikt jej nie skomentował, że jest źle ;)

    Regulator PID i zjawisko Windup
  • Moderator Projektowanie
    Pamiętaj, że wzmocnienie sygnału na wzmacniaczu też jest członem P w układzie PID, tylko że analogowym i też trzeba go wziąć pod uwagę.

    Regulator działa jak go zaprojektujesz, jeśli overshoot (przsterowanie, ae szybciej dochodzi do wartości) nie przeszkadza, to może zostać, jeśli jednak chcesz by nie było overshoot'a to można zejść bardziej w zakres undershoota (wolniej dochodzi do wartości, ale nie ma overshoota lub jest mniejszy).

    Dlaczego po chwili zaczyna wzrastać to nie wiem, ale obstawiam na błąd w logice sterowania. Jeśli temperatura się zwiększa to znaczy że triac jest źle wysterowany i podaje za dużo energii, nie ma opcji by temperatura inaczej wzrastała. No chyba że jest błąd w układzie pomiarowym i temp_termopary pokazuje błędny wynik. Bo jeśli temp_termopary jest wyższe niż wartość zadana to nie ma co się sumować przecież.

    Jak ustalić limit SU? Na zdrowy rozsądek, trzeba usiąść i zrozumieć jak to działa i dobrać wartości tak by spełniały Twoje oczekiwania (niestety trzeba bardzo dobrze wiedzieć co chce się osiągnąć).
  • Poziom 37  
    Kąt załączenia tyrystora (czy triaka) nie powoduje liniowej regulacji mocy dostarczanej do odbiornika, co prawda w zgranym PID nie powinno być to problemem, ale jednak może się to "dokładać" do efektu.