Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
1,78 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHỐ LUẬN TỐT NGHIỆP NGHIÊN CỨU THIẾT KẾ CHẾ TẠO MƠ HÌNH ĐIỀU KHIỂN VỊ TRÍ VÀ VẬN TỐC ĐỘNG CƠ ỨNG DỤNG TRÊN MƠ HÌNH CÁNH TAY ROBOT Họ tên sinh viên: Phan Thiên Hồng Ngành: CƠ ĐIỆN TỬ Niên khố: 2007 – 2011 Tháng năm 2011 NGHIÊN CỨU THIẾT KẾ CHẾ TẠO MƠ HÌNH ĐIỀU KHIỂN VỊ TRÍ VÀ VẬN TỐC ĐỘNG CƠ ỨNG DỤNG TRÊN MƠ HÌNH CÁNH TAY ROBOT Sinh viên thực PHAN THIÊN HỒNG Khóa luận đệ trình đề để đáp ứng yêu cầu cấp kỹ sư ngành Cơ Điện Tử Giáo viên hướng dẫn Th.S TRẦN THỊ KIM NGÀ Ks Huỳnh Xuân Dũng Tháng năm 2011 i LỜI CẢM TẠ Em xin trân trọng cảm ơn tất Quý Thầy / Cô trường Đại học Nơng Lâm TP.Hồ Chí Minh q thầy / Cơ khoa Cơ Khí- Cơng Nghệ trang bị cho em kiến thức quý báu giúp đỡ em suốt trình học tập trường Em xin chân thành cảm ơn Thầy / Cô môn Cơ Điện Tử giúp đỡ em nhiệt tình thời gian thực đề tài Em xin tỏ biết ơn chân thành Cô Th.s Nguyễn Lê Tường, giảng viên hướng dẫn, tận tình hướng dẫn, giúp đỡ tạo điều kiện thuận lợi để đề tài hoàn thành Anh Ks Huỳnh Xuân Dũng, kĩ sư ngành Điều Khiển Tự Động, có bảo, giúp đỡ cho em mặt kinh nghiệm để hoàn thành tốt đề tài Đặc biệt, em xin cảm ơn quý Thầy / Cô hội đồng dành thời gian nhận xét góp ý để luận văn em hoàn thiện Cuối cùng, em xin gởi lời cảm ơn đến người thân bạn bè động viên, ủng hộ tạo cho em điều kiện thuận lợi suốt trình hồn thành đề tài Thành Phố Hồ Chí Minh, ngày tháng năm 2011 Sinh viên thực Phan Thiên Hồng ii TĨM TẮT Đề tài: “Nghiên cứu thiết kế chế tạo mơ hình điều khiển vị trí vận tốc ứng dụng mơ hình cánh tay robot có sẵn” Được tiến hành môn điện tử trường Đại Nơng Lâm TP.HCM, năm 2011 Mục đích điều khiển vị trí vận tốc động Servo ứng dụng thuật toán PID Động Servo điều khiển vị trí vận tốc thơng qua mạch điều khiển sử dụng vi điều khiển PIC giao diện giám sát viết Visual C++ Một mơ hình khảo nghiệm độ xác việc điều khiển vị trí tốc độ động Servo thiết kế chế tạo để kiểm tra kết chương trình sử dụng thuật tốn PID giao diện hiển thị Kết ứng dụng điều khiển cho mơ hình cánh tay Robot có vị trí vận tốc khớp cánh tay Robot iii MỤC LỤC TRANG Trang tựa Lời cảm ơn ii Tóm tắt iii Mục lục iv Danh sách chử viết tắt vi Danh sác hình vii Danh sách bảng viii Chương i MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Mục đích đề tài .1 1.3 Giới hạn đề tài Chương TỔNG QUAN .3 2.1 Tổng quan điều khiển động 2.2 Tổng quan 16F877A 2.2.1 Giới thiệu PIC 16F877A 2.2.2 Tổ chức nhớ 2.2.3 Các cổng xuất nhập PIC16F877A 2.2.4 CCP 10 2.3 2.4 2.5 Tổng quan động 14 Tổng quan encoder 16 Tổng quan phần mềm Visual C++ .17 2.5.1 Giới thiệu phần mềm 17 2.5.2 Các bước tạo để tạo dự án Visual C++ 18 2.6 Phần mềm trình biên dịch PCWH sử dụng ngơn ngữ lập trình C (CCSC) 18 2.6.1 Giới thiệu 18 2.6.2 Các bước tạo dự án CCSC 18 2.7 2.8 Tổng quan phần mềm nạp PIC Burn-E Programmer 19 Giới thiệu TeeChart .20 2.8.1 Giới thiệu 20 2.8.2 Các bước tạo dự án 20 Chương 22 NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU 22 3.1 Nội dung nghiên cứu 22 3.2 Linh kiện thiết bị sử dụng thiết kế điều khiển .22 3.3 Phương pháp nghiên cứu 23 iv 3.3.1 3.3.2 3.4 Phương pháp nghiên cứu sử dụng bao gồm: 23 Phương tiện nghiên cứu 23 Phương pháp nghiên cứu điều khiển ảnh hưởng điều khiển PID: 23 3.4.1 3.4.2 3.4.3 3.4.4 (PWM) Phương pháp nghiên cứu điều khiển 23 Ảnh hưởng điều khiển PID 27 Điều khiển động servo ngôn ngữ Visual C++ 27 Điều khiển động phương pháp điều chế độ rộng xung 28 Chương 30 KẾT QUẢ VÀ THẢO LUẬN .30 4.1 Sơ đồ khối 30 4.2 Thuật toán PID 30 4.3 Giao diện giám sát điều khiển: 32 4.4 Mơ hình thực nghiệm .33 4.5 Mơ hình robot có sẵn 34 4.5.1 4.5.2 4.5.3 4.5.4 4.3.4 Giới thiệu động robot: 34 Cách thức điều khiển 35 Sơ đồ nguyên lý PIC 35 Khối nguồn điều khiển 36 Mạch cầu H 37 4.4 Kết .41 4.5 Kết thực nghiệm 41 Chương 45 KẾT LUẬN VÀ ĐỀ NGHỊ 45 5.1 Kết luận 45 5.2 Đề nghị .45 TÀI LIỆU THAM KHẢO 46 Phục lục 45 Phục lục 1: Chương trình vi điều khiển PIC 45 Phục lục 2: Chương trình giám sát hệ thống 52 v DANH SÁCH CÁC CHỮ VIẾT TẮT PID: Proportional–Integral–Derivative controller PIC: Programable intelligent Computer OTP: One Time Programable RISC: Reduced Intruction Set Computer EEPROM: Electrically Erasable Programmable Read-Only Memory RAM: Random Access Memory ICSPTM : In-Circuit Serial Programing CMOS: Complementary Metal-Oxide-Semiconducto SFRs: Special Function Registers GPR: General Purpose RAM PWM: Pulse-width modulation PSP: Parallel Slave Port MSSP Master Synchronous Serial Port ROM: Read-Only Memory VĐK: Vi điều khiển vi DANH SÁCH CÁC HÌNH Hình 2.1 Sơ đồ chân PIC16FxxxA Hình 2.2 Sơ đồ khối PIC16F877A Hình 2.3 Sơ đồ khối Timer0 Hình 2.4 Sơ đồ khối Timer1 Hình 2.5 Sơ đồ khối Timer2 10 Hình 2.6 Sơ đồ khối CCP (PWM mode) 12 Hình 2.7 Các tham số PWM 12 Hình 2.8 Sơ đồ khối CCP (Compare mode) 13 Hình 2.9 Cấu tạo bên động DC 14 Hình 2.10 Cấu tạo thành phần bên Encoder 17 Hình 3.1 Mơ hình điều khiển với Kgh 24 Hình 3.2 Xác định hệ số khuếch đại tới hạn 24 Hình 3.3 Dạng xung PWM 27 Hình 3.4 Phương pháp PWM khơng thay đổi tần số 28 Hình 3.5 Phương pháp thay đổi tần số 28 Hình 4.1 Sơ đồ khối điều khiển 30 Hình 4.2 Lưu đồ giải thuật PID 30 Hình 4.3 Biểu đồ vị trí theo PID 30 Hình 4.4 Giao diện giám sát 31 Hình 4.5 Lưu đồ giải thuật PID 32 Hình 4.6 Mơ hình điều khiển 33 Hình 4.9 Mơ hình robot 34 Hình 4.10 Sơ đồ nguyên lý PIC 36 Hình 4.11 Khối nguồn điều khiển 35 Hình 4.12 Môdun điều khiển PIC 36 Hình 4.13 Khối cách ly mạch điều khiển 37 Hình 4.4 Biểu đồ trạng thái 74HC74 38 Hình 4.14 Sơ đồ nguyên lý mạch cầu H 38 Hình 4.15 Mơ hình thi cơng 39 Hình 4.16 Lưu đồ giải thuật VĐK 40 vii DANH SÁCH CÁC BẢNG Bảng 2.1 Các trường hợp hoạt động Timer1 Timer2 11 Bảng 3.1 Thông số điều khiển theo thực nghiệm 24 Bảng 3.2 Một số ảnh hưởng hệ số đáp ứng hệ kín 26 Bảng 4.2 Chọn thông số PID theo Ziegler-Nichols 29 Bảng 4.3 Trạng thái hoạt động 74HC74 37 viii Chương MỞ ĐẦU 1.1 Đặt vấn đề Điều khiển học ngành khoa học có từ lâu đời Trải qua thời kỳ dài lịch sử, ngành khoa học có bước tiến mạnh mẽ, từ mơ hình điều khiển đơn giản đến giải thuật điều khiển thông minh Có thể nói, điều khiển học có vai trò lớn trình phát triển ngành cơng nghiệp nói riêng xã hội lồi người nói chung Trong điều khiển học, phương pháp điều khiển cốt lõi ngành khoa học Từ điều khiển ON – OFF, điều khiển tỉ lệ, điều khiển PID, điều khiển mờ, điều khiển thích nghi,… tất phương pháp điều khiển có ứng dụng hữu ích lĩnh vực điều khiển Trong phương pháp điều khiển kể trên, phương pháp điều khiển PID xem phương pháp điều khiển mang tính kinh điển Đây phương pháp điều khiển có từ lâu, sử dụng có phát triển rộng rãi Chọn lựa PID chọn lựa phương pháp điều khiển thông dụng, quen thuộc đơn giản PID dễ hiểu người sử dụng có giá thành hợp lý xây dựng hệ thống điều khiển Từ đặc điểm trên, em định chọn nghiên cứu phương pháp điều khiển PID, đề tài nghiên cứu là: “Nghiên cứu điều khiển vị trí tốc độ ứng dụng điều khiển robot có sẵn” với giải thuật PID 1.2 Mục đích đề tài Mục tiêu đề tài thiết kế điều khiển bàn máy sử dụng thuật toán PID Bộ điều khiển dùng vi điều khiển PIC hãng MICROCHIP, cụ thể vi điều khiển PIC 16F877A Bộ điều khiển điều khiển xác vị trí gốc quay vận tốc động khơng tải Thuật tốn PID thiết lập để điều khiển hệ thống đạt giá trị mong muốn cách nhanh chóng, giảm độ vọt lố đến mức tối thiểu, hệ thống hoạt động ổn định sai số mức tối thiểu Đồng thời, trình hoạt Kp=0.2 Ki=0.002 Kd=2 Kp=0.1 Ki=0.02 Kd=1 BẢNG KHẢO NGHIỆM VỊ TRÍ: Số lần khảo nghiệm 10 Thời gian Số xung Vị trí tính Số xung dò Vị trí % POT xác tính tốn tốn (độ) thực tế lập (ms) 234 234 209,7 209 11,4 1200 234 234 209,7 210 10,95 600 234 234 209,7 211 11,42 600 234 234 209,7 210 11,9 1500 234 234 209,7 210 10,95 500 234 234 209,7 209 14,28 1000 234 234 209,7 211 11,42 700 234 234 209,7 210 10,95 600 234 234 209,7 211 17,4 1200 234 234 209,7 210 12,38 900 BẢNG THÍ NGHIỆM VẬN TỐC 43 PID 3.4 0.2 30 3.4 0.2 29 3.4 0.2 30 0,2 30 3,01 0,2 30 0,2 30 3,01 0,2 30 0,2 30 0,2 30 0,2 30 STT Số xung đặt 10 30 30 30 30 30 30 30 30 30 30 Giá trị vận Giá trị vận Số xung Vận tốc tốc lý tính tốn dò thực tế thuyết (vòng\phút (xung\giây (vòng\phút (xung\giây ) ) ) ) 450 1800 32.4 2160 450 1800 24.3 1620 450 1800 23.4 1560 450 1800 33.3 2220 450 1800 31.5 2100 450 1800 29.7 1980 450 1800 31.5 2100 450 1800 32.4 2160 450 1800 32.4 2160 450 1800 30.6 2040 44 Bộ PID Kp=0,5 Ki=0.000 Kd=18 Chương KẾT LUẬN VÀ ĐỀ NGHỊ 5.1 Kết luận Sau thời gian 12 tuần thực hiện, đề tài hoàn tất với kết sau: - Phần cứng: o Hoàn thành mạch điện điều khiển cho toàn hệ thống - Phần mềm: o Hồn thành chương trình điều khiển vi điều khiển PIC16F877A o Hồn thành chương trình điều khiển giám sát máy tính Tuy nhiên đề tài số hạn chế: - Việc điều khiển chưa hồn tồn xác, tồn sai số Chương trình giám sát dạng thử nghiệm, chưa hồn thiện chức cần có 5.2 Đề nghị Nâng cấp phần cứng: Thay vi điều khiển dòng PIC cao để có đạt độ xác cao chức xử lý hiệu Sử dụng IC cầu H chun dụng để giảm kích thước mạch điện có tốc độ đáp ứng cao Sử dụng encoder thẳng để điều khiển vị trí xác Nâng cấp phần mềm: Phát triển thêm phần điều khiển vị trí độ lên điều khiển bàn máy Hồn thiện chương trình điều khiển máy tính 45 TÀI LIỆU THAM KHẢO [1] Ngơ Diên Tập Vi Điều Khiển với Lập Trình C Nhà xuất Khoa Học Kỹ Thuật 2006 [2] Nguyễn Đức Thành Điều Khiển đo lường máy tính Nhà xuất đại học quốc gia TPHCM Một số website: [1] http://www.picvietnam.com/forum/showthread.php?t=612 [2] http://vi.wikipedia.org.com [3] http://www.pduytech.com/ProductsBurnerBurn-E.html [4] www.msdn.com [5] Các diễn đàn điện tử, google+datasheet 46 PHỤC LỤC Phục lục 1: Chương trình vi điều khiển PIC bit chieu =0,kt_t,tx,mode; //chay thuan char IN,k=0,str_count=0,re_char,nhan,count_send; char RxBuf[32], RdPtr=0, RwPtr = 0; unsigned long send; int count,sp, pos,vel,v,s_vel,pos_old,vel_old,TMR_temp,b = 0; int old_xung,err,err_vel,sum_err,sum_err_vel,old_err,d_err,old_err_vel,d_err_vel,pid_int, pid_int_vel,h,m,n; float kp,ki,kd,pid_out,pid_out_vel; char str[7]; void init (); char uart_getc(); void uart_putc(char c); void delay_ms(unsigned int x); void pid(); void pid_vel(); void get_str(); void reset_counter(); void pid(); void xoa_mang(); interrupt ngat(); //#define sp 300 void main(){ char d; init(); while(1){ if(RdPtr != RwPtr) //tao kho chua du lieu nhan { d = RxBuf[RdPtr]; RdPtr++; RdPtr &= 0x1F; } } } interrupt ngat(){ if (T0IF&&T0IE){ T0IF= 0; k++; if(k==9)TMR0 = 60;// DINH 2ms if(mode==0){ if(k==10){ k =0; TMR_temp = TMR1; if(chieu==0) pos = (TMR_temp+old_xung); else pos = (old_xung-TMR_temp); pos_old = pos; if((count_send++)==5){ count_send = 0; IN= 0; if(tx==1)printf("\f%d\n",pos); TMR_temp = TMR1; // cap nhat lai position if(chieu==0) pos_old = (TMR_temp+old_xung); else pos_old = (old_xung-TMR_temp); } pid(); } } else {//mode==1:velocity if(k==10){ k =0; TMR_temp = TMR1; TMR1=0; vel=TMR_temp; vel_old = vel; pid_vel(); if((count_send++)==5){ count_send = 0; IN= 0; if(tx==1)printf("\f%d\n",vel); TMR_temp = TMR1; // cap nhat lai velocity } } } } if(RCIF&&RCIE){ get_str(); } //ngat onchange if (INTF&&INTE){ INTF = 0; TMR_temp = TMR1; if(chieu==0){old_xung +=TMR_temp;RA3=1;} else {old_xung-=TMR_temp; RA3=0;} INTEDG =~INTEDG; chieu =~chieu; reset_counter(); } } void pid(){ err = sp - pos; sum_err +=err; if(sum_err>32000) sum_err=32000; if(sum_err0){RA1 =0;RA2 = 1;} //QUAY THUAN if(pid_out(sp*0.9)&&posEnabled=true; s=0; } else { sp->Write("s"+"k"); axTChart2->Series(0)->AddXY(0,Convert::ToDouble(tbps>Text),"",2000);// vi tri set axTChart2->Series(1)->AddXY(0,0,"",2000); axTChart2->Series(2)->AddXY(0,0,"",2000); axTChart2->Series(0)>AddXY(time+2000,Convert::ToDouble(tbps->Text),"",2000); run->Text="Pause"; s=1; } } private: System::Void stop_Click(System::Object^ sender, System::EventArgs^ e) { sp->Write("x"); tran1=" "; tran2=" "; tran3=" "; tran4=" "; tran5=" "; tran6=" "; } private: System::Void quit_Click(System::Object^ sender, System::EventArgs^ e) { this->Close(); } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { run->Enabled=false; stop->Enabled=false; lbcom->Enabled=true; array ^ a1= System::IO::Ports::SerialPort::GetPortNames(); for(int i =0;iLength;i++) { lbcom->Items->Add(a1[i]); } } private: System::Void connect_Click(System::Object^ sender, System::EventArgs^ e) { sp->PortName=Convert::ToString(lbcom->SelectedItem); if(kt) { kt=false; connect->Text="Disconnect"; sp->Open(); run->Enabled=true; stop->Enabled=true; lbcom->Enabled=false; } else { kt=true; connect->Text="Connect"; sp->Close(); } } private: System::Void left_Click(System::Object^ sender, System::EventArgs^ e) { tran2="2"+"q"+"a"; sp->Write(tran2); } private: System::Void right_Click(System::Object^ sender, System::EventArgs^ e) { tran2="2"+"w"+"b"; sp->Write(tran2); } private: System::Void down_Click(System::Object^ sender, System::EventArgs^ e) { tran3="3"+"e"; sp->Write(tran3); } private: System::Void up_Click(System::Object^ sender, System::EventArgs^ e) { tran3="3"+"y"; sp->Write(tran3); } private: System::Void near_Click(System::Object^ sender, System::EventArgs^ e) { tran5="5"+"u"; sp->Write(tran5); } private: System::Void far_Click(System::Object^ sender, System::EventArgs^ e) { tran5="5"+"i"; sp->Write(tran5); } private: System::Void big_Click(System::Object^ sender, System::EventArgs^ e) { tran6= "6"+"o"; sp->Write(tran6); } private: System::Void small_Click(System::Object^ sender, System::EventArgs^ e) { tran6= "6"+"p"; sp->Write(tran6); } private: System::Void sp_DataReceived_2(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) { Control::CheckForIllegalCrossThreadCalls=false; pos=Convert::ToString(sp->ReadLine()); current_v = Convert::ToDouble(pos);//vi tri hien tai tbpc->Text=Convert::ToString(current_v*0.9); //tbpc->Text=pos; pos_v =Convert::ToInt32(tbps->Text);//vi tri set //current_v=current_v*0.9; time+=1; axTChart2->Series(1)->AddXY(time,current_v*0.9,"",200000); angle = Convert::ToInt32(current_v - pre_angle); axTChart2->Series(2)->AddXY(time,angle*1.5,"",200000); pre_angle = current_v; if(time>10) { axTChart2->Axis->Bottom->Maximum=time+5; } } private: System::Void set_Click(System::Object^ sender, System::EventArgs^ e) { sp->Write(tbkp->Text+"p"); for(int i =0;iWrite(tbki->Text+"i"); for(int i =0;iWrite(tbkd->Text+"d"); if(vitri->Checked) sp->Write(((Convert::ToInt32(tbps>Text)*10)/9)+"o"+"n"); if(vantoc->Checked) sp->Write(((Convert::ToInt32(tbps>Text)*10)/9)+"v"+"m"); } private: System::Void reset_Click(System::Object^ sender, System::EventArgs^ e) { time1=0;//bien van toc time=0;// bien vi tri pot=0; ts=0; current_v=0; pre_angle=0; kqmax2=0; angle=0; kqmax1=0; dem=0; pos="0"; pos_v=0; axTChart2->Series(0)->Clear ();// char2:vi tri axTChart2->Series(1)->Clear (); axTChart2->Series(2)->Clear (); } private: System::Void len_Click(System::Object^ sender, System::EventArgs^ e) { tran1="1"+"t"+"f"; sp->Write(tran1); } private: System::Void xuong_Click(System::Object^ sender, System::EventArgs^ e) { tran1="1"+"n"+"r"; sp->Write(tran1); } private: System::Void trai_Click(System::Object^ sender, System::EventArgs^ e) { tran1="1"+"n"+"f"; sp->Write(tran1); } private: System::Void phai_Click(System::Object^ sender, System::EventArgs^ e) { tran1="1"+"t"+"r"; sp->Write(tran1); } private: System::Void vantoc_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { lbps->Text="Vel Set"; lbpc->Text="Vel Cur"; } private: System::Void vitri_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { lbps->Text="Pos Set"; lbpc->Text="Pos Cur"; } }; ... chiều chuyển động Có hai phương pháp thường dùng để dừng động chiều: phanh động lực đảo chiều dòng điện cấp vào cuộn cảm o Phanh động lực: Từ trường động giữ nguyên Nguồn cung cấp cho rotor chuyển... thuận lợi suốt q trình hồn thành đề tài Thành Phố Hồ Chí Minh, ngày tháng năm 2011 Sinh viên thực Phan Thiên Hồng ii TĨM TẮT Đề tài: “Nghiên cứu thiết kế chế tạo mơ hình điều khiển vị trí vận tốc... MƠ HÌNH ĐIỀU KHIỂN VỊ TRÍ VÀ VẬN TỐC ĐỘNG CƠ ỨNG DỤNG TRÊN MƠ HÌNH CÁNH TAY ROBOT Sinh viên thực PHAN THIÊN HỒNG Khóa luận đệ trình đề để đáp ứng yêu cầu cấp kỹ sư ngành Cơ Điện Tử Giáo viên hướng