Regulator PID w praktyce

Często w robotyce spotykamy się z problemem automatycznego sterowania i regulacji pewnych parametrów, na podstawie pomiarów z czujników, aby osiągnąć określony cel. Przykładowo kiedy budujemy robota podążającego za linią, chcemy aby na podstawie odczytów z czujników reagujących na linię, nastąpiła  automatyczna regulacja prędkości obrotowej silników, tak aby robot mógł jechać wzdłuż linii. Możemy próbować napisać program sterowania takim robotem opierając się tylko na swojej intuicji tworząc wiele operacji warunkowych i takie rozwiązanie też będzie działać. Jest jednak prosty przepis na automatyczną regulację – jest to regulator PID. 

Odrobina teorii o układach sterowania

To czym będziemy sterować, czyli np. silnik, grzałka  żarówka, itd. nazywamy obiektem sterowania. Możemy zastosować sterowanie w otwartej pętli, gdzie u(t) to nasz sygnał wejściowy , będący sygnałem pobudzającym nasz obiekt w danej chwili czasu, może być to np. wartość napięcia elektrycznego. Natomiast nasze y(t) to sygnał wyjściowy naszego obiektu wdanej chwili czasu, którym może być np. prędkość obrotowa, czy temperatura.  W pętli otwartej nie posiadamy informacji na temat sygnału wyjściowego, sterujemy „na ślepo”. Wierzymy że jeśli producent podaje że grzałka przy pobudzeniu sygnałem o danym napięciu  uzyskamy daną temperaturę. Jest to słabe rozwiązanie ponieważ nie jesteśmy w stanie reagować na zmieniające się warunki otoczenia.

Dlatego bardziej powszechne jest stosowanie sterowania w pętli zamkniętej. Przy zastosowaniu pętli zamkniętej wykorzystujemy czujnik, który pozwala nam mierzyć sygnał wyjściowy naszego obiektu. Sygnał r(t) jest to wartość którą chcemy uzyskać na wyjściu obiektu. Natomiast e(t) jest to uchyb sterowania, czyli różnica pomiędzy sygnałem zadanym r(t) oraz sygnałem wyjściowym y(t). Regulator na podstawie uchybu sterowania dobierze taka wartość sygnału u(t) pobudzającego obiekt, tak aby go zminimalizować, czyli będzie dążył do tego aby  wartość sygnału wyjściowego była taka sama jak sygnału zadanego. Regulacja za pomocą regulatora PID odbywa się właśnie w pętli zamkniętej.

Czym jest regulator PID?

Regulator PID jest to algorytm sterowania, który można zrealizować w różnej materii. Algorytm ten można zrealizować w postaci analogowej poprzez zaprojektowanie i zbudowanie odpowiedniego obwodu elektrycznego. Rzadko jednak teraz stosuje się to podejście. Częściej wykorzystujemy regulator PID w formie cyfrowej, czyli w postaci kodu w jakimś języku programowania.

Tak jak już wcześniej wspomniałem regulator PID dąży do zminimalizowania uchybu e(t). Składa się z trzech członów:

  •  Członu proporcjonalnego oznaczanego literą P –  jego rolą jest kompensacja uchybu bieżącego;
  • Członu całującego oznaczanego literą I – kompensuje on akumulację uchybów z przeszłości.
  •  Członu różniczkującego oznaczanego literą D – kompensuje on przewidywane uchyby z przyszłości

Stąd wynika nazwa regulatora PID.  Każdy z tych członów charakteryzuje się własnym współczynnikiem wzmocnienia, odpowiednio Kp dla członu proporcjonalnego, Ki dla człony całkującego oraz Kd dla człony różniczkującego. Natomiast suma wyników działania tych trzech członów stanowi sygnał sterujący procesem. Strojenie regulatora PID polega właśnie na ustaleniu wartości tych parametrów tak aby sterowanie procesem spełniało nasze oczekiwania. Nie musimy zawsze wykorzystywać wszystkich członów regulatora PID, możemy wykorzystać tylko dwa lub jeden.  Jest wiele analitycznych metod dobierania parametrów regulatora PID, omówię je w osobnym artykule. Zatem działanie regulatora PID można opisać równaniem:

Ten wzór nie jest jednak użyteczny do zaimplementowania. Aby tak się stało należy przyjąć pewne numeryczne uproszczenia całki i różniczki. Tak więc całkę możemy przedstawić jako sumę kumulacyjną uchybów ze wszystkich dyskretnych chwil czasu, natomiast różniczkę możemy przedstawić jako różnicę wartości uchybu z obecnej chwili i wartości uchybu z chwili poprzedniej. Wówczas otrzymamy wzór który łatwo zaimplementować w dowolnym języku programowania:

Skąd wziąć wartość uchybu?

Nie zawsze oczywiste jest skąd uzyskać wartość uchybu w układzie sterowania. O ile w prostych przypadkach jak np. sterowanie temperaturą nie jest to problemem, gdyż jesteśmy w stanie użyć czujnik temperatury, który w prost poda nam wartość w postaci liczbowej. Tak w przypadku zastosowania czujników cyfrowych, które dają nam tylko informację „1” kiedy występuje dane zjawisko  i „0” kiedy go nie ma nie jest już tak łatwo. Właśnie z takim problemem mamy do czynienia przy budowie robota typu LineFollower. Posiadamy linijkę czujników odbiciowych które zwracają nam „1” kiedy wykrywają linię i „0” kiedy linii nie ma. Wówczas aby wykorzystać regulator PID należy wykazać się pewną kreatywnością i  pomysłowością. Możemy na przykład określić wagę każdego z czujników, i obliczyć średnią. Tak więc jeśli przyjmiemy wagi tak jak na rysunku poniżej, kiedy sensor 4 i sensor 5 wykrywa linię wówczas wartość uchyby wyniesie 75, jeśli tylko sensor 3 wykrywa linię wówczas uchyb jest równy 0.

Windup - co to jest i jak temu przeciwdziałać?

Regulator PID zakłada że świat zewnętrzny jest liniowy, co oczywiście jest kłamstwem. Nasze urządzenia wykonawcze, takie jak grzałka, czy silnik mają pewną ograniczona moc, czyli charakteryzują się nasyceniem. Oznacza to że nie możemy uruchomić naszej grzałki na 120% mocy, natomiast regulator PID będzie tego oczekiwał. Zestawienie członu całkującego z regulatora PID oraz nasycenia może skutkować pojawieniem się zjawiska określanego jako windup całkowania. Wyobraźmy sobie sytuację kiedy chcemy w systemie regulacji temperaturą uzyskać wartość 100 stopni Celsjusza, kiedy temperatura obecna wynosi 20 stopni. Regulator PID uruchamia grzałkę na 100% mocy, jednak jej moc jest ograniczona, przez co uchyb będzie redukowany wolniej niż oczekuje tego regulator. W tym czasie wartość całki może osiągnąć olbrzymie wartości. Nawet kiedy osiągniemy zadaną temperaturę, wartość całki zacznie maleć dopiero wtedy kiedy temperatura będzie większa od zadanej. Może pojawić się ogromne przesterowanie  i wydłuży się czas stabilizacji. Jest wiele metod przeciwdziałania temu zjawisku, najprostszym sposobem jest ograniczenie wartości całki do skończonych wartości.

Przykład implementacji regulatora PID

double integral = 0;
double err_old  = 0;
double PID(double Kp,double Ki,double Kd,double err){
integral=integral+err;
if (integral>100000) integral = 100000;
if (integral<-100000) integral = -100000;
diff=err-err_old;
double response = Kp*err+ Ki*integral+Kd*diff;
if (response>100) response = 100;
if (response<-100) response = -100;
err_old = err;
return response;
}		

Na początku kodu tworzymy sobie zmienną „integral” w której będziemy przechowywać wartość całki oraz zmienną „err_old” w której będziemy przechowywać wartość uchybu z poprzedniej iteracji. Tworzymy funkcję „PID” którą będziemy mogli wywołać w dowolnym miejscu naszego programu wprowadzając odpowiednie parametry regulatora i wartość uchybu. Na początku obliczamy nową wartość całki i obcinamy jej wartość jeśli jest zbyt duża lub zbyt mała, w ten sposób realizujemy „anti windup”. Następnie obliczamy wartość różniczki. Teraz obliczamy odpowiedź regulatora PID i ją również ograniczamy, gdyż przeważnie nasz układ sterujący ma również ograniczoną moc. W tym przypadku zakres wartości regulatora PID wynosi -100 : 100 i oznacza moc układu sterującego w procentach. Na końcu aktualizujemy zmienną „err_old”.

Adrian Wójcik

Adrian Wójcik

Inżynier badań i rozwoju Zajmuje się tworzeniem nowych technologii, lubię dzielić się swoją widzą z innymi, jestem opiekunem praktykantów w firmie w której pracuję. Specjalizuję się w zagadnieniach związanych z robotyką oraz teorią sterowania.
Szukasz dobrych materiałów o projektowaniu elektroniki?

Załóż darmowe konto na naszej platformie i odbierz pakiet materiałów edukacyjnych.

Zakładając konto zgadzasz się na przesyłanie Ci treści marketingowych przez IT20 sp. z o.o. zgodnie z dostępną na stronie Polityką Prywatności. Możesz wycofać zgodę w każdej chwili.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Szukasz dobrych materiałów o projektowaniu elektroniki?

Załóż darmowe konto na naszej platformie i odbierz pakiet materiałów edukacyjnych.

Zakładając konto zgadzasz się na przesyłanie Ci treści marketingowych przez IT20 sp. z o.o. zgodnie z dostępną na stronie Polityką Prywatności. Możesz wycofać zgodę w każdej chwili.

Zaprojektuj PCB

Jak przejść od zera do projektowania profesjonalnych obwodów drukowanych?

Programowanie w języku C

Jak przejść od napisania pierwszego programu komputerowego do wykorzystania zaawansowanych metod programowania?

Projektowanie układów elektronicznych

Jak działają i jak projektować poprawnie działające układy elektroniczne?
Zapisz się na listę mailową i odbierz swoje bonusy!

Więcej treści na temat elektroniki i robotyki, darmowe e-booki i dostęp do minikursów on-line. Otrzymasz to wszystko zapisując się na naszą listę mailową.