Documente Academic
Documente Profesional
Documente Cultură
RIM
Control si reglare
În acest capitol sunt prezentate şi analizate cele mai des întâlnite tipuri de regulatoare -
regulatoarele cu structură fixă de tip: P - proporţional, PI - proporţional, integral, PID -
proporţional, integral, derivativ,
Pentru acestea se detaliază modul de acordare (proiectare), utilizând metoda alocării (plasării)
polilor, în funcţie de performanţele dinamice dorite pentru sistem.
Proiectarea regulatorului automat se face pe baza datelor iniţiale furnizate de caracteristicile
sistemului şi ale elementului de execuţie, cât şi pe baza performanţelor de regim tranzitoriu şi
staţionar ce se urmăresc a fi realizate.
Pentru regimul tranzitoriu, se impun prin datele iniţiale de proiectare valori maxime pentru
suprareglaj, durata regimului tranzitoriu, în special pentru procesele rapide, timpul de creştere, ş.a.
Referitor la regimul staţionar, se impune de obicei valoarea erorii staţionare pentru un anumit tip de
mărime de intrare (treaptă, rampă) şi/sau de perturbaţie.
P u (t ) K P (t ) H R s K P
KI
PI u (t ) K P (t ) K I (t )dt H R s K P
s
1
Conf. S.Paturca
d (t ) KI
PID u(t ) K P (t ) K I (t )dt K D HR s KP KD s
dt s
Efectul fiecăreia componentele a regulatorului este ilustrat în figura 14.2. Acţiunea fiecărei
componente a regulatorului poate fi descrisă astfel:
proporţională – asigură un răspuns proporţional (liniar) cu eroarea;
integrală – ţine evidenţa erorilor acumulate în timp, avand efect de filtrare;
derivativă – mărimea de comandă este proportională cu viteza de variaţie a erorii (sau a
abaterii).
u (t )
timp (s.)
Figura 14.2 Acţiunea proporţională - P, integrală - I şi derivativă - D asupra mărimii de comandă în proces
2
Conf. S.Paturca
Problema 14.1
A.14.1.1 Un sistemul de reglare automată trebuie să permită reglarea continuă a vitezei unui motor
de curent continuu în toată plaja de valori posibile. Se considera un motor cu următoarele date: R =
1Ω, L = 0.5H, K = 0.01Nm/A, F = 0.1Nm/rad/s, J=0.01Kgm2. Se va aplica o intrare de tip trepata de
valoare 1 [rad/sec]. Se urmareste analiza:
a) răspunsului in viteza al motorului atunci cand sistemul de reglare este buclă deschisă şi
respectiv în buclă închisă fiind comandat cu un regulator P şi PID.
b) efectul componentelor unui regulator P şi PID asupra răspunsului in viteză al motorului de
curent continuu, folosind funcţii Matlab. Se vor considera pentru regimul dinamic
următoarele valori pentru mărimile ce-l caracterizează: timp de stabilizarea mai redus de 2
sec, ; suprareglaj 5% ; eroarea de regim stationar ss 1% .
Soluţie:
%------------------------------------------------------------
% Date initiale al motorului de curent continuu
R = 1; %[ohm] Rezistenta rotorului
L = 0.5; %[H] Inductivitatea rotorului
J = 0.01; %[kgm2] Momentul de inertie al rotorului
K = 0.01; %[Nm/A] Constanta de cuplu
F = 0.1; %[Nms] Coef. de frecari vascose
% Functia de transer a motorului de c.c. - procesul
num = K; % numarator
den = [(J*L) ((J*R)+(L*F)) ((F*R)+K^2)]; % numitor
functie_motor = tf(num,den)
subplot(3,1,1);
t = 0:0.01:2; % timpul de simulare
step(functie_motor,t); % raspunsul sistemului in bucla deschisa
title('Raspunsul sistemului in bucla deschisa'); grid;
K_p = 700;
num_Kp = K_p*num;
den_Kp = den;
[numf,denf] = cloop(num_Kp,den_Kp);
subplot(3,1,2);
step(numf,denf,t);
title('Raspunsul sistemului in bucla inchisa -regulator P');
grid;
3
Conf. S.Paturca
% Determinarea functiei de transfer a regulatorului
kp = 200;
ki = 200;
kd = 10;
regulator = tf([kd kp ki],[1 0]);
sys = feedback(regulator*motor,1);
subplot(3,1,3);
step(sys,t);
title('Raspunsul sistemului in bucla inchisa -regulator PID');
grid;
%------------------------------------------------------------
Transfer function:
0.01
---------------------------
0.005 s^2 + 0.06 s + 0.1001
0.05
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time (sec)
Raspunsul sistemului in bucla inchisa -regulator P
2
Amplitude
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time (sec)
Raspunsul sistemului in bucla inchisa -regulator PID
2
Amplitude
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time (sec)
4
Conf. S.Paturca
A.14.1.2 Studiul efectului componentelor unui regulator P şi PID asupra răspunsului in viteză al
motorului de curent continuu
- Control proportional
Kp = 100;
C = pid(Kp);
sys_cl =
feedback(C*P_motor,1);
t = 0:0.01:5;
step(sys_cl,t)
grid
title('Step Response
with Proportional
Control')
- Control PID
Kp = 75;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);
sys_cl =
feedback(C*P_motor,1);
step(sys_cl,[0:1:200])
title('Control PID')
Kp = 100;
Ki = 200;
Kd = 1;
C = pid(Kp,Ki,Kd);
sys_cl =
feedback(C*P_motor,1);
step(sys_cl, 0:0.01:4)
grid
title('Control PID')
5
Conf. S.Paturca
Kp = 100;
Ki = 200;
Kd = 10;
C = pid(Kp,Ki,Kd);
sys_cl =
feedback(C*P_motor,1);
step(sys_cl, 0:0.01:4)
grid
title('Control PID’)
Concluzie: Acordarea unui regulator cu structură fixă P, PI, PID implică determinarea coeficienţilor
K P , K I , K D astfel încât sistemul rezultant să aibă un comportament cât mai apropiat de cel dorit.
Regulator PROCES
y* u y
H PI H p
H P , este comandat printr-un regulator de tip PI. Sunt cunoscute:
Sistemul liniar de ordinul I cu funcţia de transfer generală
1. funcţia de transfer a sistemului (procesul), de ordinul 1 ce va fi reglat, poate fi scrisă sub forma:
b
s t R
H P b a în care: (14.1)
d z t Z
a d
unde reprezinta operatorul transformatei Laplace pentru sistemele cu timp continuu, respectiv operatorul transformatei Z
pentru sistemele cu timp discret, iar coeficienţii a d ,bd sistemului cu timp discret pot fi calculati cu relatiile:
b h , dacã a 0 ah
b şi ad e
bd
bd 1 e ah dacã a 0
a
, (14.2)
6
Conf. S.Paturca
KI
KP
H PI (14.3)
K
K p i
1
Note: 1. Echivalentul discret al funcţiei de transfer pentru procesul controlat a fost obţinut prin aplicarea transformatei Z, utilizand
relaţia:
z 1 H P (s) z unde T este perioada de eşantionare
H P ( z) T h
z s ze
2. Funcţia de transfer a regulatorului PI discret s-a obţinut alegând echivalentului discret al integratorului 1 / s de forma:
1 T T Ki
=> H PI ( z ) K P K I Kp
s z 1 z 1 z 1
în care funcţia de transfer a regulatorului discret are următorii coeficienţii proporţionali şi integrali: K p K P şi K i K I T .
Observaţie: Pentru cazul sistemelor de ordinul I, utilizarea unui regulator PI permite alocarea polilor sistemului rezultant, prin
alegerea corespunzătoare a componentelor KP şi KI .
Deoarece regulatorul PI şi sistemul de ordinul 1 sunt două sisteme legate în serie funcţia de transfer echivalentă serie este
următoarea: H ech serie s H PI H P . Astfel, sistemul echivalent cu bucla de reacţie închisă are funcţia de
transfer:
H PI H P
H ech
1 H PI H P
de unde rezultă pentru cazul:
b s K P K I
continuu: H ech s 2
(14.4)
s sK P b a K I b
discret: H ech ( z)
K p z Ki Kp bd (14.5)
z 2 z K p bd ad 1 bd K i K p ad
Etapa 2 : Impunerea performanţelor SRA implică stabilirea răspunsului acestuia
Întrucât atât stabilitatea unui sistem cât şi performanţele sale dinamice depind de poziţia polilor functiei de transfer rezultă să este
necesară alegerea valorilor dorite pentru rădăcinile numitorului (polii) funcţiei de transfer în buclă închisă H ech () pe baza
performanţelor dorite pentru sistemul de reglare.
Construirea polinomului dorit pentru numitorul funcţiei de transfer H ech () cunoscând rădăcinile acestuia
Se impune ca pentru acordarea regulatorului PI poziţiile poliilor să corespundă unui sistem de ordin egal cu ordinul polinomului de
la numitorul functiei de transfer a sistemului echivalent H ech () (ordin II).
Pentru cazul continuu: Se consideră răspunsul unui sistem standard de ordin II, descris de funcţia:
2
H 2( s ) (14.6)
s 2 s 2 2
7
Conf. S.Paturca
definit prin factorul de amortizare şi de pulsaţia proprie . Mărimea determină frecvenţa oscilaţiilor ce apar, şi se alege
corelat cu pulsaţia proprie a sistemului de reglat p sist de reglat . Impunerea performanţelor unui sistem de ordinul doi
înseamnă impunerea perechii de valori ( ,), adică a polilor funcţiei de transfer de ordinul II, H 2 (s) :
s1,2 j 1 2 .
Pentru cazul discret: Ţinând cont că unui punct s1 din planul complex Laplace, îi corespunde în planul complex Z punctul
s1h
z1 e , unde h – pasul de eştantionare, echivalentul discret pentru polii s1, 2 este:
z1,2 e h cos h 1 2 j sin h 1 2 (14.7)
Observaţie: Pentru acordarea regulatoarelor este necesară determinarea coeficienţilor regulatorului K P , K I , astfel încât sistemul
rezultant să aibă un comportament cât mai apropiat de cel dorit. Se va ţine cont de suprareglajul maxim acceptat şi banda de trecere
dorită pentru sistemul rezultant.
s 2 s K P b a K I b s 2 2s 2
din care se obţine soluţia sistemului, adică coeficienţii regulatorului PI cu timp continuu, notaţi K P _ c, K I _ c :
2 a
2 K P b a K P _ c b
2 => 2
K I b K _
I c b
Cazul discret: Polinomul dorit pentru funcţia de transfer în buclă închisă este:
Egalând numitorul funcţiei (12.5) cu polinomul dorit al funcţiei de transfer echivalente Pdoritz , rezultă sistemul de două
ecuaţii ale cărui necunoscute sunt coeficienţii regulatorului PI., K P , K I :
p1 ad 1
KP bd ad 1 p1 K P d bd
=>
KI KP bd ad p2 K _ p2 ad Kp
I d bd
Note: A) Atât în cazul continuu cât şi în cel discret trebuie să obţinem coeficienţi K P , K I 0 . Dacă în urma procesului de
acordare K I rezultă negativ, trebuie impusă o bandă de trecere dorită mai mare.
8
Conf. S.Paturca
B) În general însă dimensiunea n a SRA este mai mare de doi. Alocarea a mai multor poli doriţi se face astfel: se aleg 2 poli
principali care vor influenţa în cea mai mare măsură răspunsul sistemului rezultant şi următorii poli secundari - cu o
contribuiţie aproape neglijabilă. În acest caz, comportamentul sistemului rezultant va fi foarte asemănător cu cel al unui
sistem de ordinul II. Deci, pentru cazul sistemelor de ordin mai mare decât 2, pentru polinomul dorit se impun 2 poli exact ca
la un sistem de ordinul 2 ( s1 şi s2 ), impunând perechea ( ,), iar ceilalţi poli ( s3 , s4 , s5 , ..., sn - pentru cazul
polinomului de ordin n) se aleg egali între ei, pe axa reală, cu partea reală de 10 ori mai mare decât partea reală a polului s1 .
p2
Pdorit s s s3 s s 4 s s5 ...s s n s 2 s 2 2
b
pentru procese cu timp continuu poate avea forma: H p s 2
s a1 s a0
iar echivalentul discret al funcţiei de transfer a procesului este:
b1d z b0d
H P (z) 2
z z a1d a0 d
KI _ c
H PID s K P _ c KD _ cs
s
unde KP _c,KI _c, KD _c coeficienţii proporţional, intregral şi derivativ;
În figura 14.7.a se prezintă schema de reglare a unui proces de ordinul II, comandat printr-un regulator PID cu timp continuu.
9
Conf. S.Paturca
y* u y
H PID s K P _ c
KI _ c
KD _ cs H p s
s
Figura 14.7 Reglarea unui proces de ordinul II cu regulator PID cu timp continuu
De multe ori în practică aplicarea părţii derivative se face numai asupra semnalului de reacţie, obţinându-se schema de reglare din
figura 14.7.b. Aceasta are ca principal efect evitarea obţinerii unor variaţii mari ale comenzii cauzate de partea derivativă când apar
modificări bruşte ale referinţei. Formulele de acordare se aplică în continuare şi pentru schema de reglare 14.7.b.
H PI (s)
*
y KI _ c u y
KP _ c
s
H p s
HD(s)
KD _ cs
pentru cazul discret se obţine folosind echivalentul discret al integratorului şi echivalentul discret al derivatorului:
T z 1 1 z 1
H R ( z) K p _ d Ki _ d Kd _ d KP _ d KI _ d KD _ d
z 1 zT z 1 z
unde: K P _ d K p _ d , K I _ d Ki _ dT şi K D _ d K d _ d / T sunt coeficienţii proporţional, intregral şi
derivativ ai regulatorului discret. În acest caz, regulatorul şi procesul au numitorul funcţiei de transfer de ordin 2, deci
sistemul rezultant va fi de ordinul IV. Prin aplicarea metodei de alocare a polilor se obţine la un sistem de 4 ecuaţii cu 4
necunoscute - coeficienţii KP _ d , KI _ d şi KD _ d şi constanta filtrului pe partea derivativă. Din acest considerent
pentru cazul discret filtrul se ia în considerare, şi funcţia de transfer a regulatorului PID cu timp discret va avea forma:
1 z 1
H R ( z) K P _ d K I _ d KD _ d
z 1 zr
unde r [0,1] depinde de constanta D a filtrului şi K D _ d K D _ d ' (1 r ) .
In figura 14.8.a prezintă schema de reglare a unui proces de ordinul II, comandat printr-un regulator PID cu timp discret.
y* KI _ d u y
z 1
HR (z) KP _ d
z 1
KD _ d
z r
H P (z )
10
Conf. S.Paturca
Figura 14.8.a Reglarea unui proces de ordinul II cu regulator PID cu timp discret
În cazul când partea derivativă se aplică numai pe semnalul de reacţie, se obţine schema de reglare din figura 14.8.b. Ca şi în cazul
regulatoarelor PID cu timp continuu, această soluţie are ca principal efect evitarea obţinerii unor variaţii mari ale comenzii cauzate de
partea derivativă când apar modificări bruşte ale referinţei.
H PI (z )
*
y K I_d u y
K p_d
z 1 H p s
H D (z )
z 1
K I_d
zr
Figura 14.8.b Utilizarea unui regulator PID cu timp discret cu partea D numai pe reacţie
H PID H P
H ech
1 H PID H P
de unde rezultă:
H ech s
K D_c s2 KP_c s KI _c b
s 3 s 2 K D _ c b a1 s K P _ c b a0 K I _ c b
2 K P _ d K D _ d ;
1 K I _ d K P _ d 1 r 2 K D _ d ;
0 K P _ d r K I _ d r K D _ d
11
Conf. S.Paturca
Pentru cazul continuu alocarea poliilor de la numitorul funcţiei de transfer echivalente se face prin alegerea a 2 poli principali - care
vor influenţa în cea mai mare măsură răspunsul sistemului rezultant prin impunerea perechii ( ,), la fel ca în cazul regulatorului PI
şi un al treilea pol secundar – cu o contribuţie aproape neglijabilă, care se plasează pe axa reală negativă la o distantă mult mai mare
Pentru cazul discret comportamentul sistemului rezultant de ordin IV va fi foarte asemănător celui din cazul sistemului de ordinul II.
Alocarea poliilor este şi în acest caz analogă cazului continuu, prin alegerea a:
2 poli pricipali cu influenţa în cea mai mare aspura răspunsului sistemului rezultant, astfel încât să corespundă în planul s
polilor unui sistem cu timp continuu de ordinul II, definit prin factorul de amortizare şi pulsaţia naturală
doi poli secundari cu o contribuţie aproape neglijabilă, spre exemplu z3, 4 e h , unde 5 10 .
Numitorul dorit pentru funcţia de transfer rezultantă va fi de forma: z 2 z 2 p1 z p 0, unde p1 şi p2 .
Prin egalarea numitorilor funcţiilor rezultă un sistem de ecuaţii a căror necunoscute sunt coeficienţii KP , KI şi K D , pentru cazul
sistemelor cu timp continuu, de forma:
Kp_d
2 0 K I _ d r , K
2 1 0 ; K 2 K p _ d
I_d D_d
1 r 1 r
unde pentru simplificare s-au facut următoarele notaţiile:
c1 a0 d b0 d / b12d c0 b1d / b0 d
r
a1d a0 d b0 d / b12d a0 d b1d / b0 d
c3 p1 2 ; c 2 p 2 2 2 p1;
c1 2 p1 2 p 2; c0 2 p 2
b1d c 2 a0 d a1d b0 d c3 a1d 1; b1d 1 a1d b0 d
Observaţie: Toţi coeficienţii regulatorului KP,KI , KD trebuie să fie 0 . Dacă în urma procesului de acordare K P sau
12
Conf. S.Paturca
În cele ce urmează se prezintă un exemplu de proiectare a unui sisteme de reglare automată, pentru care se indică cerinţele şi se
parcurg etapele principale ale fazei de proiectare: modelarea matematică a procesului, proiectarea regulatorului şi implementarea
sistemului de reglare.
A) Cerinţe
Un sistemul de reglare automată trebuie să permită reglarea continuă a vitezei unui motor de curent
continuu cu magneţi permanenţi în toată plaja de valori posibile. Se consideră un motor cu
următoarele date: rezistenţa rotorului R = 10Ω, inductivitatea rotorului L = 1mH, constanta de cuplu
k = 0,05 Nm/A, momentul de inerţie total (include şi sarcina) J = 5*10-7 kgm2. Motorul este
alimentat printr-un amplificator care furnizează o tensiune de maxim 24V. Tensiunea furnizată este
proporţională cu o tensiune de comandă în plaja 10V. Motorul este cuplat cu un tahogenerator care
furnizează o tensiune proporţională cu viteza motorului. Relaţia de proporţionalitate este dată de
constanta tahogeneratorului – K TG = 4V/1000rpm (rpm = rotaţii pe minut). Referinţa de viteză se
impune printr-o tensiune ce poate varia în plaja 10V.
Solutia de obţinere a modelului matematic a fost analizata în capitolul 2.
B) Proiectarea regulatorului
Pentru proiectarea regulatorului este necesară stabilirea modelului matematic ale procesului, adică al
motorului de curent continuu.
yref
u y
1/ k
H U s
1 s em
Astfel, considerând că procesul este de ordinul I, pentru acordare se va utiliza un regulator cu
structură fixă de tip PI.
În figura 14.13.b se prezintă schema bloc a sistemului de reglare a vitezei maşinii de curent continuu.
13
Conf. S.Paturca
PROCES ms
K TG
KTG
Figura 14.13.b Schema bloc a sistemului de reglare a vitezei maşinii de curent continuu
14
Conf. S.Paturca
Rezultă că atunci când un motor este comandat cu tensiunea U , poate atinge teoretic o viteza
U 24V
maximă max 480rad / s . Ţinând cont şi de polaritatea negativă aceasta
k 0.05 Nm / A
înseamnă o plajă de valori de 480 rad/s.
Notă: În practică această limită nu este atinsă deoarece totdeauna există un cuplu de frecări nenul.
Tahogeneratorul cu constanta:
4V 60 s
K TG 4V / 1000rpm 0,0382V / rad / s
1000 2
va furniza o tensiune proporţională cu turaţia motorului în plaja TG 480 0.038 18.33V .
Cum acest semnal depăşeşte plaja de intrare în regulator de 10V, el trebuie atenuat, factorul de
10
divizare fiind K 0.545 .
18.33
Regulatorul citeşte reacţia procesului prin eroarea , şi trimite o comanda Uc , ambele mărimi fiind
în plaja 10V. Pentru regulator funcţia de transfer a procesului este tot ceea ce există în afara lui. În
acest context, funcţia de transfer reală a procesului pe baza căreia se va face proiectarea regulatorului
devine:
K ech
K ech em b => K ech 1 / 2 K A 1 / k KTG K 0.5
H real s
1 s em 1 sa
s K 1
em b 250 ; a 500
em em
Pentru verificare s-a folosit schema de simulare din figura 14.16.a, care include 2 subblocuri pentru
motorul de curent continuu (figurile 14.16.b şi 14.16.c) şi pentru regulatorul PI (figurile 14.16.d).
15
Conf. S.Paturca
Mux
ms ms omg
omg*, omg
omg* +/-20 [V] +/-10 [V] +/-10 [V] +/-24 [V]
-K- 1/2 eps Uc K_A U i
omg* omg
KA1 Regulator PI KA motor c.c curent omg
+/- 480 [rad/s]
+/-10 [V]
comanda
Komg KTG
Figura 14.16.b Schema Simulink pentru motorul de curent continuu, modelat ca subsistem
1
ms
1 1 omg
2 i
k 1
J.s
U L.s+R Sum3 omg
Sum2 k
T ransfer Fcn T ransfer Fcn1 2
i
omg
k
Kp Uc [V]
1
1 Kp Saturation Uc
eps
1/s Ki
Integrator Ki
16
Conf. S.Paturca
S-a aplicat o referinţă treaptă egală cu jumătate din viteza maximă posibilă a motorului. Pentru a
testa şi capacitatea de-a rejecta efectul perturbaţiilor, după 25ms de la aplicarea referinţei s-a aplicat
şi un cuplu de sarcină ms 20mNm . Evoluţia vitezei şi curentului motorului este prezentată în
figura 14.16.e şi arată evoluţia comenzii date de regulatorul PI în plaja 10V.
A) Cerinţe:
Sistemul de reglare automată trebuie să permită reglarea poziţiei unui motor de curent continuu cu
magneţi permanenţi în toată plaja 10 rotaţii. Motorul are aceleaşi date ca cel din exemplul
precedent
Motorul este alimentat printr-un amplificator care furnizează o tensiune de maxim 24V.
Tensiunea furnizată este proporţională cu o tensiune de comandă în plaja 10V.
Motorul este cuplat cu un encoder incremental de 500 linii pe rotaţie. El permite măsurarea
poziţiei motorului cu rezoluţia de 2000 pulsuri pe rotaţie.
Sistemul numeric de comandă include:
o interfaţă de encoder care permite citirea directă a variaţiei de poziţie
un convertor numeric analogic de 10 biţi şi un circuit de adaptare de semnal prin care
ieşirea convertorului este adusă în plaja 10V
o interfaţa utilizator prin care acesta poate introduce referinţa de poziţie
17
Conf. S.Paturca
B) Obţinerea modelului matematic al procesului
Funcţia de transfer a procesului de la tensiunea de comanda
U la poziţia motorului se obţine adăugând un integrator, 1/ k
deoarece poziţia motorului se obţine integrând viteza lui: H U s
s 1 s em
C).Proiectarea regulatorului numeric
Ţinând cont că procesul este de ordinul II, se va utiliza un regulator cu structură fixă de tip PID care
trebuie acordat. În figura 14.17.a este prezentată schema bloc a SRA, tipul şi plaja de valori pentru
semnale care fac legătura între blocurile componente.
Regulator
*
Uc Uc U
KCNA KA
20000 [biti] [biti] 512[biti] 10[V] 24[V] 20[rad ]
E
20000 [biti]
K ENC
Figura 14.17.a Tipul semnalelor sistemului de reglare a poziţiei maşinii de curent continuu
Referinţa de poziţie este un număr (simbolizat prin unitatea de măsură b , adică biţi) care conform
cerinţelor trebuie să acopere plaja de valori 10 rotaţii. Având în vedere că poziţia motorului este
citită cu rezoluţia de 2000 de pulsuri/biţi pe rotaţie, plaja de valuri a referinţei este 20000 biţi.
La ieşire, regulatorul trebuie să de-a o comandă care să corespundă cu rezoluţia convertorului
numeric analogic (CNA). Dacă CNA are 10 biţi, înseamnă că poate converti într-o tensiune de orice
număr în plaja [0 210-1]. Ţinând cont că tensiunea de comandă e bipolară, corespondenţa conversiei
10
este: 512 (29) biţi corespund la 10V. Deci factorul de conversie este: K CNA [V / biti ] .
512
Tensiunea de comandă de 10V intră în amplificatorului de putere care o converteşte în tensiunea
24V
efectivă aplicată motorului. Astfel amplificatorul are constanta de amplificare K A 2,4 .
10V
În fine, poziţia motorului este citită prin intermediul encoderului incremental, corespondenţa fiind
2000
2000 pulsuri sau biţi la o rotaţie, adică: K ENC [biti / rad ] .
2
Pentru calculul funcţiei de transfer se consideră tot ceea ce este exterior blocului regulator discret.
Prin urmare funcţia de transfer reală a procesului pe baza căreia se va face proiectarea regulatorului
este:
K ech
K ech em b
H real s
s (1 s em ) 1 s( s a)
s s
em
18
Conf. S.Paturca
unde:
10 / 512 2.4 2000 /( 2)
K ech K CNA K A 1 / k K ENC 298.4
0.05
K 298.4 1 1
b 149200 ; a 500
em 2 10 3 em 2 10 3
Dacă se consideră pasul de eşantionare T=0.1ms, echivalentul discret al funcţiei de transfer reale are
următoarea formă:
b1d z b0 d
H P ( z) unde:
z 2 z a1d a0d
b e aT 1 b 1 e aT
b1d T , b0 d T e aT , a1d 1 e aT , a0 d e aT
a a a a
Schema de simulare include două subblocuri pentru regulatorul PID şi pentru motor, prezentate în
figura 14.17.b, 14.17.c şi 14.17.d. S-a aplicat o referinţă treaptă egală cu 3 radiani. Pentru a testa şi
capacitatea de-a rejecta efectul perturbaţiilor, după 25ms de la aplicarea referinţei s-a aplicat şi un
cuplu de sarcină ms 50mNm . Evoluţia poziţiei şi curentului motorului este prezentată în figura
14,17.e, şi 14.17.f, unde se observă arată evoluţia comenzii date de regulatorul PI în plaja 512 biţi.
ms Mux
ms poz
+/-20000[biti] +/-512 [biti] +/-10 [V] +/-24 [V]
Kenc poz*, poz
er Uc -K- K_A U i
poz* Quantizer
poz* KA motor c.c curent
+/-20* [pi rad] Regulator K_CNA
PID discret
comanda
+/-20000 [biti] poz
[+/-20*pi rad]
Kenc
Quantizer Kenc
Figura 14.17.b Reglarea poziţiei unui motor de c.c. cu un regulator PID discret
alfa2.+alfa1.z-1+alfa0z-2
1
1 1
er
Discrete Filter Uc
Saturation1 Zero-Order
1 1 Hold1
r
z z
Gain Unit Delay1 Unit Delay2
-K-
Gain1
19
Conf. S.Paturca
2
1 i
ms
1 omg 1
2 1 i 1
k
J.s s
U L.s+R Sum3 poz
Sum2 k T ransfer Fcn1 T ransfer Fcn2
Transfer Fcn
omg
k
ui 1 z 1 2 z 2 1 z 0
H R ( z) KP_d KI _d KD_d (14.8)
i z 1 zr z 2 (1 r ) z r
Se poate scrie relatia intre ieşirea regulatorului la pasul curent ui şi intrarea la pasul curent i de
forma:
20
Conf. S.Paturca
2 1 z 1 0 z 2
ui i (14.9)
1 (1 r ) z 1 rz 2
- limitarea comenzii ui la plaja de valori posibile, cere în acest caz este [-512,+511] (valorile
mai mici de –512 se limitează la –512, iar valorile mai mari de 511 se limitează la 511);
- trimiterea comenzii după limitare către proces (in acest caz, această operaţie înseamnă
scrierea comenzii în convertorul N/A);
- actualizarea variabilelor globale utilizate pentru pasul următor, astfel: ui 2 ui 1 ; ui 1 ui
; i 2 i 1 ; i 1 i
In structura programului la iniţializări se setează parametrii ceasului de timp real şi se iniţializează cu
zero valorile anterioare:
ui 1 , ui 2 , i 1 , i 2 .
21
Conf. S.Paturca
4. Aplicaţie practică de testare a actuatoarelor unui robot NXT
Actuatoare - motoare şi sistem asociat pentru controlul mişcării
Tabel 14.c
Tensiune Curent Curent Turaţie maximă Turaţie la încărcare
maximă minim maxim (fără încărcare) normală
Servomotor 9V c.c. 60 mA 2A 170 rpm 100-130 rpm
Servomotorul este protejat la supracurenţi cu un termistor, modelul RAYCHEM RXE065.
Dispozitivul suportă un curent maxim de 40A şi o tensiune maximă de 60V.
Pentru a mări cuplul servomotorului,
transmisia se face printr-un angrenaj cu raport
reductor de 48:1 – figura 14.17. Deşi
randamentul scade, cuplul mare este un avantaj
în construcţia unui robot mobil NXT.
Figura 14.17 Servomotorul kit-ul robot NXT
22
Conf. S.Paturca
4.2. Comanda tensiunii motoarelor electrice NXT
Fiecare motor din kit-ul NXT este alimentat de câte un chopper de tensiune continuă, conectat
la bateria de acumulatoare. Controlul mişcării motoarelor electrice, indiferent dacă este vorba de
poziţie sau viteză, se materializează în final prin modificarea adecvată a tensiunii continue aplicate la
bornele motorului.
Blocul de alimentare a motoarelor NXT
utilizează modularea în durată a semnalului de
tensiune (PWM Pulse Width Modulation) pentru
a modifica nivelul tensiunii la bornele motorului.
Tensiunea rezultată are forma unui semnal
rectangular, cu amplitudine şi frecvenţă
constantă, dar cu factor de umplere variabil.
În figura 14.18 este ilustrată forma
tensiunii comandate prin PWM, cu pulsuri având
Figura 14.18 Semnale de tensiune de
factorul de umplere de 25%, 50% şi respectiv
frecvenţă constantă, aplicate prin
75%. Astfel, dacă se creşte factorul de umplere al
modulare în durată (PWM)
semnalului rectangular, creşte valoarea medie, pe
o perioada PWM, a tensiunii la borne.
În cazul unei comenzi de viteză fără feedback, în buclă deschisă, factorul de umplere este
furnizat direct semnalului de comandă a tensiunii. Referitor la această comandă, este de reţinut faptul
că în limbajul NXC există funcţii de mişcare care au un parametru cu denumirea generică „pwr”
(power). Acesta nu este altceva decât factorul de umplere al tensiunii aplicate.
Notă: Chopper-ul care alimentează motorul conectat la portul A (Sanyo LB1930M) este diferit
de cele folosite pentru porturile B şi C (LB1836M). De aceea este recomandat ca pentru locomoţie să
se utilizeze porturile B şi C, pentru a nu avea răspunsuri diferite la aceeaşi comandă.
23
Conf. S.Paturca
4.4. Controlul vitezei şi poziţiei motoarelor robotului
În cea mai simplă formă, un robot mobil poate funcţiona în buclă deschisă. Operatorul sau
algoritmul de control alege o viteză dorită pentru locomoţie iar viteza este transformată într-o
comandă în tensiune dată către motoare. Existenţa senzorilor montaţi la motoare permite observarea
erorii între viteza dorită şi viteza reală.
Dezavantajele buclei deschise sunt evidente: în momentul în care condiţiile din mediu se
modifică, eroarea dintre viteza măsurată şi viteza dorită va creşte. În acest caz, algoritmul de control
nu va face o compensare, deoarece el nu primeşte nici o informaţie din partea sistemului senzorial.
Din acest motiv, bucla de reglare trebuie închisă prin introducerea informaţiilor de la senzori înapoi
în algoritmul de control, astfel încât eroarea să poată fi minimizată.
Pentru a putea menţine şi regla viteza impusă de către utilizator este necesară informaţia despre
viteza actuală. Rutina de reglaj automat al vitezei este implementată la nivelul firmware-ului NXT.
Firmware-ul NXT implementează un control în buclă închisă printr-un regulator proporţional,
integral, derivativ (PID), pentru reglarea vitezei şi a poziţiei motoarelor NXT, prin citirea feedback-
ului de poziţie de la encodere.
Câteva caracteristici ale buclei de reglaj al poziţiei unghiulare sunt date în tabelul 4.d.
Tabel 4.d
Senzor Ieşire Unitate de Tip de date Număr maxim de
măsură eşantioane/sec [1/sec.]
Encoder Poziţie unghiulară grade Int32 1000
relativă
24
Conf. S.Paturca
Figura 14.19 Conexiuni între CPU-NXT şi PC, motoare, senzori
Semnalele furnizate de senzorii analogici sunt direcţionate către un Convertor Analog - Digital
(CAD), cu rezoluţie de 10 biţi, valorile numerice fiind deci cuprinse în intervalul 0-1023.
Semnalele digitale sunt transmise la microcontrolerul principal prin interfaţa de comunicaţie I2C.
CPU-NXT dispune de patru porturi de intrare (marcate pe echipament prin cifre de la 1 la 4), şi de
trei porturi intrare-ieşire de 9 volţi (marcate fizic prin literele A, B, C), utilizate pentru comanda
motoarelor şi citirea encoderelor. Astfel, roboţii NXT primesc informaţii/date atât de la senzori de
percepţie externǎ, despre mediul înconjurător în care aceştia funcţionează, cât şi de la traductoare
(encodere montate la motoarele NXT), care măsoară poziţia elementelor mobile cu care sunt
echipaţi. Datele furnizate de senzori sunt citite şi procesate de CPU-NXT, iar ulterior sunt transferate
cǎtre PC.
Având în vedere sarcinile specifice pentru sistemul robot, precum:
manipulare de obiecte din mediu, iar în anumite cazuri conlucrarea între doi sau mai
mulţi roboţi cu bază fixă şi/sau mobili,
evitarea coliziunilor cu obiectele din mediu sau cu alte sisteme robot,
o componentă importantă a sistemului senzorial care va fi studiată este aceea de asigurare a
capacităţii de monitorizare a mediului în zonele de interes.
25
Conf. S.Paturca
Programele se editează, compilează şi link-editează în mediul de dezvoltare integrat (IDE) Bricx
Command Center (BricxCC) pe PC, după care se încărcă, prin USB, sau Bluetooth, în memoria
program a unităţii de comandă NXT, unde se execută şi testează. Programele sunt rulate pe robot
atunci când pe display-ul brick-ului este selectat meniul MY files. Acesta este fişierul în care sunt
memorate programele descărcate pe brick-ul NXT.
Orice program este structurat pe task-uri. Task-ul principal (main) trebuie să fie obligatoriu prezent.
26
Conf. S.Paturca
Programul următor permite citirea valorii finale pe display-ul brick-ului la apăsarea butonului
central portocaliu.
Program demonstrativ
/*****************************************************************************
Determinarea preciziei encoderului
*****************************************************************************/
// Macro-ul pt "breakpoint", realizat in lucrarea 2.
#define BREAKPOINT_AFISARE_VAR(string_x,x){\
TextOut(0,LCD_LINE1,string_x,true);\
NumOut(0,LCD_LINE2,x);\
TextOut(0,LCD_LINE4,"BUTON CENTRU >>");\
Wait(1000);\
while(ButtonPressed(BTNCENTER,true)==0)\
{\
}\
}
/*****************************************************************************/
// Variabile
/*****************************************************************************/
long unghi;
task main()
{
while(ButtonPressed(BTNCENTER,true)==0)
{
}
/* Functia ce permite citirea in variabila unghi a pozitiei de la contorul asociat encoderului este
urmatoarea: */
unghi = MotorTachoCount(OUT_A);
TextOut(0,LCD_LINE1,"unghi=");
NumOut(0,LCD_LINE2,unghi);
Wait(5000); //functie prin care se introduce un timp de aşteptare, argumentul este in ms.
}
/*****************************************************************************************************/
Software-ul de dezvoltare oferă facilităţi în achiziţia de date de la senzorii interni şi permite
controlul vitezei motoarelor (de translatie, rotatie), şi al roţilor în mod independent, acceleratiei,
deceleratiei, pozitiei.
27
Conf. S.Paturca
RotateMotor('port', pwr, grade) - roteşte motoarele conectate la porturile de
ieşire, cu viteza „pwr” (aleasa în intervalul 0-100), un număr de grade specificat.
Direcţia de rotire a motoarelor se poate specifica prin semnul argumentului viteză şi unghi,
astfel: dacă viteza şi unghiul au acelaşi semn motorul se roteşte înainte, altfel dacă semnul este diferit
motorul se va roti înapoi.
Pentru testare va rula următorul program
/*****************************************************************************************************/
task main()
{
RotateMotor ( OUT_BC , 50 , 360 );
RotateMotor ( OUT_C , 50 ,- 360 );
}
/*****************************************************************************************************/
RotateMotorPID(port, viteza, grade, kp, ki, kd)- permite rotirea
motoarelor ca şi funcţia de mai sus, specificând şi coeficienţii regulatorului.
În aplicaţia următoare se va poziţiona motorul la un număr de grade dorit folosind comenzi de
poziţionare în buclă închisă. Se va analiza influenţa coeficienţilor regulatorului asupra erorii
staţionare şi suprareglajului. Pentru a putea vizualiza variaţia în timp a poziţiei, se va rula următorul
program NXC. Cu ajutorul acestuia sunt citite, într-un vector, valorile intermediare ale poziţiei până
la stabilizare, după care vectorul este salvat într-un fişier text.
Fişierul conţinând datele înregistrate se va descărca apoi pe PC, prin USB, cu ajutorul tool-
ului „NXT Explorer” din meniul „Tools” al BricxCC. Reprezentarea grafică a variaţiei poziţiei se
poate face de exemplu în Matlab, după ce se importă fişierul text.
Program demonstrativ
/******************************************************************************
Test reglaj de pozitie unghiulara.
Se inregistreaza intr-un vector variatia in timp a pozitiei pentru diferite viteze si coeficienti ai regulatorului PID.
Vectorul se salveaza intr-un fisier care va fi uploadat pe PC prin USB si apoi importat in Matlab pentru
reprezentare grafica.
Task-uri:
Task-uri simultane: citire encoder, pozitionare
Task final: salvare date in fisier
*********************************************************************************************************/
// Constante
/****************************/
#define NUME_FISIER „RaspPoz120.txt” /*fisierul in care se va salva evolutia pozitiei*/
#define POZITIA_DORITA 120 // pozitia unghiulara de atins [grade]
#define PWR 50 // „viteza” maxima de rotatie [%]
// Coeficientii regulatorului
#define KP 40 // Coef. Proportional (default 40)
#define KI 10 // Coef. Integral (default 20)
#define KD 40 // Coef. Derivativ (default 100)
28
Conf. S.Paturca
#define DIM_VECTOR_POZITIE 2000 // numarul de inregistrari ale pozitiei
#define BREAKPOINT_AFISARE_VAR(string_x,x){\
TextOut(0,LCD_LINE1,string_x,true);\
NumOut(0,LCD_LINE2,x);\
TextOut(0,LCD_LINE4,”BUTON CENTRU >>”);\
Wait(1000);\
while(ButtonPressed(BTNCENTER,true)==0)\
{\
}\
}
/*****************************************************************************/
// Variabile
/*****************************************************************************/
short Kp; // Coef. Proportional
short Ki; // Coef. Integral
short Kd; // Coef. Derivativ
short Pozitie[DIM_VECTOR_POZITIE]; /* vector in care este stocata pozitia pe durata rotatiei
*/
unsigned long dt; // pasul de timp intre doua esantioane ale pozitiei
unsigned long CrtTick, OldTick; /* valoarea curenta / anterioara a ceasului de sistem */
short tmp;
byte fileHandle;
unsigned short fileSize;
unsigned short nBytes;
short bytesWritten;
string tmp_string;
task RotesteMotor()
{
//Roteste motorul B cu viteza maxima PWR catre pozitia dorita folosind regulatorul de
//pozitie cu coeficientii Kp, Ki, Kd impliciţi
//RotateMotor(OUT_B, PWR, POZITIA_DORITA);
//Roteste motorul B cu viteza maxima PWR catre pozitia dorita folosind regulatorul de
//pozitie cu coeficientii Kp, Ki, Kd specificati ca parametri
RotateMotorPID(OUT_B, PWR, POZITIA_DORITA, KP, KI, KD);
}
task CitesteEncoder()
{
short k;
for (k=0;k<DIM_VECTOR_POZITIE;k++)
{
// Citeste date de la encoder
29
Conf. S.Paturca
Pozitie[k] = MotorTachoCount(OUT_B);
// Calculeaza durata intre ultimele doua esantioane si o insumeaza la durata anterioara
CrtTick = CurrentTick();
dt += CrtTick – OldTick;
OldTick = CrtTick;
}
// Calculeaza pasul de esantionare mediu, in [us]
dt = 1000*dt/(k+1);
}
task Salveaza()
{
short k;
// specifica faptul ca acest task urmeaza dupa task-ul ”CitesteEncoder”.
Follows(CitesteEncoder);
// Salveaza in fisier variatia in timp a pozitiei
// ---------------------------------------------------------
DeleteFile(NUME_FISIER);
CreateFile(NUME_FISIER, 65536, fileHandle); /* Aloca 64KB pt fisier */
// Scrie un titlu pt fisier
WriteLnString(fileHandle,”Raspunsul in timp al pozitiei
unghiulare”, bytesWritten);
// Scrie pozitia dorita
WriteString(fileHandle,”Pozitia dorita [grade] = „,
bytesWritten);
tmp_string = NumToStr(POZITIA_DORITA);
WriteLnString(fileHandle,tmp_string, bytesWritten);
WriteString(fileHandle,”viteza maxima [%] = „, bytesWritten);
tmp_string = NumToStr(PWR);
WriteLnString(fileHandle,tmp_string, bytesWritten);
// Scrie parametrii actuali ai regulatorului de pozitie
WriteLnString(fileHandle,”Parametrii regulatorului de
pozitie:”, bytesWritten);
Kp = MotorRegPValue(OUT_B);
tmp_string = NumToStr(Kp);
WriteString(fileHandle,”Kp = „, bytesWritten);
WriteLnString(fileHandle,tmp_string, bytesWritten);
Ki = MotorRegIValue(OUT_B);
tmp_string = NumToStr(Ki);
WriteString(fileHandle,”Ki = „, bytesWritten);
WriteLnString(fileHandle,tmp_string, bytesWritten);
Kd = MotorRegDValue(OUT_B);
tmp_string = NumToStr(Kd);
WriteString(fileHandle,”Kd = „, bytesWritten);
WriteLnString(fileHandle,tmp_string, bytesWritten);
30
Conf. S.Paturca
//Scrie pasul mediu de esantionare
WriteString(fileHandle,”pasul de esantionare dt ~= „,
bytesWritten);
tmp_string = NumToStr(dt);
WriteString(fileHandle,tmp_string, bytesWritten);
WriteLnString(fileHandle,”[us]”, bytesWritten);
// Salveaza datele in fisier
for (k=0;k<DIM_VECTOR_POZITIE;k++)
{
WriteString(fileHandle,” „, bytesWritten);
tmp_string = NumToStr(Pozitie[k]);
WriteLnString(fileHandle,tmp_string, bytesWritten);
}
CloseFile(fileHandle);
// Afiseaza pozitia finala pe display:
//tmp = Pozitie[DIM_VECTOR_POZITIE-1];
//BREAKPOINT_AFISARE_VAR(„Pozitia finala = „, tmp);
}
task main()
{
ResetTachoCount(OUT_B);
OldTick = CurrentTick();
dt = 0;
// Specifica faptul ca task-ul principal precede execuţia task-urilor „CitesteEncoder” si „RotesteMotor”
Precedes(CitesteEncoder,RotesteMotor);
}
/************************************************************************************************************/
Programul se descarcǎ în memoria unitǎţii centale a robotului, unde este rulează şi testează. Pentru
programul anterior date măsurate de la encoder şi stocate în memoria MCU sunt utile pentru
prelucrări ulterioare. Altfel spus, la încheierea rulării programului de către robot, acesta se poate
reconecta la PC, prin USB pentru descǎrcarea fişierului cu datele salvate în memoria
microcontrolerului robotului.
Paşi necesari pentru descărcarea datelor salvate de robot:
Se deschide ecranul NXT Explorer din meniul „Tools” al BricxCC IDE, care conţine fişiere
şi programe existente în memoria robotului NXT, aflate în zona stângǎ a ecranului şi fişerele
dupǎ PC - în dreapta. Se poziţionează cursorul mouse-ului deasupra elementelor din bara cu
unelte a ferestrei NeXT Explorer, evidenţiate în figura 14.20, pentru a se afişa mesajul care
informează despre denumirea uneltei.
Se identifică şi selectează fişierul text, salvat ca text, prin nume şi extensie "nume.txt“. Se
alege din meniul principal butonul de descărcare către PC a fişierului dorit.
Pentru reprezentarea grafică a semnalului măsurat se va lua în calcul intervalul de timp în care s-au
preluat eşanitioanele.
31
Conf. S.Paturca
Buton de descărcare a fişierelor cǎtre PC
Programe
şi fişiere
existente
pe în
memoria Fişiere
robotului existente
Fişierul de descărcat pe PC
nume.txt
Figura 14.20 Ecranul NXT Explorer necesar pentru vizualizarea pe PC, a programelor şi
fişerelor salvate în memoria MCU robotului
În figura 14.21 este prezentată evoluţia în timp a poziţiei unghiulare, obţinută experimental.
Figuar 14.21 Evoluţia în timp a poziţiei unghiulare pentru “pwr”=50, Kp=40, Ki=20, Kd=100
Aplicaţie cerută: Să se scrie un program pentru controlul deplasării liniare a robotului mobil
autonom tribot (cu două roţi motoare şi cea de-a treia tractată, doar cu rol de susţinere), până la
întâlnirea unui obstacol, pe care-l ocoleşte prin viraj pe o roată. Deplasarea se va testa software
pentru două situaţii: mişcare contolată şi liberă. Pentru cazul deplasării robotului cu control al
mişcǎri liniare se implementează un regulator proporţional construit software.
Note: Motoarele vor fi rotite utilizând doar funcţii predefinite simple, precum:
OnFwd(OUT_n,p) – funcţie pentru pornire şi rotire înainte cu o putere p (exprimată
în procente din puterea maximă), a motorului/motoarelor conectate la portul
(porturile) n;
OnRev(OUT_n,p) – funcţie pentru pornire şi rotire înapoi cu o putere p (exprimată
în procente din puterea maximă), a motorului/motoarelor conectate la portul
(porturile) n;
32
Conf. S.Paturca
Off(OUT_n) – funcţie pentru oprirea motorului (motoarelor) conectat la portul n,
prin frână electrică;
Float(OUT_n) sau Coast(OUT_n) – funcţii pentru oprirea motoarelor prin
întreruperea alimentării;
Notǎ: Adresele porturilor de ieşire pot fi definite ca variabile sau constante.
Indicaţie: În figurile 14.22 sunt ilustrate exemple de teste efectuate cu robotul mobil autonom. În
fiecare imagine robotul pivoteazǎ pe o roatǎ pentru a evita un obstacol. Momentul schimbǎrii
direcţiei de mers este evidenţiat în ambele cazuri. Rezultatele testelor reflectǎ efectul regulatorului
software construit pentru mişcarea linearǎ.
Mers liniar fără control al mişcării Mers liniar cu control în buclă închisă
al mişcării
33
Conf. S.Paturca