logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Regulator PID do robota balansującego - jak ustalić ograniczenia całki?

kuba123654789 21 Wrz 2011 13:58 11429 8
  • #1 9949048
    kuba123654789
    Poziom 10  
    Posty: 27
    Ocena: 2
    Witam
    próbuje napisać regulator PID do balansującego robota, ale nie potrafię zrozumieć po co ograniczać całkę(anti-windup). Oraz skąd mam wziąć graniczne wielkości które mam ograniczyć?
    Pozdrawiam
  • #2 9949383
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 24
    ograniczasz całke, bo gdybys pozwolił jej wzrastać w nieskonczonosc (albo b.duza liczba) to układ później miałby bardzo trudno albo i w ogole by nie powrócił do stabilności. Miałbyś ciągle bardzo duże oscylacje.

    Najprostszym sposobem, jest przestać inkrementować człon całkujący (sumaryczny) gdy wyjście jest już na swoim maksimum.
    Np gdy masz zawór sterowany 0-10V, to gdy podajesz już sygnał 100% (10V) nie ma sensu dalej zwiekszać ani całki, bo wyjście itak sie już więcej nie otworzy. Analogicznie w przeciwnym kierunku.
  • #3 9949555
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Dziękuję za odpowiedź:)
    Tylko skąd mam wiedzieć jaka może być maksymalna i minimalna wartość całki skoro ostateczny wynik dostaje dopiero po dodaniu członu P i D. Mój PID na podstawie odchylenia od pionu steruje silnikami(robot balansujący). Wartość aktualna CV = odchylenie od pionu(w deg), wartość zadana SP=0(pion). Wyjście idzie na 8 bitowy PWM(0-255). Jak mam w takim przypadku dobrać wartości graniczne całki?
  • #4 9949678
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 24
    czytaj jeszcze raz, przestajesz inkrementowac, gdy wyjscie układu sterującego jest na maksimum. Twoim wyjsciem układu sterującego jest jak już sam napisałeś 8 bitowy PWM, który jak określiłes ma zakres 0 - 255.
    Nie możesz mieć wartości ani mniejszej niż 0 ani większej niz 255.
    Wiec gdy wartość sterująca będzie równa (lub większa) maximum (255), nie inkrementujesz całki (bo itak na nic sie zda bo wyjście itak masz juz maksymalne).

    Natomiast wartości graniczne całki to osobny temat :) równie dobrze możesz mieć tam zakres INT (-32tys ..+32tys) a dopiero wyjscie z PID (zakres np DINT) skalować na swoje 8bitów, wszystko zalezy od Twojej implementacji.
  • #5 9951221
    kuba123654789
    Poziom 10  
    Posty: 27
    Ocena: 2
    Przeglądając jakieś przykłady regulatorów w sieci wywnioskowałem, że muszę mieć obydwa ograniczenia. Najpierw ograniczenie całki:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    gdzie angle_Int_err to jest sumowanie błędu, a wartości PID_I_max i PID_I_min to są właśnie te granice, które muszę wyznaczyć ale nie wiem jak.

    A drugie ograniczenie jest już przed zapisaniem PWM do rejestru procesora, aby nie przekroczyć dopuszczalnej wartości rejestru tj.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jak wyznaczyć PID_I_max i PID_I_min?
    Dziękuję za dotychczasową pomoc:)
    Pozdrawiam
  • #6 9951384
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 24
    swietnie, ale jak narazie nigdzie nie masz anti-windup ;)
    pierwsze to limit calki, drugie limit wyjscia.

    limit calki zazwyczaj jest b.duza liczba, okreslona przez ograniczenia sprzetowe. jeżeli korzystasz ze zmiennych 32bitowych, to bedzie max i min 31bitowy (1bit na znak) etc.
  • #7 9951971
    kuba123654789
    Poziom 10  
    Posty: 27
    Ocena: 2
    Mógłbyś zajrzeć do tego pdf-a. Jest to opis takiego robota balansującego znaleziony w sieci. Dokładnie od strony 82 do 84 jest opis i kod regulatora PID. I tam autor ma limit całki ustawiony na 0,1 i -0,1. Dlaczego tak mało a nie 63 bity skoro pracuje na zmiennych 64 bitowych?
    Czy takie dwa limity wystarczą? Czy muszę zrobić ten anti-windup, którego dalej nie potrafię odróżnić od limitu całki. Myślałem, że to to samo:P Wybacz, że Cie tak męczę ale naprawdę nie mam się kogo innego poradzić:)

    Odnośnik do tematu gdzie jest pdf:
    https://www.elektroda.pl/rtvforum/topic1367799.html#6769385
  • #8 9953522
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 24
    dlaczego ogranicza całke do -0,1 .. 0,1, bo pewnie tak mu wyszlo doswiadczalnie ;)
    masz racje ze uzywa zmiennych 64 bitowych, ale sa to zmienne 'zmiennoprzecinkowe', no ale to nie tlumaczy tak małej liczby. Spojrz, ze wartość sterowania (ster1 i ster2) również są zmiennymi tego samego typu.

    pisze tam, ze ster = error * PID_P + całka * PID_I + różniczka * PID_D; i teraz ta suma też nie może przekroczyć wartości maksymalnej zmiennej float.
    W takim projekcie spokojnie można sobie dobrac parametry pod konkretny projekt.

    Zwróć uwage, że dla drugiego sterowania ma już limit nie 0,1 ale 10 (a to też dodaje do pierwszego sterowania),.

    Niestety nie ma opisanje funkcji Control_LR(ster,ster2) która zamienia wartości obrobione przed PID na wartości wysyłane do silników, ale na rysunku 5.25 str 88 widac wykres sterowan gdzie wartości sterowania sa w zakresie +/- 50.

    zakładając, że maksymalna wartość będzie +/- 100 (%) to gdy PID_P = 10, PID_I = 25, PID_D = 30, to będzie wsam raz (przelicz sobie nawet na kartce kilka pętli regulacji zakladajac oscylacje wejscia wlasnie w zakresie ) Autor pewnie to doswiadczalnie okiełznał tak aby wartości nastaw i wartości uzyskiwanych błedów po kalkulacji całości nie byly wieksze niz max i dawały dobre regulacje :)
  • #9 10052408
    Zgredzio69
    Poziom 14  
    Posty: 191
    Pomógł: 10
    Ocena: 17
    Polecam doskonały artykuł pt. An Analysis Package Comparing Anti WindUp Strategies, w którym wyjaśniono podstawowe techniki ograniczania integratora w algorytmie PID.
    Załączniki:
    • An Analysis Package Comparing Anti WindUp Strategies.pdf (571.12 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono temat ograniczania całki w regulatorze PID dla robota balansującego. Użytkownik zadał pytanie o sens wprowadzenia ograniczeń (anti-windup) oraz o to, jak ustalić wartości graniczne całki. Odpowiedzi wskazują, że ograniczenie całki jest kluczowe, aby uniknąć problemów ze stabilnością systemu, gdyż niekontrolowany wzrost całki może prowadzić do dużych oscylacji. Użytkownicy sugerują, że wartości graniczne całki powinny być ustalane na podstawie maksymalnych i minimalnych wartości wyjścia systemu, które w przypadku robota balansującego są związane z 8-bitowym PWM (0-255). Wskazano również, że wartości graniczne całki mogą być znacznie większe, a ich dobór powinien być oparty na doświadczeniach i specyfice projektu. Dodatkowo, podano przykłady kodu oraz odniesienia do literatury dotyczącej strategii ograniczania integratora w algorytmie PID.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA