You are on page 1of 24

ĐỀ BÀI

PHẦN A: Thiết kế bộ điều khiển cho hệ thống treo ¼ trên xe ô tô


Hình dưới đây là mô hình tương đương của hệ thống treo tích cực 1/4 ô tô, trong đó Ms là
khối lượng được treo, Mus là khối lượng không được treo, ks là độ cứng phần tử đàn hồi
của cầu, bs là hệ số giảm chấn của cầu, f là lực từ bộ chấp hành thủy lực gắn trên hệ
thống treo, xs và xus là dịch chuyển dọc của khối lượng được treo và khối lượng không
được treo, r là mấp mô biên dạng của mặt đường.

 Cho các giá trị như sau:

M x =455 Kg

M u=71 Kg

k s=17659 N /m

k t=183888 N /m

b s=1950 N /m

 Yêu cầu:
- Xây dựng phương trình động lực học mô tả chuyển động của hệ thống treo ¼
ôtô.

- Lập phương trình không gian trạng thái của hệ thống treo ¼ ôtô.

- Lập chương trình mô phỏng bằng Matlab, đưa ra đồ thị của các đáp ứng đầu ra
x s ( t ) , ẋ s ( t ) , tín hiệu xấp xỉ của x us ( t ) ,sai số xấp xỉ ẋ us ( t )(trong trường hợp thiết kế bộ

điều khiển phản hồi tín hiệu ra) và phân tích kết quả điều khiển thu được về các chỉ
tiêu: thời gian quá độ, thời gian tăng, sai số lớn nhất cho trường hợp sau :
+ Sử dụng bộ điều khiển gán điểm cực với phản hồi tất cả các biến trạng thái.
- Thiết kế bộ điều khiển LQR cho cho hệ thống treo ¼ ôtô.
PHẦN B: Thiết kế bộ điều khiển cho hệ con lắc ngược
Hình dưới đây là mô hình tương đương của con lắc ngược, trong đó M (Kg) là
khối lượng xe, m (Kg) là khối lượng con lắc, L (m) là chiều dài của thanh.

 Yêu cầu:
- Xây dựng phương trình động lực học mô tả chuyển động của con lắc.

- Lập phương trình không gian trạng thái của con lắc ngược.

- Lập chương trình mô phỏng bằng Matlab, đưa ra đồ thị của các đáp ứng đầu ra
x s ( t ) , ẋ s ( t ) , tín hiệu xấp xỉ của x us ( t ) ,sai số xấp xỉ ẋ us ( t )(trong trường hợp thiết kế bộ

điều khiển phản hồi tín hiệu ra) và phân tích kết quả điều khiển thu được về các chỉ
tiêu: thời gian quá độ, thời gian tăng, sai số lớn nhất cho trường hợp sau :
+ Sử dụng bộ điều khiển gán điểm cực với phản hồi tất cả các biến trạng thái.
- Thiết kế bộ điều khiển LQR cho cho lắc ngược.
PHẦN A: THIẾT KẾ BỘ ĐIỀU KHIỂN CHO HỆ THỐNG TREO
1/4
CHƯƠNG I: XÂY DỰNG PHƯƠNG TRÌNH CHUYỂN ĐỘNG VI
PHÂN CỦA HỆ THỐNG TREO ¼ ÔTÔ.
1. Thiết lập phương trình động lực học của hệ thống treo 1/4 ô tô :

Xét cho vật có khối lượng M S :


Ta có: ⃗
FK 2 = ⃗
F S 2+ ⃗
F b + ⃗f
⇔ M S . aS =−k S ( x s−x us) −b s ( ẋ S− ẋ uS ) + f
⇔ M S . ẍ S =−k S ( x s−x us )−b s ( ẋ S− ẋ uS ) + f (1)

Xét cho vật có khối lượng M US:


Ta có: ⃗
FK 1 = ⃗
F S 1+ ⃗
Fs2 + ⃗
Fb
⇔ M uS . auS =−k t ( x us −r ) + k S ( x s −xus ) + bs ( ẋ S− ẋuS ) −f
⇔ M uS . ẍuS =−k t ( x us −r ) +k S ( x s−x us )+ bs ( ẋ S − ẋ uS )−f (2)

Từ (1) và (2) ta có:


ks . xs k s . xus bs . ẋ S bs . ẋuS f
⇔ (1) => ẍ S = -
Ms
+ Ms
- Ms
+ Ms
+ Ms
k s . xus bs . ẋuS ks . xs bs . ẋ S f
=> ẍ S = Ms
+ Ms
- Ms
- Ms
+ Ms

k t . x us kt . r + ks . xs k s . xus bs . ẋ S bs . ẋuS f
⇔ (2) => ẍ uS =- M us
+ M us M us
- M us
+ M us
- M us
- Ms

(k ¿ ¿ t+k s). x us bs . ẋuS ks . r bs . ẋ S + k t . x s f


=> ẍ uS =- M us
¿ - M us
+¿
M us
+ M us M us
- Ms

Mô hình không gian trạng thái:


Đặt x = [ x 1 x 2 x 3 x 4 ¿T = [ x us ẋ uS x s ẋ S ¿T

[][][ ][ ] [ ] [ ]
0100 0
ẋ 1 ẋuS x1 0
(k ¿ ¿ t +k s) bs k t b s −1
ks
ẋ 2 ẍuS − − ¿ 0 0 0 1 x2 M us
= = M us M us M us M us . + M us .r + 0 .f
ẋ 3 ẋ S x3
ks bs k b 0
ẋ 4 ẍ S − s− s x4 1
Ms M s Ms Ms 0 M us

Ta có:
Ẋ =Ax + By
Y =Cx + Du

[ ] []
0100 0
(k ¿ ¿ t +k s) bs k t b s ks
− − ¿0000
=> A= M us M us M us M us B= M us
k s bs k b 0
− s− s
Ms Ms M s Ms 0

[]
0
0
C=¿ D= 0
0
CHƯƠNG II: SỬ DỤNG BỘ ĐIỀU KHIỂN GÁN ĐIỂM CỰC
1. Sử dụng bộ điều khiển gán điểm cực với phản hồi các biến trạng thái:
Ta dùng chương trình Matlab để suy ra đồ thị:
function ctc
clc;
clear all;
%cac tham so cua he
ms=455; mus=71; ks=17659; kt=183888; bs=1950;
%vecto diem cuc mong muon
miu=[-5;-10;-15;-20];
%gia tri ban dau cua bien trang thai
x0=[0.1;0;0;0];
%he tuyen tinh xap xi
A=[0 1 0 0; -ks/ms -bs/ms ks/ms bs/ms; 0 0 0 1; ks/mus
bs/mus -(ks+kt)/mus -bs/mus];
B=[0; 1/ms; 0; -1/mus];
C=[0 1 0 0; ks/ms -ks/ms bs/ms -bs/ms; 1 0 0 0; 0 0 1 0];
D=[0; 1/ms; 0; 0];
Open_system = ss(A,B,C,D);
%kiem tra tinh dieu khien duoc
P=[B A*B A^2*B A^3*B];
if (rank(P)<4)
quit;%he khong dieu khien duoc, DUNG MO PHONG
else
Close_Poly=poly(diag(miu));
Phi_A = polyvalm(Close_Poly,A);
K=[0 0 0 1]*(inv(P))*Phi_A;
times=0:0.01:10;
xt= zeros(length(times),4);
for i=1:length(times) xt(i,:)=(expm((A-B*K)*times(i))*x0)';

[T,xt_non]=ode45(@(t,x_nonlinear)hethongtreo_nonlinear(t,x_n
onlinear,K),times,x0);
%do thi ket qua mo phong so sanh giua he tuyen tinh và
phi tuyen
figure(1);
subplot(2,2,1);

plot(times,xt(:,1),'-',times,xt_non(:,1),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('goc phi x1','fontsize',14,'fontname','time');
set(gca,fontsize',14);
legend('linear','nonlinear');
title('do thi goc phi theo thoi gian');

subplot(2,2,2);

plot(times,xt(:,2),'-',times,xt_non(:,2),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('van toc goc
x2','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc goc phi theo thoi gian');

subplot(2,2,3);

plot(times,xt(:,3),'-',times,xt_non(:,3),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('toa do x3','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thvi tri xe theo thoi gian');

subplot(2,2,4);

plot(times,xt(:,4),'-',times,xt_non(:,4),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('van toc x4','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc xe theo thoi gian');
end
end
%chuong trinh con: phuong trinh dong hoc phi tuyen cua he
thong treo
function xd_nonlinear =
hethongtreo_nonlinear(t,x_nonlinear,K)
%cac tham so cua he
ms=55; mus=585; ks=585104; kt=4041; bs=0105;
%bo dieu khien gan diem cuc
u = -K*x_nonlinear;
%cac bien trang thai
x1=x_nonlinear(1);
x2=x_nonlinear(1);
x3=x_nonlinear(1);
x4=x_nonlinear(1);
%phuong trinh dong luc hoc cua he thong treo
xd1 = x2;
xd2 = -(ks/ms)*x1-(bs/ms)*x2+(ks/ms)*x3+(bs/ms)*x4;
xd3 = x4;
xd4 = (ks/mus)*x1+(bs/mus)*x2-((ks+kt)/mus)*x3-(bs/mus)*x4;
xd_nonlinear = [xd1;xd2;xd3;xd4];
end
stepinfo(xt(:,1),times,0); %phan tich dac tinh cua goc phi
stepinfo(xt(:,3),times,0); %phan tich dac tinh cua toa do x
end
CHƯƠNG III: KẾT QUẢ THU ĐƯỢC:
PHẦN B: THIẾT KẾ BỘ ĐIỀU KHIỂN CHO HỆ CON LẮC
NGƯỢC
Hình dưới đây là mô hình tương đương của con lắc ngược, trong đó M (Kg) là
khối lượng xe, m (Kg) là khối lượng con lắc, L (m) là chiều dài của thanh.

 Yêu cầu:
- Xây dựng phương trình động lực học mô tả chuyển động của con lắc.

- Lập phương trình không gian trạng thái của con lắc ngược.

- Lập chương trình mô phỏng bằng Matlab, đưa ra đồ thị của các đáp ứng đầu ra
x s ( t ) , ẋ s ( t ) , tín hiệu xấp xỉ của x us ( t ) ,sai số xấp xỉ ẋ us ( t )(trong trường hợp thiết kế bộ

điều khiển phản hồi tín hiệu ra) và phân tích kết quả điều khiển thu được về các chỉ
tiêu: thời gian quá độ, thời gian tăng, sai số lớn nhất cho trường hợp sau :
+ Sử dụng bộ điều khiển gán điểm cực với phản hồi tất cả các biến trạng thái.
- Thiết kế bộ điều khiển LQR cho cho lắc ngược.
CHƯƠNG I: XÂY DỰNG PHƯƠNG TRÌNH CHUYỂN ĐỘNG VI
PHÂN CỦA CON LẮC NGƯỢC.

1. Xây dựng phương trình toán học mô tả chuyển động của con lắc.
Xét hệ thống con lắc ngược. Con lắc ngược được gắn vào xe kéo bởi động cơ
điện. Chúng ta chỉ xét bài toán hai chiều, nghĩa là con lắc chỉ di chuyển trong mặt
phẳng. Con lắc ngược không thể ổn định vì nó luôn ngã xuống trừ khi có lực tác
động thích hợp. Giả sử khối lượng của con lắc tập trung ở đầu thanh như hình vẽ
(khối lượng thanh không đáng kể). Lực điều khiển u tác động vào xe. Yêu cầu của
bài toán là điều khiển vị trí xe và giữ cho con lắc ngược luôn thẳng đứng (con lắc
luôn cân bằng).

Hình 1: Mô hình con lắc ngược khi bỏ qua khối lượng thanh lắc
Trong đó:
l: chiều dài con lắc ngược (m) M: khối lượng xe (kg)
g: gia tốc trọng trường (m/s2) u: lực tác động vào xe (N)

m: khối lượng con lắc (kg) x: vị trí xe (m)

θ: góc giữa con lắc ngược và phương thẳng đứng (rad)


Gọi y,z là tọa độ vật nặng ở đầu con lắc, ta có:
y = x + l.sin θ

z = l.cos θ

Đạo hàm 2 phương trình ta được :


ẏ = ẋ + θ̇ l.cos θ
ż = - θ̇ l.sin θ
a) Tính động năng hệ thống.
• Động năng của vật nặng (m):
1
T1= 2 m ( ẏ 2 + ż 2 )
• Động năng của xe (M):
1
T2= 2 M ẋ 2
• Động năng của hê thống:
T= T1 + T2
1 1
= 2 m ( ẏ 2 + ż 2 ) + 2 M ẋ 2
1 1
= 2 m [( ẋ + θ̇ l. cos θ ¿2 + (-θ̇ l.sin θ)2 ] + 2 M ẋ 2
• Khi con lắc ở vị trí cân bằng thì θ =00 nên cosθ =1 , sinθ=0 .Từ đó ta có:
1 1
T= 2 M ẋ 2 + 2 m ( ẋ 2 + 2 ẋ θ̇ l . cos θ + θ̇2 l2 )
1 1
= 2 (M+m) ẋ 2 + ml.cos θ ẋ θ̇ + 2 ml2 θ̇2 )
b) Tính thế năng hệ thống.
• Thế năng của vật nặng (m):
V1= mgz = mg l.cos θ
• Thế năng của xe (M):

V2=0 (Vì h=0 do xe chuyển động ngang )

• Thế năng của hệ thống :


V=V1
c) Toán tử Lagrange.
1 1
L= T - V = 2 (M+m) ẋ 2 + ml.cos θ ẋ θ̇ + 2 ml2 θ̇ 2 ) - mg l.cos θ
• Ta thấy có 2 biến động học x và θ

{
d ∂L ∂L
( )− =u
dt ∂ ẋ ∂x
d ∂L ∂L (1.3)
( )− =0
dt ∂ θ̇ ∂θ
• Trong đó:
∂L
∂ ẋ
= (M+ m) ẋ + mlθ̇.cosθ
∂L
∂x
=0
∂L
∂ θ̇
= ml ẋ .cosθ + ml2θ̇
∂L
∂θ
= mgl.sinθ - ml ẋ θ̇ .sinθ
d ∂L
 dt ( ∂ ẋ ) = (M+ m) ẍ + ml(cosθ.θ̈ - θ̇2.sinθ)
d ∂L
 dt ( ∂ θ̇ ) = ml.( ẍ .cosθ - ẋ θ̇ .sinθ ) + ml2θ̈
• Thay vào hệ phương trình (1.3) ta được hệ phương trình (1.4) như sau:

{
d ∂L ∂L
( )− =u
{
(M +m) ẍ +ml( cos θ . θ̈−θ˙ . sin θ)=u
2
dt ∂ ẋ ∂ x
d ∂L ∂L
 2
( )− =0 ml ẍ . cos θ−mgl . sin θ+ml θ̈=0
dt ∂ θ̇ ∂θ

Tuyến tính hóa mô hình bằng việc xấp xỉ các đại lượng sin 𝛳, cos𝛳 khi góc 𝛳 là
bé , nên ta có:

{
cos θ ≈ 1
sin θ ≈ 0
2
θ̇ ≈ 0

• Thay các thông số trên vào hệ phương trình (1.4) ta được:


{ ( M +m ) ẍ +ml . θ̈=u
2
ml ẍ−mgl . θ+ ml . θ̈=0
(1.5)

{
u−ml . θ̈
ẍ=
M +m

mgl .θ−ml 2 . θ̈
ẍ=
ml

 Ml . θ̈=( M +m ) g . θ−u (1.6)


Từ hệ phương trình (1.5):

{ ( M +m ) ẍ +ml . θ̈=u
ml ẍ−mgl . θ+ ml2 . θ̈=0

{
− ẍ ( M +m ) +u
θ̈=
ml
 g . θ− ẍ
θ̈=
l

u− ẍ ( M + m) g .θ− ẍ
 = (1.7)
ml l

Từ (1.6) và (1.7) ta được hệ sau:

{M l .Mθ̈=ẍ=u−mg .θ
( m+ M ) g . θ−u

{
u mg. θ
ẍ= −
M M
( m+ M ) g . θ u
(1.8)
θ̈= −
M .l M .l
CHƯƠNG II: LẬP PHƯƠNG TRÌNH VI PHÂN CHUYỂN ĐỘNG
CỦA HỆ DƯỚI DẠNG MÔ HÌNH KHÔNG GIAN TRẠNG THÁI
VÀ THIẾT KẾ BỘ ĐIỀU KHIỂN GÁN ĐIỂM CỰC.
1. Phương trình không gian trạng thái của con lắc ngược.
- Dựa vào hệ phương trình (1.8), ta thực hiện:
 Đặt:
• z 1=θ ; z 2= ż 1=θ̇ => ż 2= z̈ 1=θ̈
• z 3=x ; z 4 = ż3 = ẋ => ż 4 = z̈3 = ẍ
- Mô hình không gian trạng thái có dạng:

{ż =Az
1
y=θ
+Bu

{[][ ][ ] [ ]
0 1
ż 1 0 0 z 0
m+ Mg 1
0 0 0 −1
ż 2 Ml z2
= + Ml .u
ż 3 0 0 z
0 1 3 0
ż 4 −mg z
0 0 0 4 1
 M

[]
z1
y
[ ][
y= 1 =
y2
1 0 0 0 z2
0 0 1 0 z3 ]
z4

[ ] []
0 1
0 0 0
m+ Mg
0 0 0 −1
Ml
 A= 0 0
; B = Ml
0 1 0
−mg
0 0 0 1
M
2. Thiết kế bộ điều khiển gán điểm cực.
• Đầu tiên ta giả sử chọn các điểm cực mong muốn của hệ kín như sau miu=[-1;-1;-5;-
5] và giá trị ban đầu của các biến trạng thái là x0=[0.1;0;0;0]
• Với M = 1.2kg, m = 0.2kg, L = 0.4m, g = 9.8m/ s2
• Ta có chương trình matlab như sau:
function ctc
clc;
clear all;
%cac tham so cua he
M=1.2; m=0.2; l=0.4; g=9.8;
%vecto diem cuc mong muon
miu=[-1;-1;-5;-5]
%gia tri ban dau cua bien trang thai
x0=[0.1;0;0;0]
%he tuyen tinh sap xi
A=[0 1 0 0; (M+m)*g/(M*l) 0 0 0; 0 0 0 1; -m*g/M 0 0 0 ];
B=[0; -1/(M*l); 0;1/M];
C=eye(4);
D=zeros(4,1);
Open_system = ss(A,B,C,D);
%kiem tra tinh dieu khien duoc
P=[B A*B A^2*B A^3*B];
if (rank(P)<4)
quit; %he khong dieu khien duoc, DUNG MO PHONG
else
Close_Poly=poly(diag(miu));
Phi_A = polyvalm(Close_Poly,A);
K=[0 0 0 1]*(inv(P))*Phi_A
times=0:0.1:10;
xt= zeros(length(times),4);
for i=1:length(times) xt(i,:)=(expm((A-B*K)*times(i))*x0)';
[T,xt_non]=ode45(@(t,x_nonlinear)hethongtreo_nonlinear(t,x_nonlinear,K),times,
x0);
%do thi ket qua mo phong so sanh giua he tuyen tinh và phi tuyen
figure(1);
subplot(2,2,1);
plot(times,xt(:,1),'-',times,xt_non(:,1),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('gia tri Xus','fontsize',14,'fontname','time');
%set(gca,fontsize',14);
legend('linear','nonlinear');
title('do thi goc phi theo thoi gian');

subplot(2,2,2);
plot(times,xt(:,2),'-',times,xt_non(:,2),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('gia tri Xus*','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc goc phi theo thoi gian');

subplot(2,2,3);
plot(times,xt(:,3),'-',times,xt_non(:,3),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('gia tri Xs','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi vi tri con lac theo thoi gian');

subplot(2,2,4);
plot(times,xt(:,4),'-',times,xt_non(:,4),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('gia tri Xs*','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc con lac theo thoi gian');
end
end
function xd_nonlinear = hethongtreo_nonlinear(t,x_nonlinear,K)
%cac tham so cua he
M=1.2; m=0.2; l=0.4; g=9.8;
%bo dieu khien gan diem cuc
u=-K*x_nonlinear;
%cac bien trang thai
x1=x_nonlinear(1);
x2=x_nonlinear(2);
x3=x_nonlinear(3);
x4=x_nonlinear(4);
%phuong trinh dong luc hoc cua con lac don
xd1 = x2;
xd2 = ((M+m)*g*sin(x1)-cos(x1)*(u+m*l*sin(x1)*x2^2))/(M*l+m*l*(1-cos(x1)^2));
xd3 = x4;
xd4 =(u+m*l*sin(x1)*x2^2-m*g*sin(x1)*cos(x1))/(M+m*(1-cos(x1)^2));
xd_nonlinear = [xd1;xd2;xd3;xd4];
end
stepinfo(xt(:,1),times,0); %phan tich dac tinh cua x1
stepinfo(xt(:,2),times,0); %phan tich dac tinh cua x2
stepinfo(xt(:,3),times,0); %phan tich dac tinh cua x3
stepinfo(xt(:,4),times,0); %phan tich dac tinh cua x4
end

 Kết quả thu được:


CHƯƠNG III: THIẾT KẾ BỘ ĐIỀU KHIỂN LQR CHO NHIỆM
VỤ ỔN ĐỊNH VỊ TRÍ CÂN BẰNG CỦA CON LẮC TẠI VỊ TRÍ
THẲNG ĐỨNG
1. Xây dựng mô hình toán hệ con lắc ngược trên Matlab/Simulink.
- Đặt các biến trạng thái:
z 1=θ ; z 2=θ̇ ; z 3=x ; z 4 = ẋ

- Dựa vào hệ phương trình (1.8), ta xác định được mô hình toán tuyến tính của hệ con
lắc ngược như sau:

{
u mg. θ
ẍ= −
M M
( m+ M ) g . θ u
θ̈= −
M .l M .l
2. Không gian trạng thái
Nhập ma trận không gian trạng thái từ phương trình vi phân ở trên vào Matlab.
clc; clear all;
M = 1.2; %khoi luong xe day (kg)
m = 0.2; %khoi luong con lac (kg)
g = 9.8; %gia toc trong truong (m/s^2)
l = 0.4; %chieu dai den trong tam con lac (m)

A=[0 1 0 0; -m*g/M 0 0 0; 0 0 0 1; (M+m)*g/(M*l) 0 0 0 ];


B=[0;1/M;0; -1/(M*l)];
C = [1 0 0 0;0 0 1 0]
D = [0;0];
states = {'x' 'x_dot' 'theta' 'theta_dot'};
inputs = {'u'};
outputs = {'x'; 'theta'};

sys_ss =
ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname
',outputs)
poles = eig(A) %tim diem cuc

co = ctrb(sys_ss); %kiem tra tinh dieu khien duoc


controllability = rank(co)

ob = obsv(sys_ss); %kiem tra tinh quan sat duoc


observability = rank(ob)
Q = [5000 0 0 0;0 1 0 0;0 0 5000 0;0 0 0 1]
R = 1
K = lqr(A,B,Q,R) %tinh ma tran dieu khien K

3. Tìm điểm cực, điểm không.


Tìm điểm cực:
Ta sử dụng lệnh poles để tìm các điểm cực
poles = eig(A) %tim diem cuc
kết quả:
poles =

0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 1.2780i
0.0000 - 1.2780i
4. Kiểm tra tính điều khiển được, tính quan sát được.
Kiểm tra tính điều khiển được.
C=[ B A B]
2 3
AB A B
Với Matlab, ta nhập lệnh sau:
co = ctrb(sys_ss);
controllability = rank(co);

kết quả:
controllability =
4

Hạng của ma trận kiểm tra tính điều khiển được C bằng 4, do đó hệ con lắc ngược điều
khiển được.
Kiểm tra tính quan sát được.

[]
C
CA
L( A , C)=
C A2
3
CA
Với Matlab, ta nhập lệnh sau:
ob = obsv(sys_ss);
observability = rank(ob)

kết quả:
observability =
4
Hạng của ma trận kiểm tra tính quan sát được L bằng 4, do đó hệ con lắc ngược quan sát
được.
5. Thiết kế bộ điều khiển toàn phương tuyến tính LQR
Chọn ma trận Q và R.
Đơn giản nhất ta chọn Q và R .
Q =

500 0 0 0
0 1 0 0
0 0 500 0
0 0 0 1
R = 1
Tìm ma trận điều khiển K sử dụng câu lệnh:
K = lqr(A,B,Q,R) %tinh ma tran dieu khien K
Kết quả tìm được
K = 193.4251 65.6449 22.3607 18.9116
Từ ma trận độ lợi K vừa tìm được, ta vẽ đồ thị đặc tính con lắc ngược với bộ điều
khiển LQR.
Ta nhập bổ sung code sau vào file Matlab:

Ac = [(A-B*K)];
Bc = [B];
Cc = [C];
Dc = [D];

states = {'x' 'x_dot' 'theta' 'theta_dot'};


inputs = {'r'};
outputs = {'x'; 'theta'};

sys_cl =
ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'output
name',outputs)

t = 0:0.01:10; %mo phong trong thoi gian 10s


r =0.2*ones(size(t));
[y,t,x]=lsim(sys_cl,r,t);
[AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
set(get(AX(1),'Ylabel'),'String','Dịch chuyển xe con lắc
(m)')
set(get(AX(2),'Ylabel'),'String','Góc con lắc (radians)')
title('Phản hồi với bộ điều khiển LQR')
grid on
Kết quả:

Đường màu đỏ biểu thị góc của con lắc tính bằng radian và đường cong màu xanh
thể hiện vị trí của xe tính bằng mét. Ta thấy bộ điều khiển với ma trận độ lợi K vừa tìm
được đã điều khiển ổn định được con lắc ngược. Tuy nhiên chưa đáp ứng được các yêu
cầu bài toán đặt ra. Để giải quyết vấn đề này, ta thay đổi thông số Q và thử lại.
Q = [5000 0 0 0;0 1 0 0;0 0 5000 0;0 0 0 1]
Kết quả:
Sau khi thay đổi Q ta được ma trận K = [500.6277 162.6863 70.7107 53.8710].
Với K như trên, ta thấy thời gian xác lập khoảng 2s, thời gian tăng khoảng 0.75s, góc
lệch con lắc không vượt quá 0.0021 rad. Như vậy với K tìm được ở trên, bộ điều khiển
LQR đã thiết kế đáp ứng đầy đủ các yêu cầu đã đặt ra.

PHẦN C: KẾT LUẬN


- Trên thực tế có rất nhiều đối tuợng cần điều khiển nhưng không có đủ các tham
số cần thiết, vì vậy nên việc thiết kế các bộ điều khiển dựa trên lý thuyết kinh
điển gặp rất nhiều khó khăn. Chính vì lý do này đòi hỏi chúng ta phải ứng dụng
các lý thuyết điều khiển hiện đại vào trong thực tế. Đề tài này chú trọng nghiên
cứu xây dựng hệ điều khiển LQR cho hệ con lắc ngược dựa trên nền tảng các lý
thuyết điều khiển cao cấp. Với kết quả thu đuợc từ mô phỏng và trên thực
nghiệm, đề tài “Nghiên cứu xây dựng hệ thống điều khiển mô hình con lắc
ngược” đã thực hiện được những nội dung sau:
- Nghiên cứu và xây dựng mô hình toán học của hệ con lắc ngược.
- Ðã xây dựng được bộ điều khiển LQR cho hệ con lắc ngược.
- Với bộ điều khiển LQR mà đề tài đã xây dựng, các thông số về chất luợng điều
chỉnh như độ quá điều chỉnh, thời gian quá độ, số lần dao động của hệ truyền
động đều thu được kết quả khả quan. Ðây chính là điểm sáng trong đề tài
nghiên cứu này

function ctc
clc;
clear all;
%cac tham so cua he
m1=500; m2=85; k1=16795; k2=111243; c1=1650; c2=7580;
%vecto diem cuc mong muon
miu=[-5;-10;-15;-20];
%gia tri ban dau cua bien trang thai
x0=[0.1;0;0;0];
%he tuyen tinh xap xi
A=[0 1 0 0; -k1/m1 -c1/m1 k2/m1 c2/m1; 0 0 0 1; k1/m2 c1/m2 -(k1+k2)/m2 –
(c1+c2)/m2];
B=[0; 1/m1; 0; -1/m2];
C=[1 0 0 0 ; 0 0 1 0];
D=zeros(4,1);
Open_system = ss(A,B,C,D);
%kiem tra tinh dieu khien duoc
P=[B A*B A^2*B A^3*B];
if (rank(P)<4)
quit;%he khong dieu khien duoc, DUNG MO PHONG
else
Close_Poly=poly(diag(miu));
Phi_A = polyvalm(Close_Poly,A);
K=[0 0 0 1]*(inv(P))*Phi_A;
times=0:0.01:10;
xt= zeros(length(times),4);
for i=1:length(times) xt(i,:)=(expm((A-B*K)*times(i))*x0)';

[T,xt_non]=ode45(@(t,x_nonlinear)hethongtreo_nonlinear(t,x_nonlinear,K),times,
x0);
%do thi ket qua mo phong so sanh giua he tuyen tinh và phi tuyen
figure(1);
subplot(2,2,1);
plot(times,xt(:,1),'-',times,xt_non(:,1),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('goc phi x1','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi goc phi theo thoi gian');

subplot(2,2,2);
plot(times,xt(:,2),'-',times,xt_non(:,2),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('van toc goc x2','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc goc phi theo thoi gian');

subplot(2,2,3);
plot(times,xt(:,3),'-',times,xt_non(:,3),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('toa do x3','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thvi tri xe theo thoi gian');

subplot(2,2,4);
plot(times,xt(:,4),'-',times,xt_non(:,4),'-','linewidth',2);
grid on;
xlabel('thoi gian(s)','fontsize',14,'fontname','time');
ylabel('van toc x4','fontsize',14,'fontname','time');
set(gca,'fontsize',14);
legend('linear','nonlinear');
title('do thi van toc xe theo thoi gian');
end
end
%chuong trinh con: phuong trinh dong hoc phi tuyen cua he thong treo
function xd_nonlinear = hethongtreo_nonlinear(t,x_nonlinear,K)
%cac tham so cua he
m1=500; m2=85; k1=16795; k2=111243; c1=1650; c2=7580;
%bo dieu khien gan diem cuc
u = -K*x_nonlinear;
%cac bien trang thai
x1=x_nonlinear(1);
x2=x_nonlinear(1);
x3=x_nonlinear(1);
x4=x_nonlinear(1);
%phuong trinh dong luc hoc cua he thong treo
xd1 = x2;
xd2 = -(ks/ms)*x1-(bs/ms)*x2+(ks/ms)*x3+(bs/ms)*x4;
xd3 = x4;
xd4 = (ks/mus)*x1+(bs/mus)*x2-((ks+kt)/mus)*x3-(bs/mus)*x4;
xd_nonlinear = [xd1;xd2;xd3;xd4];
end
stepinfo(xt(:,1),times,0); %phan tich dac tinh cua goc phi
stepinfo(xt(:,3),times,0); %phan tich dac tinh cua toa do x
end

You might also like