Lập phương trình sai phân của hệ thống Phương trình máy tính có dạng sai phân.. Vì vậy để mô phỏng hệ điều khiển tự động ĐKTĐ trên máy tính người ta phải tìm cách viết được phương trình
Trang 1MỤC LỤC
Trang 21. Sơ đồ cấu trúc của hệ điều khiển tự động:
Tham số của hệ :
U(t)=1(t)
K1=10; K2=0.1 ;
Bước cắt mẫu chọn : T=0.1
2. Lập phương trình sai phân của hệ thống
Phương trình máy tính có dạng sai phân Vì vậy để mô phỏng hệ điều khiển tự động (ĐKTĐ) trên máy tính người ta phải tìm cách viết được phương trình sai phân của hệ Ở đây nhóm sử dụng cách tìm phương trình sai phân bằng phương pháp toán tử
Thay ta được:
Hàm truyền trên biến đổi thành:
Trang 3Trong đó:
A=
B=
C=
Ta có hàm sai phân như sau :
→
Dùng tính chất dịch hàm gốc của biến đổi Z ta tìm được phương trình sai phân tương ứng phương trình trên:
Tín hiệu đầu vào là xung đơn vị nên:
Vậy ta có:
Cuối cùng ta tìm được phương trình sai phân của hệ điều khiển tự động là:
3. Chọn thời gian cắt mẫu
Để đảm bảo khả năng khôi phục lại tín hiệu liên tục từ dãy tín hiệu gián đoạn thì tần số lấy mẫu ít nhất fm phải lớn hơn hoặc bằng 2.fmax trong đó fmax là tần số tín hiệu vào cao nhất Thỏa mãn điều kiên fm ≥ 2.fmax thì có thể khôi phục lại tín hiệu mà không bị méo
Trang 4Đối với hệ thống điều khiển thì theo kinh nghiệm nên chọn bước cắt mẫu sao cho : trong đó Tmin là hằng số thời gian nhỏ nhất trong hàm truyền của hệ thống
Đối với hệ đã cho thì hằng số thời gian nhỏ nhất là : Tmin = nên thời gian trích mẫu được chọn cần thỏa mãn : 0.0625 ≤ T ≤ 0.25 Ở đây do hệ là hệ tích
phân quán tính bậc nhất nên ta chọn chu kỳ trích mẫu là: T= 0.1s
4. Chương trình mô phỏng bằng Pascal
Từ phương trình sai phân ta viết chương trình máy tính để tìm đáp ứng
ra của hệ y(t) khi tín hiệu vào là hàm nhảy cấp 1(t) Sau đây là chương trình Pascal mô hình hóa hệ ĐKTĐ đã cho Chương trình cho ra kết quả là tín hiệu
ra y(k) dưới dạng số , cứ cách 10 số in ra một số liệu Chương trình cũng cho
ra kết quả dưới dạng đường cong quá độ của hệ ĐKTĐ và tính các đặc tính quá
độ : Ymax, Y ôđ, бmax, Tmax, Tôđ
Program MO_HINH_HOA;
uses crt,graph;
var
a,b,c,max,k1,k2,t,tm,tod,Xicma:real;
gd,gm,km,ky,i,k:integer;
y:array[0 1000] of real;
st:string;
BEGIN
Clrscr;
write('Nhap k1 =');readln(k1);
write('Nhap k2 =');readln(k2);
Trang 5write('Nhap chu ky trich mau T =');readln(t); y[0]:=0;y[1]:=0;y[2]:=0;
a:=4+8*t+k1*k2*t*t;
b:=2*k1*k2*t*t-8;
c:=4-8*t+k1*k2*t*t;
for k:=0 to 997 do
y[k+2]:=(-b*y[k+1]-c*y[k]+4*k1*t*t)/a; writeln('100 gia tri cach nhau');
for k:=0 to 100 do
begin
write(' y[',k*10:3,']=',y[k*10]:8:5);
if(k mod 4)=0 then writeln;
if k=80 then readln;
end;
{tim gia tri ymax}
Max:=y[1];
km:=0;
for k:=1 to 1000 do
if y[k]>max then
Begin
Max:=y[k];
km:=k;
end;
{tim khoang thoi gian on dinh Tod}
for k:=1 to 1000 do
if abs((y[k]-(1/k2))/(1/k2))<=0.05 then begin
tod:=k*t;
break;
end;
Trang 6{in cac gia tri ra man hinh}
Writeln('thoi gian on dinh la Tod:',tod:8:4);
Xicma:=(max-1/k2)*100/(1/k2);
Writeln('gia tri cuc dai la ymax=',max:8:4);
Writeln('do qua dieu chinh xicma=',xicma:8:4,'%');
Writeln('thoi gian dat cuc dai la tm=',km*t:8:4);
{ve hinh}
Write('hay cho he so gian truc y:ky=');readln(ky);
gd:=detect;
initgraph(gd,gm,'C:\Program Files\TP\BGI');
setbkcolor(white);
setcolor(blue);
outtextxy(53,5,'Y');
outtextxy(600,360,'t(s)');
{ve cac truc toa do}
outtextxy(240,390,'KHAO SAT QTQD HE THONG');
str(max:8:4,st);
outtextxy(20,410,'GIA TRI CUC DAI LA: Ymax='+st);
str(km*t:8:4,st);
outtextxy(320,410,'THOI GIAN DE CUC DAI: Tmax='+st); str(xicma:4:2,st);
outtextxy(20,430,'DO QUA DIEU CHINH LA: xicma %='+st); str(Tod:8:4,st);
outtextxy(320,430,'THOI GIAN ON DINH LA: Tod='+st); setcolor(5);
line(50,350,620,350); {ve truc toa do}
line(50,5,50,350);
line(50,5,47,15); { ve mui ten truc y}
line(50,5,53,15);
Trang 7line(620,350,615,347); {ve mui ten truc t}
line(620,350,615,353);
for k:=1 to 7 do { khac do truc t}
begin
str(100*(k-1)*t:2:1,st);
outtextxy(k*100-60,357,st);
line(k*100-50,347,k*100-50,353);
end;
for k:=0 to 7 do { khac do truc y}
begin
str(k/(5*k2):4:2,st);
outtextxy(5,345-round(ky*k/(5*k2)),st);
line(47,350-round(ky*k/(5*k2)),53,350-round(ky*k/(5*k2)));
end;
str(max:6:4,st);
outtextxy(round(tm/t)-60,340-round(ky*max),'Ymax='+st);
str(1/k2:2:1,st);
outtextxy(560,335-round(ky/k2),'Yod='+st);
moveto(50,350);
setlinestyle(Dottedln,0,1);
line(50,350-round(1.05*ky/k2),620,350-round(1.05*ky/k2));{ duong sai so } line(50,350-round(0.95*ky/k2),620,350-round(0.95*ky/k2));
setlinestyle(Solidln,0,1);
line(50,350-round(ky/k2),620,350-round(ky/k2)); { duong on dinh }
{ ve do thi }
For k:=1 to 1000 do
Begin
If graphResult<>grOK then
Halt(1);
setlinestyle(Solidln,$C3,ThickWidth);
Trang 8lineto(k+50,350-round(ky*y[k]));
end;
repeat until keypressed;
closegraph;
END
Trang 9- Sau khi chạy chương trình ta được kết quả :
Trang 10-Đặc tính quá độ của hệ thống do chương trình mô phỏng trên Pascal vẽ :
5. Khảo sát lại hệ bằng Simulink
- Ta có sơ đồ khối của hệ thống trong Simulink :
- Kết quả đáp ứng quá độ của hệ thống do Matlab vẽ :
Trang 11Nhận xét: hai đường cong do Pascal và Matlab giống nhau Điều đó chứng tỏ
thuật toán đã dùng là đúng đắn
Chú ý :
- Khi chạy fie mô phỏng Pascal cần kiểm tra file Graph.TPU đã có trong thư mục TP\BGI của Pascal hay chưa Nếu chưa có cần bổ sung
- Trước khi chạy cần chuyển thư mục làm việc của Pascal về thư mục BGI
- Nên nhập hệ số giãn trục ky =15