Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 11:07


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 17 lip 2018, o 22:56 
Offline
Użytkownik

Dołączył(a): 06 mar 2018
Posty: 26
Pomógł: 0

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? Czy tak napisana funkcja jest wystarczająca?
3. I zastanawia mnie jak dobrać dobrze współczynniki wzmocnienia regulatora wiem, że sa 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



Ostatnio edytowano 13 sie 2018, o 09:02 przez Pixelxx, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2018, o 07:15 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

rozumiem że te zmienne float liczysz na AVR?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2018, o 08:23 
Offline
Użytkownik

Dołączył(a): 08 mar 2015
Posty: 60
Pomógł: 5

1. Nie zerujesz tylko zatrzymujesz. Musisz ograniczyć sobie wyjście i obliczyć wartość którą odejmiesz od całki. Wystarczy wpisać w google image "antiwindup" i będziesz wiedział o co chodzi. W układzie występuje dodatkowe sprzężenie zwrotne.

2. Nie, ale musisz to robić cyklicznie, czyli w jakimś przerwaniu, bo inaczej nie będzie działało.

3. Tutaj to temat rzeka, ale najpierw wyłącz całkę i różniczkowanie i dobierz tylko część proporcjonalną. Następnie całka a na koniec różniczka, która nie wiele tutaj wniesie bo obiekt jest elementem inercyjnym drugiego rzędu, czyli wolno zmienny.

_________________
Http://anonimg3.comxa.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2018, o 13:22 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Przyczyna takiego działania jest fakt, że nie możesz wysterować grzałki bardziej niż 100%, mimo iż regulator wylicza większe wysterowanie. Ma to szczególnie miejsce przy nagrzewaniu.
Na szybko można zaproponować rozwiązanie polegające na wyłączeniu członu całkującego na czas nagrzewania (gdy błąd jest duży). Przykładowo, jeżeli regulator ma utrzymać temperaturę np. 100st, to do np. 80st grzeje na 100% a powyżej działa PID.

AD2 Odmierzanie czasu jest konieczne, tzn. należy załączać PID w jednakowych odstępach czasu. Wynika to z tego, że stałe czasowe całkowania i różniczkowania są wielokrotnościami okresu działania PIDa. Obrazowo mówiąc, jeżeli dwukrotnie zwiększysz okres PID, przy niezmiennych nastawach, to całka będzie narastać dwukrotnie wolniej. Nie ma specjalnego sensu zbyt częste wywoływanie PID'a, musi byc to uzależnione od stałych czasowych obiektu (grzałki).

J
Pixelxx napisał(a):
bo obiekt jest elementem inercyjnym drugiego rzędu, czyli wolno zmienny.
Nie do końca, bo obiekt drugiego rzędu, to taki, który ma dwie stałe czasowe. W przypadku grzałki to opóźnienie i inercja. Z reguły opóźnienie jest małe i się je pomija.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2018, o 04:18 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 289
Pomógł: 6

Patrz https://iautomatyka.pl/kurs-regulacji-p ... -cz-34-34/
Rozdz. 34.6
Główne wnioski
Jak walczyć z czasem martwym?
Czas martwy To wprowadza do systemu opóźnienie które jest oczywiście zjawiskiem niekorzystnym. Bo czy chciałbyś prowadzić samochód, w którym kierownicą skręcisz w lewo, a koła zareagują dopiero po To=1 sek? Obecnie regulatory wykonane są w technice mikroprocesorowej. Dlatego gdy regulator stwierdzi, że pomimo wzrastającego od składowej całkującej sygnału sterującego, sygnał wyjściowy nie wzrasta , to wyłącza on składową całkującą. Czyli w stanie nasycenia z regulatora PID robi się regulator PD.
Jest to przykład regulatora o zmiennej strukturze. To przełączenie może wystąpić np. od wejścia wzmacniacza mocy w stan nasycenia, a to jest łatwe wykrycia przez regulator mikroprocesorowy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2018, o 08:17 
Offline
Użytkownik

Dołączył(a): 06 mar 2018
Posty: 26
Pomógł: 0

Rozumiem już trochę lepiej to. Na chwilę obecną dodałem do regulatora zależność od czasu i wygląda to tak:
Wszystko piszę w języku C na uC Atmega32 bo nie wspomniałem wcześniej.
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, więc wychodzi, ze regulator uruchamiam co 200ms. Myślę, że jest to wystarczający czas. Kodu do zjawiska antiwindup nie dodałem bo jeszcze nie wiem jak to zapisać (rozumiem teoretycznie).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO