Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 101 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
101
Dung lượng
9,73 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN CHO XE GẮN MÁY ĐIỆN GVHD: TS LÊ THANH PHÚC SVTH: PHẠM CHÍ LINH LÊ THỊ THU HẢI SKL010730 Tp Hồ Chí Minh, tháng năm 2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN CHO XE GẮN MÁY ĐIỆN SVTH: PHẠM CHÍ LINH MSSV: 19145066 SVTH: LÊ THỊ THU HẢI MSSV: 19145223 KHOÁ: 2019 NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô TÔ GVHD: TS LÊ THANH PHÚC Tp Hồ Chí Minh, tháng 06 năm 2023 CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -Tp Hồ Chí Minh, ngày 30 tháng 06 năm 2023 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Phạm Chí Linh MSSV: 19145066 Lê Thị Thu Hải MSSV: 19145223 Ngành: Cơng nghệ kỹ thuật Ơ tơ Giảng viên hướng dẫn: Lớp: 19145CL1 TS Lê Thanh Phúc Ngày nhận đề tài: 10/02/2023 Ngày nộp đề tài: 30/06/2023 Tên đề tài: Thiết kế hệ thống điều khiển cho xe gắn máy điện Các số liệu, tài liệu ban đầu: Nội dung thực đề tài: Sản phẩm TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN i KHOA ĐT CLC – ĐH SPKT TP.HCM CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -Tp Hồ Chí Minh, ngày 30 tháng 06 năm 2023 PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Họ tên sinh viên: Phạm Chí Linh MSSV: 19145066 Lê Thị Thu Hải MSSV: 19145223 Ngành: Công nghệ kỹ thuật Ơ tơ Lớp: 19145CL1 Tên đề tài: Thiết kế hệ thống điều khiển cho xe gắn máy điện Giảng viên hướng dẫn: TS Lê Thanh Phúc NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: …………………………………………………………………………………………… …………………………………………………………………………………………… Ưu điểm: …………………………………………………………………………………………… …………………………………………………………………………………………… Khuyết điểm: …………………………………………………………………………………………… …………………………………………………………………………………………… Đề nghị cho báo cáo hay không? …………………………………………………………………………………………… Đánh giá loại: …………………………………………………………………………………………… Điểm ………………………………(Bằng chữ: ………………………………) Tp Hồ Chí Minh, ngày tháng năm 2023 Giảng viên hướng dẫn (Ký & ghi rõ họ tên) ii KHOA ĐT CLC – ĐH SPKT TP.HCM CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -Tp Hồ Chí Minh, ngày 30 tháng 06 năm 2023 PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN Họ tên sinh viên: Phạm Chí Linh MSSV: 19145066 Họ tên sinh viên: Lê Thị Thu Hải MSSV: 19145223 Ngành: Công nghệ kỹ thuật Ơ tơ Lớp: 19145CL1 Tên đề tài: Thiết kế hệ thống điều khiển cho xe gắn máy điện Giảng viên phản biện: ThS Nguyễn Trọng Thức NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: …………………………………………………………………………………………… …………………………………………………………………………………………… Ưu điểm: …………………………………………………………………………………………… …………………………………………………………………………………………… Khuyết điểm: …………………………………………………………………………………………… …………………………………………………………………………………………… Đề nghị cho báo cáo hay không? …………………………………………………………………………………………… Đánh giá loại: …………………………………………………………………………………………… Điểm ………………………………(Bằng chữ: ………………………………) Tp Hồ Chí Minh, ngày tháng năm 2023 Giảng viên phản biện (Ký & ghi rõ họ tên) iii KHOA ĐT CLC – ĐH SPKT TP.HCM LỜI CẢM ƠN Đầu tiên, nhóm chúng em xin gửi lời cảm ơn chân thành đến Ban giám hiệu Trường Đại học Sư phạm Kỹ thuật Tp.HCM tạo điều kiện cho nhóm chúng em có hội để tìm hiểu, nghiên cứu thực đề tài tốt nghiệp Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc đến giảng viên môn – TS Lê Thanh Phúc tận tình hỗ trợ, giải đáp thắc mắc truyền đạt cho chúng em kiến thức cần thiết suốt thời gian thực đề tài tốt nghiệp Thầy cho chúng em ý kiến để thay đổi sửa chữa thiếu sót, khuyết điểm đề hướng giải tốt Trong thời gian tìm hiểu thưc mơ hình hệ thống nhóm chúng em có thêm cho nhiều kiến thức mới, tinh thần học tập hiệu quả, nghiêm túc Đây chắn kiến thức quý báu hành trang để chúng em thực tốt cơng việc cửa tương lai Tuy nhiên, lượng kiến thức thời gian nghiên cứu hạn chế nên phần nội dung không tránh khỏi sai sót chưa đầy đủ Nhóm mong quý thầy xem xét, đánh giá, cho nhóm nhận xét, góp ý để khắc phục hoàn thiện đồ án tốt Một lần nhóm xin gửi lời cảm ơn đến quý thầy cô anh chị trợ giảng hỗ trợ nhóm suốt thời gian thực việc nghiên cứu đề tài tốt nghiệp Nhóm xin kính chúc quý thầy cô mạnh khoẻ, hạnh phúc thành cơng nghiệp trồng người vinh quang Nhóm chúng em xin chân thành cảm ơn! TP.Hồ Chí Minh, ngày 30 tháng 06 năm 2023 Nhóm sinh viên thực iv KHOA ĐT CLC – ĐH SPKT TP.HCM TÓM TẮT Trong năm gần công nghiệp giới phát triển nhanh chóng kéo theo thay đổi, tiến mặt phải kể đến t ăng lên chóng mặt phương tiện giao thông Tuy nhiên hệ với phát triển ô nhiễm môi trường với nguồn nhiên liệu bị cạn kiệt Chính thế, tất quốc gia giới đưa sách nhằm hạn chế lượng khí phát thải từ phương tiện tiết kiệm nhiên liệu phải kể đến sách phát triển loại động điều khiển sử dụng nhiên liệu sạch, nhiên liệu tái tạo để thay dần động đốt truyền thống Để góp phần nghiên cứu, phát triển hệ thống điều khiển động nhóm định chọn đề tài: “Thiết kế hệ thống điều khiển cho xe gắn máy điện.” nhằm thiết kế, chế tạo mạch điều khiển động không đồng ba pha xe gắn máy điện mà nguồn nhiên liệu sử dụng điện Vi điều khiển STM32F401CCU6 thiết bị dùng để điều khiển tín hiệu với vai trị xử lý trung tâm Sử dụng chế DMA thực điều chế xung, tiến hành tính tốn, so sánh để thay đổi độ rộng xung, tạo điện áp đầu có dạng sóng hình Sine Tín hiệu khuếch đại sử dụng cho động theo pha đầu thích hợp nhằm tạo moment quay giúp động hoạt động Sử dụng Cube ide để lập trình chương trình điều khiển cho vi điều khiển từ ta xem xét giá trị đầu thay đổi cho hợp lí Dựa vào nguyên lý hoạt động, nhóm tiến hành thiết kế mạch in, thực điều khiển mạch thử mơ hình động Quan sát khả hoạt động, cố xảy để tìm nguyên nhân hư hỏng sau tiến hành sửa chữa đưa kết luận hướng phát triển v KHOA ĐT CLC – ĐH SPKT TP.HCM MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN ii PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN iii LỜI CẢM ƠN iv TÓM TẮT v MỤC LỤC vi DANH SÁCH CÁC CHỮ VIẾT TẮT ix DANH MỤC CÁC BẢNG BIỂU x DANH MỤC CÁC HÌNH ẢNH, BIỂU ĐỒ xi CHƯƠNG 1: TỔNG QUAN 1.1 Lý chọn đề tài 1.2 Đối tượng phạm vi nghiên cứu 1.3 Tình hình nghiên cứu phát triển đề tài 1.4 Phương pháp nghiên cứu 1.5 Mục tiêu nghiên cứu 1.6 Kết dự kiến đạt 1.7 Nội dung CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Động không đồng ba pha (AC Induction Motor) 2.1.1 Khái niệm 2.1.2 Cấu tạo vi KHOA ĐT CLC – ĐH SPKT TP.HCM 2.1.3 Nguyên lý làm việc 2.1.4 Phương pháp điều khiển tốc độ động 2.1.5 Hệ thống điều khiển vịng kín 12 2.2 Bộ nghịch lưu 12 2.2.1 Khái niệm 12 2.2.2 Điều khiển nghịch lưu ba pha phương pháp điều chế độ rộng xung PWM 14 2.3 Các thiết bị linh kiện sử dụng 18 2.4.1 Vi điều khiển STM32F401 18 2.4.2 IGBT (Insulated Gate Bipolar Transistor) 20 2.4.3 IR2136 21 2.4.4 IC78xx 23 2.4.5 Tụ điện 24 2.4.6 Điện trở 27 2.4.8 Diode bán dẫn 28 2.4.9 Opto 29 2.3.8 Cảm biến tốc độ động 31 2.3.9 Máy sóng Tektronix TBS1072C 31 2.3.10 Máy đo nhiệt tầm xa Hikvision 32 2.3.11 Động mơ hình xe máy 33 2.3.12 Hệ thống thử 33 CHƯƠNG 3: XÂY DỰNG HỆ THỐNG 36 vii KHOA ĐT CLC – ĐH SPKT TP.HCM 3.1 Tính tốn thơng số 36 3.1.1 Bộ nguồn: 36 3.1.2 Hệ số trượt động 36 3.2 Sơ đồ khối hệ thống 37 3.3 Giải thuật THIPWM vi điều khiển 38 3.4 Thiết kế phần cứng 43 3.4.1 Mạch điều khiển 43 3.4.2 Thiết kế mạch in 54 CHƯƠNG 4: THỰC NGHIỆM 59 4.1 Tổng quan 59 4.2 Kiểm tra tín hiệu 59 4.3 Kiểm tra Tốc độ - Momen chế độ điều khiển hở 62 CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 67 5.1 Kết luận 67 5.2 Kiến nghị 67 TÀI LIỆU THAM KHẢO 68 PHỤ LỤC 70 viii KHOA ĐT CLC – ĐH SPKT TP.HCM /* USER CODE BEGIN Includes */ #include "kalman.h" #include "string.h" #include "stdio.h" /* USER CODE END Includes */ /* Private typedef */ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define -*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro */ /* USER CODE BEGIN PM */ uint32_t A[360]={ 525,534,543,552,561,570,579,589,598,607,616,625,634,643,652,661,669,678,687 ,696,704,713,722,730,738,747,755,763,771,779, 787,795,803,811,819,826,834,841,848,855,862,869,876,883,890,896,903,909,915 ,921,927,933,939,944,950,955,960,965,970,975, 979,984,988,993,997,1001,1004,1008,1011,1015,1018,1021,1024,1027,1029,1032, 1034,1036,1038,1040,1041,1043,1044,1045,1046,1047,1048,1048,1049,1049, 1049,1049,1049,1048,1048,1047,1046,1045,1044,1042,1041,1039,1037,1035,1033, 1030,1028,1025,1022,1020,1016,1013,1010,1006,1002,999,995,990,986,982, 977,972,968,963,958,952,947,941,936,930,924,918,912,906,899,893,886,880,873 ,866,859,852,845,837,830,822,815,807,799,791, 783,775,767,759,751,743,734,726,717,709,700,691,683,674,665,656,647,638,629 ,620,611,602,593,584,575,566,557,547,538,529, 520,511,502,492,483,474,465,456,447,438,429,420,411,402,393,384,375,366,358 ,349,340,332,323,315,306,298,290,282,274,266, 258,250,242,234,227,219,212,204,197,190,183,176,169,163,156,150,143,137,131 ,125,119,113,108,102,97,91,86,81,77,72, 67,63,59,54,50,47,43,39,36,33,29,27,24,21,19,16,14,12,10,8,7,5,4,3,2,1,1,0, 0,0, 0,0,1,1,2,3,4,5,6,8,9,11,13,15,17,20,22,25,28,31,34,38,41,45,48,52,56,61,65 ,70, 74,79,84,89,94,99,105,110,116,122,128,134,140,146,153,159,166,173,180,187,1 94,201,208,215,223,230,238,246,254,262, 270,278,286,294,302,311,319,327,336,345,353,362,371,380,388,397,406,415,424 ,433,442,451,460,470,479,488,497,506,515,525, }; uint32_t B[360]={ 70,66,61,57,53,49,45,42,38,35,32,28,26,23,20,18,15,13,11,10,8,6,5,4,3,2,1,1 ,0,0, 0,0,0,1,1,2,3,4,5,7,8,10,12,14,16,18,21,23,26,29,32,35,39,42,46,50,54,58,62 ,66, 71 KHOA ĐT CLC – ĐH SPKT TP.HCM 71,76,81,85,91,96,101,107,112,118,124,130,136,142,149,155,162,168,175,182,1 89,196,203,211,218,225,233,241,248,256, 264,272,280,288,297,305,313,322,330,339,348,356,365,374,382,391,400,409,418 ,427,436,445,454,463,473,482,491,500,509,518, 528,537,546,555,564,573,583,592,601,610,619,628,637,646,655,664,672,681,690 ,699,707,716,724,733,741,750,758,766,774,782, 790,798,806,813,821,829,836,843,851,858,865,872,879,885,892,898,905,911,917 ,923,929,935,940,946,951,957,962,967,972,976, 981,985,990,994,998,1002,1006,1009,1013,1016,1019,1022,1025,1027,1030,1032, 1035,1037,1039,1040,1042,1043,1045,1046,1047,1047,1048,1049,1049,1049, 1049,1049,1048,1048,1047,1046,1046,1044,1043,1042,1040,1038,1036,1034,1032, 1030,1027,1024,1022,1018,1015,1012,1009,1005,1001,997,993,989,985,980, 976,971,966,961,956,951,945,940,934,928,922,916,910,904,897,891,884,877,871 ,864,857,849,842,835,827,820,812,804,797,789, 781,773,765,756,748,740,731,723,714,706,697,688,680,671,662,653,644,635,626 ,617,608,599,590,581,572,563,554,544,535,526, 517,508,499,489,480,471,462,453,444,435,426,417,408,399,390,381,372,363,355 ,346,337,329,320,312,304,295,287,279,271,263, 255,247,239,232,224,217,209,202,195,188,181,174,167,160,154,147,141,135,129 ,123,117,111,106,100,95,90,85,80,75,70, }; uint32_t C[360]={ 979,974,969,964,959,954,949,943,938,932,926,920,914,908,902,895,889,882,875 ,868,861,854,847,840,832,825,817,810,802,794, 786,778,770,762,754,745,737,729,720,712,703,694,686,677,668,659,650,641,632 ,623,614,605,596,587,578,569,560,550,541,532, 523,514,505,495,486,477,468,459,450,441,432,423,414,405,396,387,378,369,361 ,352,343,335,326,318,309,301,293,284,276,268, 260,252,245,237,229,222,214,207,200,192,185,178,172,165,158,152,145,139,133 ,127,121,115,109,104,98,93,88,83,78,73, 69,64,60,56,52,48,44,40,37,34,31,27,25,22,19,17,15,13,11,9,7,6,5,3,3,2,1,1, 0,0, 0,0,0,1,2,2,3,4,6,7,9,10,12,14,17,19,22,24,27,30,33,36,40,43,47,51,55,59,64 ,68, 73,77,82,87,92,98,103,109,114,120,126,132,138,144,151,157,164,170,177,184,1 91,198,206,213,220,228,236,243,251,259, 267,275,283,291,299,308,316,325,333,342,350,359,368,377,385,394,403,412,421 ,430,439,448,457,466,476,485,494,503,512,521, 531,540,549,558,567,576,586,595,604,613,622,631,640,649,658,667,675,684,693 ,701,710,719,727,736,744,752,761,769,777,785, 793,801,808,816,824,831,838,846,853,860,867,874,881,887,894,900,907,913,919 ,925,931,937,942,948,953,958,964,968,973,978, 983,987,991,995,999,1003,1007,1010,1014,1017,1020,1023,1026,1028,1031,1033, 1035,1037,1039,1041,1042,1044,1045,1046,1047,1048,1048,1049,1049,1049, 1049,1049,1048,1048,1047,1046,1045,1044,1043,1041,1039,1038,1036,1034,1031, 1029,1026,1023,1021,1017,1014,1011,1007,1004,1000,996,992,988,983,979, }; /* USER CODE END PM */ /* Private variables */ 72 KHOA ĐT CLC – ĐH SPKT TP.HCM ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; TIM_HandleTypeDef TIM_HandleTypeDef TIM_HandleTypeDef TIM_HandleTypeDef htim1; htim3; htim4; htim5; /* USER CODE BEGIN PV */ uint32_t adc_val ; uint8_t fsine , old_fsine , i ,check ; float modulationC , arr_value , time , u , u_kalman, adc; uint16_t count ,rpm_lt; char str1[17]; char str2[17]; /* USER CODE END PV */ /* Private function prototypes */ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_ADC1_Init(void); static void MX_TIM1_Init(void); static void MX_TIM3_Init(void); static void MX_TIM5_Init(void); static void MX_TIM4_Init(void); /* USER CODE BEGIN PFP */ #define KP 0.001 #define KI 0.002 #define T 0.1 /* USER CODE END PFP */ /* Private user code */ /* USER CODE BEGIN */ static uint8_t pulse; volatile uint32_t cnt , cnt1, cnt2; float rpm ; void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim5) { pulse++; if ( pulse == 1) { cnt1 = TIM5 -> CCR3; } else if ( pulse == 2) { cnt2 = TIM5 -> CCR3; cnt = cnt2 - cnt1; rpm = round ((1 / ((cnt * 0.0001))) * 60); TIM5 -> CNT = 0; pulse = 0; 73 KHOA ĐT CLC – ĐH SPKT TP.HCM } } float err, err1 ; double alpha , beta , Output , Last_Output ; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { UNUSED(htim); if ( htim -> Instance == htim3.Instance) { TIM1 -> CCR1 = round (A[count] * (modulationC) ); TIM1 -> CCR2 = round (B[count] * (modulationC) ); TIM1 -> CCR3 = round (C[count] * (modulationC) ); if ( (count < 360) ) { count++; TIM3 -> CNT = 0; } else { count = 0; HAL_GPIO_TogglePin(GPIOC, LED_Pin); TIM1->CCR1 = 0; TIM1->CCR2 = 0; TIM1->CCR3 = 0; } } } /* USER CODE END */ /** * @brief The application entry point * @retval int */ int main(void) { /* USER CODE BEGIN */ /* USER CODE END */ /* MCU Configuration -*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ 74 KHOA ĐT CLC – ĐH SPKT TP.HCM /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_TIM1_Init(); MX_TIM3_Init(); MX_TIM5_Init(); MX_TIM4_Init(); /* USER CODE BEGIN */ SimpleKalmanFilter(2,2,0.001f); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3); TIM1->CCR1 = 0; TIM1->CCR2 = 0; TIM1->CCR3 = 0; HAL_TIM_Base_Start_IT (&htim3); HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_3); /* USER CODE END */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN */ HAL_ADC_Start_DMA(&hadc1,&adc_val,1); u = adc_val; u_kalman = updateEstimate(u); u_kalman = updateEstimate(u_kalman); adc = u_kalman - 1038; fsine = 50 ; rpm_lt = (fsine * 2800) / 50 ; if ( (count == 0) && (check == 0)) { if ( fsine >= 5) { arr_value = 100000 / ( 36 * fsine) ; TIM3 -> ARR = round (arr_value); modulationC = (4.4* fsine) / 220; if (modulationC >= 1.05) modulationC = 1.05; } 75 KHOA ĐT CLC – ĐH SPKT TP.HCM else if (fsine < 5){ modulationC = 0; rpm_lt = 0; } } } /* USER CODE END */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 25; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } 76 KHOA ĐT CLC – ĐH SPKT TP.HCM } /** * @brief ADC1 Initialization Function * @param None * @retval None */ static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init */ /* USER CODE END ADC1_Init */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init */ /* USER CODE END ADC1_Init */ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time */ sConfig.Channel = ADC_CHANNEL_3; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_144CYCLES; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init */ /* USER CODE END ADC1_Init */ 77 KHOA ĐT CLC – ĐH SPKT TP.HCM } /** * @brief TIM1 Initialization Function * @param None * @retval None */ static void MX_TIM1_Init(void) { /* USER CODE BEGIN TIM1_Init */ /* USER CODE END TIM1_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; /* USER CODE BEGIN TIM1_Init */ /* USER CODE END TIM1_Init */ htim1.Instance = TIM1; htim1.Init.Prescaler = 4; htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; htim1.Init.Period = 1049; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM2; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 78 KHOA ĐT CLC – ĐH SPKT TP.HCM sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = 202; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM1_Init */ /* USER CODE END TIM1_Init */ HAL_TIM_MspPostInit(&htim1); } /** * @brief TIM3 Initialization Function * @param None * @retval None */ static void MX_TIM3_Init(void) { /* USER CODE BEGIN TIM3_Init */ /* USER CODE END TIM3_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; 79 KHOA ĐT CLC – ĐH SPKT TP.HCM /* USER CODE BEGIN TIM3_Init */ /* USER CODE END TIM3_Init */ htim3.Instance = TIM3; htim3.Init.Prescaler = 84; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 555; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM3_Init */ /* USER CODE END TIM3_Init */ } /** * @brief TIM4 Initialization Function * @param None * @retval None */ static void MX_TIM4_Init(void) { /* USER CODE BEGIN TIM4_Init */ /* USER CODE END TIM4_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM4_Init */ /* USER CODE END TIM4_Init */ htim4.Instance = TIM4; htim4.Init.Prescaler = 840 - 1; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.Period = 999; 80 KHOA ĐT CLC – ĐH SPKT TP.HCM htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM4_Init */ /* USER CODE END TIM4_Init */ } /** * @brief TIM5 Initialization Function * @param None * @retval None */ static void MX_TIM5_Init(void) { /* USER CODE BEGIN TIM5_Init */ /* USER CODE END TIM5_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_IC_InitTypeDef sConfigIC = {0}; /* USER CODE BEGIN TIM5_Init */ /* USER CODE END TIM5_Init */ htim5.Instance = TIM5; htim5.Init.Prescaler = 8400 - 1; htim5.Init.CounterMode = TIM_COUNTERMODE_UP; htim5.Init.Period = 4294967295; htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim5) != HAL_OK) { Error_Handler(); } 81 KHOA ĐT CLC – ĐH SPKT TP.HCM sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_IC_Init(&htim5) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM5_Init */ /* USER CODE END TIM5_Init */ } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ HAL_RCC_DMA2_CLK_ENABLE(); /* DMA interrupt init */ /* DMA2_Stream0_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 2, 0); HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) 82 KHOA ĐT CLC – ĐH SPKT TP.HCM { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 */ /* GPIO Ports Clock Enable */ HAL_RCC_GPIOC_CLK_ENABLE(); HAL_RCC_GPIOH_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : LED_Pin */ GPIO_InitStruct.Pin = LED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : Button_Pin */ GPIO_InitStruct.Pin = Button_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(Button_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ } /* USER CODE BEGIN */ /* USER CODE END */ /** * @brief This function is executed in case of error occurrence * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */ } #ifdef /** USE_FULL_ASSERT 83 KHOA ĐT CLC – ĐH SPKT TP.HCM * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END */ } #endif /* USE_FULL_ASSERT */ 84 KHOA ĐT CLC – ĐH SPKT TP.HCM S K L 0