1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

261 1 0

Đ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 261
Dung lượng 12,89 MB

Nội dung

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 TÓM TẮT LUẬN ÁN TIẾN SĨ Ngành: Kỹ thuật điều khiển tự động hóa Mã số: 9520216 Thành phố Hồ Chí Minh, tháng 11 năm 2022 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 TĨM TẮT LUẬN ÁN TIẾN SĨ 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Ũ ………… Thành phố Hồ Chí Minh, tháng 11 năm 2022 MỞ ĐẦU Lý chọn đề tài Điều khiển thích nghi phương pháp điều khiển sử dụng điều khiển phải thích ứng với hệ thống điều khiển với thông số thay đổi, có điều kiện đầu khơng chắn Điều khiển thích nghi khác với điều khiển khác chỗ khơng cần thông tin tiên nghiệm giới hạn thông số không chắn thời gian biến đổi [1] Ngược lại, kỹ thuật điều khiển kinh điển thường phải bảo đảm có thay đổi thay đổi phải nằm giới hạn cho trước, không cần phải thay đổi luật điều khiển, điều khiển thích nghi lại liên quan tới việc thay đổi luật điều khiển [2], [3] Điều khiển lọc tích cực để phát huy tối đa chức Akagi phát minh vào năm 1983 phát triển liên tục đến [4]–[6] Đặc điểm việc lọc sóng hài lưới điện điều khiển lọc tích cực tác dụng tải phi tuyến nguồn điện ba pha không cân Các đặc điểm tải phi tuyến nguồn không cân hệ thống lượng điện thường phát sinh khơng có quy luật nên địi hỏi q trình điều khiển phải mang tính thích ứng cao Các phát sinh không mong muốn tải phi tuyến gây ngày nhiều, làm giảm chất lượng điện theo tiêu chuẩn IEC (International Electrotechnical Commission) [7], [8], làm giảm số chất lượng hệ thống điện Sự biến đổi liên tục tải không lý tưởng ảnh hưởng xấu đến hiệu sử dụng thiết bị điện giảm hiệu cung cấp lượng điện Một phương án hiệu để xử lý vấn đề sử dụng lọc tích cực (Active Power Filter – APF) cho hệ thống điện pha [9]–[11] Lọc sóng hài lưới điện ba pha sử dụng lọc nguồn tích cực (APF) giải pháp ưu tiên thay cho lọc thụ động cũ [12]–[14] Các phương pháp điều khiển APF phát triển qua nhiều giai đoạn, thời kỳ này, với phát triển lý thuyết điều khiển thơng minh, với sức mạnh tích hợp khả tính tốn nhanh vi xử lý/vi điều khiển, việc thực hóa lưu đồ giải thuật thuật tốn điều khiển thơng minh vào chương trình vi điều khiển khả thi mơ hình thực nghiệm ứng dụng cho APF [15]–[17] Để điều khiển APF làm nhiệm vụ xử lý tác hại khơng mong muốn hệ thống, cần có phương án mặt cấu hình hệ thống để nâng cao hiệu lọc nguồn giải thuật điều khiển để APF tự điều chỉnh thân thích ứng với phát sinh khơng mong muốn khơng mang tính quy luật xảy hệ thống điện ba pha [18], [19] Tuy vậy, hướng nghiên cứu lọc tích cực ứng dụng điều khiển thích nghi chủ yếu tập trung vào giảm tổng méo hài THD [20], [21], chưa quan tâm đến chất lượng điều khiển, độ vọt lố, thời gian lên, thời gian độ trình nối lưới lọc nguồn tích cực, tình hình ứng dụng lọc vào điều khiển chất lượng điện hệ thống lượng điện tái tạo; Các nghiên cứu đề cập đến cân điện áp tụ [22], [23], chưa phân tích rõ tầm quan trọng điện áp tụ liên kết (DC-link voltage) việc tạo tín hiệu bù hài chất lượng; Thêm nữa, vấn đề hiệu suất sử dụng lượng (Power Factor – PF) [24], [25] cần nhấn mạnh tầm hoạt động lưới (online) lọc nguồn tích cực nhằm phát huy tối đa hiệu lọc, hệ thống không đơn nhiệm vụ kiểm soát chất lượng hệ thống hoạt động ổn định [26]–[28], tình hình tải sử dụng lượng điện ln địi hỏi độ ổn định cao Trong tình hình nguồn lượng tái tạo cần kiểm soát hài hỗ trợ nối lưới; Các khu công nghiệp sử dụng tải bán dẫn, loại tải gây hài dòng điện bậc cao lớn; Nhu cầu nguồn điện chất lượng cao cho tải nhạy cảm biến động lượng điện, lọc nguồn tích cực cần nâng cao tính hiệu cần thiết phải nghiên cứu tốn nâng cao tính thích nghi lọc tích cực để ổn định chất lượng điện hệ thống nguồn – tải lý tác giả chọn hướng nghiên cứu, thiết kế nội dung luận án tiến sĩ tốn điều khiển lọc nguồn tích cực ba pha 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 pha – Advanced adaptive control strategy of three-phase shunt active power filter for power quality improvement” Với định hướng nghiên cứu này, tập thể hướng dẫn Nghiên cứu sinh tập trung vào vấn đề như: Cải tiến điều khiển hệ thống lọc nguồn tích cực (Active Power Filter – APF) theo hướng thích nghi (sử dụng phương pháp điều khiển thông minh, đại, kết hợp với điều khiển truyền thống PI/PID); Cải tiến đáp ứng nối lưới để thích ứng nhanh (với biến đổi tải, phát sinh hài, cân pha); Chất lượng điều khiển (vọt lố tín hiệu bù hài (Percent of Overshoot – POT), thời gian lên, thời gian độ); Nâng cao điều khiển chất lượng điện (giảm độ tổng méo hài (Total Harmonic Distortion – THD); Nâng cao hiệu suất cung cấp lượng (Power Factor – PF)) Tính cấp thiết đề tài Các thiết bị điện đại cần cung cấp nguồn lượng ổn định dung lượng đặc tính dịng điện, điện áp Việc giảm thiểu ổn định số tổng méo hài THD hệ thống theo hướng tự động, “thích nghi nhanh” để đảm bảo cho độ ổn định làm việc liên tục tăng tuổi thọ thiết bị cần thiết Bộ lọc nguồn tích cực APF (Active Power Filter) với đặc tính đáp ứng nhiệm vụ triệt tiêu nhiều tần số sóng hài bậc cao, kết hợp với lọc thụ động, thay hẳn lọc nguồn thụ động hệ thống lọc nguồn trước Mục tiêu nghiên cứu Mục tiêu đề tài áp dụng kỹ thuật điều khiển thích nghi để điều khiển lọc tích cực mắc song song ba pha (SAPF - Shunt Active Power Filter) nhằm nâng cao hệ số công suất (PFC) làm giảm tối thiểu độ tổng méo hài (THD) cho hệ thống lọc tích cực, cho việc xác lập thông số ổn định hệ thống nguồn ba pha diễn nhanh chóng bất chấp biến động liên tục tải phi tuyến Đối tượng nghiên cứu Để đạt mục tiêu nghiên cứu, luận án tập trung vào đối tượng nghiên cứu lọc nguồn tích cực ba pha mắc song song với giải thuật điều khiển hướng thích nghi hội tụ nhanh Phạm vi nghiên cứu đề tài - Đề tài tập trung nghiên cứu phát triển giải pháp điều khiển thích nghi tác dụng tải phi tuyến cho lọc nguồn tích cực ba pha mắc song song Xây dựng mơ hình thực nghiệm giới hạn cơng suất tải kW, tối ưu chất lượng khiển (xét tối ưu độ vọt lố, thời gian lên (rising time) thời gian độ), độ tổng méo hài dòng điện THDi ≤ 6%; điện áp nguồn đạt dạng gần sin, độ tổng méo hài điện áp THDv ≤ 6%; hệ số công suất ≈ (PF ≥ 0.95, điện áp nguồn dòng điện nguồn gần pha) Phương pháp nghiên cứu - Sử dụng phương pháp nghiên cứu truyền thống như: tham khảo tài liệu, tham gia thảo luận khoa học hội nghị khoa học, xây dựng đề cương nghiên cứu, xây dựng mô hình, tính tốn lý thuyết, xây dựng mơ hình mơ xây dựng thực nghiệm Áp dụng chủ yếu Chương Chương - Thử nghiệm, chạy chương trình với tham số thay đổi, xử lý liệu đầu vào, thống kê kết đầu với hỗ trợ phần mềm Microsoft Excel, Mendeley Áp dụng chủ yếu Chương - Mô phần mềm chuyên dụng PSIM 9.x Matlab, áp dụng Chương 2, Chương Chương Nhiệm vụ nghiên cứu - Khảo sát đánh giá nghiên cứu điều khiển lọc tích cực ba pha, hướng điều khiển thích nghi trình bày Chương - Giải tích xây dựng mơ hình mơ để khảo sát, đánh giá tác động lọc nguồn tích cực lên hệ thống điện ba pha có loại tải khác trình bày Chương Chương - Xây dựng mơ hình lọc nguồn tích cực ba pha hướng thích nghi với biến động tải phi tuyến Trình bày Chương - Phát triển giải pháp điều khiển thích nghi ứng dụng điều khiển lọc tích cực ba pha Trình bày Chương Kết đạt - Giải tích xây dựng mơ lọc nguồn tích cực ba pha - Đề xuất giải pháp ổn định điện áp tụ liên kết Cdc dùng điều khiển Fuzzy-PI - Xây dựng mơ hình thực nghiệm lọc nguồn tích cực pha công suất kW - Đề xuất giải pháp nâng cao hệ số công suất sử dụng thuật toán điều khiển pha - Đề xuất giải thuật nối lưới trì thơng số chất lượng hệ thống điện - Đề xuất giải pháp nối lưới giảm tổng méo hài động tình xảy tuột áp méo hài cân lưới - Đề xuất giải pháp thích nghi cho lọc tích cực ba pha tác động tải phi tuyến sử dụng giải thuật bù dịng điện dự đốn Ý nghĩa khoa học thực tiễn đề tài Điều khiển thích nghi ứng dụng việc thiết kế chế tạo điều khiển lọc tích cực ba pha có nhiều ưu điểm để tối ưu hóa hoạt động lọc tích cực, từ nâng cao hiệu hoạt động lọc tích cực, nối lưới khơng gián đoạn giảm THD động trình nối lưới Giải thuật bù dịng điện thích nghi dự đốn để giải suy hao biên độ phần cứng hệ thống trễ pha thời gian tính tốn giải thuật thực mơ hình mơ mơ hình thực nghiệm cho kết phù hợp với mục tiêu nghiên cứu tăng tính khách quan luận án Kết nghiên cứu luận án áp dụng vào điều khiển chất lượng điện cho hệ thống lượng tái tạo, hỗ trợ hòa lưới cho trạm lượng dự phòng, lượng xanh Nghiên cứu luận án đóng góp cho phát triển biến đổi lượng sử dụng ngành công nghiệp ô – tô điện, dùng cho nhiều mục tiêu khác xây dựng định hướng nghiên cứu, tài liệu giảng dạy chế tạo thiết bị để ứng dụng thực tiễn lĩnh vực thiết kế nguồn điện điều khiển chất lượng điện 10 Bố cục luận án Mở đầu Phần Mở đầu trình bày, tác giả đề cập đến lý dẫn đến chọn hướng nghiên cứu, mô tả đối tượng, phạm vi phương pháp nghiên cứu Luận án tổ chức thành chương tương ứng với mục tiêu, nhiệm vụ kết nghiên cứu, cụ thể sau: Chương Tổng quan điều khiển thích nghi cho lọc nguồn tích cực pha Chương Xây dựng mơ hình mơ hệ thống điện ba pha tác động tải lọc nguồn tích cực Chương Cải tiến hiệu APF sử dụng điều khiển Fuzzy-PI Chương Giải pháp điều khiển thích nghi cho lọc tích cực ba pha Kết luận hướng phát triển đề tài CHƯƠNG TỔNG QUAN VỀ ĐIỀU KHIỂN THÍCH NGHI CHO BỘ LỌC NGUỒN TÍCH CỰC PHA 1.1 Bộ lọc nguồn tích cực Các lọc tích cực vai trò nâng cao chất lượng điện phân chia theo dạng cấu trúc Hình 1.1 Hệ thống lọc tích cực mắc song song (Shunt Active Power Filter-SAPF) gồm phần chính: (1) phần cơng suất bao gồm khóa đóng ngắt bán dẫn tụ C; (2) phần điều chế (PWM Control) (3) phần điều khiển lọc (Active Filter Controller), phần điều khiển lọc (3) có điều khiển điện áp tụ Vdc Hình 1.2 mơ tả dạng sóng hài (iFa), tải chứa hài (iLa), dòng điện sau lọc hài (iga) Bộ lọc tích cực (APF) APF nối tiếp APF song song Bộ nghịch lưu nguồn dòng (CSI) Bộ nghịch lưu nguồn áp (VSI) APF song song + APF nối tiếp APF lai ghép APF nối tiếp + Lọc thụ động song song APF song song + Lọc thụ động song song APF mắc nối tiếp với mạch lọc thụ động song song Hình 1.1 Các dạng mạch lọc tích cực Hình 1.2 Dịng điện nguồn, dòng điện tải dòng bù hệ thống điện Hình 1.2 mơ tả dạng sóng dịng điện tải pha a: iLa; dòng điện bù lên lưới điện lọc pha a: iFa dòng điện nguồn điện lưới iga Trong hầu hết phương trình luận án, để đơn giản việc biểu diễn công thức tốn, tác giả thường dùng đại diện dịng điện tải iL, dòng điện bù iF dòng điện nguồn điện lưới ig Chỉ số pha γ dùng phân tích thành phần tín hiệu giải thuật dự đoán igγ (t) = iLγ(t) – iFγ(t), với γ = a, b, c ig iL = - ig AC Source Udc iF Non Linear Load L C { iL (-) Udc Control iF iL VSI Udc* (+) (1.1) ieF PWM Control v iF* Active Filter Controller Active Power Filter Hình 1.3 Sơ đồ khối nguyên lý lọc nguồn tích cực Nhận xét chung hệ thống sử dụng mạch lọc tích cực: Xét nguyên lý hệ thống lọc nguồn tích cực Hình 1.3 gồm khối chính, (1) nguồn ba pha với đặc tính sine đối xứng tần số 50Hz điều kiện thường; (2) tải tổng quát với đặc tính như: không tải, tải trở, tải trở kháng RL đối xứng, tải trở kháng RL không đối xứng tải phi tuyến; (3) lọc tích cực – Active Power Filter – APF có nhiệm vụ triệt tiêu thành phần sóng hài khơng mong muốn phát sinh tải phi tuyến, nâng cao chất lượng điện hệ thống trường hợp nguồn không cân 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 Công thức (1.2) cơng thức tổng qt biểu diễn hệ thống ba pha theo thời gian, vậy, dòng điện tham chiếu ba pha hệ thống tính tốn Hình 1.4, mơ tả nguyên lý giải tích mạch lọc dựa lý thuyết cơng suất tức thời cịn gọi phương pháp p-q đưa Akagi [1]–[5] iF  (t ) = iL (t ) − ig (t );  = a, b, c ua ub uc ia ib ic abc p0 u0 LPF u αβ abc u p p0 + p iF*  HPF αβ iF*  abc q i * iFa * iFb i0 i αβ (1.2) * iFc iF*  p pq Hình 1.4 Sơ đồ nguyên lý phương pháp p-q Trong * iFa , * iFb , * iFc dòng điện tham chiếu dòng điện ba pha iFa, iFb, iFc xác định thông qua hệ quy chiếu quy đổi a-b-c sang hệ trục α-β Trong hệ thống điện ba pha, tổng dịng điện ba pha 0, thì:   = a ,b , c I = (1.3) Lf d iFq = xq − R f iFq − e L f iFq − vFq dt (1.4) Lf d iFd = xd − R f iFd − e L f iFd − vFd dt (1.5) d U dc = ( f d iFd + f q iFq ) dt (1.6) Cdc vFq = f q U dc (1.7) vFd = f d U dc (1.8) Chọn vị trí trục d hệ quy chiếu d-q trùng với giá trị cực đại dương pha a nguồn điện ba pha, tức xd = vm Lúc thành phần trục q quy đổi điện áp cung cấp không, xq = Như thành phần dòng điện tham chiếu sau: * (1.9) iFd = i1 − idL + idc * iFq = −iLq (1.10) Trong idc ngõ điều khiển điện áp DC link, iLd iLq thành phần dòng điện tải quy đổi công suất thực công suất phản kháng tương ứng Lưới điện đáp ứng lượng công suất phản kháng cần thiết cho tải, nên dòng điện tham chiếu APF khơng bao gồm thành phần dịng điện hài bậc hai, tức iFq = 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 1.3.1 Chất lượng điện Để đáng giá độ méo dòng điện độ méo điện áp so với dạng sóng chuẩn ta dựa hệ số méo dạng dòng điện hệ số méo dạng điện áp, cơng thức: Hệ số méo hài dịng điện (a) hệ số méo hài điện áp (b):   THDi =  I( ) n=2 I (1) n THDu = (a) U ( ) n=2 (1.11) n U (1) (b) đó: I(1), biên độ dịng điện thành phần hài I(n) biên độ dòng điện thành phần hài bậc n U(1) biên độ điện áp thành phần hài U(n) biên độ điện áp thành phần hài bậc n 1.3.2 Hiệu lượng điện Công suất tổng hợp cho loại công suất gọi công suất biểu kiến S, biểu diễn Hình 1.5, đơn vị VA KVA, cơng suất có mối quan hệ đẳng thức: S2 = P2 + Q2 S (1.12) Q P Hình 1.5 Tam giác cơng suất 199 sConfigOC.OCFastMode = } TIM_OCFAST_DISABLE; sConfigOC.OCIdleState /* USER CODE BEGIN TIM8_Init */ = /* USER CODE END TIM8_Init */ TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState HAL_TIM_MspPostInit(&htim8); = } TIM_OCNIDLESTATE_RESET; if /* @brief TIM15 Initialization Function (HAL_TIM_PWM_ConfigChannel(&htim8, * @param None &sConfigOC, TIM_CHANNEL_1) != HAL_OK) * @retval None */ { static void MX_TIM15_Init(void) Error_Handler(); { } /* USER CODE BEGIN TIM15_Init */ if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) /* USER CODE END TIM15_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = { {0}; Error_Handler(); TIM_MasterConfigTypeDef sMasterConfig = {0}; } TIM_OC_InitTypeDef sConfigOC = {0}; if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; { /* USER CODE BEGIN TIM15_Init */ Error_Handler(); /* USER CODE END TIM15_Init */ } 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 if sBreakDeadTimeConfig.Break2Filter = 0; = if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, { (HAL_TIM_ConfigClockSource(&htim15, &sClockSourceConfig) != HAL_OK) { TIM_AUTOMATICOUTPUT_DISABLE; &sBreakDeadTimeConfig) != HAL_OK) Error_Handler(); } if (HAL_TIM_PWM_Init(&htim15) != HAL_OK) { Error_Handler(); = = TIM_CLOCKSOURCE_INTERNAL; TIM_BREAK2POLARITY_HIGH; 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; Error_Handler(); 200 } { sMasterConfig.MasterOutputTrigger = Error_Handler(); TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode } = /* USER CODE BEGIN TIM15_Init */ TIM_MASTERSLAVEMODE_DISABLE; /* USER CODE END TIM15_Init */ if HAL_TIM_MspPostInit(&htim15); (HAL_TIMEx_MasterConfigSynchronization(&hti } m15, &sMasterConfig) != HAL_OK) /* @brief UART4 Initialization Function */ { static void MX_UART4_Init(void) Error_Handler(); { } /* USER CODE BEGIN UART4_Init */ sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity /* USER CODE END UART4_Init */ = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity /* USER CODE END UART4_Init */ = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = = = huart4.Init.StopBits = UART_STOPBITS_1; huart4.Init.Parity = UART_PARITY_NONE; = TIM_OCNIDLESTATE_RESET; if huart4.Init.WordLength UART_WORDLENGTH_8B; TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState huart4.Instance = UART4; huart4.Init.BaudRate = 19200; TIM_OCFAST_DISABLE; sConfigOC.OCIdleState /* USER CODE BEGIN UART4_Init */ huart4.Init.Mode = UART_MODE_TX_RX; 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 } sBreakDeadTimeConfig.OffStateRunMode UART_ONE_BIT_SAMPLE_DISABLE; = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = = = = = = UART_RXFIFO_THRESHOLD_1_8; huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; TIM_BREAKPOLARITY_HIGH; if (HAL_UART_Init(&huart4) != HAL_OK) sBreakDeadTimeConfig.BreakFilter = 0; { = TIM_AUTOMATICOUTPUT_DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim15, &sBreakDeadTimeConfig) != HAL_OK) huart4.Init.TXFIFOThreshold huart4.Init.RXFIFOThreshold TIM_BREAK_DISABLE; sBreakDeadTimeConfig.AutomaticOutput huart4.Init.FIFOMode UART_TXFIFO_THRESHOLD_1_8; sBreakDeadTimeConfig.DeadTime = 0; sBreakDeadTimeConfig.BreakPolarity = UART_FIFOMODE_DISABLE; TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.BreakState huart4.Init.Prescaler UART_PRESCALER_DIV1; TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel = Error_Handler(); } /* USER CODE BEGIN UART4_Init */ /* USER CODE END UART4_Init */ = 201 } GPIO_InitStruct.Pin = GPIO_PIN_8| /* @brief GPIO Initialization Function */ GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_2 static void MX_GPIO_Init(void) |GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PI { N_6|GPIO_PIN_7; GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Mode /* GPIO Ports Clock Enable */ = GPIO_MODE_ANALOG; HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_RCC_GPIOI_CLK_ENABLE(); HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); HAL_RCC_GPIOC_CLK_ENABLE(); /*CẤU HÌNH PORT I/O: PC13 PC14 PC15 PC0 HAL_RCC_GPIOF_CLK_ENABLE(); PC1 PC2 PC5 PC9 HAL_RCC_GPIOH_CLK_ENABLE(); PC10 PC11 PC12 */ HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_ HAL_RCC_GPIOG_CLK_ENABLE(); PIN_0 HAL_RCC_GPIOD_CLK_ENABLE(); |GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_5|GPIO_PI /*Configure GPIO pin Output Level */ N_9 HAL_GPIO_WritePin(GPIOF, |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; INPUT_Pin|GPIO_PIN_2, GPIO_PIN_RESET); GPIO_InitStruct.Mode /*Configure GPIO pin Output Level */ = = GPIO_MODE_ANALOG; HAL_GPIO_WritePin(GPIOG, GPIO_InitStruct.Pull = GPIO_NOPULL; ENA_UART_Pin|DISABLE5_Pin|DISABLE6_Pin| HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); DISABLE7_Pin /* CẤU HÌNH PORT I/O: PF0 PF3 PF4 PF6 |DISABLE8_Pin, PF8 PF10 PF12 PF14PF15 */ GPIO_PIN_RESET); GPIO_InitStruct.Pin /*Configure GPIO pin Output Level */ GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PI HAL_GPIO_WritePin(GPIOD, N_6 = DISABLE1_Pin|DISABLE2_Pin|DISABLE3_Pin|DI |GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_12|GPIO_ SABLE4_Pin, GPIO_PIN_RESET); PIN_14|GPIO_PIN_15; /*Configure GPIO pins : PE2 PE3 PE6 PE7 GPIO_InitStruct.Mode PE8 PE10 PE14 PE15 GPIO_MODE_ANALOG; PE0 PE1 */ GPIO_InitStruct.Pin = GPIO_InitStruct.Pull = GPIO_NOPULL; = HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PI /*Configure GPIO pins : INPUT_Pin PF2 */ N_7 GPIO_InitStruct.Pin = INPUT_Pin|GPIO_PIN_2; |GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_14|GPIO_ GPIO_InitStruct.Mode PIN_15 = GPIO_MODE_OUTPUT_PP; |GPIO_PIN_0|GPIO_PIN_1; GPIO_InitStruct.Mode GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; = GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* CẤU HÌNH PORT I/O: PH0PH1PH2PH3PH4 /* CẤU HÌNH PORT I/O: PI8 PI10 PI11 PI2 PI3 PI4 PI5 PI6 */ PH5PH6PH7PH8 PH9 PH10 PH11PH12 */ GPIO_InitStruct.Pin GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PI = 202 N_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6| N_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14| GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PI GPIO_PIN_15|GPIO_PIN_0|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_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /*Configure GPIO pin : BUTTON_ACT_Pin */ /*Configure GPIO pins : PA2 PA3 PA8 PA9 GPIO_InitStruct.Pin = BUTTON_ACT_Pin; PA10 PA11 PA15 */ GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pin = GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_8|GPIO_PI HAL_GPIO_Init(BUTTON_ACT_GPIO_Port, N_9 &GPIO_InitStruct); |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_15; GPIO_InitStruct.Mode /*Configure GPIO pins : ENA_UART_Pin = DISABLE5_Pin DISABLE6_Pin DISABLE7_Pin GPIO_MODE_ANALOG; DISABLE8_Pin */ GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ENA_UART_Pin|DISABLE5_Pin| /*Configure GPIO pins : PB2 PB10 PB11 PB12 DISABLE6_Pin|DISABLE7_Pin|DISABLE8_Pin; PB13 PB3 PB4 PB5 GPIO_InitStruct.Mode PB6 PB7 PB8 PB9 */ = GPIO_MODE_OUTPUT_PP; 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.Pin GPIO_InitStruct.Pull = GPIO_NOPULL; = 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 DISABLE1_Pin DISABLE2_Pin DISABLE3_Pin DISABLE4_Pin */ GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); DISABLE3_Pin| DISABLE4_Pin; = DISABLE1_Pin|DISABLE2_Pin| GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; /*Configure GPIO pins : PD8 PD9 PD10 PD11 GPIO_InitStruct.Pull = GPIO_NOPULL; PD12 PD13 PD14 PD15 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; PD0 PD5 PD6 PD7 */ GPIO_InitStruct.Pin : = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PI HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); } 203 /* USER CODE BEGIN */ if (del_t2>delta_f2) up2=0; void else if (del_t2Instance==htim1.Instance) Vbn = (-Vca - 2*Vab)/3.0; { ((TIM_TypeDef Vcn = (2*Vca + Vab)/3.0; *) (0x40010000))- Ib=-Ia-Ic; >CNT=((TIM_TypeDef *) (0x40010400))->CNT; theta+=delta_theta; // Timer1 and Timer8 synchronization theta_g+=delta_theta; } theta_gc=theta_g+0.31415926; if (htim- theta_gc=theta_g+phase_comp; >Instance==htim3.Instance) if(theta>two_pi) theta=theta-two_pi; { if(theta_g>two_pi) theta_g=theta_g-two_pi; HAL_GPIO_WritePin(GPIOF,GPIO_PIN_2,1); if(theta_gc>two_pi) b++; theta_gc=theta_gc-two_pi; htim3.Init.Period = 1799; if(theta_g1) Duty=1; //Ia if (Dutyf_max) up=0; err_Vdc_old=err_Vdc; else if (count11) Iac_c=1; NNEL_1,D1); if (Iac_c0) //ma=err_Iac*Kp_Iac; { if (ma>1) HAL_TIM_SET_COMPARE(&htim8,TIM_CHA if (maVcarr1) ma=0; {out[0]=1; } else {out[0]=0; Va_ref=5000*ma*(sin_theta)- } err_Ia*Kp_Iac; HAL_TIM_SET_COMPARE(&htim8,TI Vb_ref=5000*ma*(- M_CHANNEL_2, (int)(Vtrim)); //As2s4 0.5*sin_theta+0.866025404*cos_theta)- HAL_TIM_SET_COMPARE(&htim8,TI err_Ib*Kp_Iac; M_CHANNEL_3,(int)a13);//As1s3 Vc_ref=5000*ma*(-0.5*sin_theta- } 0.866025404*cos_theta)-err_Ic*Kp_Iac; else /* { Va_ref=Mag*Van; HAL_TIM_SET_COMPARE(&htim8,TIM_CHA Vb_ref=Mag*Vbn; NNEL_2,(int)(5000+Va_ref));//As2s4 Vc_ref=Mag*Vcn; Va_ref>(1-Vcarr1)) {out[1]=0; } else {out[1]=1;} //Vdc regulator/////////////////////////////////////////// err_Vdc=Vdc_ref-(Vc1+Vc2); //if (- HAL_TIM_SET_COMPARE(&htim8,TIM_CHA NNEL_3,(int)0);//As1s3 Duty=Duty_old+(Kp_Vdc+Ki_Vdc)*err_Vdc- HAL_TIM_SET_COMPARE(&htim8,TIM_CHA Kp_Vdc*err_Vdc_old; NNEL_2,(int)(a24));//As2s4 if (Duty>1) Duty=1; if (Duty0) Duty_old=Duty; { err_Vdc_old=err_Vdc; HAL_TIM_SET_COMPARE(&htim8,TIM_CHA D1=(int)(10000-Duty*5000); NNEL_1,(int)Vb_ref);//Bs1s3 D2=(int)(Duty*5000); HAL_TIM_SET_COMPARE(&htim1,TIM_CHA //* KẾT THÚC ĐIỀU KHIỂN ĐIỆN ÁP TỤ*/ NNEL_3,(int)(Vtrim));//Bs2s4 //Iac regulator/////////////////////////////////////////// HAL_TIM_SET_COMPARE(&htim8,TIM_CHA err_Iac=Iac_ref-Ia_m; NNEL_1,(int)b13);//Bs1s3 Iac_c=Iac_c_old+(Kp_Iac+Ki_Iac)*err_Iac- } Kp_Iac*err_Iac_old; else if (Iac_c>40) { Iac_c=40; 205 HAL_TIM_SET_COMPARE(&htim1,TIM_CHA { if NNEL_3,(int)(5000+Vb_ref));//Bs2s4 Ic_status=1;countic=0;} HAL_TIM_SET_COMPARE(&htim8,TIM_CHA if (IcIc_max) Ic_max=Ic; countic++;if ((Ic_status==1)&&(countic>9)) HAL_TIM_SET_COMPARE(&htim1,TIM_CHA {Ic_m=Ic_max;Ic_max=0;Ic_status=0;}} NNEL_3,(int)b24);//Bs2s4 ////////////////////////////////////////////////////////// } Vab_f=Vab*0.2+Vab_old*0.8;Vab_old=Vab_f;// if (Vc_ref>0) filter AB { if (Vab_f0) { if HAL_DAC_SetValue(&hdac1, (Vab>Vab_max) DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC); Vab_max=Vab; Vab_status=1;countvab=0;} //max 4096 if (Vab0) { if (Vca>Vca_max) DAC_ALIGN_12B_R,DAC2); //max 4096 Vca_max=Vca; Vca_status=1;countvca=0;} HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); if (Vca0) { if (Ia>Ia_max) Ia_max=Ia; //////////////////////////////////////// Ia_status=1;countia=0;} if (Ia9)) uint16_t crc_cal(uint8_t* data, int num) { uint16_t i,j; {Ia_m=Ia_max;Ia_max=0;Ia_status=0;}} uint16_t crc; if (Ic>0) crc = 0xffff; for (j=0; j < num; j++) 206 { if (huart->Instance == UART4) crc = (uint16_t)(crc ^ data[j]); //current UART for (i=0; i> 1; if (rx485_buff[0] crc = crc ^ 0xa001; == ID) } { else rs485_state = 1; crc = input_data[0] = ID; (uint16_t)(crc >> 1); } } else } { crc = (uint16_t)(((crc > 8)) & rs485_state = 0; 0xffff); enable_tx = 0; return crc; } } break; uint8_t enable_tx = 0; case 1: uint8_t rs485_state = 0; uint8_t cmd; = input_data[1] = rx485_buff[0]; uint8_t High_Address; uint8_t Low_Address; cmd cmd; uint8_t High_Number; rs485_state = 2; uint8_t Low_Number; break; uint8_t CRC_H; case 2: uint8_t CRC_L; High_Address uint16_t DATA_CRC; rx485_buff[0]; uint16_t MyCRC; input_data[2] = High_Address; char valid_data[6]; rs485_state = 3; uint8_t input_data[6]; break; void case 3: HAL_UART_RxCpltCallback(UART_HandleType Low_Address = rx485_buff[0]; Def *huart) input_data[3] = Low_Address; { rs485_state = 4; /* Prevent unused argument(s) compilation warning */ break; case 4: /* NOTE : This function should not be modified, High_Number = rx485_buff[0]; when the callback is needed, the HAL_UART_RxCpltCallback can be implemented in the user file */ input_data[4] = High_Number; rs485_state = 5; break; case 5: char i; Low_Number = rx485_buff[0]; input_data[5] = Low_Number; = 207 rs485_state = 6; uint8_t clear = 0; break; if (enable_tx == 1) case 6: { CRC_H = rx485_buff[0]; if ((cmd == 1) || (cmd == 2)) rs485_state = 7; { break; uint8_t case 7: temp=0,temp1=0; CRC_L = rx485_buff[0]; start_address =valid_data[3]; DATA_CRC = CRC_H*256 + CRC_L; num_reg = valid_data[5]; MyCRC = crc_cal(input_data,6); length_data_send = + (num_reg - 1)/8 + 1; if(MyCRC == DATA_CRC) data_send[0] = ID; { //Device address for( i=0; i

Ngày đăng: 20/07/2023, 11:32

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

TÀI LIỆU LIÊN QUAN

w