Sunteți pe pagina 1din 23

Cruise Control:Metoda Spatiul Starilor pentru proiectarea unui controller

In acesta prezentare vom proiecta si observa un controller pentru sistemul cruise-control folosind modelul reprezentarii de stare. Comenzi cheie din MATLAB folosite in aceasta prezentare: ss , feedback Continut: Ecuatiile de stare Cerintele de proiectare Proiectarea controller-ului folosind pozitionarea cu poli pole placement Referinta de intrare

Ecuatiile de stare Ecuatiile de miscare in spatiul starilor sunt urmatoarele:

unde:
(m) (b) (u) (v) masa vehicolului coeficientul de amortizare forta nominala de control 1000 kg 50 N.s/m 500 N

viteza vehicolului unde y=v este iesirea din sistem

Cerintele de modelare Timpul de raspuns < 5s Abatere < 10% Eroarea la stabilizare < 2% Proiectarea controller-ului folosind pozitionarea cu poli pole placement Schema de raspuns a sistemului este prezentata mai jos:

unde: K = matricea de raspuns spatiului starilor u = r Kv = controlul intrarii

Va amintiti din tutorialul Spatiul Starilor ca putem folosi tehnica de pozitionare a polilor pentru a obtine rezultatul dorit. Polii unui sistem cu bucla inchisa pot fi gasiti din ecuatia caracteristica: determinantul matricei [sI-(A-B*K). Daca polii sistemului pot fi plasati in locul dorit prin gasisrea unei matrice potrivite K, atunci poate fi obtinuta iesirea dorita. In aceasta prezentare, vor fi alesi polii, apoi vom folosi MATLAB pentru a gasi matricea corespunzatoare K. Acum, trebuie sa gasim locul de pozitionare al polilor pentru sistemul nostru. Deoarece, la noi, [sI-(A-B*k)] este de forma 1x1, avem doar un pol de pozitionat. Pozitionam arbitrar polul la -1,5. La fel ca in tutorialul Spatiul starilor, comanda MATLAB place va fi folosita

pentru a gasi matricea de control K. Creati un nou fisier m-file si introduceti comenzile urmatoare. Rularea fisierului m-file in fereastra de comanda a programului MATLAB ar trebui sa ne returneze matricea de control si raspunsul trapta de mai jos:

m = 1000;

b = 50;

t = 0:0.1:10;

u = 500*ones(size(t));

A = [-b/m];

B = [1/m];

C = [1];

D = [0];

sys = ss(A,B,C,D);

x0 = [0];

p1 = -1.5;

K = place(A,B,[p1])

sys_cl = ss(A-B*K,B,C,D);

lsim(sys_cl,u,t,x0);

axis([0 10 0 0.35])

K =

1450

Cum puteti vedea, timpul de raspuns e satisfacator, dar eroarea la stabilizare este prea mare. Referinta de intrare Un factor de scalare numit Nbar (schema este aratat mai jos) poate fi folosit pentru a elimina eraorea la stabilizare. Putem folosi functia rscale pentru a calcula factorul de scalare. Intrarea este deja multiplicata de 500 de ori, si vrem viteza de stabilizare sa fie de 10 m/s, deci trebuie sa tinem cont si de acesti factori.

Copiati urmatoarele comenzi intr-un fisier m-file in fereastra de comanda MATLAB. Trebuie sa obtineti raspunsul treapta aratat mai jos.

Nbar = rscale(sys,K)*10/500;

sys_cl = ss(A-B*K,B*Nbar,C,D);

lsim(sys_cl,u,t,x0);

axis([0 10 0 11])

Cum observati, eraoare la stabilizare a fost eliminata. Timpul de raspuns este mai mic de 5s iar abaterea este de fapt 0. Toate cerintele de proiectare sunt satisfacute.

Cruise Control: Proiectare unui Controller digital


In versiunea digitala de control a problemei sistemului Cruise Control, vom folosi metoda de proiectare root-locus pentru controllerul digital. Comenzi cheie din MATLAB folosite: tf , c2d ,rlocus , zgrid , feedback , step Continut:

Modelul sistemului Parametri sistemului Specificarea performantelor Functia discreta de transfer Root-locus in Planul-Z Compensarea folosind Controller-ul digital

Modelul sistemului Modelul functiei de transfer pentru problema sistemului Cruise control este dat mai jos. Pentru derivata, va rugam sa vedeti pagina Cruise Control: Modelarea Sistemului.

Parametri sistemului In acest exemplu sa presupunem ca parametri sistemului sunt:


(m) masa vehicolului 1000 kg

(b)

coeficientul de amortizare

50 N.s/m

(r)

viteza de referinta

10 m/s

(u)

forta nominala de control

500 N

Specificarea performantelor Avem nevoie de un controller care sa corespunda urmatoarelor criterii de proiectare:

timp de raspuns < 5s abaterea < 10% eroarea la stabilizare < 2%

Functia discreta de transfer Primul pas in efectuarea unei analize discrete a sistemului este gasirea functiei discrete de transfer echivalenta pentru partea continua. Vom transforma functia de transfer de mai sus (Y(s)/U(s)) intr-o functie discreta de transfer folosind functia MATLAB c2d. Pentru a folosi aceasta functie, trebuie specificate trei argumente: timpul de esantionare Ts, si metoda. Ar trebui deja sa fiti familiari cu introducerea de matrici num si den. Timpul de esantionare Ts, in unitatea de sec/esantion, ar trebui sa fie mai mic decat (zoh). Timpul de esantionare il lasam 1/50 sec; este suficient de rapid presupunand ca latimea de banda este 1 rad/sec. Acum introduceti comenzile urmatoare intr-un fisier m-file in fereastra de comanda din MATLAB. 1/(30*BW), unde BW este

frecventa latimii de banda a buclei inchise. Pentru metoda, vom folosi Zero-order hold.

m = 1000;

b = 50;

u = 500;

s = tf('s'); P_cruise = 1/(m*s+b);

Ts = 1/50;

dP_cruise = c2d(P_cruise,Ts,'zoh') dP_cruise =

1.999e-05

---------

z - 0.999

Sample time: 0.02 seconds

Discrete-time transfer function.

Root-locus in Planul-Z Va amintiti din tutorialul Control Digital ca functia MATLAB zgrind poate fi folosita pentru a gasi o regiune acceptabila a root-locus discreta care na da un raspuns K dorit. Comanda zgrid necesita doua argumente: frecventa naturala (Wn) si rata de amortizare (zeta). Aceste doua argumente pot fi aflate din timpul de raspuns si cerintele de abatere si urmatoarele 2 ecuatii:

unde:

zeta = rata de amortizare

Wn = frecventa naturala (rad/sec) Tr = timp de raspuns % OS = abaterea maxima

Deoarece cerintele pentru timpul nostru de raspuns si abatere sunt de 5 sec si 10% , putem determina ca frecventa naturala (Wn) trebuie sa fie mai amre decat 0.36 rad/sec iar rata de amortizare (zeta) trebuie sa fie mai mare decat 0.6. Sa generam root-locus si sa folosim comanda zgrid pentru a gasi regiunile aceptabile ale root-locus. Dra inainte de asta, argumentul frecventei naturale pentru zgrid trebuie sa fie in unitati de masura rad/esantion, deci Wn = 0.36*Ts = 0.0072 rad/esantion. Acum adaugati urmatoarele comenzi si rulati programul. Trebuie sa obtineti:

Wn = 0.0072;

zeta = 0.6;

rlocus(dP_cruise)

zgrid(zeta, Wn)

axis ([-1 1 -1 1])

Regiunea din planul complex care ne intereseaza este cea aproape de punctul (1,0), deci ar trebui sa mariti aceasta zona. Rulati din nou programul folosind urmatoarele comenzi pentru axe si figura ar trebui sa arate ca mai jos:

axis ([0.95 1 -.1 .1])

Linia punct din dreapta indica locatiile constantei frecventei naturale (Wn), si frecventa naturala este mai mare decat 0.0072 in exteriorul liniei. Cealalta linie punct indica locatia constantei ratei de amortizare (zeta), iar rata de amortizare este mai mare decat 0.6 in interiorul liniei. Linia verticala franta este o portiune din cercul unitate care este calculat la rezolutie mica. In figura de mai sus, puteti observa ca partea din root-locus este in interiorul zonei dorite. Haideti sa gasim un raspuns specific (K) folosind functia MATLAB rlocfind si apoi sa obtinem raspunsul treapta corespunzator. Ruland comanda [K,poles] = rlocfind (dP_cruise) in fereastra de comanda din MATLAB, ne va indruma sa selectam un punct pe root-locus. Va amintiti ca daca selectati un pol prea in interiorul cercului unitate, atunci rspunsul treapta va fi prea rapid indicand o acceleratie fizica imposibila. Asadar,

trebuie sa selectati un pol apropiat de intersectia constantei frecventei naturale si axa reala. Selectati punctul aproape de 0.99 aratat in imaginea de mai jos:

Dupa selectarea unui punct, trebuie sa vedeti urmatoarele rezultate afisate in fereastra de comanda din MATLAB indicand punctul ales, punctul pe root-locus cel mai apropiat de pole, si raspunsul K care pozitioneaza polul buclei inchise.
Select a point in the graphics window

selected_point =

0.9900 - 0.0003i

K =

451.1104

poles =

0.9900

Pentru a raspunsul treapta in bucla inchisa, adaugati urmatorul cod in fisierul m-file:

K = 451.1104;

sys_cl = feedback(K*dP_cruise,1);

r = 10;

figure

step(r*sys_cl,10);

Acest raspuns satisface timpul de raspuns si abaterea cerute. Dar eraoare la stabilizare este de 11%. Pentru a obtine abaterea la stabilizare dorita, vom modifica controllerul digital.

Compensarea folosind Controller-ul digital Un compensator cu intarziere a fost adaugat sistemului pentru a obtine raspunsul dorit. In aceasta versiune de control digital al cruise controlului , vom modifica controllerul digital existent prin adaugarea unui compensator cu intarziere de forma aratat mai jos:

Acesta este un ghid pentru proiectarea unui compensator digital de conducere si intarziere si un chid pentru proiectarea unui compensator de timp continuu de conducere si intarziere. Metoda discreta descrisa spune ca zero pentru compensator trebuie ales aproximativ sa anuleze unul dintre poli cat timp este stabil. Astfel, vom alege ca zero, zo =0.999. Pentru a reduce eroarea la stabilizare cu un factor de 5, alegem po = 0.9998. Pentru a avea un raspuns de 1 la frecventa 0, numaratorul este multiplicat de Kd=(1 zp )/(1 zo ) =0.2 ori inainte de a folosi root-locus. A se mentiona ca tot compensatorul este multiplicat cu rapunsul in bucla determinat de root-locus. Acum avem functia discreta a transfer a compensatorului. Sa generam root-locus si sa obtinem raspunsul treapta. Prima data creati un nou fisier m-file si introduceti comenzile:

m = 1000;

b = 50;

u = 500;

s = tf('s'); P_cruise = 1/(m*s+b); Ts = 1/50; dP_cruise = c2d(P_cruise,Ts,'zoh');

z = tf('z',Ts); C = 0.2*(z - 0.999)/(z - 0.9998);

Wn = 0.0072; zeta = 0.6;

rlocus(C*dP_cruise) zgrid(zeta, Wn) axis([0.98 1 -0.01 0.01])

Apoi introduceti comenzile [K,poles] = rlocfind(C*dP_cruise) in linia de comanda si alegeti iar o locatie a polului apropiata de 0.99 cum este aratat in figura de mai jos:

Dupa ce ati ales un punct, trebuie sa vedeti afisat pe ecran in fereastra de comanda MATLAB indicand punctul ales, punctul de pe root-locus cel mai apropiat de pol si raspunsul K ce pozitioneaza polul buclei inchise:
Select a point in the graphics window

selected_point =

0.9900 - 0.0000i

K =

2.4454e+03

poles =

0.9900 0.9900

Adaugati codul:

K = 2.4454e+03;

sys_cl = feedback(K*C*dP_cruise,1);

r = 10;

step(r*sys_cl,10);

Acest timp de raspuns la fel de rapid ca cel precedent, are eraoarea la stabilizare redusa la 2%. Sistemul satisface toate cerintele de proiectare in timp ce necesita un efort de control rezonabil. Nota: O problema de proiectare nu are neaparat un raspuns unic. Pentru exercitiu, puteti folosi altfel de compensator pentru a obtine un raspuns mai bun decat cel aratat mai sus.

SIMULINK MODELARE
Continut: Setare fizica si ecuatiile sistemului Construirea modelului Raspunsul in bucla deschisa

Setarea fizica si ecuatiile sistemului Modelul sistemului Cruise Control este realtiv simplu. Daca se presupune ca rezistenta al rostogolire si rezistenta aerului sunt proportionale cu viteza de deplasare a autovehicolului, atunci problema se reduce la sistemul de masa si amortizare de mai jos:

Folosind a doua lege a lui Newton, ecuatia ce guverneaza sistemul devine:

unde u este forta generata intre raota/cauciuc si poate fi controlata direct. Pentru acest exemplu, presupunem ca:
m = 1000 kg

b = 50 N.sec/m

u = 500 N

Construirea modelului Acest sistem va fi modelat prin insumarea fortelor ce actioneaza asupra masei si integrarea acceleratiilor pentru a rezulta viteza. Deschideti Simulink si o noua fereastra de model. Intai, vom modela integrala acceleratiei:

Inserati un Bloc Integrator ( din libraria Continuous) si trasati lini spre si de al el din terminalele de iesire si intrare.

Numiti linia de intrare vdot iar pe cea de iesire v. pentru a realiza aceasta operatie dublu click in locul liber de deasupra liniei.

Deoarece acceleratia (dv/dt) este egala cu suma fortelor impartita de masa, vom imparti semnalul de intrare cu masa.

Inserati un bloc gain (libraria Math Operations) conectat la blocul integrator la terminalul de intrare si trasati o linie catre intrarea blocului Gain.

editati blocul Gain prin dublu click pe el si schimbati valoarea la 1/m schimbati eticheta blocului Gain cu Inertia prin click pe cuvantul Gain de sub bloc.

Acum, vom adauga fortele din ecuatia (1).Prima, va fi forta de amortizare. Adaugati un Bloc Sum (Math Operations) la linia ce duce al blocul Inertia Gain Schimbati semnul blocului Sum cu + Inserati un bloc Gain sub blocul Inertia, selectatil prin click simplu si selectati Flip din meniul Format pentru o intoarcere de al stanga la dreapta. Setati valoarea blocului la b si redenumitil damping trasati (tineti apasat CTRL) o linie de la iesirea blocului integrator si conectati la intrarea blocului Damping.

trasati o linie de la iesirea blocului Damping la intrarea negativa la blocului Sum

Cea de a doua forta ce actioneaza asupra masei este intrarea de control, u. Vom aplica o intrarea treapta. Inserati un Bloc Step (libraria Sources) si conectati-l cu o linie la intrarea pozitiva a blocului Sum. Pentru a vedea viteza de iesire, inserati un bloc Scope (libraria Sinks) conectat la iesirea integratorului.

pentru a furniza un semnal treapta corespunzator de 500 al timp = 0, dublu click pe blocul Step si steati Step Time la 0 si valoarea finala la u

Raspunsul in bucla deschisa Pentru a simula sistemul, intai, trebuie setat un timp corespunzator pentru simulare. Selectati Parameters din meniul Simulation si introduceti 120 in campul Stop Time. 120 de secunde este destul de mult pentru a vizualiza un raspuns in bucla deschisa.

Acum trebuie setati parametri fizici. Rulati urmatoarele comenzi in MATLAB:

m = 1000;

b = 50;

u = 500;

Rulati simularea (CTRL+T sau Start din Simulation Menu). Dupa ce se termina simularea, dublu click pe blocul Scope si dati clik pe Autoscale. Veti vedea ceva asemanator cu imaginea de mai jos:

Observand graficul, vrem sa imbunatatim raspunsul sistemului.

S-ar putea să vă placă și