Wprowadzenie
Po pierwsze, musimy zastanowić się, co to dokładnie nazywa się odpowiedzią impulsową systemu i co to oznacza. Jest to abstrakcyjna koncepcja, której wizualizacja wymaga nieco myślenia. Nie zamierzam wdawać się w rygorystyczną matematykę. Chodzi mi o to, aby spróbować dać intuicję, co to za rzecz, co prowadzi do tego, jak można z niej skorzystać.
Przykład problemu kontrolnego
Wyobraź sobie, że miałeś duży rezystor mocy z zamontowanym czujnikiem temperatury. Wszystko zaczyna się w temperaturze otoczenia. Po włączeniu zasilania wiesz, że temperatura na czujniku ostatecznie wzrośnie i ustabilizuje się, ale dokładne równanie byłoby bardzo trudne do przewidzenia. Powiedzmy, że system ma stałą czasową około 1 minuty, chociaż „stała czasowa” nie ma pełnego zastosowania, ponieważ temperatura nie rośnie w ładnym wykładniczym przypadku, jak w systemie z jednym biegunem, a zatem z jedną stałą czasową . Powiedzmy, że chcesz dokładnie kontrolować temperaturę i sprawić, by zmieniła się na nowy poziom i pozostała tam znacznie szybciej niż to, co zrobiłbyś, gdybyś po prostu włączył się na odpowiednim poziomie mocy i czekał.
Zasadniczo masz problem z systemem sterowania. Odpowiedź w otwartej pętli jest dość powtarzalna i istnieje równanie, które modeluje ją wystarczająco dobrze, ale problem polega na tym, że istnieje zbyt wiele niewiedzy, aby można było wyprowadzić to równanie.
Kontrola PID
Jednym z klasycznych sposobów rozwiązania tego problemu jest regulator PID. W plejstocenie, kiedy trzeba było to zrobić w analogowej elektronice, ludzie byli sprytni i wymyślili schemat, który działał dobrze z dostępnymi możliwościami analogowymi. Schemat ten nazwano „PID” dla proporcjonalnego , całkowego i pochodnego .
Termin P.
Zaczynasz mierzyć błąd. Jest to tylko zmierzona reakcja systemu (temperatura w naszym przypadku zgłaszana przez czujnik) minus wejście sterujące (żądane ustawienie temperatury). Zwykle można je ustawić jako sygnały napięciowe, więc znalezienie błędu było tylko różnicą analogową, co jest dość łatwe. Możesz pomyśleć, że to łatwe. Wszystko, co musisz zrobić, to poprowadzić rezystor z większą mocą, tym wyższy jest błąd. To automatycznie spróbuje uczynić go cieplejszym, gdy jest zbyt zimnym i zimniejszym, gdy jest zbyt gorącym. To działa. Należy pamiętać, że ten schemat wymaga błędu, aby spowodować niezerowe wyjście sterujące (moc napędzająca rezystor). W rzeczywistości oznacza to, że im wyższa wymagana moc, tym większy jest błąd, ponieważ jest to jedyny sposób na uzyskanie dużej mocy. Teraz możesz powiedzieć, że wszystko, co musisz zrobić, to podkręcić wzmocnienie, aby błąd był akceptowalny nawet przy dużej mocy. W końcu to właściwie podstawa do tego, jak opampy są używane w wielu obwodach. Masz rację, ale prawdziwy świat zazwyczaj nie pozwala ci tego uniknąć. Może to działać w przypadku niektórych prostych systemów sterowania, ale gdy reakcje są różnego rodzaju subtelne zmarszczki i kiedy może to zająć dużo czasu, kończy się coś, co oscyluje, gdy wzmocnienie jest zbyt wysokie. Innymi słowy, system staje się niestabilny. ale kiedy reakcje są różnego rodzaju subtelne zmarszczki i kiedy może to zająć dużo czasu, kończy się coś, co oscyluje, gdy wzmocnienie jest zbyt wysokie. Innymi słowy, system staje się niestabilny. ale kiedy reakcje są różnego rodzaju subtelne zmarszczki i kiedy może to zająć dużo czasu, kończy się coś, co oscyluje, gdy wzmocnienie jest zbyt wysokie. Innymi słowy, system staje się niestabilny.
To, co opisałem powyżej, to P (proprotional) część PID. Tak, jak możesz, aby wyjście było proporcjonalne do sygnału błędu, możesz także dodawać terminy proporcjonalne do pochodnej czasowej i całki błędu. Każdy z tych sygnałów P, I i D ma swój odrębny zysk przed zsumowaniem w celu wytworzenia wyjściowego sygnału sterującego.
Ja termin
Termin I pozwala na wyzerowanie błędu w czasie. Dopóki wystąpi jakikolwiek błąd dodatni, warunek I będzie się kumulował, ostatecznie podnosząc wynik sterowania do punktu, w którym ogólny błąd zniknie. W naszym przykładzie, jeśli temperatura będzie stale niska, będzie stale zwiększać moc rezystora, aż temperatura wyjściowa nie będzie już niska. Mamy nadzieję, że zauważysz, że może to stać się niestabilne nawet szybciej niż tylko wysoki termin P. Samo pojęcie AI może łatwo powodować przeregulowania, które łatwo stają się oscylacjami.
Termin D.
Termin D jest czasem pomijany. Podstawowym zastosowaniem terminu D jest dodanie pewnej stabilności, aby warunki P i I mogły być bardziej agresywne. Termin D w zasadzie mówi, że jeśli już zmierzam we właściwym kierunku, zwolnij trochę gazu, ponieważ wydaje mi się, że teraz to tam doprowadzam .
Tuning PID
Podstawy sterowania PID są dość proste, ale poprawne określenie P, I i D nie jest właściwe. Zwykle odbywa się to z dużą ilością eksperymentów i poprawek. Ostatecznym celem jest uzyskanie ogólnego systemu, w którym sygnał wyjściowy reaguje tak szybko, jak to możliwe, ale bez nadmiernego przeregulowania lub dzwonienia, i oczywiście musi być stabilny (nie zacząć samodzielnie oscylować). Napisano wiele książek na temat sterowania PID, jak dodawać małe zmarszczki do równań, a szczególnie jak je „dostroić”. Strojenie odnosi się do wyznaczenia optymalnych wzmocnień P, I i D.
Systemy sterowania PID działają, a na pewno jest wiele wiedzy i sztuczek, aby działały dobrze. Jednak sterowanie PID nie jest jedyną właściwą odpowiedzią dla systemu sterowania. Wydaje się, że ludzie zapomnieli, dlaczego PID został wybrany przede wszystkim, co miało więcej wspólnego z ograniczeniami elektroniki analogowej niż jako rodzaj uniwersalnego optymalnego schematu sterowania. Niestety, zbyt wielu inżynierów dzisiaj utożsamia „system sterowania” z PID, który jest niczym innym jak małomyślną reakcją szarpnięcia kolanem. To nie sprawia, że kontrola PID jest zła w dzisiejszym świecie, ale tylko jeden z wielu sposobów ataku na problem kontroli.
Poza PID
Dzisiaj system sterowania w pętli zamkniętej dla czegoś takiego jak przykład temperatury zostałby wykonany w mikrokontrolerze. Mogą to zrobić znacznie więcej niż tylko wziąć pochodną i całkę wartości błędu. W procesorze możesz wykonywać podziały, pierwiastki kwadratowe, przechowywać historię ostatnich wartości i wiele więcej. Możliwych jest wiele schematów sterowania innych niż PID.
Odpowiedź impulsowa
Zapomnij więc o ograniczeniach elektroniki analogowej i cofnij się i zastanów się, jak możemy kontrolować system powracający do pierwszych zasad. Co by było, gdybyśmy dla każdego najmniejszego wyjścia sterującego wiedzieli, co zrobi system. Ciągły sygnał wyjściowy kontroli jest więc sumą wielu małych kawałków. Ponieważ wiemy, jaki jest wynik każdego elementu, możemy wiedzieć, jaki jest wynik dowolnej wcześniejszej historii wyjść sterujących. Zauważ teraz, że „mały kawałek” wyjścia sterującego ładnie pasuje do sterowania cyfrowego. Zamierzasz obliczyć, jakie powinno być wyjście sterujące i ustawić go na tym, a następnie wrócić i ponownie zmierzyć dane wejściowe, obliczyć nowe dane wyjściowe sterowania i ustawić je ponownie, itd. Algorytm sterowania jest uruchamiany w pętli, i mierzy dane wejściowe i ustawia na nowo wyjście sterujące dla każdej iteracji pętli. Wejścia są „próbkowane” w dyskretnych momentach, a dane wyjściowe są również ustawiane na nowe wartości w ustalonych odstępach czasu. Tak długo, jak możesz to zrobić wystarczająco szybko, możesz myśleć o tym, że dzieje się to w sposób ciągły. W przypadku nagrzewania rezystora, który zwykle trwa kilka minut, z pewnością kilka razy na sekundę jest o wiele szybszy, niż system nieodłącznie reaguje w znaczący sposób, że aktualizacja wyjścia na powiedzmy 4 Hz będzie wyglądać na ciągłą w systemie. Jest to dokładnie to samo, co cyfrowo nagrana muzyka, która zmienia wartość wyjściową w dyskretnych krokach w zakresie 40-50 kHz i jest tak szybka, że nasze uszy jej nie słyszą i brzmi nieprzerwanie jak oryginał. możesz myśleć o tym, że dzieje się to w sposób ciągły. W przypadku nagrzewania rezystora, który zwykle trwa kilka minut, z pewnością kilka razy na sekundę jest o wiele szybszy, niż system nieodłącznie reaguje w znaczący sposób, że aktualizacja wyjścia na powiedzmy 4 Hz będzie wyglądać na ciągłą w systemie. Jest to dokładnie to samo, co cyfrowo nagrana muzyka, która zmienia wartość wyjściową w dyskretnych krokach w zakresie 40-50 kHz i jest tak szybka, że nasze uszy jej nie słyszą i brzmi nieprzerwanie jak oryginał. możesz myśleć o tym, że dzieje się to w sposób ciągły. W przypadku nagrzewania rezystora, który zwykle trwa kilka minut, z pewnością kilka razy na sekundę jest o wiele szybszy, niż system nieodłącznie reaguje w znaczący sposób, że aktualizacja wyjścia na powiedzmy 4 Hz będzie wyglądać na ciągłą w systemie. Jest to dokładnie to samo, co cyfrowo nagrana muzyka, która zmienia wartość wyjściową w dyskretnych krokach w zakresie 40-50 kHz i jest tak szybka, że nasze uszy jej nie słyszą i brzmi nieprzerwanie jak oryginał. z pewnością kilka razy na sekundę jest o wiele szybsze niż system nieodłącznie reaguje w znaczący sposób, że aktualizacja wyjścia przy powiedzmy 4 Hz będzie wyglądać na ciągłą w systemie. Jest to dokładnie to samo, co cyfrowo nagrana muzyka, która zmienia wartość wyjściową w dyskretnych krokach w zakresie 40-50 kHz i jest tak szybka, że nasze uszy jej nie słyszą i brzmi nieprzerwanie jak oryginał. z pewnością kilka razy na sekundę jest o wiele szybsze niż system nieodłącznie reaguje w znaczący sposób, że aktualizacja wyjścia przy powiedzmy 4 Hz będzie wyglądać na ciągłą w systemie. Jest to dokładnie to samo, co cyfrowo nagrana muzyka, która zmienia wartość wyjściową w dyskretnych krokach w zakresie 40-50 kHz i jest tak szybka, że nasze uszy jej nie słyszą i brzmi nieprzerwanie jak oryginał.
Co więc moglibyśmy zrobić, gdybyśmy mieli ten magiczny sposób wiedzieć, co system będzie robił w czasie z powodu jednej próbki wyjściowej kontroli? Ponieważ rzeczywista odpowiedź kontrolna jest tylko sekwencją próbek, możemy dodać odpowiedź ze wszystkich próbek i wiedzieć, jaka będzie wynikowa odpowiedź systemu. Innymi słowy, możemy przewidzieć odpowiedź systemu na dowolny przebieg odpowiedzi o dowolnej kontroli.
To fajne, ale samo przewidywanie reakcji systemu nie rozwiązuje problemu. Jednak i tutaj jest chwila aha, możesz to odwrócić i znaleźć wyjście sterujące, które zajęłoby uzyskanie pożądanej odpowiedzi systemu. Zauważ, że to dokładnie rozwiązuje problem sterowania, ale tylko wtedy, gdy możemy w jakiś sposób poznać reakcję systemu na pojedynczą próbkę wyjściową dowolnego sterowania.
Prawdopodobnie myślisz, że to proste, po prostu daj mu duży puls i zobacz, co robi. Tak, działałoby to teoretycznie, ale w praktyce zwykle nie. Wynika to z faktu, że każda próbka kontrolna, nawet duża, jest tak mała w ogólnym schemacie rzeczy, że system prawie nie ma mierzalnej odpowiedzi. I pamiętajcie, każda próbka kontrolna musi być mała w schemacie rzeczy, aby sekwencja próbek kontrolnych była ciągła w systemie. Nie chodzi więc o to, że ten pomysł nie zadziała, ale że w praktyce reakcja systemu jest tak mała, że jest zakopana w szumie pomiarowym. W przykładzie rezystora uderzenie w rezystor o mocy 100 W przez 100 ms nie spowoduje wystarczającej zmiany temperatury do zmierzenia.
Odpowiedź krokowa
Ale wciąż istnieje sposób. Chociaż umieszczenie pojedynczej próbki kontrolnej w systemie dałoby nam odpowiedź bezpośrednio na poszczególne próbki, nadal możemy wnioskować o niej, umieszczając znaną i kontrolowaną sekwencję odpowiedzi kontrolnych w systemie i mierząc jej odpowiedź na te. Zwykle odbywa się to poprzez wprowadzenie kroku kontrolnegow. Tak naprawdę chcemy reakcji na mały moment, ale odpowiedź na pojedynczy krok jest tylko jej integralną częścią. W przykładzie rezystora możemy upewnić się, że wszystko jest stabilne przy 0 W, a następnie nagle włączyć zasilanie i włożyć 10 W do rezystora. To ostatecznie spowoduje przyjemnie mierzalną zmianę temperatury na wyjściu. Pochodna tego z odpowiednim skalowaniem mówi nam odpowiedź na indywidualną próbkę kontrolną, nawet jeśli nie mogliśmy tego bezpośrednio zmierzyć.
Podsumowując, możemy umieścić dane wejściowe sterowania krokowego w nieznanym systemie i zmierzyć wynikowy wynik. To się nazywa odpowiedź krokowa . Następnie bierzemy pochodną czasową tego, co nazywa się odpowiedzią impulsową . Wyjście systemu wynikające z dowolnej próbki wejściowej kontroli jest po prostu odpowiedzią impulsową odpowiednio skalowaną do siły tej próbki kontrolnej. Odpowiedź systemu na całą historię próbek kontrolnych stanowi całą masę odpowiedzi impulsowych zsumowanych, skalowanych i pochylonych w czasie dla każdego wejścia kontrolnego. Ta ostatnia operacja pojawia się bardzo często i ma specjalną nazwę konwolucji .
Kontrola konwolucji
Więc teraz powinieneś być w stanie wyobrazić sobie, że dla dowolnego pożądanego zestawu wyjść systemowych możesz wymyślić sekwencję wejść sterujących, które spowodują to wyjście. Jest jednak gotcha. Jeśli staniesz się zbyt agresywny w stosunku do tego, co chcesz z systemu, wejścia sterujące, aby to osiągnąć, będą wymagały nieosiągnięcia wysokich i niskich wartości. Zasadniczo, im szybciej oczekuje się reakcji systemu, tym większe muszą być wartości kontrolne w obu kierunkach. W przykładzie rezystora możesz matematycznie powiedzieć, że chcesz natychmiast przejść do nowej temperatury, ale osiągnięcie tego wymagałoby nieskończonego sygnału sterującego. Im wolniej pozwolisz na zmianę temperatury na nową wartość, tym niższa maksymalna moc potrzebna do zrzucenia do rezystora. Kolejną zmarszczką jest to, że czasami moc w rezystorze również musi spaść. Możesz'
Jednym ze sposobów rozwiązania tego problemu jest filtrowanie dolnoprzepustowego sygnału wejściowego sterowania przez użytkownika przed użyciem go wewnętrznie. Wyobraź sobie, że użytkownicy robią to, co chcą. Pozwól im szybko zatrzasnąć dane wejściowe. Wewnętrznie filtr dolnoprzepustowy, aby go wygładzić i spowolnić do najszybszego, jaki znasz, biorąc pod uwagę maksymalną i minimalną moc, jaką możesz włożyć do rezystora.
Przykład z prawdziwego świata
Oto częściowy przykład z wykorzystaniem danych ze świata rzeczywistego. To z wbudowanego systemu w prawdziwy produkt, który między innymi musi kontrolować kilkadziesiąt grzejników, aby utrzymać różne zbiorniki chemiczne w określonych temperaturach. W tym przypadku klient zdecydował się na sterowanie PID (z tym czuł się komfortowo), ale sam system nadal istnieje i można go zmierzyć. Oto surowe dane z napędzania jednego z grzejników z wejściem krokowym. Czas iteracji pętli wynosił 500 ms, co jest wyraźnie bardzo krótkim czasem, biorąc pod uwagę, że system nadal wyraźnie osiada na tym wykresie skali po 2 godzinach.
W tym przypadku widać, że grzejnik był napędzany krokiem o wielkości około 0,35 (wartość „Out”). Dłuższe wprowadzenie pełnego kroku 1.0 spowodowałoby zbyt wysoką temperaturę. Początkowe przesunięcie można usunąć, a wynik przeskalować, aby uwzględnić mały krok wejściowy, aby wywnioskować odpowiedź kroku jednostkowego:
Można by pomyśleć, że odejmowanie kolejnych odpowiedzi krokowych w celu uzyskania odpowiedzi impulsowej byłoby odejmowanie. Teoretycznie jest to poprawne, ale w praktyce uzyskuje się głównie szum pomiaru i kwantyzacji, ponieważ system zmienia się tak mało w 500 ms:
Zwróć także uwagę na małą skalę wartości. Odpowiedź impulsowa jest skalowana przez 10 6 .
Wyraźnie duże różnice między poszczególnymi lub nawet kilkoma odczytami są po prostu szumem, więc możemy filtrować dolnoprzepustowy, aby pozbyć się wysokich częstotliwości (szumu losowego), co, mam nadzieję, pozwala nam zobaczyć wolniejszą odpowiedź leżącą u podstaw. Oto jedna próba:
To lepiej i pokazuje, że naprawdę trzeba mieć znaczące dane, ale wciąż za dużo hałasu. Oto bardziej użyteczny wynik uzyskany dzięki bardziej filtrowaniu dolnoprzepustowemu surowych danych impulsowych:
Teraz jest to coś, z czym właściwie możemy pracować. Pozostały szum jest niewielki w porównaniu do ogólnego sygnału, więc nie powinien przeszkadzać. Wydaje się, że sygnał nadal jest tam prawie nienaruszony. Jednym ze sposobów na to jest zauważenie, że szczyt 240 jest tuż po szybkiej kontroli wizualnej i filtrowaniu gałki ocznej z poprzedniego wykresu.
Zatrzymaj się więc i zastanów się, co tak naprawdę oznacza ta odpowiedź impulsowa. Po pierwsze, zwróć uwagę, że jest wyświetlany razy 1M, więc szczyt to tak naprawdę 0,000240 pełnej skali. Oznacza to, że teoretycznie, gdyby układ był napędzany pojedynczym impulsem pełnej skali tylko dla jednego z przedziałów czasowych 500 ms, byłaby to wynikowa temperatura względem niego pozostawiona sama. Wkład z dowolnego okresu 500 ms jest bardzo mały, co ma intuicyjny sens. Dlatego też pomiar odpowiedzi impulsowej bezpośrednio nie działa, ponieważ 0,000240 pełnej skali (około 1 część na 4000) jest poniżej naszego poziomu hałasu.
Teraz możesz łatwo obliczyć odpowiedź systemu dla dowolnego wejściowego sygnału sterującego. Do każdej próbki wyjściowej kontrolnej 500 ms dodaj jedną z tych odpowiedzi impulsowych skalowanych według wielkości tej próbki kontrolnej. Czas 0 udziału odpowiedzi impulsowej w końcowym sygnale wyjściowym systemu jest w momencie jego próbki kontrolnej. Dlatego systemowy sygnał wyjściowy stanowi ciąg tych odpowiedzi impulsowych przesuniętych względem siebie o 500 ms, z których każda jest skalowana do poziomu próbki kontrolnej w tym czasie.
Odpowiedź systemu to splot wejścia sterującego z tą odpowiedzią impulsową, obliczoną dla każdej próbki kontrolnej, co w tym przykładzie wynosi co 500 ms. Aby stworzyć z tego system sterowania, należy wykonać operację wstecz, aby określić wejście sterowania, które skutkuje pożądanym wyjściem systemu.
Ta odpowiedź impulsowa jest nadal bardzo przydatna, nawet jeśli chcesz zrobić klasyczny kontroler PID. Strojenie regulatora PID wymaga wielu eksperymentów. Każda iteracja zajęłaby godzinę lub dwie w prawdziwym systemie, co spowodowałoby bardzo powolne strojenie iteracyjne. Za pomocą odpowiedzi impulsowej możesz symulować reakcję systemu na komputerze w ułamku sekundy. Możesz teraz wypróbować nowe wartości PID tak szybko, jak możesz je zmienić i nie musisz czekać godzinę lub dwie, aż prawdziwy system pokaże ci odpowiedź. Ostateczne wartości należy oczywiście zawsze sprawdzać w rzeczywistym systemie, ale większość pracy można wykonać za pomocą symulacji w ułamku czasu. Właśnie to miałem na myśli: „Możesz użyć tego jako podstawy symulacji do znalezienia parametrów dla starej kontroli PID” w fragmencie, który zacytowałeś w swoim pytaniu.