Widziałem wiele artykułów PID, takich jak ten , wykorzystujących transformację Z ogólnego równania PID, aby uzyskać jakieś szalone równanie różnicy, które można następnie zaimplementować w oprogramowaniu (lub w tym przypadku FPGA). Moje pytanie brzmi: jaka jest zaleta takiej implementacji w porównaniu z tradycyjnym i znacznie bardziej intuicyjnym PID bez doktorawdrożenie typu? Drugi wydaje się łatwiejszy do zrozumienia i wdrożenia. Składnik P jest prostym pomnożeniem, całka używa bieżącej sumy, a pochodna jest szacowana poprzez odjęcie poprzedniej próbki od bieżącej próbki. Jeśli chcesz dodać funkcję, taką jak integralna ochrona przed windą, jest to prosta algebra. Próba dodania zintegrowanego zabezpieczenia przed windą lub innych funkcji do algorytmu typu różnicowego, takiego jak powyższy link, wydaje się znacznie bardziej skomplikowana. Czy istnieje jakikolwiek powód, aby użyć takiej implementacji, oprócz „Jestem złym dupkiem, który lubi robić transformacje Z dla zabawy”, chwaląc się tym prawem?
EDYCJA: PID bez powiązanego artykułu PHD jest przykładem prostszej implementacji, która wykorzystuje sumę bieżącą dla terminu integralnego i różnicę między kolejnymi próbkami dla terminu pochodnego. Może być zaimplementowany w matematyce stałoprzecinkowej w sposób deterministyczny i, w razie potrzeby, może uwzględniać w obliczeniach stałą informację w czasie rzeczywistym. Zasadniczo szukam praktycznej przewagi metody transformacji Z. Nie widzę, jak mogłoby być szybciej, ani zużywać mniej zasobów. Zamiast utrzymywać bieżącą sumę całki, metoda Z wydaje się wykorzystywać poprzednie dane wyjściowe i odejmować poprzednie składowe P i D (aby uzyskać sumę całkowitą na podstawie obliczeń). Tak więc, chyba że ktoś wskaże coś, czego mi brakuje, zaakceptuję komentarz AngryEE, że są one zasadniczo takie same.
EDYCJA KOŃCOWA: Dziękuję za odpowiedzi. Myślę, że nauczyłem się trochę o każdym z nich, ale ostatecznie myślę, że Angry ma rację, ponieważ jest to tylko kwestia preferencji. Dwie formy:
e(k-2)=e(k-1),
lub
u ( k ) = K p e ( k ) + K i T i ⋅ suma + K d
oceni zasadniczo to samo. Niektórzy wspominają, że pierwszą można szybciej zaimplementować w DSP lub FPGA, ale tego nie kupuję. Oba mogą być wektoryzowane. Pierwsza wymaga dwóch operacji po, druga wymaga jednej operacji przed i jednej po, więc wydaje się, że się wyrówna. Pierwszy wymaga także 1 dodatkowego pomnożenia w rzeczywistym obliczeniu.
Odpowiedzi:
Zaczyna Cię ogarniać szalenie transformacji Z. Te dwa podejścia są zasadniczo takie same - podejście PID bez PHD ma po prostu mniej indeksów dolnych. Wykonują tę samą podstawową funkcję i używają tej samej podstawowej matematyki.
Jedyną zasadniczą różnicą między nimi, którą widzę, jest to, że PID bez PHD nie bierze pod uwagę czasu próbkowania. Aby zrobić coś, co może być niestabilne, bardzo ważny jest czas próbkowania. Zaletą podejścia Z-transform w tym przypadku jest to, że nie można go użyć bez uwzględnienia czasu próbkowania - zmusza cię do pokazania swojej pracy i pomaga zaprojektować bardziej stabilny system.
Wygląda również na to, że studium przypadku, w którym znalazłeś zastosowanie metody transformacji Z, zostało zaprojektowane jako wysoce deterministyczne. Wyjaśnia to ich stosowanie układów FPGA - obliczenia zawsze zajmą tyle samo czasu. PID bez wdrożenia PHD zdecydowanie nie jest deterministyczny. Zastosowanie podwójnych jako zmiennych zamiast implementacji stałoprzecinkowej z pewnością spowoduje niedeterministyczne zachowanie na dowolnym mikrokontrolerze bez jednostki zmiennoprzecinkowej (i prawdopodobnie również na komputerach z FPU). Studium przypadku działa na zupełnie innym poziomie złożoności w porównaniu z podejściem PID bez PHD.
Zasadniczo podejście matematyczne i kontrolne jest takie samo, ale podejście do analizy przypadku / transformacji Z jest bardziej rygorystyczne i teoretycznie uzasadnione. Podejście PID bez PHD działa tylko w przypadku bardzo prostego, niekrytycznego czasowo systemu, który jest stosunkowo stabilny.
źródło
Metoda transformacji Z projektowania regulatora PID ostatecznie zapewni znacznie bardziej wydajną implementację. Jest to bardzo ważne, jeśli projektujesz najmniejszy FPGA / DSP / mikrokontroler dla twojej aplikacji.
Wspomniany „PID bez PHD” jest prawdopodobnie najłatwiejszym podejściem do implementacji kontroli PID w oprogramowaniu, ale staje się nieporęczny przy wyższych częstotliwościach próbkowania.
Ponadto transformacja Z lepiej nadaje się do projektowania w domenie dyskretnej (cyfrowej). Tradycyjna metoda projektowania (transformata Laplace'a) jest bardziej ciągła. Istnieje wiele sposobów konwersji między nimi (wstrzymanie zerowego rzędu, interpolacja liniowa, rozmieszczenie biegunów, dwuliniowe / Tustin), każda z nich ma swoje zalety i wady w zakresie stabilności i reakcji systemu. Na ogół po prostu łatwiej jest wykonać cały projekt w domenie dyskretnej.
Krótko mówiąc, jeśli używasz stosunkowo „wolnego” systemu (wszystkie główne zachowania zachodzą znacznie poniżej 100 kHz), to prawdopodobnie pierwszy projekt jest w porządku. Możesz go zaimplementować na mikrokontrolerze lub komputerze i gotowe. Ponieważ systemy stają się coraz szybsze, być może będziesz musiał użyć metody transformacji Z, aby uzyskać potrzebne prędkości (w artykule wspomniano 9,5 MHz, zakładając, że masz przetworniki A / D i przetworniki cyfrowo-analogowe, które mogą nadążyć).
źródło
Oto oferta, z mojego doświadczenia:
sum
”) osobno we własnej zmiennej stanu. Ta zmienna stanu ma znaczenie. Pierwsza implementacja zachowuje zmienną stanu jako przeszłą historię błędu; ma to znaczenie, ale moim zdaniem zapewnia mniej wglądu.Wreszcie istnieją inne problemy związane z nieliniowością lub analizą, które często powodują, że wybierasz jedną implementację nad drugą (dla mnie zawsze jest to klasyczne podejście do kontrolerów, dla filtrów FIR jest to transformacja Z, a dla filtrów 1- lub 2-biegunowych IIR jest to zwykle klasyczne podejście):
W przypadku kontrolerów zawsze trzymam integrator jako zmienną stanu, a nie wcześniejsze próbki błędów. Powodem jest to, że prawdziwe systemy często wymagają zabezpieczenia przed zwijaniem, w którym musisz zablokować całkę przed zbytnim lub dodatnim. (A jeśli implementujesz w ustalonym punkcie, musisz to zrobić i tak, ponieważ warunek zawinięcia po uderzeniu w przepełnienie spowoduje złe rzeczy do zachowania twojej pętli sterowania)
Z tego samego powodu zawsze również obliczam integrator w sposób wynikowy: np.
sum += Ki*error; out = stuff + sum
Zamiastsum += error; out = stuff + Ki*sum
. Przy drugim podejściu, jeśli zmienisz wzmocnienie Ki, to skaluje efekt integratora na wyjściu w górę i w dół, co prawdopodobnie nie jest tym, czego chcesz, a limit zmienia się w zależności od wzmocnienia. Jeśli pomnożymy błąd przez Ki przed całkowaniem, jednostki integratora są takie same jak jednostki wyjścia pętli sterowania i ma to bardziej oczywiste znaczenie fizyczne.(aktualizacja: Bardziej szczegółowo napisałem wpis na blogu na ten temat ).
źródło
Edytuj :
Zastosowanie transformacji Z ułatwia łączenie i upraszczanie systemów LTI do analizy . Na przykład kaskadowa seria k systemów LTI z funkcjami przesyłania H1, H2, ..., Hk połączy się jako prosty produkt
H = H1*H2*...*Hk
. Również funkcją przenoszenia pętli ujemnego sprzężenia zwrotnego jestT = G/(1 + G*H)
, gdzie H znajduje się na ścieżce sprzężenia zwrotnego. Gdy masz już ogólną funkcję przesyłania, możesz analizować stabilność (położenie biegunów) i wydajność (stany nieustalone, błąd stanu ustalonego), dodając dodatkowe filtry i informacje zwrotne w celu optymalizacji projektu.W przypadku podsystemów wyższego rzędu można podzielić funkcję systemową i zaimplementować ją jako serię kaskadowych biquadów (tj. Przez pary zer i biegunów, takich jak złożone koniugaty lub powtarzające się pierwiastki), co zmniejsza niestabilność spowodowaną kwantyzacją. Biquad formy kanonicznej:
źródło
Najtrudniejszą częścią regulatora PID nie jest sam kod. Problemy pojawiają się podczas próby optymalizacji kontrolera. Pewnie, że możesz wykonać próbę i błąd i uzyskać całkiem przyzwoity kontroler, ale niektóre systemy są po prostu zbyt złożone, aby metoda prób i błędów była łatwa do wykonania. Te same systemy zwykle wymagają bardzo dobrego kontrolera, a nie tylko porządnego. W tym przypadku transformacja Z jest znacznie łatwiejsza do analizy.
Kolejną rzeczą do przemyślenia jest stabilność systemu. Być może masz do czynienia z systemem, który raczej trudno jest stać niestabilny, a nawet jeśli tak, to nic nie boli. Istnieje jednak wiele systemów, które mogą mieć katastrofalne skutki, jeśli kontroler spowoduje niestabilność. Transformacja Z to kolejne miejsce, w którym znacznie łatwiej jest ustalić, czy pojawią się jakieś problemy.
I 1 ostatnia uwaga. Analizując system jako całość, będziesz musiał uzyskać równania dla wszystkich składników w systemie. Pewnie, że możesz go zdobyć z doktora PID bez doktora, ale jeśli już pracujesz z nim w metodzie transformacji Z, jest znacznie mniej pracy do przodu i do tyłu, którą musisz wykonać.
Teraz, jako osobiste preferencje, zawsze używam metody PID bez doktoratu. Jest tak dlatego, że używam tylko mikrokontrolerów z systemami, które nie są strasznie zależne od kontrolera.
źródło
Istnieje kilka powodów, dla których forma transformacji Z ma większą użyteczność.
Zapytaj każdego, kto promuje podejście oparte na czasie / prosty / sans-PHD, na co ustawił swój termin Kd. Prawdopodobnie odpowiedzą „zero” i prawdopodobnie powiedzą, że D jest niestabilny (bez filtra dolnoprzepustowego). Zanim dowiedziałem się, jak to wszystko się łączy, chciałbym i powiedziałem takie rzeczy.
Strojenie Kd jest trudne w dziedzinie czasu. Gdy widzisz funkcję przenoszenia (transformata Z podsystemu PID), możesz łatwo zobaczyć, jak jest stabilna. Łatwo też zobaczyć, jak warunek D wpływa na sterownik w stosunku do innych parametrów. Jeśli twój parametr Kd przyczynia się 0,00001 do współczynników wielomianu Z, ale twój współczynnik Ki przyjmuje wartość 10,5, to twój współczynnik D jest zbyt mały, aby mieć rzeczywisty wpływ na układ. Możesz także zobaczyć równowagę między warunkami Kp i Ki.
Procesory DSP są zaprojektowane do obliczania równań różnic skończonych (FDE). Mają kody operacyjne, które zwielokrotniają współczynnik, sumują się do akumulatora i przesuwają wartość w buforze w jednym cyklu instrukcji. Wykorzystuje to równoległy charakter FDE. Jeśli maszynie brakuje tego kodu operacyjnego ... to nie jest to DSP. Osadzone PowerPC (MPC) mają urządzenie peryferyjne dedykowane do obliczania FDE (nazywają to jednostką dziesiętną). Procesory DSP są zaprojektowane do obliczania FDE, ponieważ przekształcenie funkcji przenoszenia w FDE jest banalne. 16 bitów nie jest wystarczająco dynamicznym zakresem, aby łatwo kwantyfikować współczynniki. Z tego powodu wiele wczesnych DSP zawierało 24-bitowe słowa (uważam, że słowa 32-bitowe są dziś popularne).
IIRC, tak zwana transformacja dwuliniowa, przyjmuje funkcję przesyłania (transformata z kontrolera w dziedzinie czasu) i przekształca ją w FDE. Udowodnienie, że jest „trudne”, użycie go do uzyskania wyniku jest banalne - wystarczy rozwinięta forma (pomnóż wszystko), a współczynniki wielomianowe to współczynniki FDE.
Kontroler PI nie jest świetnym podejściem - lepszym rozwiązaniem jest zbudowanie modelu zachowania się systemu i użycie PID do korekcji błędów. Model powinien być prosty i oparty na podstawowej fizyce tego, co robisz. Jest to sprzężenie zwrotne do bloku sterującego. Blok PID następnie koryguje błąd, wykorzystując informacje zwrotne z kontrolowanego systemu.
Jeśli używasz znormalizowanych wartości, [-1 .. 1] lub [0 ... 1], dla wartości zadanej (referencyjnej), sprzężenia zwrotnego i sprzężenia zwrotnego, możesz zaimplementować jeden 2-biegunowy 2-zerowy algorytm w zoptymalizowany zestaw DSP i można go użyć do wdrożenia dowolnego filtra drugiego rzędu, który zawiera PID i najbardziej podstawowy filtr dolnoprzepustowy (lub górnoprzepustowy). Właśnie dlatego DSP mają kody operacyjne, które zakładają znormalizowane wartości, np. Takie, które będą generowały oszacowanie odwrotnego pierwiastka kwadratowego dla zakresu (0..1] Można połączyć szeregowo dwa filtry 2p2z i utworzyć filtr 4p4z, co pozwala możesz wykorzystać swój kod DSP 2p2z do, powiedzmy, implementacji 4-kranowego dolnoprzepustowego filtra Butterwortha.
Większość implementacji w dziedzinie czasu wprowadza termin dt do parametrów PID (Kp / Ki / Kd). Większość implementacji w domenie Z tego nie robi. dt jest wstawiany do równań, które pobierają Kp, Ki i Kd i przekształcają je w współczynniki [] i b [], dzięki czemu kalibracja (strojenie) regulatora PID jest teraz niezależna od częstotliwości kontrolnej. Możesz sprawić, by działał dziesięć razy szybciej, wykreślić matematykę a] ib, a kontroler PID będzie miał stałą wydajność.
Naturalnym rezultatem użycia FDE jest to, że algorytm jest domyślnie „bezproblemowy”. Możesz zmieniać zyski (Kp / Ki / Kd) w locie podczas pracy i jest to dobre zachowanie - w zależności od implementacji w dziedzinie czasu może to być złe.
Dużo wysiłku zwykle poświęca się kontrolerom PID w dziedzinie czasu, aby zapobiec integralnej likwidacji. Istnieje prosta sztuczka z formularzem FDE, która sprawia, że PID zachowuje się ładnie, możesz zablokować jego wartość w buforze historii. Nie zrobiłem matematyki, aby zobaczyć, jak wpływa to na zachowanie filtra (w odniesieniu do parametrów Kp / Ki / Kd), ale wynik empiryczny jest taki, że jest „gładki”. Wykorzystuje to „bezproblemową” naturę postaci FDE. Model sprzężenia zwrotnego przyczynia się do zapobiegania integralnej likwidacji, a użycie terminu D pomaga zrównoważyć termin I. PID naprawdę nie działa zgodnie z przeznaczeniem ze wzmocnieniem D. (Wartości zadane wahań to kolejna kluczowa funkcja zapobiegająca nadmiernemu zwijaniu).
Wreszcie transformaty Z są tematem licencjackim, a nie „doktorem”. Powinieneś dowiedzieć się wszystkiego o nich w analizie złożonej. Tutaj studiujesz na uniwersytecie, masz instruktora, a wysiłek włożony w naukę matematyki i korzystania z dostępnych narzędzi może znacząco wpłynąć na twoją zdolność do pracy w branży. (Moja klasa złożonych analiz była okropna.)
Narzędziem branżowym defacto jest Simulink (który nie ma systemu komputerowej algebry, CAS, więc potrzebujesz innego narzędzia do wykreślania ogólnych równań). MathCAD lub wxMaxima są symbolicznymi solverami, których można używać na PC, a ja nauczyłem się, jak to robić za pomocą kalkulatora TI-92. Myślę, że TI-89 ma również system CAS.
Możesz wyszukać równania w domenie Z lub Laplace-Domain na wikipedii dla filtrów PID i dolnoprzepustowych. Jest krok, którego nie rozumiem, uważam, że potrzebujesz formy PID z dyskretną domeną czasową, a następnie musisz wykonać transformację Z. Transformacja Laplace'a powinna być bardzo podobna do transformaty Z i jest podawana jako PID {s} = Kp + Ki / s + Kd · s Myślę, że transformacja Z lepiej uwzględniałaby Dt w następujących równaniach. Dt jest delta-t [ime], używam Dt, aby nie mylić tej stałej z pochodną „dt”.
A to FDE 2p2z:
Procesory DSP zazwyczaj miały tylko mnożenie i dodawanie (a nie mnożenie i odejmowanie), więc możesz zobaczyć, że negacja jest zwinięta w współczynniki a []. Dodaj więcej b, aby uzyskać więcej biegunów, dodaj więcej a, aby uzyskać więcej zer.
źródło
Lepiej jest ogólnie korzystać z metody transformacji Z, ponieważ robiąc to, zachowujesz dokładne zachowanie równoważnego układu analogowego. Istnieją dobrze znane metody dostrajania, takie jak Ziegler-Nichols, które działają w domenie analogowej, tak jak opublikowano. Jeśli użyjesz metody transformacji Z, masz matematyczne rygorystyczne oczekiwania, że wynikowy kontroler zrobi to samo dla tych samych wartości wzmocnienia P, I i D, że zrobi to w dziedzinie analogowej, biorąc pod uwagę te korzyści. Dodatkowo możesz narysować dyskretne umiejscowienie katalogu głównego systemu i przewidzieć stabilność dla danego zestawu korzyści, czego nie można zrobić, jeśli utworzysz kontroler ad hoc bezpośrednio w kodzie.
źródło