Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.Phát triển giải pháp điều khiển thích nghi cho bộ lọc tích cực 3 pha.
BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI THÀNH PHỐ HỒ CHÍ MINH HUỲNH LÊ MINH THIỆN PHÁT TRIỂN GIẢI PHÁP ĐIỀU KHIỂN THÍCH NGHI CHO BỘ LỌC TÍCH CỰC BA PHA LUẬN ÁN TIẾN SĨ TP HỒ CHÍ MINH – 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI THÀNH PHỐ HỒ CHÍ MINH HUỲNH LÊ MINH THIỆN PHÁT TRIỂN GIẢI PHÁP ĐIỀU KHIỂN THÍCH NGHI CHO BỘ LỌC TÍCH CỰC BA PHA Ngành: Kỹ thuật điều khiển tự động hóa Mã số: 9520216 NGƯỜI HƯỚNG DẪN: GVC.TS HỒ VĂN CỪU TS TRẦN THANH VŨ TP HỒ CHÍ MINH – 2022 i LỜI CAM ĐOAN Tôi xin cam đoan luận án tiến sĩ với đề tài: “Phát triển giải pháp điều khiển thích nghi cho lọc tích cực ba pha” cơng trình nghiên cứu thực Các kết kết luận luận án trung thực, không chép từ nguồn hình thức Việc tham khảo nguồn tài liệu thực trích dẫn ghi nguồn tài liệu tham khảo quy định Thành phố Hồ Chí Minh, tháng năm 2022 Nghiên cứu sinh Huỳnh Lê Minh Thiện ii LỜI CẢM ƠN Tôi xin trân trọng cảm ơn GVC.TS Hồ Văn Cừu, Trưởng khoa Điện tử viễn thơng, Trường Đại học Sài Gịn, tận tâm hướng dẫn tơi, động viên tơi kiên trì trui rèn đường học thuật, khoa học, thầy làm gương cho phong cách tinh thần làm việc để trở thành người khoa học Tôi xin trân trọng cảm ơn TS Trần Thanh Vũ, Trưởng Bộ môn Điện Công nghiệp, khoa Điện-ĐTVT Trường Đại học Giao thơng vận tải Thành phố Hồ Chí Minh, người thực cho tơi hội nhìn rõ vấn đề chun mơn nói chung tốn luận án nói riêng, nhờ mà chơng gai đường nghiên cứu trở thành động lực suốt q trình thực nghiên cứu Tơi thực trân trọng giá trị khoa học mà môi trường Đại học Giao thơng vận tải Thành phố Hồ Chí Minh tạo ra, nơi có bề dày lịch sử đào tạo khoa học kỹ thuật người, nơi bồi đắp cho chuẩn mực khoa học tự sáng tạo khoa học Tôi xin cảm ơn gia đình tơi tạo điều kiện, thấu hiểu cho thời gian làm nghiên cứu khoa học Xin gởi đến quý thầy cô, quý đồng nghiệp công tác trường Đại học nước quốc tế lời tri ân chân thành cho góp sức q báu, để cơng việc nghiên cứu nhiều phần thuận lợi Sự đóng góp nhà khoa học để luận án tiếp tục hồn thiện, giúp cho tơi ngày trưởng thành đường nghiên cứu, khao khát bên cạnh mong muốn luận án hồn thành Xin trân trọng cảm ơn! Thành phố Hồ Chí Minh, tháng năm 2022 Nghiên cứu sinh Huỳnh Lê Minh Thiện iii TÓM TẮT Hiện nay, việc điều khiển Biến tần nguồn áp (VSI) trở nên hiệu hết nhờ phát triển công nghệ bán dẫn, sử dụng thiết bị bán dẫn tốc độ chuyển mạch cao vi xử lý tần số trăm Mhz, cho phép hệ thống hoạt động cách thơng minh nhờ áp dụng thuật tốn điều khiển đại phức tạp Từ đó, việc ứng dụng chuyển đổi để thiết kế Bộ lọc nguồn tích cực (Active Power Filter – APF) ứng dụng phổ biến lĩnh vực điều khiển chất lượng điện Khơng nằm ngồi chức VSI, luận án tập trung nghiên cứu hai vấn đề bù công suất (PFC) lọc nguồn tích cực (APF) Song song với việc trình bày lý thuyết điều khiển mô xác thực kết thực nghiệm thực hệ thống lọc nguồn điện tích cực ba pha với cấu trúc lõi biến đổi công suất VSI Các phần nghiên cứu bao gồm: ① đề xuất cấu hình lọc nguồn tích cực; ② cấu hình xây dựng mơ hình giải tích, giải thuật điều khiển; ③ xây dựng mơ hình mơ mơ hình thực nghiệm; ④ ghi nhận, so sánh, nhận xét kết mô kết thực nghiệm; ⑤ thực báo cáo khoa học dạng công trình nghiên cứu khoa học, báo báo cáo luận án Dựa giải tích hệ thống, tác giả sử dụng giải pháp tính tốn mềm, phương pháp điều khiển kỹ thuật điều khiển tiên tiến như: tuyến tính hóa phi tuyến, thích nghi mờ, thích nghi phi tuyến, vài mơ hình điều khiển kinh điển khác để hỗ trợ so sánh kết Hai giải pháp thích nghi đề xuất để thay cho giải pháp tham số cố định nhằm thích ứng với biến động không mong muốn hệ thống đề xuất luận án, sử dụng điều khiển thích nghi mờ PI hai giải thuật bù dịng điện dự đốn Kết hướng đến việc đảm bảo độ ổn định điện áp chiều tụ liên kết, xử lý lệch pha dịng điện điện áp q trình nối lưới APF, cải thiện đáp ứng động cho hệ thống tải phi tuyến nguồn điện biến động, giữ vững tiêu chí chất lượng điện tổng méo hài THD < 6% hệ số công suất PFC > 95% Mô thực nghiệm minh chứng cho khả cải thiện hệ số cơng suất, bù sóng hài hiệu đáp ứng nhanh với tác động không mong muốn xảy cho hệ thống, đảm bảo mục tiêu đặt luận án Từ khóa: Điều khiển chất lượng điện năng, chất lượng điện, lọc nguồn tích cực, kỹ thuật điều khiển thích nghi, điều khiển dự báo, nghịch lưu ba pha nguồn áp iv ABSTRACT The control of Voltage Source Inverter (VSI) becomes more effective than ever due to using semiconductor switching devices and high-frequency microprocessors Using these converters to design an Active Power Filter is the most popular application in the field of power quality control Not outside the main function of the converter, this thesis studies two principal problems, which are improving Power Factor Correction (PFC) and eliminating high order harmonics, called Active Power Filter (APF) Besides listing control theories, measuring the results of the Shunt active power filter system model was present to prove the validity of the proposed algorithm The main research sections include: ① active source filter configuration recommendations; ② on that configuration build analytical model, control algorithm; ③ building simulation models and experimental models; ④ record, compare and comment on simulation results and experimental results; ⑤ perform scientific reports such as scientific research topic, articles, and thesis Based on the analysis of the system, the author has used some advanced control techniques such as soft computing solutions, nonlinear linearization, fuzzy adaptation, nonlinear adaptation, and a few other classic control models to aid in comparing results Two main adaptive solutions are proposed to replace the solutions of fixed parameters in order to adapt to unexpected fluctuations in the proposed scheme in the thesis, the first is using an adaptive Fuzzy-PI controller, and the second is the predictive current compensation algorithm The results are aimed at ensuring the stability of the DC voltage, handling the phase difference between the current and the voltage during the APF connecting to the grid, and improving the dynamic response of the system under nonlinear loads, and/or the grid unwanted change, while maintaining quality criteria such as total harmonic distortion THD < 6% and PFC power factor > 95% Simulations and experiments have demonstrated the ability to improve power factors, effectively compensate for harmonics and respond quickly to unwanted effects on the system, ensuring the aim of the thesis Keywords: Power quality control (PQC), power quality, active power filter (APF), adaptive control engineering, model predictive control (MPC), three-phase voltage source inverter (VSI) v MỤC LỤC LỜI CAM ĐOAN .i LỜI CẢM ƠN ……………………………………………………………………… ii TÓM TẮT ……………………………………………………………………….iii ABSTRACT ……………………………………………………………………….iv MỤC LỤC ……………………………………………………………………… v DANH MỤC CÁC HÌNH ẢNH viii DANH MỤC BẢNG BIỂU xiii DANH MỤC CÁC TỪ VIẾT TẮT xiv DANH MỤC NHỮNG KÝ HIỆU SỬ DỤNG TRONG LUẬN ÁN xvi MỞ ĐẦU ……………………………………………………………………… 1 Lý chọn đề tài……………………………………………………………… Tính cấp thiết đề tài …………………………………………………… Mục tiêu nghiên cứu…………………………………………………………… Phương pháp nghiên cứu ……………………………………………………… Đối tượng phạm vi nghiên cứu đề tài ………………………………… Nội dung nghiên cứu ………………………………………………………… Ý nghĩa khoa học thực tiễn đề tài …………………………………… Bố cục luận án: …….………………………………………………………6 CHƯƠNG TỔNG QUAN VỀ KỸ THUẬT ĐIỀU KHIỂN TRONG BỘ LỌC NGUỒN TÍCH CỰC .7 1.1 Bộ lọc nguồn tích cực 1.2 Giải tích mạch lọc tích cực ba pha mắc song song dựa lý thuyết công suất tức thời .11 1.2.1 Trường hợp 1: Điện áp nguồn ba pha cân 18 1.2.2 Trường hợp 2: Điện áp nguồn ba pha bị méo dạng không cân 19 1.3 Các giải pháp điều khiển thích nghi ứng dụng lĩnh vực điều khiển chất lượng điện 23 1.3.1 Các cơng trình nghiên cứu APF tiêu biểu ứng dụng kỹ thuật điều khiển miền thời gian miền tần số 24 1.3.2 1.4 Điều khiển thích nghi áp dụng kỹ thuật điều khiển APF 28 Hiệu lượng điện chất lượng điện 41 1.4.1 Chất lượng điện 41 vi 1.4.2 Hiệu lượng điện 43 1.4.3 Các dẫn thương mại 44 1.5 Đề xuất chức nhiệm vụ việc xây dựng mơ hình mơ mơ hình thực nghiệm .47 1.6 Kết luận chương 48 CHƯƠNG HỆ THỐNG ĐIỆN BA PHA DƯỚI TÁC ĐỘNG CỦA TẢI VÀ BỘ LỌC NGUỒN TÍCH CỰC 49 2.1 Xây dựng mơ hình mơ 49 2.1.1 Khối nguồn 51 2.1.2 Mơ hình tải 51 2.1.3 Mơ hình khối lọc tích cực 54 2.2 Điểu khiển mạch lọc tích cực ba pha 57 2.2.1 Chuyển đổi tín hiệu điều khiển 57 2.2.2 Mơ hình nghịch lưu ba pha .59 2.2.3 Các vấn đề điều chế điều khiển VSI 60 2.3 Kết mô hệ thống .70 2.3.1 Chế độ không tải .70 2.3.2 Chế độ tải R_L 73 2.4 Kết luận chương 80 CHƯƠNG FUZZY-PI 3.1 CẢI TIẾN HIỆU NĂNG CỦA APF SỬ DỤNG BỘ ĐIỀU KHIỂN ………………………………………………………………………81 Thiết kế cải tiến điều khiển APF sử dụng điều khiển trượt Sling Mode 81 3.1.1 Giải tích hệ thống APF 84 3.1.2 Mơ hình điều khiển trượt phản hồi 84 3.1.3 Kết mô sử dụng điều khiển trượt .89 3.2 Cải tiến hiệu APF sử dụng điều khiển Fuzzy – PI 95 3.2.1 Thiết kế điều khiển Fuzzy-PID 95 3.2.2 Cải tiến ổn định điện áp tụ VSI 107 3.2.3 Kết mô ổn định điện áp tụ .110 3.2.4 Kết đo thực nghiệm .117 3.3 APF vai trò nâng cao chất lượng điện 122 3.3.1 Cải tiến giải thuật điều khiển cho VSI sử dụng điều khiển Fuzzy-PI 124 3.3.2 Kết mô với giải thuật nghiên cứu .126 vii 3.3.3 3.4 Kết thực nghiệm .128 Kết luận chương 130 CHƯƠNG GIẢI PHÁP ĐIỀU KHIỂN THÍCH NGHI CHO BỘ LỌC TÍCH CỰC BA PHA …………………………………………………………………… 131 4.1 Cải tiến đáp ứng nối lưới trình APF hoạt động .131 4.1.1 Xây dựng mơ hình giải thuật nối lưới 131 4.1.2 Duy trì thơng số chất lượng q trình APF kết nối với lưới điện 136 4.1.3 Kết thực nghiệm nối lưới 139 4.2 Phát triển giải pháp điều khiển thích nghi cho lọc tích cực ba pha 141 4.2.1 Đề xuất phương pháp điều khiển bù sóng hài sử dụng mơ hình điều khiển bù dịng điện dự đoán 141 4.2.2 Kết mô 151 4.2.3 Kết thực nghiệm .152 4.2.4 Kết luận chương 155 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 157 DANH MỤC CÔNG TRÌNH ĐÃ CƠNG BỐ 160 TÀI LIỆU THAM KHẢO 163 PHỤ LỤC ……………………………… …………………………………………168 I THIẾT KẾ MƠ HÌNH THỰC NGHIỆM ……………………………………… 168 1.1 Xây dựng mơ hình thực nghiệm bù sóng hài cho hệ thống điện pha sử dụng mạch lọc tích cực ………………………….……………………………………………….168 1.1.1 Đề xuất cấu trúc hệ thống ………………………….…………………… 168 1.1.2 Xác định thông số hệ thống ………………….…………………… .170 1.2 Mơ hình thực nghiệm ………………………………………………………… 172 1.2.1 Sơ đồ kết nối tín hiệu khối chức …….……………………….…… 172 1.2.2 Cấu hình chức cho vi điều khiển … …….……………………….………173 1.2.3 Mơ hình thực nghiệm ………………… …….……………………….…… 174 II CHƯƠNG TRÌNH ĐIỀU KHIỂN ……………………………………………… 180 viii DANH MỤC CÁC HÌNH ẢNH Hình 1.1 Các dạng mạch lọc tích cực Hình 1.2 Lưới điện ba pha sử dụng lọc nguồn tích cực Hình 1.3 Dịng điện nguồn, dịng điện tải dòng bù hệ thống điện .9 Hình 1.4 Sơ đồ khối nguyên lý lọc nguồn tích cực .10 Hình 1.5 Sơ đồ khối cấu hình lọc tích cực hệ thống điện ba pha 12 Hình 1.6 Mơ hình truyền tải sử dụng lọc nguồn tích cực 13 Hình 1.7 Sơ đồ nguyên lý phương pháp p-q 14 Hình 1.8 Hệ trục a-b-c α-β 14 Hình 1.9 Sơ đồ khối hệ thống APF 24 Hình 1.10 Các kỹ thuật tính tốn dịng điện tham chiếu .24 Hình 1.11 Phương pháp điều khiển dùng lý thuyết công suất tức thời 25 Hình 1.12 Đồ thị hình thành thành phần cơng suất tức thời 26 Hình 1.13 Đồ thị bù thành phần trung bình q cơng suất ảo 26 Hình 1.14 Đồ thị công suất bù cho p 27 Hình 1.15 Đồ thị công suất sau lọc hài bậc cao .27 Hình 1.16 Đồ thị bù đạt PF=1 .27 Hình 1.17 Mơ hình phi tuyến sơ đồ MBPC dùng mơ hình nội phản hồi để bổ yếu tốt nhiễu sai sai số mơ hình hóa 29 Hình 1.18 Phương pháp tìm kiếm dạng dùng điều khiển dự báo 31 Hình 1.19 Thiết lập ứng dụng điều khiển dự báo mờ dùng cấu trúc IMC .32 Hình 1.20 Sơ đồ khối tính dịng tham chiếu kỹ thuật thích nghi 34 Hình 1.21 Bộ điều khiển thích nghi dựa khâu điều khiển PI 35 Hình 1.22 Sơ đồ khối hệ thống xử lý mờ 36 Hình 1.23 Sơ đồ khối hệ thống xử lý mờ 36 Hình 1.24 Suy diễn mờ theo phương pháp MAX-MIN 38 Hình 1.25 Giải mờ dùng phương pháp điểm trọng tâm 39 Hình 1.26 Tập mờ loại 39 Hình 1.27 Thành phần thành phần hài bậc cao .41 Hình 1.28 Tam giác cơng suất .43 Hình 2.1 Sơ đồ khối ngun lý mơ hình mơ 49 Hình 2.2 Mơ hình khối mơ hệ thống lọc tích cực pha .50 Hình 2.3 Nguồn sine dạng vector biểu diễn hệ trục αβ: 51 Hình 2.4 Mơ hình toán tải R_L .52 Hình 2.5 Mơ hình mơ tải ba pha R_L 52 Hình 2.6 Mơ hình tải khơng lý tưởng 53 Hình 2.7 Mơ hình tải R_L pha a .53 Hình 2.8 Dịng điện khối tải khơng lý tưởng .54 Hình 2.9 Mơ hình mơ khối lọc tích cực .54 Hình 2.10 Mơ khối điều khiển PI .55 Hình 2.11 Khối tạo dịng tham chiếu id* , iq* 55 180 } htim15.Instance = TIM15; sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode htim15.Init.CounterMode htim15.Init.Period = 833; = TIM_LOCKLEVEL_OFF; = htim15.Init.AutoReloadPreload = if (HAL_TIM_Base_Init(&htim15) != HAL_OK) { sBreakDeadTimeConfig.BreakFilter = 0; Error_Handler(); = TIM_BREAK2_DISABLE; sBreakDeadTimeConfig.Break2Polarity } sClockSourceConfig.ClockSource = = TIM_CLOCKSOURCE_INTERNAL; TIM_BREAK2POLARITY_HIGH; if sBreakDeadTimeConfig.Break2Filter = 0; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTORELOAD_PRELOAD_DISABLE; TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.Break2State = htim15.Init.RepetitionCounter = 0; TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity htim15.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; sBreakDeadTimeConfig.DeadTime = 0; sBreakDeadTimeConfig.BreakState = = TIM_COUNTERMODE_UP; TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel htim15.Init.Prescaler = 0; (HAL_TIM_ConfigClockSource(&htim15, &sClockSourceConfig) != HAL_OK) = { TIM_AUTOMATICOUTPUT_DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim15) != HAL_OK) { Error_Handler(); Error_Handler(); } } /* USER CODE BEGIN TIM8_Init */ sMasterConfig.MasterOutputTrigger /* USER CODE END TIM8_Init */ HAL_TIM_MspPostInit(&htim8); } = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; /* @brief TIM15 Initialization Function if * @param None (HAL_TIMEx_MasterConfigSynchronization(&hti * @retval None */ m15, &sMasterConfig) != HAL_OK) static void MX_TIM15_Init(void) { { Error_Handler(); /* USER CODE BEGIN TIM15_Init */ } /* USER CODE END TIM15_Init */ sConfigOC.OCMode = TIM_OCMODE_PWM1; TIM_ClockConfigTypeDef sClockSourceConfig = sConfigOC.Pulse = 0; {0}; sConfigOC.OCPolarity = TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OCPOLARITY_HIGH; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; /* USER CODE BEGIN TIM15_Init */ /* USER CODE END TIM15_Init */ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; = 181 sConfigOC.OCIdleState = huart4.Init.StopBits = UART_STOPBITS_1; TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState huart4.Init.Parity = UART_PARITY_NONE; = huart4.Init.Mode = UART_MODE_TX_RX; TIM_OCNIDLESTATE_RESET; if huart4.Init.HwFlowCtl = (HAL_TIM_PWM_ConfigChannel(&htim15, UART_HWCONTROL_NONE; &sConfigOC, TIM_CHANNEL_1) != HAL_OK) huart4.Init.OverSampling { = UART_OVERSAMPLING_16; Error_Handler(); huart4.Init.OneBitSampling } = UART_ONE_BIT_SAMPLE_DISABLE; sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode huart4.Init.FIFOMode = huart4.Init.TXFIFOThreshold huart4.Init.RXFIFOThreshold huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; TIM_BREAKPOLARITY_HIGH; if (HAL_UART_Init(&huart4) != HAL_OK) sBreakDeadTimeConfig.BreakFilter = 0; { = Error_Handler(); TIM_AUTOMATICOUTPUT_DISABLE; } if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, /* USER CODE BEGIN UART4_Init */ &sBreakDeadTimeConfig) != HAL_OK) { /* USER CODE END UART4_Init */ } Error_Handler(); /* @brief GPIO Initialization Function */ } static void MX_GPIO_Init(void) /* USER CODE BEGIN TIM15_Init */ { /* USER CODE END TIM15_Init */ GPIO_InitTypeDef GPIO_InitStruct = {0}; HAL_TIM_MspPostInit(&htim15); /* GPIO Ports Clock Enable */ } HAL_RCC_GPIOE_CLK_ENABLE(); /* @brief UART4 Initialization Function */ HAL_RCC_GPIOI_CLK_ENABLE(); static void MX_UART4_Init(void) HAL_RCC_GPIOC_CLK_ENABLE(); { HAL_RCC_GPIOF_CLK_ENABLE(); /* USER CODE BEGIN UART4_Init */ HAL_RCC_GPIOH_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); /* USER CODE END UART4_Init */ HAL_RCC_GPIOB_CLK_ENABLE(); /* USER CODE BEGIN UART4_Init */ HAL_RCC_GPIOG_CLK_ENABLE(); /* USER CODE END UART4_Init */ HAL_RCC_GPIOD_CLK_ENABLE(); huart4.Instance = UART4; /*Configure GPIO pin Output Level */ huart4.Init.BaudRate = 19200; HAL_GPIO_WritePin(GPIOF, huart4.Init.WordLength UART_WORDLENGTH_8B; = = UART_RXFIFO_THRESHOLD_1_8; TIM_BREAK_DISABLE; sBreakDeadTimeConfig.AutomaticOutput = UART_TXFIFO_THRESHOLD_1_8; sBreakDeadTimeConfig.DeadTime = 0; sBreakDeadTimeConfig.BreakPolarity = UART_FIFOMODE_DISABLE; TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.BreakState = UART_PRESCALER_DIV1; = TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel huart4.Init.Prescaler = INPUT_Pin|GPIO_PIN_2, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ = 182 HAL_GPIO_WritePin(GPIOG, HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); ENA_UART_Pin|DISABLE5_Pin|DISABLE6_Pin| DISABLE7_Pin /* CẤU HÌNH PORT I/O: PF0 PF3 PF4 PF6 PF8 PF10 PF12 PF14PF15 */ |DISABLE8_Pin, GPIO_InitStruct.Pin GPIO_PIN_RESET); = GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PI /*Configure GPIO pin Output Level */ N_6 HAL_GPIO_WritePin(GPIOD, |GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_12|GPIO_ DISABLE1_Pin|DISABLE2_Pin|DISABLE3_Pin|DI PIN_14|GPIO_PIN_15; SABLE4_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Mode /*Configure GPIO pins : PE2 PE3 PE6 PE7 GPIO_MODE_ANALOG; PE8 PE10 PE14 PE15 GPIO_InitStruct.Pull = GPIO_NOPULL; PE0 PE1 */ HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); GPIO_InitStruct.Pin = = /*Configure GPIO pins : INPUT_Pin PF2 */ GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PI GPIO_InitStruct.Pin = INPUT_Pin|GPIO_PIN_2; N_7 GPIO_InitStruct.Mode = |GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_14|GPIO_ GPIO_MODE_OUTPUT_PP; PIN_15 GPIO_InitStruct.Pull = GPIO_NOPULL; |GPIO_PIN_0|GPIO_PIN_1; GPIO_InitStruct.Mode GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); /* CẤU HÌNH PORT I/O: PH0PH1PH2PH3PH4 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); PH5PH6PH7PH8 PH9 PH10 PH11PH12 */ /* CẤU HÌNH PORT I/O: PI8 PI10 PI11 PI2 GPIO_InitStruct.Pin PI3 PI4 PI5 PI6 */ GPIO_InitStruct.Pin = = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PI = GPIO_PIN_8| N_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6| GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_2 GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PI |GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PI N_10| GPIO_PIN_11|GPIO_PIN_12; N_6|GPIO_PIN_7; GPIO_InitStruct.Mode GPIO_InitStruct.Mode GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /*Configure GPIO pins : PA2 PA3 PA8 PA9 /*CẤU HÌNH PORT I/O: PC13 PC14 PC15 PC0 PA10 PA11 PA15 */ PC1 PC2 PC5 PC9 GPIO_InitStruct.Pin PC10 PC11 PC12 */ GPIO_InitStruct.Pin = = GPIO_MODE_ANALOG; = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PI = N_9 GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_ |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_15; PIN_0 GPIO_InitStruct.Mode |GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_5|GPIO_PI GPIO_MODE_ANALOG; N_9 GPIO_InitStruct.Pull = GPIO_NOPULL; |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Mode GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; = /*Configure GPIO pins : PB2 PB10 PB11 PB12 PB13 PB3 PB4 PB5 PB6 PB7 PB8 PB9 */ = 183 GPIO_InitStruct.Pin = GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_PIN_2|GPIO_PIN_10|GPIO_PIN_11|GPIO_P GPIO_InitStruct.Speed = IN_12|GPIO_PIN_13|GPIO_PIN_3| GPIO_PIN_4| GPIO_SPEED_FREQ_LOW; GPIO_PIN_5|GPIO_PIN_6| GPIO_PIN_7| HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); GPIO_PIN_8| GPIO_PIN_9; /*Configure GPIO pins : PH14 PH15 */ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Mode = GPIO_MODE_INPUT; /*Configure GPIO pins : PG0 PG1 PG3 PG4 GPIO_InitStruct.Pull = GPIO_NOPULL; PG5 PG7 PG8 PG9 HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); PG14 PG15 */ /*Configure GPIO pins : PI0 PI1 */ GPIO_InitStruct.Pin = GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PI GPIO_InitStruct.Mode = GPIO_MODE_INPUT; N_4|GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_8| GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_PIN_9|GPIO_PIN_14|GPIO_PIN_15; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; /*Configure GPIO pins GPIO_InitStruct.Pin HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); DISABLE3_Pin| DISABLE4_Pin; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; PD0 PD5 PD6 PD7 */ = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PI N_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14| GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_5|GPIO_PI N_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); } /* USER CODE BEGIN */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTy peDef *htim) { GPIO_InitStruct.Pull = GPIO_NOPULL; if HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); { GPIO_InitStruct.Pin = BUTTON_ACT_Pin; ((TIM_TypeDef GPIO_InitStruct.Mode = GPIO_MODE_INPUT; } &GPIO_InitStruct); ENA_UART_Pin DISABLE5_Pin DISABLE6_Pin DISABLE7_Pin = ENA_UART_Pin|DISABLE5_Pin| (htim- >Instance==htim3.Instance) HAL_GPIO_WritePin(GPIOF,GPIO_PIN_2,1); b++; htim3.Init.Period DISABLE6_Pin|DISABLE7_Pin|DISABLE8_Pin; GPIO_MODE_OUTPUT_PP; if { DISABLE8_Pin */ GPIO_InitStruct.Mode (0x40010000))- // Timer1 and Timer8 synchronization HAL_GPIO_Init(BUTTON_ACT_GPIO_Port, GPIO_InitStruct.Pin *) >CNT=((TIM_TypeDef *) (0x40010400))->CNT; GPIO_InitStruct.Pull = GPIO_PULLUP; : (htim- >Instance==htim1.Instance) /*Configure GPIO pin : BUTTON_ACT_Pin */ pins DISABLE1_Pin|DISABLE2_Pin| GPIO_InitStruct.Pull = GPIO_NOPULL; PD12 PD13 PD14 PD15 GPIO_InitStruct.Pin = GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; /*Configure GPIO pins : PD8 PD9 PD10 PD11 GPIO DISABLE1_Pin DISABLE2_Pin DISABLE3_Pin DISABLE4_Pin */ GPIO_InitStruct.Pull = GPIO_NOPULL; /*Configure : = = 1799; period=T_interrupt*T_timer_clock-1=20us*200e61=3999adc1=HAL_ADCEx_InjectedGetValue(&ha dc1,1);//Vc2 184 Vc2=0.0152992*(adc1-Vc2_offset); cos_theta=cos(theta_gc); adc2=HAL_ADCEx_InjectedGetValue(&hadc1,2); // reference signals //Vc1 Mag=5000*ma; Vc1=0.0156176*(adc2-Vc1_offset); if (regbank[0][23]==0)// islanding mode adc3=HAL_ADCEx_InjectedGetValue(&hadc2,1); { // I_load err_Ia=Ia-I_ref_a; IL=0.000354296*(adc3-IL_offset); err_Ib=-Ia-Ic-I_ref_b; adc4= HAL_ADCEx_InjectedGetValue(&hadc2,2); err_Ic=Ic-I_ref_c; adc5=HAL_ADCEx_InjectedGetValue(&hadc2,3); Va_ref=5000*(sin_theta); adc6=HAL_ADCEx_InjectedGetValue(&hadc3,1); Vb_ref=5000*(- //Vca 0.5*sin_theta+0.866025404*cos_theta); Vca=0.0320598*(adc6-Vca_offset); Vc_ref=5000*(-0.5*sin_theta- adc7=HAL_ADCEx_InjectedGetValue(&hadc3,2); 0.866025404*cos_theta); // Ic // *ĐIỀU KHIỂN ĐIỆN ÁP TỤ */ Ic=0.000354296*(adc7-Ic_offset); //Vdc_ref=40; adc8=HAL_ADCEx_InjectedGetValue(&hadc3,3); err_Vdc=Vdc_ref-(Vc1+Vc2); //Vab Duty=Duty_old+(Kp_Vdc+Ki_Vdc)*err_Vdc- Vab=0.0301928*(adc8-Vab_offset); Kp_Vdc*err_Vdc_old; adc9=HAL_ADCEx_InjectedGetValue(&hadc3,4); if (Duty>1) Duty=1; //Ia if (Dutyf_max) up=0; err_Vdc_old=err_Vdc; Duty=0; else if (count1delta_f2) up2=0; D2=(int)(Duty*5000); else if (del_t21) Iac_c=1; theta_g+=delta_theta; if (Iac_ctwo_pi) theta=theta-two_pi; //ma=err_Iac*Kp_Iac; if(theta_g>two_pi) theta_g=theta_g-two_pi; if (ma>1) if(theta_gc>two_pi) theta_gc=theta_gc-two_pi; if (ma1) Duty=1; if (Duty0) D1=(int)(10000-Duty*5000); { D2=(int)(Duty*5000); HAL_TIM_SET_COMPARE(&htim8,TIM_CHA //* KẾT THÚC ĐIỀU KHIỂN ĐIỆN ÁP TỤ*/ NNEL_1,(int)Vb_ref);//Bs1s3 //Iac regulator/////////////////////////////////////////// HAL_TIM_SET_COMPARE(&htim1,TIM_CHA err_Iac=Iac_ref-Ia_m; NNEL_3,(int)(Vtrim));//Bs2s4 Iac_c=Iac_c_old+(Kp_Iac+Ki_Iac)*err_Iac- HAL_TIM_SET_COMPARE(&htim8,TIM_CHA Kp_Iac*err_Iac_old; NNEL_1,(int)b13);//Bs1s3 if (Iac_c>40) Iac_c=40; } if (Iac_cCR1; NNEL_3,(int)b24);//Bs2s4 HAL_TIM_SET_COMPARE(&htim2,TIM_CHA } NNEL_1,D1); if (Vc_ref>0) HAL_TIM_SET_COMPARE(&htim2,TIM_CHA { NNEL_2,D2); HAL_TIM_SET_COMPARE(&htim1,TIM_CHA if (Va_ref>0) NNEL_2,(int)Vc_ref);//Cs1s3 { HAL_TIM_SET_COMPARE(&htim1,TIM_CHA HAL_TIM_SET_COMPARE(&htim8,TIM_CHA NNEL_1,(int)(Vtrim));//Cs2s4 NNEL_3,(int)Va_ref);//As1s3 //if (Va_ref>Vcarr1) HAL_TIM_SET_COMPARE(&htim1,TIM_CHA {out[0]=1; } else {out[0]=0; NNEL_2,(int)c13);//Cs1s3 } else 186 { IL_f=IL*0.001+IL_old*0.999;IL_old=IL_f; HAL_TIM_SET_COMPARE(&htim1,TIM_CHA max_scale=two_pi; NNEL_1,(int)(5000+Vc_ref));//Cs2s4 theta=two_pi; HAL_TIM_SET_COMPARE(&htim1,TIM_CHA DAC=(uint16_t)(err_Ia*2047.0/max_scale+2047); NNEL_2,(int)0);//Cs1s3 DAC2=(uint16_t)(I_ref*2047.0/max_scale+2047); HAL_TIM_SET_COMPARE(&htim1,TIM_CHA DAC2=(uint16_t)(Ia*2047.0/max_scale+2047); NNEL_1,(int)(c24));//Cs2s4 //err_Iac } HAL_DAC_SetValue(&hdac1, ////////////////////////////////////////// if (Vab>0) { if DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC); (Vab>Vab_max) //max 4096 Vab_max=Vab; Vab_status=1;countvab=0;} HAL_DAC_Start(&hdac1, DAC_CHANNEL_1); if (Vab0) { if (Vca>Vca_max) HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); Vca_max=Vca; Vca_status=1;countvca=0;} //DAC_get=HAL_DAC_GetValue(&hdac1, if (Vca0) { if (Ia>Ia_max) Ia_max=Ia; uint16_t crc_cal(uint8_t* data, int num) Ia_status=1;countia=0;} if (Ia9)) uint16_t crc; {Ia_m=Ia_max;Ia_max=0;Ia_status=0;}} crc = 0xffff; if (Ic>0) for (j=0; j < num; j++) { if (Ic>Ic_max) Ic_max=Ic; { Ic_status=1;countic=0;} if (Ic> 1; filter AB crc = crc ^ 0xa001; if (Vab_f> 1); Im=k*IL_f; } I_ref_a=-Im*sin_theta; } I_ref_b=-Im*(- crc = (uint16_t)(((crc > 8)) & 0.5*sin_theta+0.866025404*cos_theta); 0xffff); I_ref_c=-Im*(-0.5*sin_theta0.866025404*cos_theta); return crc; } 187 uint8_t enable_tx = 0; uint8_t rs485_state = 0; cmd = input_data[1] = rx485_buff[0]; uint8_t cmd; uint8_t High_Address; cmd; uint8_t Low_Address; rs485_state = 2; uint8_t High_Number; break; uint8_t Low_Number; case 2: uint8_t CRC_H; High_Address uint8_t CRC_L; rx485_buff[0]; uint16_t DATA_CRC; input_data[2] = High_Address; uint16_t MyCRC; rs485_state = 3; char valid_data[6]; break; uint8_t input_data[6]; case 3: void Low_Address = rx485_buff[0]; HAL_UART_RxCpltCallback(UART_HandleType input_data[3] = Low_Address; Def *huart) rs485_state = 4; { break; /* Prevent unused argument(s) compilation warning */ case 4: High_Number = rx485_buff[0]; /* NOTE : This function should not be modified, input_data[4] = High_Number; when the callback is needed, rs485_state = 5; the HAL_UART_RxCpltCallback can be break; implemented in the user file case 5: */ Low_Number = rx485_buff[0]; char i; input_data[5] = Low_Number; if (huart->Instance == UART4) //current rs485_state = 6; UART break; { case 6: switch(rs485_state) CRC_H = rx485_buff[0]; { rs485_state = 7; case 0: break; if (rx485_buff[0] == ID) case 7: CRC_L = rx485_buff[0]; { DATA_CRC = CRC_H*256 + CRC_L; rs485_state = 1; MyCRC = crc_cal(input_data,6); input_data[0] = ID; if(MyCRC == DATA_CRC) } { else for( i=0; i