Modelowanie regulatora PID: od podstawowej części proporcjonalnej do pełnego cyklu
Regulator PID generuje sygnał sterujący na podstawie błędu e(t) = wartość zadana - wartość zmierzona. W najprostszym przypadku część proporcjonalna u(t) = K_p * e(t) służy do korygowania odchyleń. Przykładem może być kontrola poziomu wody w zbiorniku: gdy e(t) > 0, zawór otwiera się proporcjonalnie do błędu, ale sygnał jest ograniczony maksymalnym przepływem.
Systemy rzeczywiste charakteryzują się opóźnieniami. Dla grzałki ciepło rozprzestrzenia się zgodnie z równaniem przewodzenia cieplnego ∂w/∂t = Δw + f(x,y,t), gdzie f to źródło nagrzewania. Jest to proces dyfuzji z tłumieniem, podobny do fal z utratą energii.
Symulacja numeryczna przewodzenia cieplnego
Rozwiązanie analityczne równania przewodzenia cieplnego w Mathematica pokazuje ewolucję temperatury:
sol = NDSolveValue[
{
D[w[x, y, t], t] == Laplacian[w[x, y, t], {x, y}] +
If[(x + 2)^2 + y^2 < 0.1 && t > 0.0, 100.0, 0],
w[x, y, 0] == 0
},
w,
{x, y} ∈ Rectangle[{-2, -1}, {2, 1}],
{t, 0, 10}
];
W punkcie oddalonym od źródła temperatura rośnie z opóźnieniem. Aby symulować sprzężenie zwrotne, przechodzimy do dyskretyzacji metodą FDTD (Finite-Difference Time-Domain).
Podstawowy krok dla równania 2D:
solveHeat[w_, f_, dt_: 0.0025, dx_: 0.1] := Table[
If[i > 1 && i < 50 && j > 1 && j < 50,
w[[i, j]] + dt (
w[[i - 1, j]] + w[[i, j - 1]] - 4 w[[i, j]] +
w[[i, j + 1]] + w[[i + 1, j]]
)/dx^2 + dt f[i, j],
w[[i, j]]
],
{i, 50}, {j, 50}
];
Warunek stabilności CFL: δt / δx² ≤ 0.25. Symulacja włączania/wyłączania grzałki potwierdza inercyjność systemu.
Regulator proporcjonalny: stała błąd
Dołączenie regulatora P: heater = K_p * Clip[error, {0, ∞}]. Przy niskiej mocy grzałki temperatura stabilizuje się poniżej wartości zadanej z powodu strat. Zwiększenie K_p nasila drgania, ale stała błąd nadal istnieje.
Wykres pokazuje:
- Niska moc: powolny wzrost, nie osiągnięcie wartości zadanej.
- Wysoka moc: drgania bez osiągnięcia celu.
Część całkująca do eliminacji błędu
Całka akumuluje błąd: accError += error; u(t) = K_p error + K_i accError. Pozwala to skompensować stałe straty.
Przykład z obniżoną mocą:
Module[{w = Table[0., {50}, {50}], accError = 0.0},
Table[
With[{error = (0.0022 - w[[25, 25]])},
{
heater = 20000.0 Clip[error + 0.001 accError, {0, Infinity}]
},
accError += error;
w = solveHeat[w, Function[{i, j}, If[Max[Abs[{i, j} - {25, 2}]] < 1, heater, 0.0]]];
{{steps, w[[25, 25]]}, {steps, heater/30000.0}}
],
{steps, 1, 3000}
]
];
Temperatura zbliża się do wartości zadanej bez drgań.
Część różniczkująca: przewidywanie drgań
Część D reaguje na szybkość zmiany błędu: u(t) = K_p e + K_i ∫e + K_d * de/dt. Pomaga tłumić przyszłe drgania.
Pełny regulator PID zmniejsza czas narastania, ale wymaga precyzyjnej kalibracji współczynników. Zbyt duża wartość K_d powoduje artefakty.
Porównanie:
- Tylko P: powolna odpowiedź, błąd.
- PI: zbieżność, ale możliwe przebije.
- PID: optymalny czas, minimalne drgania.
Definicja formalna i układ mechaniczny
Pełna formuła: u(t) = K_p e(t) + K_i ∫₀ᵗ e(τ) dτ + K_d de/dt.
Dla ciężaru o masie m: x''(t) = u(t)/m. Różniczkowanie regulatora PID upraszcza: u'(t) = K_i e + K_p e' + K_d e''.
Sprawdzenie bez regulatora: stały u=1 daje x(t) = t²/(2m) — trajektoria paraboliczna.
Z regulatorem P: e(t) = a - x(t) tworzy pętlę zamkniętą. Kalibracja współczynników to proces iteracyjny uwzględniający dynamikę systemu.
Co ważne:
- Część proporcjonalna zapewnia podstawową reakcję, ale pozostawia stały błąd.
- Całka usuwa skumulowane odchylenia w systemach inercyjnych.
- Różniczka przewiduje zmiany, przyspieszając stabilizację.
- Symulacja FDTD wizualizuje efekty do debugowania.
- Stabilność wymaga spełnienia warunku CFL oraz ograniczeń na u(t).
— Editorial Team
Brak komentarzy.