Trường đại học bách khoa hà nội
khoa điện
bộ môn tự động hoá xncn
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
Giáo viên hướng dẫn: GS.TS.Nguyễn Công Hiền
Thạc Sỹ.Nguyễn Danh Huy
Sinh viên thực hiện : Lưu Thiện Trường
Nguyễn Văn tiến
Phạm Anh Tuấn
Lớp : Tự động hoá K1_03
Hà Nội 11_2004
Lời nói đầu
Ngày nay khó có thể tìm thấy lĩnh vưc hoạt động nào của con người mà không sử dụng ph
23 trang |
Chia sẻ: huyen82 | Lượt xem: 1509 | Lượt tải: 0
Tóm tắt tài liệu Dùng máy tính khảo sát quá trình quá độ của hệ điều khiển tự động, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ương pháp mô hình hoá ở những mức độ khác nhau. Điều này đặc biệt quan trọng đối với lĩnh vực điều khiển các hệ thống kỹ thuật và xã hội, bỏi vì điêu khiển chính là quá trình thu nhận thông tin từ hệ thống, nhận dạng hệ thống theo một mô khình nào đố và đưa ra quyết định thích hợp để điều khiển hệ thống. Qúa trình này được tiếp diễn liên tục nhằm đưa hệ thống vận động theo một muc tiêu định trước.
Phương pháp mô hình hoá và mô phỏng được phát triển từ đại chiến thế giới lần thứ hai vào những năm 40 của thế kỷ XX. Lúc đó người ta ứng dụng phương pháp mô phỏng để nghiên cứu phản ứng hạt nhân nhằm chế tạo bom nguyên tử. Nhờ có máy tính điện tử mà phương pháp mô khìng hoá và mô phỏng phát triển nhanh chóng và được ứng dụng vào nhiều lĩnh vực khoa học kỹ thuật cũng như khoa học xã hội khác nhau.
Nhờ có phương pháp mô khình hoá và mô phỏng, người ta có thể phân tích, nghiên cứu hệ thống liên tục, phi tuyến, ngẫu nhiên … một cách chính xác, hiệu quả mà nhiều khi phương pháp giải tích truyền thống không cho ta lời giải chính xác được.
Trong phần bài tập về mô hình hoá hệ liên tục: “ Khảo sát quá trình quá độ của hệ điều khiển tự động ” do thời gian chuẩn bị có hạn nên chắc chắn bài làm của chúng em còn có nhiều thiếu sót, em mong có được sự chỉ bảo thêm của các thầy, các cô giảng dạy trong bộ môn: “ Tự động hoá xí nghiệp công nghiệp ”- Khoa Điện-Trường Đại học Bách Khoa Hà Nội.
Một lần nữa, em xin chân thành cảm ơn thầy giáo: GS.TS.Nguyễn Công Hiền, Thạc sỹ.Nguyễn Danh Huy đã tận tình hướng dẫn để em có thể hoàn thành bài tập này.
Chương 1. Lý thuyết về mô phỏng
hệ thống liên tục
1.1.Khái niệm chung về mô hình hệ thống liên tục
Hệ thống liên tục là hệ thống mà trong đố các trnạg thái và thuộc tính của hệ thống thay đổi một cách liêu tục. Mô hình toán học của hệ thống liên tục thường là hệ phương trình vi phân. Trường hợp đơn giản nhất đó là hệ phương trình vi phân tuyến tính với hệ số hằng và được giải một cách dễ dàng bằng phương pháp giải tích. Tuy nhiên, khi mô hình có phần tử phi tuyến thì phương pháp giải tích khó hoặc không thể giải được. Trong trường hợp này thì hợp lý nhất là dùng phương pháp mô phỏng để giải bài toán. Người ta có thể dùng máy tính tương tự hoặc máy tính số để mô phỏng hệ liên tục.
1.2.Dùng máy tính tương tự để mô phỏng hệ thống liên tục
Máy tính tương tự đã có quá trình phát triển lâu dài và đã góp phần giải các bài toán của hệ thống liên tục tuyến tính cũng như phi tuyến. Máy tính tương tự được dùng rộng rãi nhất là máy tính tương tự điện tử mà phần tử cơ bản của nó là các khuếch đại thuật toán. Điện áp của máy tính biểu thị biến số của mô hình toán học. Tuy nhiên, máy tính tương tự bị hạn chế là độ chính xác không cao do nhiều nguyên nhân: do độ chính xác của phép đo điện áp, do hiện tượng trôi điểm zero của khuếch đại thuật toán … Nói chung độ chính xác của máy tính tương tự không vượt quá 0,1%. Một hạn chế quan trọng khác của máy tính tương tự là đối với từng hệ thống cụ thể phải lắp mạch máy tính tương ứng, nếu hệ thống phức tạp thị thời gian lắp ráp và hiệu chỉnh máy tính sẽ đáng kể, hơn nữa máy tính không có khả năng phát triển mềm dẻo khi muốn thay đổi cấu trúc hệ thống. Vì vậy, ngày nay người ta ít dùng máy tính tương tự vào mô phỏng mà dùng máy tính số.
1.3.Dùng máy tính số để mô phỏng hệ thống liên tục
Ngày nay, máy tính số được ứng dụng vào hầu hết các lĩnh vực hoạt động của con người và nó trở thành một trong những công cụ làm việc không thể thiếu của chúng ta. Trong lĩnh vực mô hình hoá, máy tính là công cụ chủ yếu để thực hiện việc mô phỏng hệ thống. Sau đây chúng ta sẽ đi tìm hiểu máy tính làm việc như thế nào trong việc mô hình hoá hệ thống.
1.4)Phương trình máy tính:
Giả sử dãy tín hiệu vào máy tính:
[Xk] = x(0), x(T), x(2T), … x(kT)
Dãy tín hiệu ra của máy tính
[Yk] = y(0), y(T), y(2T), … y(kT)
trong đó T là bước cắt mẫu hay nhịp làm việc của máy tính
Tín hiệu ra ở thời điểm k tức y(kT) phụ thuộc vào giá trị của n tín hiệu ra của m+1 tín hiệu vào xảy ra trước đó. Các giá trị của m tín hiệu vào và n tín hiệu ra được lưu trữ trong bộ nhớ của máy tính.
Như vậy quan hệ giữa tín hiệu ra và tín hiệu vào của máy tính được viết như sau:
y(kT) = (1-1)
Với m n;
Phương trình (1-1) được gọi là phương trình máy tính biểu thị quan hệ tuyến tính giữa tín hiệu ra với tín hiệu vào của máy tính.
Vì tín hiệu ra [yk] và tín hiệu vào [xk] đều có cùng bước gián đoạn T nên để cho gọn ta có thể viết
y(k) = (1-2)
Khai triển ra ta có:
y(k) + an-1y(k-1) + an-2y(k-2) + … + a1y(k- n+1) + a0y(k- n) +
= bmx(k) + bm-1x(k-1) + … + b1x(k-2) + b0y(k-m) (1-3)
y(k) = - an-1y(k-1) - an-2y(k-2) - …- a1y(k- n+1)- a0y(k- n) +
bmx(k) + bm-1x(k-1) + … + b1x(k-2) + b0y(k-m) (1 – 4)
Phương trình (1 – 3),(1 – 4) gọi là phương trình sai phân bậc n.
Như vậy, ta có thể tháy rằng phương trình máy tính có dạng của phương trình sai phân tuyến tính.
Từ các phân tích trên, ta thấy muốn dùng máy tính số để mô phỏng hệ liên tục thì phải mô tả hệ liên tục dưới dạng phương trình sai phân tuyến tính bằng cách từ phương trình Laplace W(s) của hệ liên tục, bằng cách đổi biến số:
ta có thể tìm được phương trình biển đổi z tương ứng W(z) rồi tìm ngược lại phương trình sai phân của hệ để giải trên máy tính số để tìm đặc tính mô phỏng của hệ liên tục.
*) Các tính chất biến đổi Z
1. Tính tuyến tính
Z{a[v(k)] + b[w(k)]} = aV(z) + b.W(z)
2.Dịch hàm gốc f(k) về phía trước m bước
Z[f(k)] = F(z) =
Z[f(k+1)] = ZF(z) – Zf(0);
Z[f(k+2)] = Z2 F(z) – Z2 f(0) – Zf(1);
Tổng quát dịch m bước
Với Zf(0) = 0, ta có:
Z[f(k+1)] = ZF(z)
Z[f(k+m)] = ZmF(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
5. Biến đổi Z của sai phân lùi
6.Giá trị đầu của hàm gốc rời rạc f(0)
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:
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
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à:
Từ đó, ta có hàm truyền của hệ kín là:
2.2.Tìm phương trình sai phân
Thực hiện phép biến đổi sang z, ta thay
vào Wk ta được
(2-1)
trong đó:
Từ (2 – 1) ta có:
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:
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ó
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ư:
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()
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 "Lưu 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
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
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
.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
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)) _
-(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ư:
Ta cho thử K1 = 12;K2 =0.1; K3 = 1 ; T1=0.5; T2 =0.5
Từ đồ thị trên ta có:
Giá trị cực đại ;
Độ quá điều chỉnh: 17,32%
Giá trị ổn định:
Thời gian đạt giá trị max:
Thời gian đạt giá trị ổn định:
2.4.In 100 giá trị
2.5.Mô phỏng trên phần mền Matlab
*Sử dụng simukinkmô phỏng hệ thống
*Chương trình Matlab:
>> w1=tf([0 12],[.5 1])
Transfer function:
12
---------
0.5 s + 1
>> w2=tf([0 .1],[.25 1 1])
Transfer function:
0.1
----------------
0.25 s^2 + s + 1
>> w3=1
w3 =
1
>> wh=w1*w2
Transfer function:
1.2
--------------------------------
0.125 s^3 + 0.75 s^2 + 1.5 s + 1
>> wk=feedback(wh,w3)
Transfer function:
1.2
----------------------------------
0.125 s^3 + 0.75 s^2 + 1.5 s + 2.2
>> step(wk)
Đường cong quá trình quá độ do chương trình Matlab vẽ ra như hình dưới đây
So sánh giữa 2 đồ thị trên ta thấy chúng trùng nhau, điều đó chứng tỏ thuật toán của chúng ta là đúng đắn.
._.
Các file đính kèm theo tài liệu này:
- 30007.doc