trờng đại học bkhn
bộ môn :tự động hoá
Tổng quát dịch m bớc
=
=+
1
0
)()()]([
m
j
jmm
ZkfzFZmkfZ
Với Zf(0) = 0, ta có:
Z[f(k+1)] = ZF(z)
Z[f(k+m)] = Z
m
F(z)
3. Dịch gốc về phía sau m bớc
Tơng tự nh trên, ta có
Z[f(k-m)] = Z
-m
F(z)
4.Biến đổi Z của sai phân tiến
)()1()( kfkfkf
+=
)()1()]([ zFZkfZ
=
5. Biến đổi Z của sai phân lùi
)1()()(
=
kfkfkf
)()1()]([
1
ZFZkfZ
=
6.Giá trị đầu của hàm gốc rời rạc f(0)
)(lim)0( ZFf
z
=
5
trờng đại học bkhn
bộ môn :tự động hoá
Chơng 2. lập trình trên máy tính để khảo sát
quá trình quá độ của hệ điều khiển tự động
Đề Bài:
2.1.Xác định hàm truyền của hệ:
Từ cấu trúc của hệ thống, ta có hàm truyền của hệ hở là:
)12)(11)(11(
21
+++
=
sTsTsT
KK
W
h
Từ đó, ta có hàm truyền của hệ kín là:
)(
)(
13.2.1)2()2(
2.1
3.1
21
2
21
23
2
2
1
sU
sY
KKKsTTsTTTsTT
KK
KW
W
W
h
h
k
=
++++++
=
+
=
2.2.Tìm phơng trình sai phân
Thực hiện phép biến đổi sang z, ta thay
1
12
+
=
z
z
T
s
vào W
k
ta đợc
)(
)()12(
2
2
zU
zY
CBzAz
zzD
W
Z
=
++
++
=
(2-1)
trong đó:
3
21
2
2112
2
1
)3211()2.(.2).2(.4.8 TKKKTTTTTTTTTA
++++++=
6
Tham số sinh viên tự chọn
K1, K2 - hệ số khuếch đại
T1 - hằng số thời gian
T2 - Hằng số thời gian
T - bứơc cắt mẫu
trờng đại học bkhn
bộ môn :tự động hoá
)3211(3)2(2)2(.424
3
21
2
2112
2
1
KKKTTTTTTTTTTB
+++++=
)3211()2(2)2(4.24
3
21
2
2112
2
1
KKKTTTTTTTTTTC
++++=
)1()2(2)2(.48
321
3
21
2
2112
2
1
KKKTTTTTTTTTTD
+++++=
Từ (2 1) ta có:
)133()()()()(
233
21
23
+++=+++ zzzTKKzDYzCzYzYBzzYAz
3
21
23
8)()()()( TKKzDYzCzYzYBzzYAz
=+++
Dùng tính chất biến đổi Z ta tìm đợc phơng trình sai phân tơng ứng với phơng
trình trên:
[ ]
3
21
8]1[]2[]3[ TKKkDYkCYkBYkAY
=++++++
Vì tín hiệu là nhảy cấp U(t)=1(t) nên ta có
U[k+2] = U[k+1] = U[k] = 1
Vậy ta có
3
21
8 TKKE
=
A.Y[k+3] + B.Y[k+2] + C.Y[k+1] + D.Y[k] = E
Y[k+3]=(-B.Y[k+2] - C.Y[k+1] - D.Y[k] +E)/A
2.3. Viết chơng trình mô phỏng bằng ngôn ngữ Visual Basic
Sau đây là chơng trình Visual Basic mô hình hoá hệ điều khiển tự động đã
cho. Chơng trình cho 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 kết quả dới dạng đờng cong quá trình quá độ
của hệ ĐKTĐ và tính các đặc tính quá độ nh:
odod
TTyy ,,,,
maxmaxmax
Sau đây là chơng trình mô phỏng viết bằng ngôn ngữ Visual Basic:
*)Phần code của form1:
Private Sub cmdChapnhan_Click()
ChapNhan
End Sub
Private Sub cmdMophong_Click()
mophong
KhacTruc
End Sub
Private Sub cmdThoat_Click()
End
End Sub
Private Sub Môphỏng_Click()
End Sub
Private Sub MnuGVHD_Click()
7
trờng đại học bkhn
bộ môn :tự động hoá
MsgBox "GS.TS. Nguyễn Công Hiền" _
& vbCrLf & vbCrLf & "ThS.Nguyễn Danh Huy", , "Thày giáo hớng dẫn:"
End Sub
Private Sub mnuMoph_Click()
mophong
KhacTruc
End Sub
Private Sub mnuNhom_Click()
MsgBox "Lu Thiện Trờng" _
& vbCrLf & vbCrLf & "Nguyễn Văn Tiến" _
& vbCrLf & vbCrLf & "Phạm Anh Tuấn", , "Nhóm thực hiện:25"
End Sub
Private Sub Mnuthoat_Click()
End
End Sub
Private Sub MnuTL_Click()
MsgBox "1. Mô hình hoá hệ thống và mô phỏng - Nguyễn Công Hiền" _
& vbCrLf & vbCrLf & "2. Ngôn ngữ lập trình Visual Basic 6.0" _
& vbCrLf & vbCrLf + "3. Lý thuyết điều khiển tự động " _
& "- Phạm Công Ngô", , "Tài liệu tham khảo"
End Sub
Private Sub Text9_click()
Dim sta As Integer
sta = MsgBox("Thời gian lấy mẫu đã đợc giữ cố định!", , "Thông báo")
If sta = vbOK Then
Text9.Enabled = False
End If
End Sub
*)Phần code của form 2:
Private Sub cmdChiTieuChatLuong_Click()
ChiTieuChatLuong
End Sub
Private Sub cmdInGiaTri_Click()
CIndex = 0
frm3.Show
8
trờng đại học bkhn
bộ môn :tự động hoá
InGiaTriNext
cmdInGiaTri.Enabled = False
End Sub
Private Sub cmdQuayve_Click()
frm1.Show
frm2.Hide
Unload frm2
cmdInGiaTri.Enabled = True
cmdChiTieuChatLuong.Enabled = True
End Sub
*)Phần code của form 3:
Private Sub cmdNext_Click()
InGiaTriNext
End Sub
Private Sub cmdOK_Click()
Unload frm3
frm3.Hide
mophong
End Sub
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
*)Phần code của modul
Option Explicit
Public K1, K2, K3 As Double ' He so
Public T, T1, T2 As Double ' Hang so thoi gian
Public Y(6000) As Double
Dim A, B, C, D, E As Double
Public I As Integer
Public CI As Integer
Dim Tod, Yod, Ymax, Tmax As Double
Public Sub ChapNhan()
Dim s As Integer
With frm1
K1 = Val(.Text5.Text)
K2 = Val(.Text6.Text)
K3 = Val(.Text7.Text)
T1 = Val(.Text8.Text)
T2 = Val(.Text12.Text)
T = Val(.Text9.Text)
If K3 = 0 Then
9
trờng đại học bkhn
bộ môn :tự động hoá
s = MsgBox("Bạn đã nhập hệ số phản hồi bằng zero!" _
& vbCrLf & vbCrLf & " Hãy nhập lại dữ liệu (Yes/No)", 16 +
vbYesNo, "Thông báo")
If s = vbNo Then
Unload frm1
Unload frm2
Else
frm1.Show
End If
End If
.Text1.Text = Str(K1)
.Text2.Text = Str(K2)
.Text3.Text = Str(K3)
.Text4.Text = Str(T1)
.Text10.Text = Str(T1)
.Text11.Text = Str(T2)
End With
End Sub
Public Sub mophong()
frm1.Hide
Load frm2
frm2.Show
'Biểu thức Z của hệ
Y(0) = 0
Y(1) = 0
Y(2) = 0
A = 8 * T1 * T1 * T2 + 4 * T * T1 * (T1 + 2 * T2) + 2 * T * T * (2 * T1 +
T2) + (1 + K1 * K2 * K3) * T * T * T
B = -24 * T1 * T1 * T2 - 4 * T * T1 * (T1 + 2 * T2) + 2 * T * T * (2 * T1 +
T2) + 3 * (1 + K1 * K2 * K3) * T * T * T
C = 24 * T1 * T1 * T2 - 4 * T * T1 * (T1 + 2 * T2) - 2 * T * T * (2 * T1 +
T2) + 3 * (1 + K1 * K2 * K3) * T * T * T
D = -8 * T1 * T1 * T2 + 4 * T * T1 * (T1 + 2 * T2) - 2 * T * T * (2 * T1 +
T2) + (1 + K1 * K2 * K3) * T * T * T
E = K1 * K2 * T * T * T
' frm2.Text6.Text = Str(B)
For I = 0 To 5996
Y(I + 3) = (8 * E - B * Y(I + 2) - C * Y(I + 1) - D * Y(I)) / A
Next I
With frm2
.picDoThi.Line (0, 0)-(.Line1.X1, .Line1.Y1), .picDoThi.BackColor
.picDoThi.DrawWidth = 1
For I = 0 To 5999
.picDoThi.Line -(.Line1.X1 + I, .Line2.Y2 - Y(I) * 3000), vbRed
Next I
10
trờng đại học bkhn
bộ môn :tự động hoá
.picDoThi.DrawWidth = 1
End With
End Sub
Public Sub KhacTruc()
'Khac do truc t
Dim K As Integer
For K = 0 To 6
With frm2
.picDoThi.Line (K * 1000 + .Line2.X1, .Line2.Y1 - 80) _
-(K * 1000 + .Line2.X1, .Line2.Y1 + 80)
.Label10(K).Top = 6000
.Label10(K).Left = .Line2.X1 + K * 1000 - 300
.Label10(K).Caption = Str(K * T * 1000)
End With
Next K
'Khac do truc y
For K = 7 To 0 Step -1
Yod = K1 * K2 / (1 + K1 * K2 * K3)
With frm2
.picDoThi.Line (.Line2.X1 + 80, .Line1.Y2 - Int(Yod * 3000 * K / 4)) _
-(.Line2.X1 - 80, .Line1.Y2 - Int(Yod * 3000 * K / 4))
.Label9(K).Top = .Line1.Y2 - Int(3000 * Yod * K / 4) - 200
.Label9(K).Left = 360
.Label9(K).Caption = Str(Round((Yod * K / 4), 3))
End With
Next K
End Sub
Public Sub ChiTieuChatLuong()
'Tim gia tri Max va Thoi gian Max
Dim IMax As Integer
Ymax = Y(0) 'Gia tri Max
For I = 0 To 5999
If (Y(I) > Ymax) Then
Ymax = Y(I)
IMax = I
End If
Next I
Tmax = IMax * T 'Thoi gian dat gia tri Max
'Gia tri on dinh
Yod = K1 * K2 / (1 + K1 * K2 * K3)
'Tim thoi gian dat gia tri on dinh
I = 5999
Do While Abs(Y(I) - Yod) / Yod <= 0.02
I = I - 1
Loop
11
trờng đại học bkhn
bộ môn :tự động hoá
Tod = I * T
'Tim do qua dieu chinh
Dim A As Double
A = (Ymax - Yod) * 100 / Yod
With frm2
' Hien thi chi tieu chat luong
.Text1.Text = Str(Ymax)
.Text2.Text = Str(A)
.Text3.Text = Str(Yod)
.Text4.Text = Str(Tmax)
.Text5.Text = Str(Tod)
' Duong gia tri dat
.picDoThi.Line (.Line1.X1, .Line2.Y2 - Int(Yod * 3000)) _
-(.Line1.X1 + 3200 * 2, .Line2.Y2 - Int(Yod * 3000)), vbRed
.picDoThi.DrawStyle = vbDot
' Cac duong giong diem
.picDoThi.Line (Int(Tod / T) + .Line1.X1, .Line2.Y2 - Int(3000 * Yod)) _
-(Int(Tod / T) + .Line1.X1, .Line2.Y2), vbBlack
.picDoThi.Line (.Line1.X1, .Line2.Y2 - Int(Yod * 3000 * 1.02)) _
-(.Line1.X1 + 3000 * 2, .Line2.Y2 - Int(Yod * 3000 * 1.02)), vbBlack
.picDoThi.Line (.Line1.X1, .Line2.Y2 - Int(Yod * 3000 * 0.98)) _
-(.Line1.X1 + 3000 * 2, .Line2.Y2 - Int(Yod * 3000 * 0.98)), vbBlack
.picDoThi.Line (Int(Tmax / T) + .Line1.X1, .Line2.Y2 - Int(3000 * Ymax))
_
-(Int(Tmax / T) + .Line1.X1, .Line2.Y2), vbBlack
.picDoThi.Line (.Line1.X1, .Line2.Y2 - Int(Ymax * 3000)) _
-(.Line1.X1 + Int(Tmax / T), .Line2.Y2 - Int(Ymax * 3000)), vbBlack
.picDoThi.DrawStyle = vbSolid
' Ve mui ten
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 1.02)) _
-(Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000 * 1.02) -
500)
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 0.98)) _
-(Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000 * 0.98) +
500)
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 1.02)) _
-(Int(Tod / T) + .Line1.X1 + 470, .Line2.Y2 - Int(Yod * 3000 * 1.02) -
150)
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 1.02)) _
12
trờng đại học bkhn
bộ môn :tự động hoá
-(Int(Tod / T) + .Line1.X1 + 530, .Line2.Y2 - Int(Yod * 3000 * 1.02) -
150)
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 0.98)) _
-(Int(Tod / T) + .Line1.X1 + 470, .Line2.Y2 - Int(Yod * 3000 * 0.98) +
150)
.picDoThi.Line (Int(Tod / T) + .Line1.X1 + 500, .Line2.Y2 - Int(Yod * 3000
* 0.98)) _
-(Int(Tod / T) + .Line1.X1 + 530, .Line2.Y2 - Int(Yod * 3000 * 0.98) +
150)
' Hien thi ghi chu
.Label11.Top = .Line2.Y2 - Int(3000 * Ymax) - 300
.Label11.Left = Int(Tmax / T) * 2 + .Line1.X1 + 50
.Label11.Caption = "Ymax"
.Label12.Top = .Line2.Y2 - Int(3000 * Yod) - 400
.Label12.Left = Int(Tod / T) + .Line1.X1 - 200
.Label12.Caption = "2%Yôđ"
.Label13.Top = .Line2.Y2 - Int(Yod * 3000) - 400
.Label13.Left = 3200 * 2
.Label13.Caption = "Yôđ"
.Label14.Top = .Line2.Y2 - 400
.Label14.Left = Int(Tmax / T) + .Line1.X1 + 50
.Label14.Caption = "Tmax"
.Label15.Top = .Line2.Y2 - 400
.Label15.Left = Int(Tod / T) + .Line1.X1 + 50
.Label15.Caption = "Tôđ"
End With
End Sub
'Hien thi 100 gia tri vao day
Public Sub InGiaTriNext()
Dim K As Integer
frm3.cmdNext.Enabled = True
For K = 0 To 9
frm3.Text1(K).Text = Str(Y(CI))
frm3.Label1(K).Caption = "Y(" + Str(CI) + ")"
CI = CI + 10
Next K
If (CI >= 1000) Then
frm3.cmdNext.Enabled = False
End If
End Sub
Sau khi cho chạy chơng trình ta có đờng cong quá trình quá độ của hệ ĐKTĐ
và tính các đặc tính quá độ nh:
odod
TTyy ,,,,
maxmaxmax
Ta cho thử K1 = 12;K2 =0.1; K3 = 1 ; T1=0.5; T2 =0.5
13
trờng đại học bkhn
bộ môn :tự động hoá
Từ đồ thị trên ta có:
Giá trị cực đại
6399,0
max
=
y
;
Độ quá điều chỉnh: 17,32%
Giá trị ổn định:
545,0
=
od
y
Thời gian đạt giá trị max:
)(993,1
max
sT
=
Thời gian đạt giá trị ổn định:
)(251,4 sT
od
=
14
Không có nhận xét nào:
Đăng nhận xét