Documente Academic
Documente Profesional
Documente Cultură
1. Introducere teoretică
Un sistem este stabil dacă ieșirea sa poate fi controlată, producând un răspuns mărginit pentru
o intrare mărginită. Când un sistem devine instabil, ieșirea sa poate fi infinită (nemărginită) chiar și
pentru o intrare finită. În aplicațiile practice, multe sisteme sunt natural instabile, însă acestea pot fi
stabilizate printr-un controler adecvat.
Un sistem în buclă închisă este prezentat în Fig. 1, unde 𝑈(𝑠) este intrarea, 𝐶(𝑠) este funcția
de transfer a controlerului, 𝐺(𝑠) este funcția de tranfer a instalației (sistemului), 𝐻(𝑠) este funcția de
transfer a buclei de reacție și 𝑌(𝑠) este ieșirea.
1
1 1
Exemplul 1: Poli negativi reali: 𝐶(𝑠) = 2; 𝐺(𝑠) = 𝑠+3 ; 𝐻(𝑠) = 1; 𝑈(𝑠) = 𝑠
2
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠 + 3 = 2
𝐻𝑐𝑙 (𝑠) = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 2 𝑠+5
𝑠+3
2 𝐴 𝐵
𝑌(𝑠) = 𝑈(𝑠)𝐻𝑐𝑙 (𝑠) = = +
𝑠(𝑠 + 5) 𝑠 𝑠 + 5
2 2
𝐴 = lim 𝑠𝑌(𝑠) = lim =
𝑠→0 𝑠→0 𝑠 + 5 5
2 2
𝐵 = lim (𝑠 + 5)𝑌(𝑠) = lim =−
𝑠→−5 𝑠→−5 𝑠 5
2 1 1
𝑌(𝑠) = ( − )
5 𝑠 𝑠+5
Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:
2
𝑦(𝑡) = (1 − 𝑒 −5𝑡 )
5
Localizarea polilor și răspunsul sistemului sunt:
1 1
Exemplul 2: Poli pozitivi reali: 𝐶(𝑠) = 2; 𝐺(𝑠) = 𝑠−3 ; 𝐻(𝑠) = 1; 𝑈(𝑠) = 𝑠
2
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠 − 3 = 2
𝐻𝑐𝑙 (𝑠) = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 2 𝑠−1
𝑠−3
2 𝐴 𝐵
𝑌(𝑠) = 𝑈(𝑠)𝐻𝑐𝑙 (𝑠) = = +
𝑠(𝑠 − 1) 𝑠 𝑠 − 1
2
𝐴 = lim 𝑠𝑌(𝑠) = lim =−2
𝑠→0 𝑠→0 𝑠 − 1
2
𝐵 = lim(𝑠 − 1)𝑌(𝑠) = lim = 2
𝑠→1 𝑠→1 𝑠
2
1 1
𝑌(𝑠) = −2 ( − )
𝑠 𝑠−1
Folosind transformata Laplace inversă, expresia lui 𝑦(𝑡) este:
𝑦(𝑡) = −2(1 − 𝑒 𝑡 )
Localizarea polilor și răspunsul sistemului sunt:
1 1 1
Exemplul 3: Poli negativi complecși: 𝐶(𝑠) = 20; 𝐺(𝑠) = 𝑠+3 ; 𝐻(𝑠) = 𝑠+4 ; 𝑈(𝑠) = 𝑠
20 20
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠+3 𝑠 +3
𝐻𝑐𝑙 (𝑠) = = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 20 (𝑠 + 3)(𝑠 + 4) + 20
(𝑠 + 3)(𝑠 + 4) (𝑠 + 3)(𝑠 + 4)
𝑌(𝑠) 20(𝑠 + 4) 20(𝑠 + 4)
𝐻𝑐𝑙 (𝑠) = = 2 =
𝑈(𝑠) 𝑠 + 7𝑠 + 32 7 √79 7 √79
(𝑠 + 2 − 𝑗 2 )(𝑠 + 2 + 𝑗 2 )
20(𝑠 + 4) 𝐴 𝐵𝑠 + 𝐶
𝑌(𝑠) = = + ⇒ 20(𝑠 + 4) = 𝐴(𝑠 2 + 7𝑠 + 32) + 𝑠(𝐵𝑠 + 𝐶)
𝑠(𝑠 2 + 7𝑠 + 32) 𝑠 𝑠 2 + 7𝑠 + 32
20(𝑠 + 4) 80 5
𝐴 = lim 𝑠𝑌(𝑠) = lim = =
𝑠→0 𝑠→0 𝑠 2 + 7𝑠 + 32 32 2
5 5
5 35 +𝐵 = 0⇒𝐵 = −
20𝑠 + 80 = 𝑠 2 ( + 𝐵) + 𝑠 ( + 𝐶) + 80 ⇒ {2 2
2 2 35 5
+ 𝐶 = 20 ⇒ 𝐶 =
2 2
5 5(𝑠 − 1)
𝑌(𝑠) = − 2
2𝑠 2(𝑠 + 7𝑠 + 32)
Pentru cea de-a doua fracție se vor folosi următoarele transformate Laplace inverse:
Laplace transform Time domain function Laplace transform Time domain function
𝑭(𝒔) 𝒇(𝒕) 𝑭(𝒔) 𝒇(𝒕)
𝑠+𝑎 1 1 −𝑎𝑡
𝑒 −𝑎𝑡 cos(𝑏𝑡) 𝑒 sin(𝑏𝑡)
(𝑠 + 𝑎)2 + 𝑏 2 (𝑠 + 𝑎)2 + 𝑏 2 𝑏
3
Cea de-a doua fracție va trebui rescrisă în forma corespunzătoare, conform tabelului de
transformate Laplace, folosind rădăcinile numitorului pentru a determina coeficienții 𝑎 și 𝑏:
7
5 5 𝑠−1 5 5 𝑠+ 9 1
𝑌(𝑠) = − ∙ 2 = − ( 2 − ∙ )
2
2𝑠 2 𝑠 + 7𝑠 + 32 2𝑠 2 7 79 2 7 2 79
(𝑠 + 2) + 4 (𝑠 + 2) + 4
1 1 1
Exemplul 4: Poli pozitivi complecși: 𝐶(𝑠) = 20; 𝐺(𝑠) = ; 𝐻(𝑠) = ; 𝑈(𝑠) =
𝑠−3 𝑠−4 𝑠
20 20
𝑌(𝑠) 𝐶(𝑠)𝐺(𝑠) 𝑠−3 𝑠 −3
𝐻𝑐𝑙 (𝑠) = = = =
𝑈(𝑠) 1 + 𝐻(𝑠)𝐶(𝑠)𝐺(𝑠) 1 + 20 (𝑠 − 3)(𝑠 − 4) + 20
(𝑠 − 3)(𝑠 − 4) (𝑠 − 3)(𝑠 − 4)
𝑌(𝑠) 20(𝑠 − 4) 20(𝑠 − 4)
𝐻𝑐𝑙 (𝑠) = = 2 =
𝑈(𝑠) 𝑠 − 7𝑠 + 32 7 √79 7 √79
(𝑠 − 2 − 𝑗 2 )(𝑠 − 2 + 𝑗 2 )
20(𝑠 − 4) 𝐴 𝐵𝑠 + 𝐶
𝑌(𝑠) = = + ⇒ 20(𝑠 − 4) = 𝐴(𝑠 2 − 7𝑠 + 32) + 𝑠(𝐵𝑠 + 𝐶)
𝑠(𝑠 2 − 7𝑠 + 32) 𝑠 𝑠 2 − 7𝑠 + 32
20(𝑠 − 4) 80 5
𝐴 = lim 𝑠𝑌(𝑠) = lim = − = −
𝑠→0 𝑠→0 𝑠 2 − 7𝑠 + 32 32 2
5 5
5 35 +𝐵 =0⇒𝐵 =
20𝑠 − 80 = 𝑠 2 (− + 𝐵) + 𝑠 ( + 𝐶) + 80 ⇒ {2 2
2 2 35 5
+ 𝐶 = 20 ⇒ 𝐶 =
2 2
4
5 5(𝑠 + 1)
𝑌(𝑠) = − +
2𝑠 2(𝑠 2 − 7𝑠 + 32)
Cea de-a doua fracție va trebui rescrisă în forma corespunzătoare, conform tabelului de
transformate Laplace, folosind rădăcinile numitorului pentru a determina coeficienții 𝑎 și 𝑏:
7
5 5 𝑠+1 5 5 𝑠− 9 1
𝑌(𝑠) = − + ∙ 2 =− + ( 2
+ ∙ )
2
2𝑠 2 𝑠 − 7𝑠 + 32 2𝑠 2 7 79 2 7 2 79
(𝑠 − 2) + 4 (𝑠 − 2) + 4
5 7 √79 9 2 7𝑡 √79
𝑦(𝑡) = [−1 + 𝑒 2𝑡 cos ( 𝑡) + ∙ 𝑒 2 sin ( 𝑡)]
2 2 2 √79 2
5 7 √79 9 7𝑡 √79
𝑦(𝑡) = [−1 + 𝑒 2𝑡 cos ( 𝑡) + 𝑒 2 sin ( 𝑡)]
2 2 √79 2
Dacă cel puțin una din condițiile anterioare este falsă, sistemul va fi instabil.
5
1. Se aranjează coeficienții ecuației caracteristice (numitorul funcției de transfer) într-un
tabel, după cum urmează:
𝑠𝑛 𝑎𝑛 𝑎𝑛−2 𝑎𝑛−4 …
𝑠 𝑛−1 𝑎𝑛−1 𝑎𝑛−3 𝑎𝑛−5 …
𝑠𝑛 𝑎𝑛 𝑎𝑛−2 𝑎𝑛−4 …
𝑠 𝑛−1 𝑎𝑛−1 𝑎𝑛−3 𝑎𝑛−5 …
𝑠 𝑛−2 𝑏1 𝑏2 𝑏3 …
𝑠 𝑛−3 𝑐1 𝑐2 𝑐3 …
⋮ ⋮ ⋮ ⋮ ⋮
𝑠0 𝑘1 𝑘2 𝑘3 …
Exemplu:
𝑎𝑛 𝑎𝑛−2 𝑎𝑛−1 𝑎𝑛−5
|𝑎 𝑎 | | 𝑏 𝑏3 |
𝑏1 = − 𝑛−1 𝑛−3
; 𝑐2 = − 1
𝑎𝑛−1 𝑏1
3. Se numără schimbările de semn ale coeficienților rezultați pe prima coloană a tabelului.
Numărul schimbărilor de semn indică numărul polilor în semiplanul drept. Dacă nu există
nici o schimbare de semn pe prima coloană, sistemul este stabil.
4𝑠5 +3𝑠4 +4
Exemplul 5: 𝐻𝑐𝑙 (𝑠) = 𝑠5 +2𝑠4 +6𝑠3 +6𝑠2 +5.5𝑠+5
Condițiile de aplicare ale criteriului Routh-Hurwitz sunt îndeplinite, deci acesta poate fi aplicat.
𝑠5 1 6 5.5
4 2 6 5
𝑠
3 𝑏1 𝑏2 𝑏3
𝑠
𝑠2 𝑐1 𝑐2 𝑐3
𝑠 𝑑1 𝑑2 𝑑3
0 𝑒1
𝑠
1 6 1 5.5 1 0
| | 12 − 6 | | 11 − 5 | |
𝑏1 = − 2 6 = = 3; 𝑏2 = − 2 6 = = 3; 𝑏3 = − 2 0 = 0
2 2 2 2 2
6
2 6 2 5
| | 6𝑏1 − 2𝑏2 18 − 6 | | 5𝑏 − 2𝑏 15
𝑏1 𝑏2 𝑏1 𝑏3 1 3
𝑐1 = − = = = 4; 𝑐2 = − = = = 5; 𝑐3 = 0
𝑏1 𝑏1 3 𝑏1 𝑏1 3
𝑏1 𝑏2 𝑏 𝑏3
| | 𝑏2 𝑐1 − 𝑏1 𝑐2 12 − 15 3 | 1 |
𝑐1 𝑐2 𝑐1 𝑐3
𝑑1 = − = = = − ; 𝑑2 = − = 0; 𝑑3 = 0
𝑐1 𝑐1 4 4 𝑐1
𝑐1 𝑐2 3
|𝑑 𝑑2 | 𝑐2 𝑑1 − 𝑐1 𝑑2 −5 ∙ 4
1
𝑒1 = − = = =5
𝑑1 𝑑1 3
−4
𝑠5 1 6 5.5
4 2 6 5
𝑠
3 3 3 0
𝑠
2 4 5 0
𝑠
𝑠 −0.75 0 0
0 5
𝑠
Pe prima coloană sunt două schimbări de semn, ceea ce înseamnă că există doi poli în
semiplanul drept, deci sistemul este instabil.
4𝑠3 +3𝑠2 −4
Exemplul 6: 𝐻𝑐𝑙 (𝑠) = 𝑠3 +4𝑠2 +7𝑠+𝐾. Să se determine valorile lui 𝐾 pentru care sistemul este stabil.
𝑠3 1 7
𝑠2 4 𝐾
1 7 1 0
| | | |
𝑠
𝑏1 = − 4 𝐾 = 28 − 𝐾 𝑏2 = − 4 0 = 0
4 4 4
4 𝐾
|28 − 𝐾 |
𝑠0 4 0
𝑐1 = − =𝐾
28 − 𝐾
4
Pentru ca sistemul să fie stabil, trebuie să nu existe nici o schimbare de semn pe prima coloană.
28 − 𝐾
{ 4 > 0 ⇒ {28 − 𝐾 > 0 ⇒ {𝐾 < 28 ⇒ 𝐾 ∈ (0,28)
𝐾>0 𝐾>0 𝐾>0
4𝑠5 +3𝑠4 −4
Exemplul 7: 𝐻𝑐𝑙 (𝑠) = 2𝑠5 +2𝑠4 +5𝑠3 +5𝑠2 +3𝑠+1
𝑠5 2 5 3
4 2 5 1
𝑠
𝑠3 𝑏1 𝑏2 𝑏3
2 𝑐1 𝑐2 𝑐3
𝑠
𝑠 𝑑1 𝑑2 𝑑3
0 𝑒1
𝑠
7
2 5 2 3
| | | |
𝑏1 = − 2 5 = 10 − 10 = 0; 𝑏 = − 2 1 = 6 − 2 = 2
2
2 2 2 2
2 5 2 1
| | 5𝑏1 − 2𝑏2 | | 𝑏 − 2𝑏
𝑏1 𝑏2 𝑏 𝑏3 1 3
𝑐1 = − = ; 𝑐2 = − 1 =
𝑏1 𝑏1 𝑏1 𝑏1
Dacă un coeficient de pe prima coloană este egal cu 0 (în acest caz 𝑏1 ), acesta va fi numitorul
următoarei linii din tabel. Pentru a nu avea împățire cu zero, coeficientul respectiv va fi notat cu 𝜀, ca
o valoare neglijabilă foarte apropiată de 0 și de același semn cu coeficientul anterior de pe prima
coloană a tabelului. Folosind această metodă, algoritmul poate continua.
5𝑏1 − 2𝑏2 5𝜀 − 4 4 𝑏1 − 2𝑏3 𝜀
𝑏1 = ε ⇒ 𝑐1 = = = − ; 𝑐2 = = =1
𝑏1 𝜀 𝜀 𝑏1 𝜀
În relațiile de mai sus, termenul 5𝜀 din expresia lui 𝑐1 a fost eliminat, deoarece valoarea 𝜀 este
de fapt 0 (sau foarte apropiată), astfel termenul respectiv de la numărător poate fi ignorat.
𝑏 𝑏2 −4
| 1 |
𝑏2 𝑐1 − 𝑏1 𝑐2 2 𝜀 − 𝜀
𝑐1 𝑐2
𝑑1 = − = = = 2; 𝑑2 = 0
𝑐1 𝑐1 4
−𝜀
𝑐1 𝑐2
|𝑑 𝑑 | 𝑐 𝑑 − 𝑐 𝑑 2
2 1 1 2
𝑒1 = − 1 2
= = =1
𝑑1 𝑑1 2
Tabelul Routh-Hurwitz devine:
𝑠5 2 5 3
4 2 5 1
𝑠
3 𝜀 2 0
𝑠
4
𝑠2 − 1 0
𝜀
𝑠 2 0 0
0 1
𝑠
Pe prima coloană sunt două schimbări de semn, ceea ce înseamnă că există doi poli în
semiplanul drept, deci sistemul este instabil.
3𝑠3 +2𝑠+5
Exemplul 8: 𝐻𝑐𝑙 (𝑠) = 𝑠4 +𝑠3 +3𝑠2 +2𝑠+2
𝑠4 1 3 2
𝑠3 1 2 0
2 𝑏1 𝑏2 𝑏3
𝑠
𝑠 𝑐1 𝑐2 𝑐3
0 𝑑1
𝑠
1 3 1 2
| | 3−2 | | 2
𝑏1 = − 1 2 = = 1; 𝑏2 = − 1 0 = = 2
1 1 1 1
8
1 2 1 0
| | 2−2 | |
𝑐1 = − 1 2 = = 0; 𝑐2 = − 1 0 = 0
1 1 1
Când toți coeficienții unui rând sunt egali cu zero, aceștia vor fi înlocuiți cu coeficienții derivatei
polinomului auxiliar anterior (derivata liniei anterioare din tabel).
𝑠4 1 3 2
𝑠3 1 2 0
2 1 2 0
𝑠
𝑠 0 0 0
0 𝑑1
𝑠
𝑠4 1 3 2
𝑠3 1 2 0
𝑠2 1 2 0
𝑠 2 0 0
0 𝑑1
𝑠
1 2
| | 4
𝑑1 = − 2 0 = = 2
2 2
Tabelul Routh-Hurwitz devine:
𝑠4 1 3 2
3 1 2 0
𝑠
2 1 2 0
𝑠
𝑠 2 0 0
0 2
𝑠
Funcția poate fi descărcată de pe Moodle sau poate fi implementată prin următorul cod, salvat
într-un fișier cu numele routh_table.m.
9
function [rh_table, num, poles] = routh_table(H)
% check if the input parameter is valid
if (isa(H, 'ss'))
H = tf(H);
end
if (~isa(H, 'tf'))
error('Invalid input system');
end
num_rows = length(den);
num_cols = round(num_rows/2);
% initialize table
rh_table = zeros(num_rows, num_cols);
% populate first row
rh_table(1,:) = den(1,1:2:num_rows);
% |x1 x2|
% |x3 x4| x2x3 - x1x4
% coefficient = - -------- = -----------
% x3 x3
10
% check if the row is equal to zero
if (rh_table(i, :) == 0)
aux_poly_order = num_rows - i + 1;
aux_poly = zeros(1, aux_poly_order + 1);
col_index = 1;
for j = 1:2:length(aux_poly)
aux_poly(1, j) = rh_table(i - 1, col_index);
col_index = col_index + 1;
end
Funcția routh_table astfel definită poate fi apelată din directorul în care a fost salvată,
folosind una din următoarele metode:
>> [table, sign_changes, poles] = routh_table(H)
>> [table, sign_changes, poles] = routh_table(sys)
unde H este o funcție de transfer definită anterior iar sys este o reprezentarea cu modelul
variabilelor de stare definită anterior.
Pentru a reprezenta grafic polii și zerourile sistemului, se folosește funcția MATLAB pzplot:
>> pzplot(H)
>> pzplot(sys)
11
Funcția poate fi descărcată de pe Moodle sau poate fi implementată prin următorul cod, salvat
într-un fișier cu numele routh_table.sci.
function [rh_table, num, poles]=routh_table(H)
// check if the input parameter is valid
if (typeof(H) == 'state-space') then
H = ss2tf(H);
end
if (type(H) ~= 16) then
error('Invalid input system');
end
num_rows = length(den);
num_cols = round(num_rows/2);
// initialize table
rh_table = zeros(num_rows, num_cols);
// populate first row
rh_table(1, :) = den(1,1:2:num_rows);
// populate second row
if (modulo(num_rows,2) ~= 0) then
rh_table(2, 1:num_cols - 1) = den(1, 2:2:num_rows);
else
rh_table(2, :) = den(1, 2:2:num_rows);
end
12
// check if the row is equal to zero
if (rh_table(i, :) == 0) then
aux_poly_order = num_rows - i + 1;
aux_poly = zeros(1, aux_poly_order + 1);
col_index = 1;
for j = 1:2:length(aux_poly)
aux_poly(1, j) = rh_table(i - 1, col_index);
col_index = col_index + 1;
end
poles = roots(H.den);
endfunction
În Scilab, orice modificare în definiția unei funcții nu va fi încărcată automat. După orice
modificare sau după definirea unei noi funcții, aceasta trebuie reîncărcată folosind comanda getd în
fereastra Scilab, în interiorul directorului unde funcția a fost definită. După ce funcția a fost
(re)încărcată, ea poate fi apelată folosind una din următoarele metode:
--> getd
--> [table, sign_changes, poles] = routh_table(H)
--> [table, sign_changes, poles] = routh_table(sys)
unde H este o funcție de transfer definită anterior iar sys este o reprezentarea cu modelul
variabilelor de stare definită anterior.
Pentru a reprezenta grafic polii și zerourile sistemului, se folosește funcția Scilab plzr:
>> plzr(H)
>> plzr(sys)
13
4. Desfășurarea lucrării
5. Întrebări și exerciții
𝐾𝑠+5 1
1. Pentru sistemul din Fig. 7 având 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1, determinați
valorile lui 𝐾 pentru care sistemul este stabil.
10𝑠+𝐾 1
2. Pentru sistemul din Fig. 7 având 𝐶(𝑠) = 𝑠
; 𝐺(𝑠) = 𝑠(𝑠+1)(𝑠+9) ; 𝐻(𝑠) = 1, determinați
valorile lui 𝐾 pentru care sistemul este stabil.
14
3. Determinați valorile lui 𝐾 pentru care sistemul următor este stabil:
0 1 0 0 0
0 0 1 0 0
𝐴=[ ] ; 𝐵 = [ ] ; 𝐶 = [10 𝐾 0 0]; 𝐷 = [0]
0 0 0 1 0
−10 𝐾 −9 −10 1
15