1. Trang chủ
  2. » Giáo Dục - Đào Tạo

NGHIÊN CỨU CHẾ TẠO MÔ HÌNH MÁY BAY QUADCOPTER

116 23 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 116
Dung lượng 5,3 MB

Nội dung

TRƯỜNG ĐẠI HỌC KỸ THUẬT - CÔNG NGHỆ CẦN THƠ KHOA KỸ THUẬT CƠ KHÍ LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGHIÊN CỨU CHẾ TẠO MƠ HÌNH MÁY BAY QUADCOPTER CÁN BỘ HƯỚNG DẪN SINH VIÊN THỰC HIỆN ThS: Đường Khánh Sơn Từ Đặng Thanh Hạc MSSV: 1500076 Ngành: Cơ điện tử - 2015 Cần thơ – 2019 Nhận xét giáo viên hướng dẫn ` Cần Thơ, ngày…tháng…năm 2019 ThS: Đường Khánh Sơn Nhận xét giáo viên phản biện Cần Thơ, ngày…tháng…năm 2019 LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi hướng dẫn thầy Đường Khánh Sơn Các số liệu kết thu thân trực dõi, thu thập với thái độ hoàn toàn khách quan trung thực, tài liệu trích dẫn điều liệt kê đầy đủ, không chép tài liệu mà khơng có trích dẫn Tác giả luận văn Từ Đặng Thanh Hạc i LỜI CẢM ƠN Trước tiên, em xin gửi lời cảm ơn trân trọng sâu sắc đến thầy Đường Khánh Sơn - người tạo điều kiện tận tình hướng dẫn, góp ý, động viên em suốt trình nghiên cứu thực đồ án Xin chân thành cảm ơn đến tất quý thầy thuộc Khoa Kỹ thuật khí, Bộ mơn Cơ điện tử trường Đại học Kỹ thuật – công nghệ Cần Thơ người trang bị cho chúng em kiến thức bản, nhiệt tình hướng dẫn giúp đỡ chúng em suốt khóa học vừa qua Và sau cùng, xin cảm ơn, chia sẻ niềm vui với gia đình, người thân, tập thể lớp Cơ điện tử khóa - người bên quan tâm giúp đỡ tạo điều kiện thuận lợi để học tập, nghiên cứu hoàn thành đồ án tốt nghiệp Cần Thơ, ngày…tháng…năm 2019 Từ Đặng Thanh Hạc ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC HÌNH ẢNH .vii CHỮ VIẾT TẮT x DANH SÁCH KÍ HIỆU xi MỞ ĐẦU CHƯƠNG TỔNG QUAN 1.1 Khái quát quadcopter 1.2 Lịch sử hình thành 1.3 Tình hình nghiên cứu nước 1.4 Tình hình nghiên cứu nước 1.4.1 Mơ hình sinh viên sư phạm kỹ thuật Tp.HCM 1.4.2 Mô hình sinh viên đại học bách khoa Đà Nẵng 1.4.3 Ở câu lạc mơ hình 1.5 Nội dung nghiên cứu 10 CHƯƠNG MƠ HÌNH HĨA HỆ THỐNG 11 2.1 Đặt giả thuyết 11 2.2 Mơ hình động học 11 2.3 Mơ hình động lực 14 2.3.1 Phương trình chuyển động quay 14 2.3.1.1 Ma trận quán tính 15 iii 2.3.1.2 Moment quay 15 2.3.1.3 Moment chuyển động quadcopter 15 2.3.2 2.4 Phương trình chuyển động tịnh tiến 19 Hiệu ứng khí động học 20 2.4.1 Lực kéo 20 2.4.2 Moment kéo 20 2.5 Động lực cánh quạt 21 2.6 Mơ hình khơng gian trạng thái 23 2.6.1 Vector trạng thái x 23 2.6.2 Điều khiển Vector đầu vào U 23 2.6.3 Phương trình chuyển động quay 25 2.6.4 Phương trình chuyển động tịnh tiến 26 2.6.5 Phương trình khơng gian trạng thái tổng hợp 27 CHƯƠNG 3.1 THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN CHO QUADCOPTER 29 Điều khiển hệ thống 29 3.1.1 Điều khiển độ cao 29 3.1.2 Điều khiển độ cao hướng 29 3.1.3 Điều khiển vị trí 30 3.2 Bộ điều khiển PID 32 3.2.1 Điều khiển độ cao 32 3.2.2 Bộ điều khiển độ cao hướng 33 3.2.2.1 Điều khiển góc roll 33 3.2.2.2 Điều khiển góc pitch 34 iv 3.2.2.3 Điều khiển góc yaw 34 3.2.2.4 Điều khiển vị trí 35 CHƯƠNG THIẾT KẾ QUADCOPTER 36 4.1 Thiết kế khung quadcopter 36 4.2 Các linh kiện sử dụng 37 4.2.1 Khung 37 4.2.2 Cánh quạt 38 4.2.3 Nguồn sử dụng 39 4.2.4 Động sử dụng 40 4.2.5 Cảm biến quay hồi chuyển cảm biến gia tốc 42 4.2.6 Bộ điều khiển 43 4.2.7 Bộ điều khiển RC Devo 44 4.2.8 Bộ điều tốc ESC (Electronic Speed Controller) 45 Hình 4.13 Bộ điều tốc ESC 30A simonk 46 4.3 Giao tiếp I2C (Inter intergrated circuit) 46 4.4 Lập trình arduino 47 4.4.1 Sơ đồ nguyên lý 47 4.4.2 Sơ đồ kết nối 48 4.4.4 Tính tốn góc xử lý tín hiệu 50 4.4.4.1 Tính góc 50 4.4.4.2 Xử lý tín hiệu 50 4.4.5 Lập trình 50 CHƯƠNG KẾT QUẢ VÀ ĐÁNH GIÁ 51 v 5.1 Kết 51 5.1.1 Mô Matlab Simulink 51 5.1.2 Giá trị nhận từ cảm biến 60 5.1.3 Mơ hình thực tế 63 5.2 Đánh giá 66 Kết đạt 67 Kết chưa đạt 67 Hướng phát triển 67 Ứng dụng 67 PHỤ LỤC A 68 PHỤ LỤC B 71 TÀI LIỆU THAM KHẢO 99 vi DANH MỤC HÌNH ẢNH Hình 1.1 Máy bay phản lực Breguet-Richet (1907) Hình 1.2 Oehmichen số (1920) Hình 1.3 Máy bay trực thăng de Bothezat (1922) Hình 1.4 Convertawings Model A Quadrotor (1956) Hình 1.5 Curtiss - Wright VZ-7 (1958) Hình 1.6 Máy bay PHANTOM PRO hãng DJI Hình 1.7 Máy bay MAVIC hãng DJI Hình 1.8 Mơ hình quadcopter sinh viên sư phạm kỹ thuật Tp.HCM Hình 1.9 Mơ hình quadcopter sinh viên đại học bách khoa Đà Nẵng Hình 1.10 Mơ hình câu lạc 10 Hình 2.1 Khung tham chiếu 12 Hình 2.2 Lực moment quadcopter 17 Hình 2.3 Sơ đồ động DC không chổi than 21 Hình 3.1 Sơ đồ điều khiển độ cao 29 Hình 3.2 Sơ đồ điều khiển độ cao mục tiêu 30 Hình 3.3 Sơ đồ điều khiển (hoàn chỉnh) 32 Hình 3.4 Bộ điều khiển PID 32 Hình 4.1 Cánh tay khung quadcopter 36 Hình 4.2 Thân quadcopter 36 Hình 4.3 Thân (bên trái) đáp (bên phải) quadcopter 37 Hình 4.4 Khung quadcopter hoàng chỉnh 37 Hình 4.5 Khung quadcopter 38 Hình 4.6 Cánh quạt 10x45 39 Hình 4.7 Pin Lithium polymer 11.1v 40 Hình 4.9 BLDC MT2216-810KV 42 Hình 4.10 Cảm biến MPU-6050 43 Hình 4.11 Arduino nano 44 vii PHỤ LỤC B if ((abs(gyro_offset[XAXIS]) > 300 || abs(gyro_offset[YAXIS]) > 300 || abs(gyro_offset[ZAXIS]) > 300) && retry < 10) { // tính toán lỗi thực lại retry++; delay(500); calibrate_gyro();}}; ///////////////////////////////////////////////////////////// void calibrate_accel() { // tính tốn sai lệch accel uint8_t i, count = 128; int32_t xSum = 0, ySum = 0, zSum = 0; for (i = 0; i < count; i++) { accel_signalen(); Serial.print("."); xSum += accelRaw[XAXIS]; ySum += accelRaw[YAXIS]; zSum += accelRaw[ZAXIS]; delay(10);} accel_offset[XAXIS] = xSum / count; accel_offset[YAXIS] = ySum / count; accel_offset[ZAXIS] = (zSum / count) - 8192; // - 1G; Từ Đặng Thanh Hạc 86 PHỤ LỤC B accel_offset[XAXIS] *= -1; accel_offset[YAXIS] *= -1; accel_offset[ZAXIS] *= -1;}; ///////////////////////////////////////////////////////////// void readGyroSum() {// đọc giá trị gyro gyro_signalen(); gyroSum[XAXIS] += gyroRaw[XAXIS]; gyroSum[YAXIS] += gyroRaw[YAXIS]; gyroSum[ZAXIS] += gyroRaw[ZAXIS]; gyroSamples++;}; ///////////////////////////////////////////////////////////// void readAccelSum() {// đọc giá trị accel accel_signalen(); accelSum[XAXIS] += accelRaw[XAXIS]; accelSum[YAXIS] += accelRaw[YAXIS]; accelSum[ZAXIS] += accelRaw[ZAXIS]; accelSamples++;}; ///////////////////////////////////////////////////////////// void evaluateGyro() { // tính trung bình Từ Đặng Thanh Hạc 87 PHỤ LỤC B gyro[XAXIS] = gyroSum[XAXIS] / gyroSamples; gyro[YAXIS] = gyroSum[YAXIS] / gyroSamples; gyro[ZAXIS] = gyroSum[ZAXIS] / gyroSamples; // gyro_x_cal:41 gyro_y_cal:99 gyro_z_cal:41 gyro[XAXIS] += gyro_offset[XAXIS]; gyro[YAXIS] += gyro_offset[YAXIS]; gyro[ZAXIS] += gyro_offset[ZAXIS]; gyro[XAXIS] *= gyroScaleFactor; gyro[YAXIS] *= gyroScaleFactor; gyro[ZAXIS] *= gyroScaleFactor; gyro[YAXIS] *= -1; gyro[ZAXIS] *= -1; // Reset biến SUM gyroSum[XAXIS] = 0; gyroSum[YAXIS] = 0; gyroSum[ZAXIS] = 0; gyroSamples = 0; }; ///////////////////////////////////////////////////////////// void evaluateAccel() { Từ Đặng Thanh Hạc 88 PHỤ LỤC B // tính trung bình accel[XAXIS] = accelSum[XAXIS] / accelSamples; accel[YAXIS] = accelSum[YAXIS] / accelSamples; accel[ZAXIS] = accelSum[ZAXIS] / accelSamples; // accel_x_cal:-445 accel_y_cal:251 accel_z_cal:833 accel[XAXIS] +=(-445);// accel_offset[XAXIS]; accel[YAXIS] += 251;//accel_offset[YAXIS]; accel[ZAXIS] +=833 ;// accel_offset[ZAXIS]; ///////////////////////////////////////////////////////////// accel[XAXIS] *= accelScaleFactor; accel[YAXIS] *= accelScaleFactor; accel[ZAXIS] *= accelScaleFactor; // Reset biến SUM accelSum[XAXIS] = 0; accelSum[YAXIS] = 0; accelSum[ZAXIS] = 0; accelSamples = 0;} ///////////////////////////////////////////////////////////// Từ Đặng Thanh Hạc 89 PHỤ LỤC B // tính tốn góc trục x y; void kinematics_update(float gyroX, float gyroY, float gyroZ, float accelX, float accelY, float accelZ) { float norm = sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ); accelX /= norm; accelY /= norm; accelZ /= norm; //float accelXangle = atan2(accelY, accelZ); //float accelYangle = atan2(accelX, accelZ); float accelXangle = atan2(accelY, sqrt(accelX *accelX + accelZ *accelZ)); float accelYangle = atan2(accelX, sqrt(accelY *accelY + accelZ *accelZ)); float accelWeight = 0.0040; if (norm > 13.0 || norm < 7.0) accelWeight = 0.00; unsigned long now = micros(); kinematicsAngle[XAXIS] += (gyroX * (float)(now - kinematics_timer) / 1000000); kinematicsAngle[YAXIS] += (gyroY * (float)(now - kinematics_timer) / 1000000); kinematicsAngle[ZAXIS] += (gyroZ * (float)(now - kinematics_timer) / 1000000); // giới hạn quay (+- PI) NORMALIZE(kinematicsAngle[XAXIS]); NORMALIZE(kinematicsAngle[YAXIS]); Từ Đặng Thanh Hạc 90 PHỤ LỤC B NORMALIZE(kinematicsAngle[ZAXIS]); if (accelZ > 0.75) { if ((kinematicsAngle[XAXIS] - accelXangle) > PI) { kinematicsAngle[XAXIS] = (1.00 - accelWeight) * kinematicsAngle[XAXIS] + accelWeight * (accelXangle + TWO_PI); } else if ((kinematicsAngle[XAXIS] - accelXangle) < -PI) { kinematicsAngle[XAXIS] = (1.00 - accelWeight) * kinematicsAngle[XAXIS] + accelWeight * (accelXangle - TWO_PI); } else { kinematicsAngle[XAXIS] = (1.00 - accelWeight) * kinematicsAngle[XAXIS] + accelWeight * accelXangle;}} if (accelZ > 0.60) { if ((kinematicsAngle[YAXIS] - accelYangle) > PI) { kinematicsAngle[YAXIS] = (1.00 - accelWeight) * kinematicsAngle[YAXIS] + accelWeight * (accelYangle + TWO_PI); } else if ((kinematicsAngle[YAXIS] - accelYangle) < -PI) { kinematicsAngle[YAXIS] = (1.00 - accelWeight) * kinematicsAngle[YAXIS] + accelWeight * (accelYangle - TWO_PI); } else { kinematicsAngle[YAXIS] = (1.00 - accelWeight) * kinematicsAngle[YAXIS] + accelWeight * accelYangle;} } Từ Đặng Thanh Hạc 91 PHỤ LỤC B kinematics_timer = now;} ////////////////////////////////////////////////// void mpu6050_initialize(){//khai báo cài đặt mpu-6050 // Chip reset Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_PWR_MGMT_1); Wire.write(BIT_H_RESET); Wire.endTransmission(); // Startup delay delay(100); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_WHOAMI); Wire.endTransmission(); Wire.requestFrom(MPU6050_ADDRESS, 1); uint8_t register_value = Wire.read(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_INT_PIN_CFG); Wire.write(0x02); Wire.endTransmission(); Từ Đặng Thanh Hạc 92 PHỤ LỤC B Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_PWR_MGMT_1); Wire.write(MPU_CLK_SEL_PLLGYROZ); Wire.endTransmission(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_PWR_MGMT_2); Wire.write(0); Wire.endTransmission(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_SMPLRT_DIV); Wire.write(0x00); Wire.endTransmission(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_CONFIG); Wire.write(BITS_DLPF_CFG_42HZ); Wire.endTransmission(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_GYRO_CONFIG); Wire.write(BITS_FS_1000DPS); Từ Đặng Thanh Hạc 93 PHỤ LỤC B Wire.endTransmission(); Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_ACCEL_CONFIG); Wire.write(0x08); Wire.endTransmission(); delay(1500); } ///////////////////////////////////////////////////////////// void gyro_signalen(){ //đọc giá trị gyro thô Wire.beginTransmission(MPU6050_ADDRESS); Wire.write(MPUREG_GYRO_XOUT_H); Wire.endTransmission(); Wire.requestFrom(MPU6050_ADDRESS, 6); while(Wire.available() < 6); //chờ nhận đủ byte gyroRaw[XAXIS] = ((Wire.read() pid_max_yaw)pid_output_yaw = pid_max_yaw; else if(pid_output_yaw < pid_max_yaw * -1)pid_output_yaw = pid_max_yaw * -1; pid_last_yaw_d_error = pid_error_temp;} Từ Đặng Thanh Hạc 98 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO [1] 2016.“Giáo trình kỹ thuật robot”TS Ngơ Quang Hiếu, PGS TS Nguyễn Chí Ngơn [2]Spring 2014.“ Dynamic Modeling and Control of a Quadrotor Using Linear and Nonlinear Approaches” byProf Maki K Habib [3]January 2016.”mathematical modeling of unmanned aerial vehicles with four rotors”by Denis Kotarski, Zoran Benić and Matija Krznar [17-19] [4] March 2016 “Control design for unmanned aerial vehicles with four rotors”by Denis Kotarski, Zoran Benić and Matija Krznar [5] September 2013“Design Procedure of 4-Bladed Propeller”.by Ishiodu Anthony [6]https://www.banggood.com/EMAX-MT2216-KV810-Brushless-Motor-With-1045Propeller-For-RC-Modes-p925679.html?utm_source=google&utm_medium=cpc_ods&utm_campaign=contentsdsrm-led2-strip&utm_content=aurogon&ad_id=208549888285&gclid=Cj0KCQjwtXlBRDWARIsAGYQAmfYZJP_km38XlQ38NHxLEPmez6PeeTSyytE5ZON0VVeEwmAsbnCpcaAq0NEALw_wcB&ID=521309&cur_warehouse=CN [7]https://www.orientalmotor.com/technology/motor-sizing-calculations.html [8]https://anhminhvn.com/news/dong-co-dien-moi-quan-he-giua-cong-suat-va-momenvoi-toc-do-95.html [9]https://vi.wikipedia.org/wiki/Lực_điện_động [10]2007.” design and control of quadrotors with application to autonomous flying”by Samir BOUABDALLAH,tr.24-25 Từ Đặng Thanh Hạc 99 TÀI LIỆU THAM KHẢO [11]May 30, 2011”Stabilization and control of unmanned quadcopter”.By Tomáš Jiřinec [12] https://m-selig.ae.illinois.edu/props/propDB.html [13] http://www.geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip/ [14] “MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2” Từ Đặng Thanh Hạc 100 ... cánh quạt Bay thành công nhiều lần vào năm 1950, trực thăng chứng minh thiết kế quadcopter máy bay trực thăng bốn cánh quạt thể chuyến bay phía trước thành cơng Hình 1.4 Convertawings Model A Quadrotor... rotor gây M : Moment chuyển động quadcopter Với Jω̇ ω × Jω Đại diện cho tốc độ thay đổi moment động lượng khung quadcopter Trong M đại diện cho moment quay quán tính rotor J gây Những moment quay... mềm Solidwork 2.3.1.2 Moment quay Moment quay rotor hiệu ứng vật lý moment xoắn moment cố gắng chỉnh trục quay cánh quạt dọc theo trục quán tính z 2.3.1.3 Moment chuyển động quadcopter Với phương

Ngày đăng: 07/08/2021, 16:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w