Bài tập lớn Robot và CNC: Điều khiển động cơ một chiều
A. Giới thiệu chung về động cơ điện một chiều
1. Các loại động cơ điện một chiều
- Động cơ một chiều kích từ độc lập
- Động cơ một chiều kích từ nối tiếp
- Động cơ một chiều kích từ song song
- Động cơ một chiều khung chổi than
Trong phạm vi bài tập lớn, ta chỉ nghiên cứu động cơ điện một chiều kích từ độc lập.
o]) Kết quả được : Chọn Sơ đồ trên MATLAB – Simulink : Kết quả mô phỏng : Đáp ứng điện áp đưa đến chỉnh lưu uA_ref (V), điện áp phần ứng và giá trị quan sát (V), dòng điện phần ứng và giá trị quan sát (A), tốc độ n (RPM) khi lắp thêm khâu PI điều chỉnh dòng Từ kết quả mô phỏng ở trên, ta thấy kết quả mô phỏng rất tốt , hàm quá độ hệ thống (tốc độ) có thời gian xác lập ngắn và hầu như không có quá điều chỉnh và sai lệch tĩnh, hệ thống ít chịu ảnh hưởng của nhiễu. Mặc dù phương pháp thiết kế bộ điều khiển đối tượng trên không gian trạng thái rất tốt nhưng trong bài tập lớn này, ta không xác định được một số thông số của động cơ do đó ta không thể tìm được hàm truyền cho đối tượng vì vậy mà không xác định được các ma trận trạng thái. Do không xác định được các ma trận trạng thái nên ta không thể thiết kế bộ điều khiển theo phương án đã trình bày ở trên. Do không xác định được đầy đủ thông số của động cơ nên việc thiết kế bộ điều khiển của ta sẽ mang tính “mò mẫm”, vì thế bộ điều khiển mà ta sử dụng sẽ là PID. Ta sẽ tiến hành thử một số bộ điều khiển cho động cơ và đo tốc độ động cơ; sau khi thử, ta sẽ tìm được bộ điều khiển thích hợp cho động cơ. C. Xây dựng mạch phần cứng 1. Mạch cầu để điều khiển động cơ có thể quay hai chiều D. Xây dựng phần mềm Lập trình cho vi điều khiển Mạch phần cứng của ta sử dụng hai vi điều khiển, vì thế ta phải lập trình cho từng vi điều khiển. Ta sẽ sử dụng ngôn ngữ Asembly để lập trình, công cụ để lập trình là chương trình Reads51 của hãng Rigel. Vi điều khiển 1 : đo tốc độ động cơ và hiển thị dưới dạng LED #include Dec3 equ 51h Dec2 equ 52h Dec1 equ 53h Dec0 equ 54h Led3 equ 60h Led2 equ 61h Led1 equ 62h Led0 equ 63h Led0sl bit p3.0 Led1sl bit p3.1 Led2sl bit p3.6 Led3sl bit p3.7 ;======================================================== org 0000h ;Reset ljmp Main org 001Bh ;In T1 ljmp ISR_T1 ;======================================================== ; MAIN PROGRAM ;======================================================== org 0100h Main: mov Dec3,#0 mov Dec2,#0 mov psw,#00h mov TMOD,#15h mov TL0,#00h mov TH0,#00h mov TL1,#17h mov TH1,#0FCh setb p3.4 setb EA setb ET0 setb ET1 setb TR0 setb TR1 here: nop sjmp here ;======================================================== ISR_T1: clr TR1 clr TR0 clr TF1 mov r0,TL0 mov TL0,#00H mov TH0,#00H mov TL1,#09H mov TH1,#0FBH mov p2,r0 lcall HEX2BCD mov r1,#4fh Led: lcall Display djnz r1,led setb p3.4 setb TR0 setb TR1 reti ;======================================================== Display: mov a,Dec3 lcall Look_up_Table mov Led3,a clr Led0sl clr Led1sl clr Led2sl setb Led3sl mov p1,Led3 lcall delay1 mov a,Dec2 lcall Look_up_Table mov Led2,a clr Led0sl clr Led1sl clr Led3sl setb Led2sl mov p1,Led2 lcall delay1 mov a,Dec1 lcall Look_up_Table mov Led1,a clr Led0sl clr Led3sl clr Led2sl setb Led1sl mov p1,Led1 lcall delay1 mov a,Dec0 lcall Look_up_Table mov Led0,a clr Led3sl clr Led1sl clr Led2sl setb Led0sl mov p1,Led0 lcall delay1 ret ;======================================================== Look_up_Table: mov dptr,#Table movc a,@a+dptr ret ;======================================================== DELAY1: push 07 push 07 mov r7,#16 here3: mov r5,#20 lcall DELAY djnz r7,here3 pop 05 pop 07 ret ;======================================================== DELAY: push 06 here2: mov r6,#5 here1: djnz r6,here1 djnz r5,here2 pop 06 ret ;======================================================== Table: db 0C0h , 0F9h , 0A4h , 0B0h , 99h , 92h , 82h , 0F8h , 80h , 90h ; 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ;======================================================== ;======================================================== ;Chuong trinh chuyen doi ma HEX sang BCD ;======================================================== Hex2BCD: mov a,r0 mov b,#64h div ab mov Dec2,a mov a,b mov b,#0Ah div ab mov Dec1,a mov Dec0,b ret end Vi điều khiển 2 : Nhận dữ liệu từ máy tính để đưa xung PWM đến mạch động cơ một chiều #include T_on equ 50h T_off equ 51h PWM bit p3.7 kenh_A bit p3.0 kenh_B bit p3.6 flg bit 00h out_DC bit 01h stack equ 2Fh ;======================================================== org 00h nop ljmp Main org 0Bh nop ljmp Intm0 org 03h nop ljmp IntEx0 ;======================================================== ; MAIN PROGRAM ;======================================================== org 100h Main: clr out_DC clr flg mov psw,#00h mov p1,#0FFh ;cong p1 doc gia tri do mov p2,#0FFh ;cong p2 doc gia tri dat mov a,#240 ;chu ki mov T_on,#0 ;ban dau toc do bang 0 subb a,T_on mov T_off,a mov a,#0FFh subb a,T_on mov T_on,a mov a,#0FFh subb a,T_off mov T_off,a mov TMOD,#11h mov TL0,T_on mov TH0,#0FFh clr kenh_B setb kenh_A setb p3.2 setb EA setb ET0 setb TR0 setb ex0 clr PWM here: sjmp here ;======================================================== Intm0: clr TR0 dong: jnb out_DC,cat clr out_DC mov TL0,T_on mov TH0,#0FFh clr PWM sjmp next cat: setb out_DC mov TL0,T_off mov TH0,#0FFh setb PWM sjmp next next: clr TF0 setb TR0 reti ;======================================================== IntEx0: clr TR0 clr ex0 mov p2,#0FFh setb p3.3 nop nop nop jb p3.3,nguoc thuan: setb kenh_A clr kenh_B sjmp next2 nguoc: setb kenh_B clr kenh_A next2: mov a,p2 mov T_on,a mov a,#240 subb a,T_on mov T_off,a mov a,#256 subb a,T_off mov T_off,a mov a,#256 subb a,T_on mov T_on,a clr TF0 setb TR0 setb ex0 reti end Thiết kế giao diện điều khiển Ta sẽ thiết kế giao diện điều khiển bằng ngôn ngữ Visual Basic. Ngôn ngữ có ưu điểm đơn giản, dễ sử dụng nhưng nguyên bản Visual Basic của hãng Microsoft không có thư viện hỗ trợ cổng song song. Để có thể giao tiếp với máy tính thông qua cổng song song cần có một thư viện liên kết động (DLL) để hỗ trợ, thư viện này do người dùng xây dựng và ta có thể download rất nhiều thư viện kiểu như vậy trên mạng. Ta sử dụng thư viện có tên “dlportio.DLL” , thư viện có ưu điểm dễ sử dụng và đặc biệt hỗ trợ cổng trong các hệ điều hành thông dụng như win98, winXP, Linux, Giao diện ban đầu : Giao diện ban đầu sẽ xuất hiện trong 2s, sau đó giao diện chính sẽ xuất hiện. Giao diện chính: Muốn thay đổi tốc độ đặt động cơ, ta kéo thanh trượt. Khi nào muốn động cơ chạy, nhấn “Chạy”, muốn động cơ dừng, nhấn “Dừng”. Muốn quay thuận nhấn “Quay thuận”, muốn quay ngược nhấn “Quay ngược”. Các bước thực hiện: Tạo hai form có tên frmTitle và frmMain frmTitle Timer1 có độ trễ (Interval) bằng 2000 (2s). frm Main Timer1 có độ trễ 2000 (2s) ; Timer2 có độ trễ 1000 (1s). Thêm vào dự án một Modules được khai báo như sau : Public Declare Function DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte Public Declare Function DlPortReadPortUshort Lib "dlportio.dll" (ByVal Port As Long) As Integer Public Declare Function DlPortReadPortUlong Lib "dlportio.dll" (ByVal Port As Long) As Long Public Declare Sub DlPortReadPortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Public Declare Sub DlPortReadPortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Public Declare Sub DlPortReadPortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte) Public Declare Sub DlPortWritePortUshort Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Integer) Public Declare Sub DlPortWritePortUlong Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Long) Public Declare Sub DlPortWritePortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Public Declare Sub DlPortWritePortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Public Declare Sub DlPortWritePortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long) Khai báo hàm : + Khai báo trong frmTitle : Option Explicit Private Sub Form_Load() Timer1.Interval = 2000 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Enabled = False Unload frmTitle frmMain.Show End Sub + Khai báo trong frmMain : Option Explicit Dim T_off As Long Dim thuan_nguoc As Boolean Function PWM(n As Double) Dim n2, n3, n4, n5 As Double Dim T As Double n2 = n * n n3 = n2 * n n4 = n3 * n n5 = n4 * n T = 0.132 * Exp(-6 * Log(10)) * n5 - 0.25 * Exp(-4 * Log(10)) * n4 + 0.19 * Exp(-2 * Log(10)) * n3 - 0.06 * n2 + 1.82 * n + 0.27 PWM = T End Function Private Sub cmdForward_Click() thuan_nguoc = True DlPortWritePortUchar 890, 0 Timer2.Enabled = True DlPortWritePortUchar 890, 0 DlPortWritePortUchar 890, 202 Timer1.Enabled = True TextDirection.Text = "Thuận" End Sub Private Sub cmdReverse_Click() thuan_nguoc = False DlPortWritePortUchar 890, 204 Timer1.Enabled = True TextDirection.Text = "Ngược" End Sub Private Sub cmdRun_Click() Dim Value As Double Value = Val(txtSpeed) T_off = PWM(Value) DlPortWritePortUchar 888, T_off DlPortWritePortUchar 890, 202 Timer1.Enabled = True TextDirection.Text = "Thuận" txtSpeed1.Text = hsbSpeed.Value End Sub Private Sub cmdStop_Click() DlPortWritePortUchar 888, 0 DlPortWritePortUchar 890, 202 Timer1.Enabled = True txtSpeed1.Text = 0 End Sub Private Sub hsbSpeed_Change() txtSpeed.Text = hsbSpeed.Value End Sub Private Sub hsbSpeed_Scroll() txtSpeed.Text = hsbSpeed.Value End Sub Private Sub Timer1_Timer() DlPortWritePortUchar 890, 212 Timer1.Enabled = False End Sub Private Sub Timer2_Timer() Timer2.Enabled = False End Sub Private Sub cmdExit_Click() End End Sub
File đính kèm:
- bai_tap_lon_robot_va_cnc_dieu_khien_dong_co_mot_chieu.doc