Sterowanie cyfrowe: próbkowanie, transformata Z i regulator w kodzie
Każdy regulator z tego kursu działa dziś w mikrokontrolerze, który co kilka milisekund czyta czujnik, liczy kilka linijek i wysyła nowe sterowanie. Ta lekcja pokazuje, co to zmienia w pętli. Próbkowanie działa jak opóźnienie o pół okresu. Za wolny czujnik może zobaczyć drgania, których nie ma. Pętla stabilna w ciągłym świecie może się rozkołysać w dyskretnym. Na koniec piszemy PID, który można wgrać do drona, w Pythonie i w C++.
Czas
ok. 2,5 h teorii + ok. 3 h zadań
Zadania
15 zadań w treści + 5 do przemyślenia, z odpowiedziami
Źródła
G. C. Goodwin i in., Control System Design, rozdz. 12–13; J. Kowal, Podstawy automatyki, rozdz. 11; K. J. Åström, B. Wittenmark, Computer-Controlled Systems, rozdz. 1–2 i 8
0 Prolog: samolot sterowany komputerem z Apollo
25 maja 1972 r. w ośrodku badań w locie NASA w Edwards (dziś Armstrong) wystartował zmodyfikowany myśliwiec F-8 Crusader. Nie miał żadnego mechanicznego połączenia drążka ze sterami. Ruchy pilota odczytywał komputer, liczył sterowanie i wysyłał je do siłowników. Tym komputerem był egzemplarz komputera nawigacyjnego statku Apollo. Program F-8 Digital Fly-By-Wire pokazał, że samolotem może sterować maszyna, która widzi świat w dyskretnych chwilach i działa w pętli „czytaj – licz – wyślij”.
Dziś to standard: od Airbusa po każdy dron za 200 zł. Konstruktorzy F-8 musieli jednak odpowiedzieć na pytania, które zadamy w tej lekcji. Jak często trzeba liczyć? Co się dzieje między chwilami próbkowania? Czy wzór na PID z kartki można po prostu przepisać do programu?
Pytanie na start. Regulator P prędkości drona jest stabilny przy każdym Kp (lekcja 1.3). Czy jego cyfrowa wersja, liczona co 0,1 s, też? Odpowiedź w części 3.
1 Próbkowanie i ekstrapolator zerowego rzędu
Regulator cyfrowy co T sekund (okres próbkowania, fs=1/T) czyta pomiar yk=y(kT), liczy uk i wysyła je do przetwornika, który trzyma tę wartość stałą aż do następnego taktu. To trzymanie nazywa się ekstrapolatorem zerowego rzędu (ang. zero-order hold, ZOH). Sterowanie ma postać schodków.
Schodki są średnio spóźnione o pół okresu względem gładkiej krzywej, którą przybliżają. Przy częstotliwościach dużo niższych od fs ZOH działa więc jak opóźnienie o T/2, a z lekcji 2.4 Stabilność pętli: punkt −1, zapasy i opóźnienie wiemy, ile kosztuje opóźnienie:
Δφ≈−ωc2T(w radianach).
Do tego dochodzi czas obliczeń i pomiaru (często znów rzędu T). Reguła praktyczna: 20–40 próbek na okres częstotliwości przejścia, czyli ωcT≈0,15–0,3, co kosztuje 4–9° zapasu fazy.Åström–Wittenmark
Symulacja 1 PID wysokości drona z lekcji 3.1 (z filtrem D) liczony co T i trzymany przez ZOH. Wydłużaj T od 5 ms do 450 ms. Przy jakim T przeregulowanie zaczyna wyraźnie rosnąć, a przy jakim pętla traci stabilność?
Zadania · część 1
3 zadania · ok. 20 min
PID wysokości z filtrem D ma ωc=4,76 rad/s i zapas fazy 55,9∘. Ile zapasu zostanie przy T=20 ms, 100 ms, 200 ms?
Odpowiedź
ωcT/2 w stopniach: 2,7∘, 13,6∘, 27,3∘. Zostaje ok. 53∘, 42∘, 29∘ (python-control z dokładną dyskretyzacją: 53,1°, 42,4°, 28,7°).
Pętla prędkości kątowej drona ma ωc≈50 rad/s. Jak często trzeba ją liczyć według reguły 20–40 próbek na okres?
Odpowiedź
Okres 2π/50≈0,126 s, czyli T≈3–6 ms (fs≈160–320 Hz). W praktyce kontrolery lotu liczą tę pętlę jeszcze szybciej (1–8 kHz), bo dochodzą filtry i opóźnienia czujników.
Dlaczego ZOH przypomina opóźnienie o T/2, a nie o T?
Odpowiedź
Schodek zaczyna się dokładnie w chwili próbki (opóźnienie 0) i kończy po T (opóźnienie T). Średnio sygnał jest przesunięty o T/2. Ściśle: transmitancja ZOH to sT1−e−sT, a jej faza wynosi dokładnie −ωT/2.
2 Aliasing
Próbkowanie gubi informację: sinusoidy o częstotliwościach f i f±nfs dają dokładnie te same próbki. Sygnał szybszy niż częstotliwość Nyquistafs/2 udaje wolniejszy. To aliasing (po polsku też „nakładanie się widm”), znany z filmów, na których koła samochodu kręcą się do tyłu.
fwidziana=∣f−nfs∣,n=najbliz˙sza liczba całkowita do f/fs.
Twierdzenie o próbkowaniu (Nyquist, Shannon) mówi, że sygnał bez składowych powyżej fs/2 da się z próbek odtworzyć dokładnie. Wniosek dla regulatora: przed próbkowaniem trzeba usunąć wszystko powyżej fs/2filtrem antyaliasingowym (analogowym albo w czujniku). Po próbkowaniu jest za późno: alias wygląda dokładnie jak prawdziwy wolny sygnał.
Symulacja 2 Drgania ramy drona od śmigła (190 Hz) widziane przez czujnik próbkowany 200 Hz. Próbki układają się w wolną sinusoidę 10 Hz, którą regulator wziąłby za prawdziwy ruch. Zwiększ fs powyżej 380 Hz.
Zadania · część 2
3 zadania · ok. 15 min
Jaką częstotliwość „zobaczy” czujnik próbkowany 200 Hz, gdy prawdziwe drganie ma 210 Hz? A 50 Hz próbkowane przy 60 Hz?
Odpowiedź
∣210−200∣=10 Hz; ∣50−60∣=10 Hz.
Kamera filmuje 24 klatki na sekundę koło z 6 szprychami. Przy jakiej prędkości obrotowej koło wydaje się stać?
Odpowiedź
Gdy między klatkami koło obraca się o wielokrotność 60∘: 4 obroty/s (i wielokrotności). Szprychy mijają wtedy pozycję z częstotliwością 24 Hz, równą częstotliwości klatek.
Dlaczego filtr cyfrowy po próbkowaniu nie usunie aliasu?
Odpowiedź
Po próbkowaniu alias 10 Hz i prawdziwy ruch 10 Hz mają identyczne próbki. Żaden algorytm nie odróżni ich na podstawie tych samych liczb. Rozróżnić je można tylko przed próbkowaniem, gdy sygnał jeszcze ma swoją prawdziwą częstotliwość.
3 Transformata Z i płaszczyzna z
Dla układów ciągłych narzędziem była transformata Laplace’a. Dla ciągów liczb x0,x1,x2,… jej odpowiednikiem jest transformata Z:
X(z)=k=0∑∞xkz−k.
Najważniejszy przykład to ciąg geometryczny xk=ak. Z sumy szeregu geometrycznego (lekcja 1.6 Szeregi liczbowe i potęgowe): X(z)=∑(az−1)k=1−az−11=z−az dla ∣z∣>∣a∣. Druga reguła: opóźnienie o jedną próbkę to mnożenie przez z−1. Dzięki niej równania różnicowe zamieniają się w algebrę, jak równania różniczkowe przy Laplasie.
Ciągły biegun p daje ept, a w chwilach próbkowania epkT=(epT)k, czyli ciąg geometryczny o ilorazie z=epT. Stąd odwzorowanie
z=esT:
lewa półpłaszczyzna s (stabilność) → wnętrze okręgu jednostkowego: układ dyskretny jest stabilny, gdy wszystkie bieguny mają ∣z∣<1;
oś urojona → okrąg jednostkowy; z=1 to s=0 (całkowanie);
częstotliwości ω i ω+2π/T dają ten sam z: to aliasing w języku biegunów.
Odpowiedź na pytanie z prologu. Dron z regulatorem P liczonym co T: w czasie jednego taktu sterowanie jest stałe, więc prędkość dokładnie spełnia vk+1=avk+b1−auk z a=e−bT/m. Z uk=Kp(r−vk) biegun pętli zamkniętej to
z=a−Kpb1−a,∣z∣<1⟺Kp<b1−a1+a.
Dla T=0,1 s: a=0,951 i Kp<20. Ciągły regulator P był stabilny przy każdym wzmocnieniu, cyfrowy nie: przy Kp>20 każdy takt przestrzeliwuje coraz mocniej i pętla oscyluje z okresem dwóch próbek.
Symulacja 3 Biegun s=σ±jω i jego obraz z=esT. Na dole ciąg próbek Rezk. Przesuń σ na prawo od zera: punkt w z wychodzi poza okrąg. Zwiększ ω ponad π/T (przerywane linie w płaszczyźnie s): obraz zawraca i udaje wolniejsze drganie.
Zadania · część 3
3 zadania · ok. 25 min
Ciągłe bieguny −0,5 oraz −2±3j. Gdzie są w płaszczyźnie z przy T=0,1 s?
Policz Kp,max dla cyfrowego regulatora P prędkości drona przy T=0,02 s i T=0,5 s.
Odpowiedź
T=0,02: a=0,990, Kp<100. T=0,5: a=0,779, Kp<4.
Biegun pętli zamkniętej z=−0,5. Jak wygląda odpowiedź? Czy coś takiego może mieć układ ciągły?
Odpowiedź
(−0,5)k: znak zmienia się co próbkę, amplituda maleje o połowę. Drganie z okresem dwóch próbek (częstotliwość Nyquista). Układ ciągły nie ma odpowiednika: esT nigdy nie jest ujemną liczbą rzeczywistą, chyba że ωT=π. To typowy objaw za dużego wzmocnienia w pętli cyfrowej.
4 Dyskretyzacja regulatora
Najprostsza droga do regulatora cyfrowego: zaprojektować ciągły (wszystko z części II i III) i zamienić s na przybliżenie w z. Każde przybliżenie to inny sposób liczenia całki (lekcja 6.2 Metody numeryczne: Python i C++):Goodwin 13.4
metoda
podstawienie
całka Ik
uwagi
Euler w przód
s≈Tz−1
Ik+1=Ik+Tek
może zdestabilizować stabilny regulator
Euler wstecz
s≈Tzz−1
Ik=Ik−1+Tek
zawsze stabilny; dobry dla filtru D
Tustin (trapezy)
s≈T2z+1z−1
Ik=Ik−1+2T(ek+ek−1)
oś urojona → okrąg; najwierniejszy
Przy ωcT≲0,3 wszystkie trzy dają prawie to samo. Ważniejsze od wyboru metody jest to, żeby w ogóle szybko próbkować.
Druga decyzja to postać algorytmu (Kowal 11):
pozycyjny: liczymy całe uk (jak dotąd);
przyrostowy (prędkościowy): liczymy tylko zmianę Δuk=uk−uk−1, np. dla PI: Δuk=Kp(ek−ek−1)+KiTek. Element wykonawczy sam ją sumuje (silnik krokowy, zawór z siłownikiem). Zaleta: przy nasyceniu nic się nie „nakręca”, bo regulator nie przechowuje całki. Zmiana nastaw w trakcie pracy nie daje skoku sterowania.
Zadania · część 4
3 zadania · ok. 25 min
Wyprowadź algorytm przyrostowy PI z pozycyjnego uk=Kpek+KiT∑j≤kej.
Odpowiedź
uk−uk−1=Kp(ek−ek−1)+KiTek: suma skraca się do ostatniego składnika.
Pokaż, że Tustin odwzorowuje s=jω na okrąg jednostkowy, ale z „przesuniętą” częstotliwością: ωciągła=T2tan2ωdyskrT.
Odpowiedź
Dla z=ejθ: z+1z−1=ejθ/2+e−jθ/2ejθ/2−e−jθ/2=jtan2θ. Czyli s=jT2tan2ωT, czysto urojone. Przy małym ωTtanx≈x i zgodność jest dobra; dla ω=10, T=0,1: 10,9 zamiast 10.
Dlaczego algorytm przyrostowy nie ma windupu, ale ma inny kłopot: nie da się w nim zrobić czystego regulatora P?
Odpowiedź
Element wykonawczy sumuje przyrosty: gdy jest w nasyceniu, odrzuca nadmiar i nic się nie odkłada. Za to „P” w postaci przyrostowej Δu=KpΔe zsumowane daje u=Kpe+u0, zależne od stanu początkowego, a dryf zaokrągleń kumuluje się bez członu, który by go korygował. W praktyce algorytm przyrostowy zawsze ma człon I.
5 PID w kodzie
Wszystko z lekcji 3.1–3.3 w jednej klasie: P od uchybu, D od pomiaru z filtrem (Euler wstecz), całka metodą trapezów, zatrzymanie całki w nasyceniu. Funkcję step wywołuje się co T z przerwania zegara.
class PID:
def __init__(self, kp, ki, kd, T, n=8.0, umin=-1e9, umax=1e9):
self.kp, self.ki, self.kd, self.T = kp, ki, kd, T
self.tf = kd / (kp * n) if kp > 0 else 0.0 # stała czasowa filtru D
self.umin, self.umax = umin, umax
self.i = 0.0; self.d = 0.0; self.e_prev = 0.0; self.y_prev = None
def step(self, r, y):
e = r - y
if self.y_prev is None:
self.y_prev = y
a = self.tf / (self.tf + self.T) # D od pomiaru, z filtrem
self.d = a * self.d - self.kd * (y - self.y_prev) / (self.tf + self.T)
u = self.kp * e + self.i + self.d
u_sat = min(max(u, self.umin), self.umax)
# anti-windup: nie całkuj, gdy uchyb pcha dalej w nasycenie
if u == u_sat or (u > self.umax and e < 0) or (u < self.umin and e > 0):
self.i += self.ki * self.T * (e + self.e_prev) / 2
self.e_prev, self.y_prev = e, y
return u_sat
Ta sama logika w C++ (do mikrokontrolera wystarczy zamienić double na float):
struct PID {
double kp, ki, kd, T, tf, umin, umax;
double i = 0, d = 0, e_prev = 0, y_prev = 0;
bool first = true;
PID(double kp, double ki, double kd, double T, double n, double umin, double umax)
: kp(kp), ki(ki), kd(kd), T(T), tf(kd / (kp * n)), umin(umin), umax(umax) {}
double step(double r, double y) {
double e = r - y;
if (first) { y_prev = y; first = false; }
double a = tf / (tf + T);
d = a * d - kd * (y - y_prev) / (tf + T);
double u = kp * e + i + d;
double u_sat = std::clamp(u, umin, umax);
if (u == u_sat || (u > umax && e < 0) || (u < umin && e > 0)) i += ki * T * (e + e_prev) / 2;
e_prev = e; y_prev = y;
return u_sat;
}
};
Test na modelu drona (T=10 ms, ciąg ±9,81 N): skok 1 m daje 28% przeregulowania, skok 5 m 14%, jak w symulacjach z lekcji 3.3. Pełne pliki z testem są w tools/verify/c3_4_kod/.
Zadania · część 5
3 zadania · ok. 20 min
Sprawdź, że filtr D w kodzie to Euler wstecz zastosowany do 1+TfsKds dla sygnału −y.
Odpowiedź
Tfd˙+d=−Kdy˙. Euler wstecz: TfTdk−dk−1+dk=−KdTyk−yk−1. Mnożymy przez T i dzielimy przez Tf+T: dk=Tf+TTfdk−1−Tf+TKd(yk−yk−1) ✓.
Przy Ki=8, T=1 ms i uchybie 1 mm ile wynosi przyrost całki w jednym takcie? Dlaczego to może być problem przy typie float (ok. 7 cyfr znaczących), gdy całka ma wartość ok. 10 N?
Odpowiedź
8⋅0,001⋅0,001=8⋅10−6 N. Przy wartości ok. 10 N sąsiednie liczby float różnią się o ok. 9,5⋅10−7, więc przyrost 8⋅10−6 to tylko ok. 8 takich kroków i jest zaokrąglany z błędem ok. 5% w każdym takcie (zawsze w tę samą stronę). Uchyby poniżej ok. 0,06 mm dają przyrost mniejszy niż pół kroku i giną całkowicie.
Dlaczego warunek anti-windup sprawdza, która granica jest aktywna (u > umax albo u < umin), a nie po prostu porównuje znaki e i u?
Odpowiedź
Porównanie znaków działa tylko wtedy, gdy zakres [umin,umax] zawiera zero (jak symetryczna korekta ciągu wokół zawisu). Dla zakresu np. 1000–2000 µs (sygnał PWM) sterowanie poniżej dolnej granicy jest dodatnie, a uchyb ujemny: porównanie znaków pozwoliłoby całce dalej maleć, czyli nakręcać się w nasycenie. Sprawdzenie aktywnej granicy działa dla dowolnego zakresu. Porównanie u == u_sat jest bezpieczne, bo u_sat jest albo dokładnie u, albo jedną z granic.
6 Metoda i przykłady rozwiązane
Metoda: od regulatora ciągłego do kodu
Okres:T tak, żeby ωcT≈0,15–0,3; uwzględnij czas obliczeń.
Antyaliasing: filtr analogowy (lub w czujniku) z pasmem poniżej fs/2; jego faza też obciąża zapas.
Dyskretyzacja: Tustin dla całki, Euler wstecz dla filtru D; sprawdź zapas fazy wersji dyskretnej (python-control: c2d).
Kod: D od pomiaru, anti-windup, inicjalizacja przy pierwszym wywołaniu, stałe T.
Sprawdzenie: symulacja z ZOH i opóźnieniem obliczeń, test na sprzęcie z małymi nastawami.
Przykład 6.1 Jak wolno można liczyć PID drona?
PID 9,6 / 8 / 4,3 z filtrem D (N=8), ciągły: ωc=4,76 rad/s, zapas fazy 55,9∘, przeregulowanie ok. 26%. Sprawdź wersje dyskretne (Tustin + ZOH).
T=5 ms: zapas 55,2°, przeregulowanie 26%.
T=50 ms: 49,1°, 31%. T=100 ms: 42,4°, 39%.
T=200 ms: 28,7°, 65%. T=300 ms: 13,9°, 113%.
Powyżej ok. 0,38 s: niestabilna.
Wynik: do ok. 50 ms różnica jest niewielka; przybliżenie 55,9∘−ωcT/2 zgadza się z dokładnym wynikiem z dokładnością do ok. 1°.
Sprawdzenie: symulacja 1 liczy człon D Eulerem wstecz i daje przeregulowanie o 1–3 punkty procentowe większe, ale ten sam trend. Granica stabilności przy ωcT/2≈55∘, czyli T≈0,4 s ✓.
Przykład 6.2 Wibracje, które udają przechylanie
Akcelerometr drona próbkowany 200 Hz, śmigła dają drgania ramy 190 Hz. Co zobaczy regulator i jak to naprawić?
Alias: ∣190−200∣=10 Hz, czyli ok. 63 rad/s, w paśmie pętli prędkości kątowej.
Regulator „widzi” przechylanie 10 Hz i z nim walczy: silniki zaczynają drgać naprawdę.
Naprawa: filtr dolnoprzepustowy w czujniku (wiele układów MEMS ma go wbudowany) poniżej 100 Hz albo próbkowanie np. 1 kHz z filtrem cyfrowym po nim, plus amortyzacja mechaniczna czujnika.
Wynik: 190 Hz przy 200 Hz to 10 Hz fałszywego ruchu; przy 1 kHz drganie zostaje 190 Hz i da się je odfiltrować cyfrowo.
Sprawdzenie: symulacja 2 ✓.
Przykład 6.3 Regulator P, który oscyluje co próbkę
Prędkość drona, regulator P, T=0,1 s, Kp=25. Opisz zachowanie.
∣z∣>1, ujemny: oscylacja z okresem dwóch próbek (0,2 s), amplituda rośnie 1,49 razy na takt.
Wynik: niestabilna, choć wersja ciągła byłaby stabilna przy każdym Kp. Granica: Kp=20.
Sprawdzenie: dla Kp=20: z=0,951−1,95=−1,0 ✓, granica stabilności.
7 Błędne intuicje, których trzeba się oduczyć
„Szybciej próbkować zawsze lepiej.”
Do pewnego momentu. Bardzo małe T to mniejsze przyrosty (problemy z precyzją), większy wpływ szumu na różnice w członie D i większe obciążenie procesora.
„Wystarczy próbkować 2 razy szybciej niż najwyższa częstotliwość.”
Twierdzenie o próbkowaniu dotyczy odtwarzania sygnału, nie sterowania. Regulator potrzebuje 20–40 próbek na okres ωc, bo każda próbka to opóźnienie.
„Filtr cyfrowy usunie zakłócenia o wysokiej częstotliwości.”
Tylko te poniżej fs/2. Wszystko powyżej już udaje coś innego i trzeba to usunąć przed próbkowaniem.
„Układ stabilny w wersji ciągłej będzie stabilny po dyskretyzacji.”
Regulator P prędkości drona jest kontrprzykładem. Zawsze sprawdzaj wersję dyskretną.
„Transformata Z to zupełnie nowa teoria.”
To szereg geometryczny i z=esT. Wszystko z części II ma odpowiednik: okrąg jednostkowy zamiast osi urojonej.
8 Zadania do przemyślenia
Te zadania wymagają więcej myślenia niż liczenia.
Zadania do przemyślenia
5 zadań · ok. 1,5 godziny
Deadbeat. W pętli cyfrowej można umieścić biegun w z=0. Co to znaczy w czasie? Ile wynosiłby ciągły odpowiednik? Dlaczego w praktyce tego się unika?
Rozwiązanie
zk=0 dla k≥1: odpowiedź ustala się dokładnie w skończonej liczbie kroków (ang. deadbeat). Ciągły odpowiednik: esT=0, czyli s=−∞, nieskończenie szybki biegun.
Wymaga ogromnych sterowań (dla drona przy T=0,1 s: Kp=ab/(1−a)≈9,75, a przy krótszym T jeszcze więcej) i dokładnego modelu. Między próbkami obiekt może się zachowywać źle (ukryte oscylacje).
Czas obliczeń. Regulator czyta pomiar na początku taktu, ale wynik wysyła dopiero pod koniec (obliczenia zajmują prawie całe T). Ile wynosi wtedy łączne opóźnienie? Jak można to poprawić?
Rozwiązanie
T (obliczenia) + T/2 (ZOH) = 1,5T. Strata fazy trzy razy większa niż z samego ZOH.
Wysyłać wynik od razu po obliczeniu (a nie na początku następnego taktu), przenieść obliczenia niezależne od nowego pomiaru przed odczyt, uwzględnić opóźnienie w modelu (predyktor Smitha, lekcja 2.4).
Euler w przód rozkołysze. Regulator ciągły zawiera człon 0,01s+11 (filtr o stałej 10 ms). Dyskretyzujemy go Eulerem w przód z T=25 ms. Co się stanie?
Rozwiązanie
Euler w przód: xk+1=xk+0,01T(uk−xk)=(1−2,5)xk+2,5uk, biegun z=−1,5.
Niestabilny filtr, choć ciągły był stabilny. Euler w przód wymaga T<2τ dla każdego członu. Euler wstecz i Tustin nie mają tego problemu.
Kwantyzacja przetwornika. 12-bitowy przetwornik A/C mierzy wysokość w zakresie 0–100 m. Jaka jest rozdzielczość? Co zobaczy człon D liczony co 10 ms?
Rozwiązanie
100/4096≈2,4 cm.
Zmiana o jeden poziom w ciągu 10 ms to 2,4 m/s „prędkości”. Przy powolnym wznoszeniu 0,1 m/s człon D widzi przez większość taktów zero, a co ok. 0,24 s szpilkę 2,4 m/s. Potrzebny silny filtr D, czujnik prędkości albo estymator (filtr Kalmana, lekcja 4.4 Filtr Kalmana).
Jedna pętla, wiele częstotliwości. Kontroler lotu liczy pętlę prędkości kątowej z częstotliwością 2 kHz, orientacji 250 Hz, pozycji 50 Hz, a GPS daje pomiar 5 Hz. Czy pętla pozycji z ωc≈1 rad/s może korzystać z GPS 5 Hz? Co trzeba zrobić?
Rozwiązanie
5 Hz to ok. 31 próbek na okres 1 rad/s (2π s): reguła 20–40 jest spełniona, ale do tego GPS ma opóźnienie rzędu 0,1–0,2 s.
Sygnał powyżej fs/2 udaje sygnał o częstotliwości ∣f−nfs∣. Filtr antyaliasingowy przed próbkowaniem.
4 Jaki jest związek s i z?
z=esT; lewa półpłaszczyzna → wnętrze okręgu jednostkowego.
5 Kiedy układ dyskretny jest stabilny?
Gdy wszystkie bieguny mają ∣z∣<1.
6 Ile wynosi Z{ak}?
z−az, z sumy szeregu geometrycznego.
7 Podstawienie Tustina?
s≈T2z+1z−1, całkowanie metodą trapezów.
8 Czym różni się algorytm przyrostowy od pozycyjnego?
Liczy zmianę sterowania Δuk; element wykonawczy ją sumuje; brak windupu.
10 Karta wzorów i co dalej
Próbkowanie
ZOH: sT1−e−sT, faza −ωT/2
ωcT≈0,15–0,3; strata fazy ωcT/2
Nyquist: fs/2; alias ∣f−nfs∣
z=esT, stabilność: ∣z∣<1
Z{ak}=z−az, Z{xk−1}=z−1X
Dyskretyzacja i kod
Euler w przód Tz−1; wstecz Tzz−1; Tustin T2z+1z−1
całka (trapezy): Ik=Ik−1+2KiT(ek+ek−1)
filtr D: dk=Tf+TTfdk−1−Tf+TKd(yk−yk−1)
przyrostowy PI: Δuk=Kp(ek−ek−1)+KiTek
dron, P cyfrowy: Kp<b1−a1+a, a=e−bT/m
Do przeczytania
Obowiązkowo: J. Kowal, Podstawy automatyki, rozdz. 11 (sterowanie cyfrowe, algorytm pozycyjny i przyrostowy, po polsku); G. C. Goodwin i in., Control System Design, rozdz. 12 (próbkowanie) i 13.4.
Dla chętnych: K. J. Åström, B. Wittenmark, Computer-Controlled Systems, klasyczny podręcznik sterowania cyfrowego; NASA, materiały o programie F-8 Digital Fly-By-Wire (strona NASA Armstrong).
To koniec części III. Umiemy zaprojektować, nastroić i zaprogramować regulator PID dla jednego wejścia i jednego wyjścia. Dron w przestrzeni ma jednak kilka wejść (silniki), kilka wyjść (położenie, orientacja) i czujniki, które nie mierzą wszystkiego, czego potrzeba. Część IV przechodzi do opisu w przestrzeni stanów: sprzężenie od stanu, obserwatory, sterowanie optymalne i filtr Kalmana.