Professional Documents
Culture Documents
BTL HỆ THỐNG ĐIỀU KHIỂN ĐA BIẾN
BTL HỆ THỐNG ĐIỀU KHIỂN ĐA BIẾN
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ô :
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
[][][ ][ ] [ ] [ ]
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)
z = l.cos θ
{
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
{
u−ml . θ̈
ẍ=
M +m
mgl .θ−ml 2 . θ̈
ẍ=
ml
{ ( M +m ) ẍ +ml . θ̈=u
ml ẍ−mgl . θ+ ml2 . θ̈=0
{
− ẍ ( M +m ) +u
θ̈=
ml
g . θ− ẍ
θ̈=
l
u− ẍ ( M + m) g .θ− ẍ
= (1.7)
ml l
{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
- 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)
sys_ss =
ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname
',outputs)
poles = eig(A) %tim diem cuc
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];
sys_cl =
ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'output
name',outputs)
Đườ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.
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