Điều khiển chính xác dịch chuyển đo lường trong máy đo biên dạng 3d

97 7 1
Điều khiển chính xác dịch chuyển đo lường trong máy đo biên dạng 3d

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN MẠNH LINH ĐIỀU KHIỂN CHÍNH XÁC DỊCH CHUYỂN ĐO LƯỜNG TRONG MÁY ĐO BIÊN DẠNG 3D LUẬN VĂN THẠC SỸ KỸ THUẬT Chuyên ngành: CƠ ĐIỆN TỬ Hà Nội – 2017 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN MẠNH LINH ĐIỀU KHIỂN CHÍNH XÁC DỊCH CHUYỂN ĐO LƯỜNG TRONG MÁY ĐO BIÊN DẠNG 3D LUẬN VĂN THẠC SỸ KỸ THUẬT Chuyên ngành: CƠ ĐIỆN TỬ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS NGUYỄN VĂN VINH Hà Nội – 2017 MỤC LỤC MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC HÌNH ẢNH VÀ ĐỒ THỊ MỞ ĐẦU Tính cấp thiết đề tài Mục đích đề tài Ý nghĩa khoa học thực tiễn đề tài Nội dung đề tài vấn đề cần giải 10 CHƢƠNG : TỔNG QUAN ĐIỀU KHIỂN CHÍNH XÁC TRONG MÁY ĐO 3D 11 1.1 Tổng quan hệ thống điều khiển 11 1.1.1 Lịch sử phát triển 11 1.1.2 Thành phần hệ thống điều khiển 12 1.1.3 Phân loại hệ thống điều khiển 14 1.2 Tổng quan chuyển động loại máy đo 3D 17 1.2.1 Gi i thiệu phƣơng pháp đo bi n dạng chi tiết máy 17 1.2.2 Chuyển động máy đo tọa độ 20 1.2.3 Chuyển động máy đo 3D 21 CHƢƠNG : CÁC VẤN ĐỀ LIÊN QUAN ĐỘ CHÍNH XÁC VÀ MƠ HÌNH HĨA MÁY ĐO 3D 24 2.1 Các vấn đề li n quan đến điều khiển xác máy đo 3D 24 2.1.1 Nguy n nhân khơng xác điều khiển 24 2.1.2 Backlash hiệu chỉnh 27 2.2 Mơ hình hóa trục chuyển động máy đo 3D 29 2.2.1 Mơ hình hóa đặc tính động 31 2.2.2 Mơ hình hóa đặc tính hệ khí 32 CHƢƠNG : THIẾT KẾ THUẬT TOÁN ĐIỀU KHIỂN 35 3.1 Gi i thiệu điều khiển PID 35 3.2 Một số phƣơng pháp tổng hợp điều khiển PID 38 3.2.1 Phƣơng pháp modul tối ƣu 38 3.2.2 Phƣơng pháp thực nghiệm Ziegler – Nichols 39 3.2.3 Phƣơng pháp tổng T Kuhn 40 3.3 Thiết kế giải thuật PID 41 3.3.1 Tính tốn hàm truyền hệ thống 42 3.3.2 Xác định tham số điều khiển phƣơng pháp mô 42 3.4 Hiệu chỉnh điều khiển 44 3.5 Mơ thuật tốn điều khiển Matlap - Simulink 46 3.5.1 Mô hệ thống có điều khiển P theo phƣơng pháp ZieglerNichols 46 3.5.2 Mô hệ thống có điều khiển PI theo phƣơng pháp ZieglerNichols 47 3.5.3 Mô hệ thống có điều khiển PID theo phƣơng pháp ZieglerNichols 48 CHƢƠNG : SETUP HỆ THỐNG VÀ THỰC NGHIỆM 49 4.1 Thiết kế mơ hình thực nghiệm hệ thống 49 4.2 Xây dựng chƣơng trình điều khiển 54 4.3 Thực nghiệm 62 4.3.1 Tìm độ Backflash hệ thống cần điều khiển 62 4.3.2 Thực nghiệm giải thuật 62 4.4 Kết luận 69 TÀI LIỆU THAM KHẢO 71 PHỤ LỤC 72 LỜI CAM ĐOAN Tên : Nguyễn Mạnh Linh Sinh ngày 25 tháng 02 năm 1991 Học viên l p cao học kỹ thuật Cơ Điện Tử khóa 2015B – Trƣờng Đại học Bách Khoa Hà Nội Xin cam đoan đề tài: “Đ ề ể ị ể 3D” thầy giáo PGS.TS Nguyễ Vă V ƣ hƣ ng dẫn cơng trình nghiên cứu riêng Tất tài liệu tham khảo có nguồn gốc xuất xứ rõ ràng Nếu sai tơi hồn tồn chịu trách nhiệm trƣ c hội đồng Học viên thực Nguyễn Mạnh Linh LỜI CẢM ƠN Sau sáu tháng nghiên cứu, làm việc khẩn trƣơng, đƣợc động vi n, giúp đỡ hƣ ng dẫn tận tình thầy giáo hƣ ng dẫn PGS.TS Nguyễ Vă V văn “Đ ề ể ị ể ƣ , luận 3D” hồn thành Tơi xin bày tỏ lòng biết ơn sâu sắc : Thầy giáo PGS.TS Nguyễ Vă V tận tình dẫn giúp đỡ tơi hồn thành luận văn Các thầy giáo, giáo thuộc mơn Cơ Khí Chính Xác & Quang Học trƣờng Đại học Bách Khoa Hà Nội giúp đỡ tơi suốt q trình học tập nhƣ trình nghi n cứu thực luận văn Tơi xin gửi lời cảm ơn t i tồn thể đồng nghiệp, bạn bè, gia đình ngƣời thân quan tâm, động vi n giúp đỡ suốt trình học tập Học viên Nguyễn Mạnh Linh DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT VĐK 3D Vi điều khiển Không gian chiều CMM Coordinate Measuring Machine PID Proportional Integral Derivative ĐTĐK Đối tượng điều khiển THPH Tín hiệu phản hồi TBĐK Thiết bị điều khiển Thừa số tỉ lệ đầu Độ lợi tỉ lệ Độ lợi tích phân Độ lợi vi phân Ra Điện trở phần ứng động Ia Dòng điện phần ứng động La Điện cảm phần ứng động Va Điện áp phần ứng động Ea Điện áp kích từ động BM Ma sát động BL Ma sát truyền động víttme – đai ốc JM Quán tính động TM Mơ-mem động M vận tốc góc động L vận tốc góc truyền động víttme – đai ốc DANH MỤC CÁC BẢNG Bảng Hằng số hệ thống 42 Bảng Các tham số PID theo phương pháp thực nghiệm Ziegler-Nichols 43 Bảng 3 Các tham số PID tìm theo phương pháp thực nghiệm 43 Bảng Ảnh hưởng thông số hiệu chỉnh điều khiển 44 Bảng Một vài thông số Arduino Uno R3 50 Bảng Thiết lập chế độ hoạt động Microstep Driver P5C 51 Bảng Bảng thực nghiệm xác định Backlash hệ thống 62 Bảng 4 Bảng thực nghiệm hệ thống chưa có giải thuật PID 62 Bảng Bảng sai số trung bình hệ thống chưa có giải thuật 63 Bảng Bảng thực nghiệm có giải thuật PID 64 Bảng Bảng sai số trung bình hệ thống có giải thuật 64 Bảng Bảng thực nghiệm có giải thuật PID có tải 66 Bảng Bảng sai số trung bình hệ thống có tải 66 Bảng 10 Bảng thực nghiệm có giải thuật PID khoảng cách giảm dần 67 Bảng 11 Bảng sai số trung bình hệ thống khoảng cách giảm dần 68 DANH MỤC HÌNH ẢNH VÀ ĐỒ THỊ Hình 1 Sơ đồ khối hệ thống điều khiển tự động 13 Hình Sơ đồ hệ thống điều khiển vòng hở 14 Hình Sơ đồ hệ thống điều khiển vịng kín 15 Hình Máy đo tọa độ hãng DEA 19 Hình Máy bị quét laser DM-1620 hãng LDI 20 Hình Máy đo tọa độ sử dụng đầu đo CNC 21 Hình Sơ đồ nguyên lý máy đo 3D sử dụng ánh sáng cấu trúc 22 Hình Hệ thống truyền động với vitme – đai ốc 24 Hình 2 Sai số vítme 25 Hình Sai số sống trượt 25 Hình Chuyển động tịnh tiến lui tới 27 Hình Quy trình mơ hình hố chọn điều khiển hệ dẫn động bàn máy 29 Hình Sơ đồ hệ thống điều khiển 30 Hình Sơ đồ mơ hình hóa trục X máy đo 3D 30 Hình Sơ đồ mơ hình hóa động truyền động vitme - đai ốc 31 Hình Sơ đồ mơ hình hóa đặc tính hệ khí 34 Hình Sơ đồ khối điều khiển dùng PID 35 Hình Sơ đồ cấu trúc hệ thống kín 38 Hình 3 Xác định hệ số khuếch đại tới hạn 40 Hình Sơ đồ hệ thống điều khiển dùng PID 42 Hình Sơ đồ mô xác định số khuếch đại tới hạn 43 Hình Đồ thị đầu vào – đầu hệ thống biên giới ổn định 43 Hình Đáp ứng nấc hệ kín k = kth 44 Hình Mơ hình đầu hệ thống có điều khiển P 46 Hình Đồ thị đáp ứng đầu hệ thống có điều khiển P 46 Hình 10 Mơ hình đầu hệ thống có điều khiển PI 47 Hình 11 Đồ thị đáp ứng đầu hệ thống có điều khiển PI 47 Hình 12 Mơ hình đầu hệ thống có điều khiển PID 48 Hình 13 Đồ thị đáp ứng đầu hệ thống có điều khiển PID 48 Hình Sơ đồ kết nối hệ thống thực nghiệm 49 Hình Mơ hình thực nghiệm 49 Hình Bộ điều khiển 50 Hình 4 Sơ đồ điều khiển Microstep Driver P5C 52 Hình Giao diện điều khiển 54 Hình Sơ đồ giải thuật hệ thống 55 Hình Lưu đồ kết nối máy tính Arduino 56 Hình Lưu đồ kết nối máy tính thước quang 58 Hình Lưu đồ truyền nhận liệu thước quang 60 Hình 10 Đồ thị sai số hệ thống chưa có giải thuật 63 Hình 11 Đồ thị sai số hệ thống có giải thuật 65 Hình 12 Đồ thị biểu diễn sai số có khơng có giải thuật PID 65 Hình 13 Đồ thị sai số hệ thống có tải 67 Hình 14 Đồ thị sai số hệ thống khoảng cách giảm dần 68 check_position = 0; check_current = 0; check_speed_current = 0; check_position_current = 1; check_position_speed = 0; check_position_speed_current = 0; check_configure = 0; Init_Variable(); Send_Rs232('K','k',2525); } else if(global_error == 2121) { check_speed = 0; check_position = 0; check_current = 0; check_speed_current = 0; check_position_current = 0; check_position_speed = 1; check_position_speed_current = 0; check_configure = 0; Init_Variable(); Send_Rs232('K','k',2121); } else if(global_error == 2150) 81 { check_speed = 0; check_position = 0; check_current = 0; check_speed_current = 0; check_position_current = 0; check_position_speed = 0; check_position_speed_current = 1; check_configure = 0; Init_Variable(); Send_Rs232('K','k',2150); } else if(global_error == 4444) { check_speed = 0; check_position = 0; check_current = 0; check_speed_current = 0; check_position_current = 0; check_position_speed = 0; check_position_speed_current = 0; check_configure = 1; Init_Variable(); Send_Rs232('K','k',4444); 82 } } ////////////////////////////////////// SAVE Kp Ki Kd /////////////////////////////////// else if (in[1] == 'L' && in[7]== 'l') { temp_recived = (in[2] - 0x30)*10000+ (in[3]- 0x30)*1000+(in[4]0x30)*100+(in[5]- 0x30)*10 + (in[6] - 0x30); Clear_Temp_Received(); ////////////////////////////////////// SAVE Speed PID /////////////////////////////////// if(temp_recived == 10000) { ReadEE(PAGE, SKP ,&eeprom,1); ReadEE(PAGE, SKI ,&eeprom0,1); ReadEE(PAGE, SKD ,&eeprom1,1); if( eeprom != skp) { EraseEE(PAGE,SKP,1); WriteEE(&skp, PAGE, SKP, 1); } else if( eeprom0 != ski) { EraseEE(PAGE,SKI,1); WriteEE(&ski, PAGE, SKI, 1); } 83 else if( eeprom1 != skd) { EraseEE(PAGE,SKD,1); WriteEE(&skd, PAGE, SKD, 1); } else Send_Rs232('L','l', 10000); } ////////////////////////////////////// SAVE Position PID /////////////////////////////////// else if(temp_recived == 20000) { ReadEE(PAGE, PKP ,&eeprom,1); ReadEE(PAGE, PKI ,&eeprom0,1); ReadEE(PAGE, PKD ,&eeprom1,1); if( eeprom != pkp) { EraseEE(PAGE,PKP,1); WriteEE(&pkp, PAGE, PKP, 1); } else if( eeprom0 != pki) { EraseEE(PAGE,PKI,1); WriteEE(&pki, PAGE, PKI, 1); } 84 else if( eeprom1 != pkd) { EraseEE(PAGE,PKD,1); WriteEE(&pkd, PAGE, PKD, 1); } else Send_Rs232('L','l', 20000); } ////////////////////////////////////// SAVE Current PID /////////////////////////////////// else if(temp_recived == 50000) { ReadEE(PAGE, CKP ,&eeprom,1); ReadEE(PAGE, CKI ,&eeprom0,1); ReadEE(PAGE, CKD ,&eeprom1,1); if( eeprom != ckp) { EraseEE(PAGE,CKP,1); WriteEE(&ckp, PAGE, CKP, 1); } else if( eeprom0 != cki) { EraseEE(PAGE,CKI,1); WriteEE(&cki, PAGE, CKI, 1); } 85 else if( eeprom1 != ckd) { EraseEE(PAGE,CKD,1); WriteEE(&ckd, PAGE, CKD, 1); } else Send_Rs232('L','l', 50000); } ////////////////////////////////////// SAVE Speed - Current PID /////////////////////////////////// else if(temp_recived == 15000) { ReadEE(PAGE, SC_SKP ,&eeprom,1); ReadEE(PAGE, SC_SKI ,&eeprom0,1); ReadEE(PAGE, SC_SKD ,&eeprom1,1); ReadEE(PAGE, SC_CKP ,&eeprom2,1); ReadEE(PAGE, SC_CKI ,&eeprom3,1); ReadEE(PAGE, SC_CKD ,&eeprom4,1); if( eeprom != skp) { EraseEE(PAGE,SC_SKP,1); WriteEE(&skp, PAGE, SC_SKP, 1); } else if( eeprom0 != ski) { 86 EraseEE(PAGE,SC_SKI,1); WriteEE(&ski, PAGE, SC_SKI, 1); } else if( eeprom1 != skd) { EraseEE(PAGE,SC_SKD,1); WriteEE(&skd, PAGE, SC_SKD, 1); } else if( eeprom2 != ckp) { EraseEE(PAGE,SC_CKP,1); WriteEE(&ckp, PAGE, SC_CKP, 1); } else if( eeprom3 != cki) { EraseEE(PAGE, SC_CKI,1); WriteEE(&cki, PAGE, SC_CKI, 1); } else if( eeprom4 != ckd) { EraseEE(PAGE,SC_CKD,1); WriteEE(&ckd, PAGE, SC_CKD, 1); } 87 else Send_Rs232('L','l', 15000); } C ƣơ ì ọ ƣ c quang using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DocThuocQuang { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) 88 { } private void ReadOpticalRuler(ref double x, ref double y, ref double z) { //make sure port is not open if (this.serialPort2.IsOpen) { serialPort2.DiscardInBuffer(); serialPort2.DiscardOutBuffer(); char[] buff = new char[1]; buff[0] = 'R';//(char)82 serialPort2.Write(buff, 0, 1);//or WriteLine //string lettera = ((char)82).ToString();//"R" ((char)82).ToString() //serialPort2.Write(lettera); //SetTimer(); System.Threading.Thread.Sleep(100); //this.listBoxGiaTriThuocQuang.Items.Add("Giá tr? thu?c quang:"); try { 89 string message = serialPort2.ReadExisting();//ReadExisting() ReadLine() //this.listBoxGiaTriThuocQuang.Items.Add(message); string[] binStr = new string[message.Length]; string x_value = "", y_value = "", z_value = ""; //convert data to binary for (int i = 0; i < message.Length; i++) { char myChar = message[i]; binStr[i] = Convert.ToString(Convert.ToInt16(myChar), 2).PadLeft(8, '0'); //this.listBoxGiaTriThuocQuang.Items.Add(binStr[i]); } //this.listBoxGiaTriThuocQuang.Items.Add("Setting Value = " + binStr[1]); //read x value byte num_6 = Convert.ToByte(message[6]); byte upper_6 = (byte)(num_6 >> 4); byte lower_6 = (byte)(num_6 & 0x0F); byte num_5 = Convert.ToByte(message[5]); byte upper_5 = (byte)(num_5 >> 4); byte lower_5 = (byte)(num_5 & 0x0F); 90 byte num_4 = Convert.ToByte(message[4]); byte upper_4 = (byte)(num_4 >> 4); byte lower_4 = (byte)(num_4 & 0x0F); byte num_3 = Convert.ToByte(message[3]); byte upper_3 = (byte)(num_3 >> 4); byte lower_3 = (byte)(num_3 & 0x0F); //if (binStr[1].Substring(7, 1) == "1") { x_value = "-"; } //mm if (binStr[1].Substring(3, 1) == "0") { x_value += upper_6.ToString() + lower_6.ToString() + upper_5.ToString() + lower_5.ToString() + upper_4.ToString() + "." + lower_4.ToString() + upper_3.ToString() + lower_3.ToString(); } else//inch { 91 x_value += upper_6.ToString() + lower_6.ToString() + upper_5.ToString() + lower_5.ToString() + "." + upper_4.ToString() + lower_4.ToString() + upper_3.ToString() + lower_3.ToString(); } //this.listBoxGiaTriThuocQuang.Items.Add("x = " + x_value); x = double.Parse(x_value); //this.textBoxOriginX.Text = x_nominal.ToString("0.000"); //read y value byte num_10 = Convert.ToByte(message[10]); byte upper_10 = (byte)(num_10 >> 4); byte lower_10 = (byte)(num_10 & 0x0F); byte num_9 = Convert.ToByte(message[9]); byte upper_9 = (byte)(num_9 >> 4); byte lower_9 = (byte)(num_9 & 0x0F); byte num_8 = Convert.ToByte(message[8]); byte upper_8 = (byte)(num_8 >> 4); byte lower_8 = (byte)(num_8 & 0x0F); byte num_7 = Convert.ToByte(message[7]); byte upper_7 = (byte)(num_7 >> 4); byte lower_7 = (byte)(num_7 & 0x0F); 92 //if (binStr[1].Substring(6, 1) == "1") { y_value = "-"; } //mm if (binStr[1].Substring(3, 1) == "0") { y_value += upper_10.ToString() + lower_10.ToString() + upper_9.ToString() + lower_9.ToString() + upper_8.ToString() + "." + lower_8.ToString() + upper_7.ToString() + lower_7.ToString(); } else//inch { y_value += upper_10.ToString() + lower_10.ToString() + upper_9.ToString() + lower_9.ToString() + "." + upper_8.ToString() + lower_8.ToString() + upper_7.ToString() + lower_7.ToString(); } //this.listBoxGiaTriThuocQuang.Items.Add("y = " + y_value); y = double.Parse(y_value); //this.textBoxOriginY.Text = y_nominal.ToString("0.000"); 93 //read z value byte num_14 = Convert.ToByte(message[14]); byte upper_14 = (byte)(num_14 >> 4); byte lower_14 = (byte)(num_14 & 0x0F); byte num_13 = Convert.ToByte(message[13]); byte upper_13 = (byte)(num_13 >> 4); byte lower_13 = (byte)(num_13 & 0x0F); byte num_12 = Convert.ToByte(message[12]); byte upper_12 = (byte)(num_12 >> 4); byte lower_12 = (byte)(num_12 & 0x0F); byte num_11 = Convert.ToByte(message[11]); byte upper_11 = (byte)(num_11 >> 4); byte lower_11 = (byte)(num_11 & 0x0F); //if (binStr[1].Substring(5, 1) == "1") { z_value = "-"; } //mm 94 if (binStr[1].Substring(3, 1) == "0") { z_value += upper_14.ToString() + lower_14.ToString() + upper_13.ToString() + lower_13.ToString() + upper_12.ToString() + "." + lower_12.ToString() + upper_11.ToString() + lower_11.ToString(); } else//inch { z_value += upper_14.ToString() + lower_14.ToString() + upper_13.ToString() + lower_13.ToString() + "." + upper_12.ToString() + lower_12.ToString() + upper_11.ToString() + lower_11.ToString(); } //this.listBoxGiaTriThuocQuang.Items.Add("z = " + z_value); z = double.Parse(z_value); //this.textBoxOriginZ.Text = z_nominal.ToString("0.000"); } catch (TimeoutException) { } } } } } 95 ... động máy đo 3D 21 CHƢƠNG : CÁC VẤN ĐỀ LIÊN QUAN ĐỘ CHÍNH XÁC VÀ MƠ HÌNH HĨA MÁY ĐO 3D 24 2.1 Các vấn đề li n quan đến điều khiển xác máy đo 3D 24 2.1.1 Nguy n nhân khơng xác. .. TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN MẠNH LINH ĐIỀU KHIỂN CHÍNH XÁC DỊCH CHUYỂN ĐO LƯỜNG TRONG MÁY ĐO BIÊN DẠNG 3D LUẬN VĂN THẠC SỸ KỸ THUẬT Chuyên ngành: CƠ ĐIỆN TỬ NGƯỜI HƯỚNG... thống điều khiển 14 1.2 Tổng quan chuyển động loại máy đo 3D 17 1.2.1 Gi i thiệu phƣơng pháp đo bi n dạng chi tiết máy 17 1.2.2 Chuyển động máy đo tọa độ 20 1.2.3 Chuyển

Ngày đăng: 27/02/2021, 23:06

Tài liệu cùng người dùng

Tài liệu liên quan