Để đảm bảo một hệ thống tự động hoạt động tốt và ổn đinh, chúng ta cần khảo sát quá trình quá độ để xem đặc tính theo thời gian của hệ, từ đó có thể điều chỉnh các tham số phù hợp để đáp ứng đúng cho ứng dụng thực tế.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI.
KHOA ĐIỆN
BỘ MÔN TỰ ĐỘNG HOÁ XÍ NGHIỆP CÔNG NGHIỆP.
BÀI TẬP DÀI MÔ HÌNH HOÁ SỐ 1
DÙNG MÁY TÍNH KHẢO SÁT QUÁ TRÌNH QUÁ ĐỘ
CỦA HỆ ĐIỀU KHIỂN TỰ ĐỘNG
Chủ nhiệm bộ môn : TS.Nguyễn Mạnh Tiến
Thầy giáo hướng dẫn : GS.TS.Nguyễn Công Hiền
Th.S.Nguyễn Danh Huy
Sinhviên : Võ Quang Hưng
Nguyễn Hữu Đông Phạm Tuấn Diện Đinh Quang Tuận Lớp : TĐH3_K46
Nhóm : 2
Hà Nội……… 9-2004
Trang 21) Đề bài:
Dùng máy tính khảo sát quá trình quá độ của hệ điều khiển tự động
a)Sơ đồ cấu trúc của hệ thống:
u(t) y(t)
b)Tham số của hệ thống:
+ u(t) = 1(t),
+ Ki ,Ti -theo đề bài đã cho,
+ T- bước cắt mẫu,tự chọn
2)Viết phương trình sai phân của hệ thống.
) 1 )(
1 (
1
) 1 )(
1 ( ) (
2 1
2 1
2 1
1
s T s T
K K
s T s T
K s
W
) 1 )(
1 (
) 1 )(
1 (
) 1 )(
1 ( )
(
2 1
2 1 2
1
2 1
1
s T s T
K K s
T s T
s T s T
K s
W
2 1 2
1
2 2 1
1
1 ).
( ) (
K K s
T T s T T
K s
W
K2
Trang 3Thay
1
1
2
Z
Z T
s Vào biểu thức trên ta có:
2 1 2
1
2 2
1
1
1 ) 1 (
) 1 ( 2 ) (
) 1 (
) 1 (
2
)
(
K K Z
T
Z T T Z
T
Z T T
K Z
W
C BZ AZ
Z Z
T K
2 2
Với A = 4.T1.T2 + 2.T.T1 + 2.T.T2 + K1.K2.T2 + 2.T2
B = -8.T1.T2 + 2.K1.K2.T2 + 2.T2
C = 4.T1.T2 - 2.T.T1 - 2.T.T2 + K1.K2*T*T + T*T
Ta có hàm sai phân như sau:
C BZ AZ
Z Z T
K
Z
U
Z
Y
2 2
)
(
)
(
A.Z2.Y(Z) + B.Z.Y(Z) + C.Y(Z) = K1.T2.(Z2.U(Z) + 2.Z.U(Z) + U(Z))
Dùng tính chất hàm gốc của biến đổi Z ta tìm được phương trình sai phân tương ứng với phương trình:
K B YK C Y K K T UK UK U K
Y
A 2 1 2 2 2 1
1
Vì tín hiệu vào là tín hiệu nhảy cấp U(t) = 1(t) nên ta có:
UK 2 UK 1 U K 1
1 4
1
2 Y K B Y K C Y K K T
Cuối cùng ta tìm được phương trình sai phân của hệ thống điều khiển tự động là:
YK 2 ( B.YK 1 C.Y K 4 K .T2 ) /A
1
Từ phương trình sai phân của hệ thống điều khiển tự động ,ta viết phươ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)
Trang 43 Chương trình Matlab
>> K1 = 4;
>> K2 = 1;
>> T1 = 0.1;
>> T2 = 0.1;
>> num =[K1]
>> den =[T1*T2,T1+T2,K1*K2 + 1];
>> step(num,den)
>> Step(num,den);title('Dac tinh qua do cua he thong');
>> ylabel('y(t)');xlabel('t,sec');
Kêt luận :
Theo phơưng trình đặc tính của hệ thống va tiêu chuẩn Routh-hơpit ta thay đẻ hệ thống ổn định thì (K1*K2 + 1)>0 do đó tuỳ tong thông số mà ta có đạc điểm khác nhau
Vứi số liệu trên thì hệ thống ổn định
Trang 53) Viết phương trình mô phỏng bằng Visual Basic.
Option Explicit
Dim A, B, C As Double
Dim t, T1, T2, K1, K2 As Double
Dim Y(10000) As Double
Dim Xmax, Ymax, Hsox, Hsoy, Si, Ky As Double
Dim Xmin, Ymin As Integer
Dim Xsum, Ysum As Integer
Dim sumy As Integer
Dim Xcurrent, Ycurrent As Long
Dim Tmax, Yod As Double
Dim time As Double
Dim i As Integer
Private Sub vedothi()
Dim Dem As Integer
Dim Tod As Double
Dim xichma As Double
Graph.Cls
Xmin = 400
Ymin = 300
Xmax = Graph.Width - 200
' Ve truc toa do '
Graph.Line (Xmin, (Graph.Height - 400))-(Xmax, (Graph.Height - 400)) Graph.Line (Xmax - 100, (Graph.Height - 400) - 50)-(Xmax, (Graph.Height – 400))
Graph.Line (Xmax - 100, (Graph.Height - 400) + 50)-(Xmax, (Graph.Height –
400))
Graph.Line (Xmin, Graph.Height - 400)-(Xmin, Ymin)
Graph.Line (Xmin - 50, Ymin + 100)-(Xmin, Ymin)
Graph.Line (Xmin + 50, Ymin + 100)-(Xmin, Ymin)
Graph.CurrentX = Xmax - 400
Graph.CurrentY = (Graph.Height - 400) + 100
Graph.Print ("t(sec)")
Graph.CurrentX = Xmin - 250
Graph.CurrentY = Ymin - 100
Graph.Print ("y(t)")
Graph.CurrentX = Xmin - 200
Graph.CurrentY = (Graph.Height - 400) + 100
Graph.Print ("0")
' Tinh cac gia tri Y'
K1 = Val(txtk1.Text)
K2 = Val(txtk2.Text)
Trang 6T1 = Val(txtt1.Text)
T2 = Val(txtt2.Text)
t = 0.001
If (K1 * K2 + 1) <= 0 Then
MsgBox (" He thong khong on dinh ")
Else
MsgBox (" He thong on dinh ")
End If
If (K1 = 0) Or (K2 = 0) Or (T1 = 0) Or (T2 = 0) Then
MsgBox (" Chua nhap so lieu ")
Else
A = 4 * T1 * T2 + 2 * T1 * t + 2 * t * T2 + K1 * K2 * t * t + t * t
B = (-8) * T1 * T2 + 2 * K1 * K2 * t * t + 2 * t * t
C = 4 * T1 * T2 - 2 * t * T1 - 2 * t * T2 + K1 * K2 * t * t + t * t
Y(0) = 0
Y(1) = 0
Ymax = 0
time = CStr(txtthoigian.Text) ' THoi gian khao sat (s)
For i = 2 To 1000 * time Step 1
Y(i) = (4 * K1 * t * t - B * Y(i - 1) - C * Y(i - 2)) / A
If Y(i) > Ymax Then
Ymax = Y(i)
Tmax = i * t
End If
Next i
If Ymax <> 0 Then 'Tranh truong hop Ymax =0 thi bao loi
Hsoy = (Graph.Height - 1000) / (Ymax)
Else: Ymax = 0.001
End If
Hsox = 5.4 / time
'Tim xicma
xichma = Abs(Ymax - Y(1000 * time)) / Ymax * 100
'Tim yod gan nhat
i = 0
While (Abs(Y(i) - Y(1000 * time)) > 0.0001) And (i < 1000 * time - 1)
i = i + 1
Tod = i
Wend
Yod = Y(i)
'Khac do truc hoanh
Si = time / (t * 5)
Trang 7For i = 1 To 5
Graph.Line (i * Si * Hsox + 300, Graph.Height - 350)-(i * Si * Hsox + 300, Graph.Height - 450)
Graph.CurrentX = i * Si * Hsox + 200
Graph.CurrentY = Graph.Height - 300
Graph.Print CStr(i * Si * t)
Next
'Khac do truc tung
Ky = Ymax * Hsoy / 5
'sumy = Round(5 + (Graph.Height - 500 - Round(Ymax * Hsoy)'
For i = 1 To 5
Graph.Line (350, Graph.Height - 400 - Round(Ky * i))-(450, Graph.Height
- 400 - Round(Ky * i))
Graph.CurrentX = 0
Graph.CurrentY = Graph.Height - 400 - Round(Ky * i) - 100
Graph.Print Format(CStr(Ky * i / Hsoy), "#0.00")
Next
'Ve duong ymax
Graph.DrawStyle = 2
Graph.Line ((Tmax / t - 2) * Hsox + 400, Graph.Height - 400)-((Tmax / t - 2)
* Hsox + 400, Graph.Height - 400 - Round(Hsoy * Ymax))
Graph.Line ((Tmax / t - 2) * Hsox + 400, Graph.Height - 400 - Round(Hsoy * Ymax))-(400, Graph.Height - 400 - Round(Hsoy * Ymax))
Graph.CurrentX = (Tmax / t - 2) * Hsox + 400
Graph.CurrentY = Graph.Height - 600 - Round(Hsoy * Ymax)
Graph.Print "Ymax = " + Format(CStr(Ymax), "####0.0000")
Graph.CurrentX = (Tmax / t - 2) * Hsox + 450
Graph.CurrentY = Graph.Height - 700
Graph.Print "Tmax = " + CStr(Tmax)
'Ve duong on dinh
Graph.Line (400, Graph.Height - 400 - Round(Hsoy * Y(1000 *
(Graph.Width - 400, Graph.Height - 400 - Round(Hsoy * Y(1000 * time))) Graph.CurrentX = Tod * Hsox + 450
Graph.CurrentY = Graph.Height - 800 - Round(Yod * Hsoy)
Graph.Print "Yôđ = " + Format(CStr(Y(1000 * time)), "####0.0000")
'Ve duong sai so
Graph.Line (400, Graph.Height - 400 - Round(Hsoy * 0.95 * Y(1000 *
time)))-(Graph.Width - 400, Graph.Height - 400 - Round(Hsoy * 0.95 * ‘ Y(1000 * time)))
Graph.Line (400, Graph.Height - 400 - Round(Hsoy * 1.05 * Y(1000 *
time)))-(Graph.Width - 400, Graph.Height - 400 - Round(Hsoy * 1.05 * Y(1000 * time)))
Trang 8
'Ve duong Tod
Graph.Line ((Tod - 2) * Hsox + 400, Graph.Height - 400)-((Tod - 2) * Hsox +
400, Graph.Height - 400 - Hsoy * Yod)
Graph.CurrentX = (Tod - 2) * Hsox + 400
Graph.CurrentY = Graph.Height - 900
Graph.Print "Tôđ = " + CStr(Tod * t) + " "
Graph.DrawStyle = 0
'Ve mui ten 5%
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 Yod))-((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 300)
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05
* Yod))-((Tod - 2) * Hsox + 410 - 100, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 100)
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 1.05
* Yod))-((Tod - 2) * Hsox + 410 + 100, Graph.Height - 400 - Round(Hsoy * 1.05 * Yod) - 100)
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 Yod))-((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 300)
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95
* Yod))-((Tod - 2) * Hsox + 410 - 100, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 100)
Graph.Line ((Tod - 2) * Hsox + 410, Graph.Height - 400 - Round(Hsoy * 0.95
* Yod))-((Tod - 2) * Hsox + 410 + 100, Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 100)
Graph.CurrentX = (Tod - 2) * Hsox + 450
Graph.CurrentY = Graph.Height - 400 - Round(Hsoy * 0.95 * Yod) + 200 Graph.Print "5% Yôđ"
' Hien thi cac gia tri thoi gian
txtymax.Text = Format(CStr(Ymax), "#0.00000")
txtyod.Text = Format(CStr(Yod), "#0.00000")
txtxichma.Text = Format(CStr(xichma), "#0.00000")
txttod.Text = Format(CStr(Tod * t), "#0.00000")
txttymax.Text = Format(CStr(Tmax), "#0.00000")
' ve do thi '
Xcurrent = Xmin
Ycurrent = (Graph.Height - 400)
txty = ""
For i = 0 To 999 * time Step 1
Trang 9If i Mod 10 = 0 Then
txty.Text = txty.Text + "y[" + CStr(i) + "] = " + Format(CStr(Y(i)), "#0.00000") + vbNewLine
End If
Graph.Line (Xcurrent, Ycurrent)-(Xmin + (i + 1) * Hsox,
Round((Graph.Height - 400) - Y(i + 1) * Hsoy))
Xcurrent = Xmin + i * Hsox
Ycurrent = Round((Graph.Height - 400) - Y(i) * Hsoy)
Next i
End If
End Sub
Private Sub cmddothi_Click()
Graph1.Visible = False
If Val(txtthoigian.Text) < 10 Then
vedothi
Else
MsgBox (" Thoi gian khao sat phai be hon 10(s) ")
End If
End Sub
Private Sub cmdsodo_Click()
Graph1.Visible = True
End Sub
Private Sub Command5_Click()
End
End Sub
Private Sub dothi1_Click(Index As Integer)
Graph1.Visible = False
vedothi
End Sub
Private Sub exit1_Click()
End
End Sub
Private Sub sodo1_Click()
Graph1.Visible = True
End Sub
Private Sub txtK1_KeyPress(KeyAscii As Integer)
Trang 10If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
End If
End Sub
Private Sub txtK2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
End If
End Sub
Private Sub txtT1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
End If
End Sub
Private Sub txtT2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
vedothi
If (K1 * K2 + 1) <= 0 Then
MsgBox (" He thong khong on dinh ")
Else
MsgBox (" He thong on dinh ")
End If
End If
End Sub
Private Sub txtthoigian_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Graph1.Visible = False
If Val(txtthoigian.Text) < 10 Then
lblymax.Caption = "Ymax :"
vedothi
Else
MsgBox (" Thoi gian khao sat phai be hon 10(s) ")
End If
End If
End Sub
Trang 11Đặc tính quá độ hệ thống điều khiển chạy bằng Visual Basic