%% Interaktyvus pratimas nr. 8. PID reguliatorius
% Paskaitoje kalbėjome apie PID reguliatorių. Siūlome šio kurso klausytojui interaktyvų pratimą, kuriame simuliuosime PID reguliatoriaus veikimą. Susidomėję klausytojai gali taip pat pasidomėti MATLAB R2020b funkcija pidTuner, kuri reikalauja papildomų paketų diegimo ir yra skirta koeficientams parinkti. Mes panaudosime paprastesnes priemones šio prietaiso veikimo principui pademonstruoti.
% Schematiškai PID reguliatoriaus veikimo principas yra pavaizduotas žemiau:
%
% PID reguliatorių sudaro trys dalys:
% Proporcinė komponentė sukuria išeities signalą, kuris neutralizuoja reguliuojamo signalo nuokrypį nuo nustatytos reikšmės. Už tai yra atsakingas proporcingumo koeficientas K_p.
% Integralinė dalis yra naudojama statiniam nuokrypiui panaikinti laikui bėgant. Ji yra proporcinga reguliuojamo signalo integralui laiko atžvilgiu. Proporcingumo koeficientas yra K_i.
% Diferencialinė dalis yra skirta tam, jog atsvertų reguliuojamo signalo prognozuojamą nuokrypį nuo tikslo reikšmės ir yra proporcinga šio nuokrypio kitimo greičiui. Proporcingumo koeficientas yra K_d.
% Šie koeficientai yra teigiami (arba neneigiami, jei galima atsisakyti vienos iš dalių).
% Tarkime, kad įvesties signalas yra u\left(t\right) - funkcija nuo laiko. Tada išvesties signalas v\left(t\right) yra apskaičiuojamas pagal formulę:
% v\left(t\right)=K_p \cdot u\left(t\right)+K_i \cdot \int_0^t u\left(\tau \right)d\tau +K_d \cdot \frac{\textrm{d}}{\textrm{d}t}u\left(t\right)\ldotp
% Specialisto pagrindinė užduotis yra šių parametrų nustatymas konkrečiam procesui automatizuoti. Neteisingas parametrų parinkimas gali pasireikšti autosvyravimais, kurie nėra slopinami ir sukelia sistemos išbalansavimą.
% Mokymo tikslams įvesties signalą užduosime funkcijos pavidalu. Kurso klausytojas gali pats pasirinkti bet kokią norimą funkciją ir įvesti ją į atitinkamą lauką. Funkcijos kintamasis yra t. Nepamirškite apie daugybą, jeigu dauginate iš koeficiento ar pan. MATLAB iš karto nubraižys jūsų įvestą funkciją intervale \left\lbrack 0;T\right\rbrack \ldotp Parametro T reikšmę galite parinkti patys iš intervalo T\in \left\lbrack 0;20\right\rbrack.
% Rekomenduojamos funkcijos - racionaliosios trupmenos u\left(t\right)=\frac{At+B}{Mt^2 +Nt+K}, tačiau klausytojas gali išbandyti ir kitus variantus.

syms u(t) v(t) s;

u(t) = t/((t^2+1))

t_end = 13;

fplot(u(t), [0 t_end]);

%
% Galite keisti PID reguliatoriaus koeficientus ir stebėti kaip keičiasi išeities signalas.

Kp = 0.58;
Ki = 0.35;
Kd = 1.97;

x = 0:0.01:t_end;

v(t) = Kp*u(t) + Ki*int(u(s), 0, t) + Kd*diff(u(t));
fplot(v(t), [0 t_end]);