Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 115 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
115
Dung lượng
3,14 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA …#… …"… NGUYỄN THÀNH SƠN ĐIỀU KHIỂN CÂN BẰNG XE ĐẠP TỰ HÀNH DÙNG PD MỜ Chuyên ngành:Tự Động Hóa Mã số:605260 LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 06 năm 2014 Trang i CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQGHCM Cán hướng dẫn khoa học :PGS.TS DƯƠNG HOÀI NGHĨA Ký tên PGS.TS DƯƠNG HOÀI NGHĨA Cán chấm nhận xét : Ký tên Cán chấm nhận xét : Ký tên Trang ii Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày tháng năm 2014 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: Xác nhận Chủ tịch Hội đồng đánh giá LV Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA ĐIỆN – ĐIỆN TỬ Trang iii ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: NGUYỄN THÀNH SƠN MSHV: 12150089 Ngày, tháng, năm sinh: 02/03/1987 Nơi sinh: Ninh Thuận Chuyên ngành: Mã số : TÊN ĐỀ TÀI: Điều TỰ ĐỘNG HÓA 605260 khiển cân xe đạp tự hành dùng PD mờ I NHIỆM VỤ VÀ NỘI DUNG:Dùng phương pháp PD mờ điều khiển cân cho xe II NGÀY GIAO NHIỆM VỤ : 20/01/2014 III NGÀY HOÀN THÀNH NHIỆM VỤ: 20/06/2014 IV.CÁN BỘ HƯỚNG DẪN : PGS.TS DƯƠNG HOÀI NGHĨA Tp HCM, ngày tháng năm 2014 CÁN BỘ HƯỚNG DẪN CHỦ NHIỆM BỘ MƠN ĐÀO TẠO PGS.TS DƯƠNG HỒI NGHĨA TRƯỞNG KHOA ĐIỆN – ĐIỆN TỬ Trang iv LỜI CẢM ƠN Tơi xin chân thành cảm ơn PGS.TS Dương Hồi Nghĩa - người tận tình giúp đỡ hướng dẫn tơi q trình học tập, nghiên cứu hồn thiện luận văn Tôi xin trân trọng cảm ơn thầy cô Hội đồng cấp đọc góp ý cho luận văn tơi Qua đây, tơi xin bày tỏ lịng cảm ơn sâu sắc đến gia đình, người thân bạn bè giúp đỡ suốt thời gian thực luận văn TP Hồ Chí Minh, ngày tháng năm 2014 TÁC GIẢ LUẬN VĂN Nguyễn Thành Sơn Trang v TÓM TẮT LUẬN VĂN Tóm tắt: Luận văn trình bày phương pháp sử dụng điều khiển PD mờ để điều khiển xe, với mục đích cho xe đạt độ cân đứng yên di chuyển Đầu tiên cần phải mơ hình hóa đối tượng kiểm tra đặc tính điều khiển đối tượng dùng điều khiển PD thơng thường, sau thiết kế điều khiển PD mờ để điều khiển xe Kết xe cân với góc lệch khoảng nhỏ 50, di chuyển Abstract: Thisthesis reportsthe method that has been used the fuzzy PD controller to balance bicyclein case of standing and moving Firstly,the bicycle is shownas dynamic model which has been testedits characteristicsby usingthe typical PD controller Finally,the fuzzy PD controller has been applied to a self-banlancing bicycle Experimental results show that the bicycle balances at an angle around the Y axis is about less than degree Trang vi LỜI CAM ĐOAN Tôi cam đoan rằng, nội dung luận văn kết làm việc hướng dẫn Thầy PGS.TS Dương Hoài Nghĩa, ngoại trừ phần tham khảo từ tài liệu khác ghi rõ luận văn Tp.HCM, Ngày… tháng 06 năm 2014 Nguyễn Thành Sơn Trang vii MỤC LỤC LỜI CẢM ƠN iv TÓM TẮT LUẬN VĂN v LỜI CAM ĐOAN vi DANH MỤC HÌNH ix DANH MỤC BẢNG xi Chương 1 TỔNG QUAN VỀ ĐỀ TÀI 1 1.1 Đặt Vấn Đề 1 1.2 Tổng quan cơng trình liên quan 1 1.2.1 Phương pháp điều khiển cân xe 1 1.2.2 Một số cơng trình nghiên cứu liên quan 3 1.2.2.1 Một số sản phẩm thực tế 3 1.2.2.2 Các luật điều khiển sử dụng 6 1.3 Phạm vi nghiên cứu 8 1.4 Tóm lược nội dung luận văn 9 Chương 2 2.1 CƠ SỞ LÝ THUYẾT CHO BỘ ĐIỀU KHIỂN 10 Bộ điều khiển mờ 10 2.1.1 Khâu mờ hóa 11 2.1.2 Khâu thực luật hợp thành 13 2.1.3 Khâu giải mờ 14 2.2 2.1.3.1 Phương pháp phụ thuộc cực đại 14 2.1.3.2 Phương pháp điểm trọng tâm 14 2.1.3.3 Phương pháp trung bình 15 Điều khiển PID mờ 16 2.2.1 Bộ điều khiển PID mờ dùng quy tắc Mamdani 16 2.2.2 Bộ điều khiển PID mờ dùng quy tắc Sugeno 17 2.3 Điều khiển PID 18 2.3.1 Bộ điều khiển P 19 2.3.2 Bộ điều khiển PI 20 2.3.3 Bộ điều khiển PD 21 2.3.4 Bộ điều khiển PID 22 Chương 3 THIẾT KẾ MƠ HÌNH VÀ MƠ PHỎNG TRÊN MATLAB/SIMULINK 25 3.1 Xây dựng phương trình tốn học cho hệ thống xe tự cân 25 3.2 Thiết kế điều khiển cho hệ thống 31 3.2.1 Bộ điều khiển dùng PD 31 3.2.2 Giải thuật điều khiển dùng PD mờ 35 Trang viii 3.2.3 Mô đối tượng dùng công cụ fuzzy toolbox matlab/ simulink 38 Chương 4 4.1 THIẾT KẾ CƠ KHÍ VÀ THI CƠNG MƠ HÌNH XE 42 Q trình thiết kế thi cơng thực qua phiên 42 4.1.1 Mơ hình 42 4.1.2 Mơ hình 43 4.1.3 Mơ hình 44 4.1.4 Mơ hình 44 4.2 Thiết kế chi tiết thi cơng phần khí 45 4.2.1 Khung xe 45 4.2.2 Bánh xe 46 4.2.3 Đối trọng xe 46 4.3 Hình dạng xe hồn chỉnh 47 4.4 Thiết kế thi công mạch điều khiển 48 4.4.1 Khối vi điều khiển 48 4.4.2 Khối cảm biến 48 4.4.3 Encoder 49 4.4.4 Động DC 50 4.4.5 Khối điều khiển động 52 4.4.6 Khối nguồn 52 4.5 Chương trình nhúng cho vi điều khiển ARM 53 4.5.1 Cấu hình cho vi điều khiển 58 4.5.2 Bộ điều khiển mờ 58 4.5.3 Lưu đồ giải thuật 58 Chương 5 KẾT LUẬN VÀ ĐÁNH GIÁ 61 5.1 Những kết đạt 61 5.2 Những kết chưa đạt 61 5.3 Hướng phát triển đề tài 61 TÀI LIỆU THAM KHẢO 62 Trang ix DANH MỤC HÌNH Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 4.1 4.2 Dùng lực quán tính để cân Dùng cấu xoay trục gimbal để cân Điểu khiển góc quay bánh lái để cân Dùng đối trọng để cân Murata BOY (nhật 2005) BicyRobo Thailand Championship (2008) Gyroscopic Stabilizationof a Self-Balancing Robot Bicycle (2011) Self-Balancing Electric Motorcycle C-1(2013) Hình dạng đáp ứng mơ hình thực tế dùng fuzzy sliding – mode Mơ hình thực tế đáp ứng dùng thuật toán PSO Mơ hình đáp ứng thực tế hệ thống dùng điều khiển PD Mơ hình thực tế xe đạp cân dùng điều khiển PID Sơ đồ khối điều khiển PID mờ 10 Sơ đồ khối điều khiển mờ tìm thơng số PID 11 Biểu diển tập mờ cho ngõ vào 12 Mờ hóa biến nhiệt độ T 22 12 Giải mờ hàm liên hợp có đỉnh cực đại 14 Giải mờ hàm liên hợp có vùng cực đại 15 Sơ đồ khối sử dụng điều khiển PID điều khiển hệ thống 18 Sơ đồ mô điều khiển PID Simulink 19 Đáp ứng động tín hiệu điều khiển dùng điều khiển P 20 Đáp ứng động tín hiệu điều khiển dùng điều khiển PI 21 Đáp ứng động tín hiệu điều khiển dùng điều khiển PD 22 Đáp ứng động tín hiệu điều khiển dùng điều khiển PID 23 Mơ hình hóa xe cân 25 Sơ đồ khối điều khiển hệ thống dùng PD 31 Mơ hình đối tượng 31 Điều khiển đối tượng dùng điều khiển PD 32 Hiệu chỉnh thông số điều khiển PD tự động 33 Kết điều khiển đối tượng dùng điều khiển PD 34 Sơ đồ khối điều khiển dùng PD mờ 35 Các tập mờ biến 36 Các tập mờ biến 36 Lực điều khiển đối trọng 36 Một số quy tắc điều khiển 37 Các tập mờ biến 38 Các tập mờ biến 38 Các tập mờ biến Tm 39 Giá trị tập mờ cho biến ngõ Tm 39 Các quy tắc điều khiển 39 Sơ đồ Simulink hệ thống điều khiển xe dùng PD mờ 40 Kết điều khiển đối tượng dùng điều khiển PD mờ 41 Mơ hình xe tự cân dùng cấu gimbal kích thước lớn 42 Mơ hình xe tự cân dùng cấu gimbal kích thước nhỏ 43 TIM1_NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; TIM1_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; TIM1_NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; TIM1_NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&TIM1_NVIC_InitStructure); TIM_Cmd(TIM1, ENABLE); TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE); } void TIM1_CC_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET) { TIM_ClearITPendingBit(TIM1, TIM_IT_CC1); if (TIM1_ICC1CaptureNumber == 0) { TIM1_ICC1ReadValue1 = TIM_GetCapture1(TIM1); TIM1_ICC1CaptureNumber = 1; } else if (TIM1_ICC1CaptureNumber == 1) { TIM1_ICC1ReadValue2 = TIM_GetCapture1(TIM1); if (TIM1_ICC1ReadValue2 > TIM1_ICC1ReadValue1) { TIM1_ICC1Capture = (TIM1_ICC1ReadValue2 - TIM1_ICC1ReadValue1); } else if (TIM1_ICC1ReadValue2 < TIM1_ICC1ReadValue1) { TIM1_ICC1Capture = ((0xFFFF - TIM1_ICC1ReadValue1) + TIM1_ICC1ReadValue2); } else { TIM1_ICC1Capture = 0; } if (TIM1_ICC1Capture) { TIM1_ICC1Freq = (uint32_t) 50000000 / TIM1_ICC1Capture; } Trang 89 TIM1_ICC1CaptureNumber = 0; } } } void GPIOE_Configuration(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_DeInit(GPIOE); GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOE, &GPIOE_InitStructure); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_TIM1); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); GPIO_Write(GPIOE,0); } void PWM_Read_Wri_IfActionSubsystem1(real32_T rtu_x, real32_T *rty_Out1, P_IfActionSubsystem1_PWM_Read_T *localP) { *rty_Out1 = (rtu_x - localP->a_Value) / (localP->b_Value - localP->a_Value); } void PWM_Read_Wri_IfActionSubsystem3(real32_T rtu_x, real32_T *rty_Out1, P_IfActionSubsystem3_PWM_Read_T *localP) { *rty_Out1 = 1.0F / (localP->d_Value - localP->c_Value) * (localP->d_Value rtu_x); } void PWM_Read_Wri_IfActionSubsystem2(real32_T rtu_x, real32_T *rty_Out1, Trang 90 P_IfActionSubsystem2_PWM_Read_T *localP) { *rty_Out1 = 1.0F / (localP->c_Value - localP->b_Value) * (localP->c_Value rtu_x); } void PWM_Read_Write_edit_V2_step(void) { real32_T rtb_Gain2; real32_T rtb_out1; real32_T rtb_Merge; real32_T rtb_Merge_b; real32_T rtb_Merge_a; real32_T rtb_Merge_g; real32_T rtb_Merge_o; real32_T rtb_Merge_k; real32_T rtb_Merge_at; real32_T rtb_Merge_f; real32_T rtb_Merge_i; real32_T rtb_Merge_e; real32_T rtb_Sum; real32_T rtb_Weighting; real32_T rtb_Weighting_g; real32_T rtb_Weighting_j; real32_T rtb_Weighting_a; real32_T rtb_Weighting_e; real32_T rtb_Weighting_h; real32_T rtb_Weighting_g0; real32_T rtb_Weighting_au; Trang 91 real32_T rtb_Weighting_g5; real32_T rtb_Weighting_c; real32_T rtb_Weighting_k; real32_T rtb_Weighting_cw; real32_T rtb_Weighting_p; real32_T rtb_Weighting_auq; real32_T rtb_Weighting_b; real32_T rtb_Weighting_bo; real32_T rtb_Weighting_l; real32_T rtb_Weighting_bt; real32_T rtb_Weighting_ec; real32_T rtb_Weighting_o; real32_T rtb_Weighting_gt; real32_T rtb_Weighting_n; real32_T rtb_Weighting_f; real32_T rtb_Weighting_l2; real32_T rtb_Weighting_ou; real32_T rtb_TotalFiringStrength; real32_T tmpForInput[25]; int32_T i; Theta = Theta + (Theta_dot )*0.01/16.4f; PWM_Read_Write_edit_V2_U.Input = Theta; rtb_Sum = PWM_Read_Write_edit_V2_U.Input * 100.0F / 65535.0F PWM_Read_Write_edit_V2_P.Constant_Value; rtb_Gain2 = PWM_Read_Write_edit_V2_P.Gain2_Gain * rtb_Sum; if ((rtb_Gain2 < -2.30835986F) || (rtb_Gain2 > -0.187859789F)) { rtb_Merge = PWM_Read_Write_edit_V2_P._Value; Trang 92 } else if ((rtb_Gain2 >= -2.30835986F) && (rtb_Gain2 -0.402179897F)) { rtb_Merge_b = PWM_Read_Write_edit_V2_P._Value_im; } else if ((rtb_out1 >= -1.30417991F) && (rtb_out1 0.00265F)) { rtb_Merge_a = PWM_Read_Write_edit_V2_P._Value_c; } else if (rtb_out1 == -0.399470896F) { rtb_Merge_a = PWM_Read_Write_edit_V2_P._Value_e; } else if (rtb_out1 < -0.399470896F) { PWM_Read_Wri_IfActionSubsystem1(rtb_out1, &rtb_Merge_a, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_i); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_out1, &rtb_Merge_a, (P_IfActionSubsystem2_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_m); } rtb_Weighting_g = rtb_Merge * rtb_Merge_a * PWM_Read_Write_edit_V2_P.Weight_Value_d; if ((rtb_out1 < -0.399F) || (rtb_out1 > 0.399470896F)) { rtb_Merge_g = PWM_Read_Write_edit_V2_P._Value_k3; } else if (rtb_out1 == 0.00265F) { rtb_Merge_g = PWM_Read_Write_edit_V2_P._Value_er; } else if (rtb_out1 < 0.00265F) { PWM_Read_Wri_IfActionSubsystem1(rtb_out1, &rtb_Merge_g, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_o); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_out1, &rtb_Merge_g, (P_IfActionSubsystem2_PWM_Read_T *) Trang 94 &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_k); } rtb_Weighting_j = rtb_Merge * rtb_Merge_g * PWM_Read_Write_edit_V2_P.Weight_Value_a; if ((rtb_out1 < 0.0F) || (rtb_out1 > 0.806878328F)) { rtb_Merge_o = PWM_Read_Write_edit_V2_P._Value_h; } else if (rtb_out1 == 0.415F) { rtb_Merge_o = PWM_Read_Write_edit_V2_P._Value_k; } else if (rtb_out1 < 0.415F) { PWM_Read_Wri_IfActionSubsystem1(rtb_out1, &rtb_Merge_o, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_b); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_out1, &rtb_Merge_o, (P_IfActionSubsystem2_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_f); } rtb_Weighting_a = rtb_Merge * rtb_Merge_o * PWM_Read_Write_edit_V2_P.Weight_Value_g; if ((rtb_out1 < 0.418F) || (rtb_out1 > 1.32F)) { rtb_Merge_k = PWM_Read_Write_edit_V2_P._Value_gw; } else if ((rtb_out1 >= 0.806878328F) && (rtb_out1 0.00266F)) { rtb_Merge_at = PWM_Read_Write_edit_V2_P._Value_d; } else if (rtb_Gain2 == -0.198F) { rtb_Merge_at = PWM_Read_Write_edit_V2_P._Value_m; } else if (rtb_Gain2 < -0.198F) { PWM_Read_Wri_IfActionSubsystem1(rtb_Gain2, &rtb_Merge_at, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_c); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_Gain2, &rtb_Merge_at, (P_IfActionSubsystem2_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_ow); } rtb_Weighting_h = rtb_Merge_at * rtb_Merge_b * PWM_Read_Write_edit_V2_P.Weight_Value_p; rtb_Weighting_g0 = rtb_Merge_at * rtb_Merge_a * PWM_Read_Write_edit_V2_P.Weight_Value_o; rtb_Weighting_au = rtb_Merge_at * rtb_Merge_g * Trang 96 PWM_Read_Write_edit_V2_P.Weight_Value_e; rtb_Weighting_g5 = rtb_Merge_at * rtb_Merge_o * PWM_Read_Write_edit_V2_P.Weight_Value_pm; rtb_Weighting_c = rtb_Merge_at * rtb_Merge_k * PWM_Read_Write_edit_V2_P.Weight_Value_ef; if ((rtb_Gain2 < -0.204F) || (rtb_Gain2 > 0.208994716F)) { rtb_Merge_f = PWM_Read_Write_edit_V2_P._Value_nh; } else if (rtb_Gain2 == 0.0185F) { rtb_Merge_f = PWM_Read_Write_edit_V2_P._Value_mz; } else if (rtb_Gain2 < 0.0185F) { PWM_Read_Wri_IfActionSubsystem1(rtb_Gain2, &rtb_Merge_f, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_d); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_Gain2, &rtb_Merge_f, (P_IfActionSubsystem2_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_b); } rtb_Weighting_k = rtb_Merge_f * rtb_Merge_b * PWM_Read_Write_edit_V2_P.Weight_Value_pf; rtb_Weighting_cw = rtb_Merge_f * rtb_Merge_a * PWM_Read_Write_edit_V2_P.Weight_Value_dn; rtb_Weighting_p = rtb_Merge_f * rtb_Merge_g * PWM_Read_Write_edit_V2_P.Weight_Value_c; rtb_Weighting_auq = rtb_Merge_f * rtb_Merge_o * PWM_Read_Write_edit_V2_P.Weight_Value_j; rtb_Weighting_b = rtb_Merge_f * rtb_Merge_k * Trang 97 PWM_Read_Write_edit_V2_P.Weight_Value_ca; if ((rtb_Gain2 < 0.0F) || (rtb_Gain2 > 0.59523809F)) { rtb_Merge_i = PWM_Read_Write_edit_V2_P._Value_n; } else if (rtb_Gain2 == 0.209F) { rtb_Merge_i = PWM_Read_Write_edit_V2_P._Value_j; } else if (rtb_Gain2 < 0.209F) { PWM_Read_Wri_IfActionSubsystem1(rtb_Gain2, &rtb_Merge_i, (P_IfActionSubsystem1_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem3_f3); } else { PWM_Read_Wri_IfActionSubsystem2(rtb_Gain2, &rtb_Merge_i, (P_IfActionSubsystem2_PWM_Read_T *) &PWM_Read_Write_edit_V2_P.IfActionSubsystem2_dm); } rtb_Weighting_bo = rtb_Merge_i * rtb_Merge_b * PWM_Read_Write_edit_V2_P.Weight_Value_h; rtb_Weighting_l = rtb_Merge_i * rtb_Merge_a * PWM_Read_Write_edit_V2_P.Weight_Value_hl; rtb_Weighting_bt = rtb_Merge_i * rtb_Merge_g * PWM_Read_Write_edit_V2_P.Weight_Value_jx; rtb_Weighting_ec = rtb_Merge_i * rtb_Merge_o * PWM_Read_Write_edit_V2_P.Weight_Value_f; rtb_Weighting_o = rtb_Merge_i * rtb_Merge_k * PWM_Read_Write_edit_V2_P.Weight_Value_aq; if ((rtb_Gain2 < 0.202941805F) || (rtb_Gain2 > 2.21894169F)) { rtb_Merge_e = PWM_Read_Write_edit_V2_P._Value_f; } else if ((rtb_Gain2 >= 0.60054177F) && (rtb_Gain2 PWM_Read_Write_edit_V2_P.Zero_Value) >= PWM_Read_Write_edit_V2_P.Switch_Threshold) { tmpForInput[0] = rtb_Weighting * PWM_Read_Write_edit_V2_P.PBConstant_Value; tmpForInput[1] = rtb_Weighting_g * PWM_Read_Write_edit_V2_P.PBConstant_Value; tmpForInput[2] = rtb_Weighting_j * PWM_Read_Write_edit_V2_P.PMConstant_Value; tmpForInput[3] = rtb_Weighting_a * PWM_Read_Write_edit_V2_P.PSConstant_Value; tmpForInput[4] = rtb_Weighting_e * PWM_Read_Write_edit_V2_P.ZEConstant_Value; tmpForInput[5] = rtb_Weighting_h * PWM_Read_Write_edit_V2_P.PBConstant_Value; tmpForInput[6] = rtb_Weighting_g0 * PWM_Read_Write_edit_V2_P.PMConstant_Value; tmpForInput[7] = rtb_Weighting_au * PWM_Read_Write_edit_V2_P.PSConstant_Value; tmpForInput[8] = rtb_Weighting_g5 * PWM_Read_Write_edit_V2_P.ZEConstant_Value; tmpForInput[9] = rtb_Weighting_c * PWM_Read_Write_edit_V2_P.NSConstant_Value; tmpForInput[10] = rtb_Weighting_k * PWM_Read_Write_edit_V2_P.PMConstant_Value; tmpForInput[11] = rtb_Weighting_cw * PWM_Read_Write_edit_V2_P.PSConstant_Value; tmpForInput[12] = rtb_Weighting_p * PWM_Read_Write_edit_V2_P.ZEConstant_Value; tmpForInput[13] = rtb_Weighting_auq * PWM_Read_Write_edit_V2_P.NSConstant_Value; tmpForInput[14] = rtb_Weighting_b * PWM_Read_Write_edit_V2_P.NMConstant_Value; tmpForInput[15] = rtb_Weighting_bo * Trang 100 PWM_Read_Write_edit_V2_P.PSConstant_Value; tmpForInput[16] = rtb_Weighting_l * PWM_Read_Write_edit_V2_P.ZEConstant_Value; tmpForInput[17] = rtb_Weighting_bt * PWM_Read_Write_edit_V2_P.NSConstant_Value; tmpForInput[18] = rtb_Weighting_ec * PWM_Read_Write_edit_V2_P.NMConstant_Value; tmpForInput[19] = rtb_Weighting_o * PWM_Read_Write_edit_V2_P.NBConstant_Value; tmpForInput[20] = rtb_Weighting_gt * PWM_Read_Write_edit_V2_P.ZEConstant_Value; tmpForInput[21] = rtb_Weighting_n * PWM_Read_Write_edit_V2_P.NSConstant_Value; tmpForInput[22] = rtb_Weighting_f * PWM_Read_Write_edit_V2_P.NMConstant_Value; tmpForInput[23] = rtb_Weighting_l2 * PWM_Read_Write_edit_V2_P.NBConstant_Value; tmpForInput[24] = rtb_Weighting_ou * PWM_Read_Write_edit_V2_P.NBConstant_Value; rtb_Weighting *= PWM_Read_Write_edit_V2_P.PBConstant_Value; for (i = 0; i < 24; i++) { rtb_Weighting += tmpForInput[i + 1]; } if (rtb_TotalFiringStrength < 0.0F) { rtb_TotalFiringStrength = PWM_Read_Write_edit_V2_P.One_Value; } rtb_Weighting /= rtb_TotalFiringStrength; Trang 101 } else { rtb_Weighting = PWM_Read_Write_edit_V2_P.MidRange_Value; } PWM_Read_Write_edit_V2_Y.Out1 = rtb_Weighting; PWM_Read_Write_edit_V2_Y.Out2 = PWM_Read_Write_edit_V2_B.Timers * 500.0F / 65535.0F; PWM_Read_Write_edit_V2_DW.UD_DSTATE = rtb_Sum; PWM_Read_Write_edit_V2_B.Timers = TIM1_ICC1Capture; } void PWM_Read_Write_edit_V2_initialize(void) { rtmSetErrorStatus(PWM_Read_Write_edit_V2_M, (NULL)); (void) memset(((void *) &PWM_Read_Write_edit_V2_B), 0, sizeof(B_PWM_Read_Write_edit_V2_T)); (void) memset((void *)&PWM_Read_Write_edit_V2_DW, 0, sizeof(DW_PWM_Read_Write_edit_V2_T)); PWM_Read_Write_edit_V2_U.Input = 0.0F; (void) memset((void *)&PWM_Read_Write_edit_V2_Y, 0, sizeof(ExtY_PWM_Read_Write_edit_V2_T)); GPIOE_Configuration(); TIM1_Configuration(); PWM_Read_Write_edit_V2_DW.UD_DSTATE = PWM_Read_Write_edit_V2_P.UD_InitialCondition; } Trang 102 PHẦN LÝ LỊCH TRÍCH NGANG Họ tên: Nguyễn Thành Sơn Ngày sinh: 02/03/1987 Nơi sinh: Ninh Thuận Địa liên lạc: 605B, chung cư AROMA, phường hòa phú, TP Mới Bình Dương Email: son22276@gmail.com Q TRÌNH ĐÀO TẠO Từ năm 2005 – 2010: Học trường đại học Công nghiệp Tp.HCM Từ năm 2012 – 2014: Học cao học trường đại học Bách khoa Tp.HCM QUÁ TRÌNH CƠNG TÁC Năm 2010-nay: Là Trợ giảng trường Đại Học Quốc Tế Miền Đông Trang 103 ... Simulink hệ thống điều khiển xe dùng PD mờ 40 Kết điều khiển đối tượng dùng điều khiển PD mờ 41 Mơ hình xe tự cân dùng cấu gimbal kích thước lớn 42 Mơ hình xe tự cân dùng cấu gimbal... Giải thuật điều khiển dùng PD mờ Bài toán đặt thiết kế điều khiển mờ cho xe đạp tự cân dùng cấu đối trọng, ta thấy mô hìnhđã có khâu tích phân lý tưởng, sử dụng điều khiển PD mờ để điều khiển đối... xây dựng điều khiển PID mờ dùng quy tắc Mamdani khó khăn, nên dùng PID mờ điều khiển PI mờ PD mờ điều khiển đối tượng với chất lượng mong muốn.Để thiết kế điều khiển PID mờ, thiết kế điều khiển