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

Nghiên cứu phương pháp giảm điện áp common mode trong bộ biến đổi ma trận gián tiếp

178 21 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

Cấu trúc

  • Trang bia - Loi cam on - Muc luc - Tom tat.pdf

  • Noi dung LV.pdf

  • Phu luc.pdf

Nội dung

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA TRẦN QUỐC HOÀN NGHIÊN CỨU PHƯƠNG PHÁP GIẢM ĐIỆN ÁP COMMONMODE TRONG BỘ BIẾN ĐỔI MA TRẬN GIÁN TIẾP Chuyên ngành: Mã số: Thiết bị, mạng nhà máy điện 605250 LUẬN VĂN THẠC SĨ TP Hồ Chí Minh, Tháng năm 2011 i CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG TP.HCM Cán hướng dẫn khoa học: PGS.TS Nguyễn Văn Nhờ (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 1: (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 2: (Ghi rõ họ, tên, học hàm, học vị chữ ký) 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 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị Hội đồng chấm bảo vệ luận văn thạc sĩ) 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Ử ii ĐẠI HỌC QUỐC GIA TP.HCM CỘNG HÕA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA Độ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: TRẦN QUỐC HOÀN MSHV: 09180061 Ngày, tháng, năm sinh: 29/4/1983 Nơi sinh: Tây Ninh Chuyên ngành: Thiết bị, Mạng Nhà máy điện Mã số: 605250 I TÊN ĐỀ TÀI: NGHIÊN CỨU PHƯƠNG PHÁP GIẢM ĐIỆN ÁP COMMON-MODE TRONG BỘ BIẾN ĐỔI MA TRẬN GIÁN TIẾP II NHIỆM VỤ VÀ NỘI DUNG: a Tìm hiểu giải thuật điều chế độ rộng xung PWM, nghiên cứu phương pháp giảm điện áp common-mode cho Indirect matrix converter (IMC) b Mô giải thuật điều chế IMC phần mềm Matlab/Simulink c Xây dựng mơ hình thực nghiệm cho IMC sử dụng card DSP TMS320F28335, phối hợp với Card FPGA Spartan 3E để thực chuyển mạch an toàn d So sánh kết mô thực nghiệm III NGÀY GIAO NHIỆM VỤ: (Ghi theo QĐ giao đề tài) IV NGÀY HOÀN THÀNH NHIỆM VỤ: (Ghi theo QĐ giao đề tài) V CÁN BỘ HƯỚNG DẪN: PGS.TS Nguyễn Văn Nhờ Tp HCM, ngày tháng năm 2011 CÁN BỘ HƯỚNG DẪN (Họ tên chữ ký) CHỦ NHIỆM BỘ MÔN ĐÀO TẠO (Họ tên chữ ký) TRƯỞNG KHOA ĐIỆN – ĐIỆN TỬ (Họ tên chữ ký) iii LỜI CẢM ƠN Tôi xin bày tỏ lòng biết ơn sâu sắc đến tất quý thầy cô Khoa Điện – Điện tử Trường Đại học Bách Khoa Tp Hồ Chí Minh tận tình truyền đạt kiến thức cho tơi suốt q trình học trường Tơi kính gửi lời cảm ơn chân thành đến thầy PGS.TS Nguyễn Văn Nhờ, người tận tình giúp đỡ hướng dẫn học tập, suốt trình thực luận văn Thầy tạo điều kiện tốt sở vật chất mơi trường nghiên cứu để tơi hồn thành q trình thực nghiệm cho luận văn Tơi gửi lời cảm ơn đến bạn nghiên cứu viên sinh viên phịng thí nghiệm Hệ thống Năng lượng – Trường Đại học Bách Khoa Tp Hồ Chí Minh trao đổi, chia kinh nghiệm trình thực luận văn Cảm ơn tất đồng nghiệp Trường Đại học Trần Đại Nghĩa, tạo điều kiện tốt cho tơi hồn thành khóa học Cuối cùng, xin chân thành cảm ơn gia đình người thân u ln tạo điều kiện, động viên, giúp đỡ chỗ dựa vững giúp an tâm học tập vượt qua khó khăn thời gian qua Tp Hồ Chí Minh, ngày 07 tháng năm 2011 TRẦN QUỐC HOÀN iv TĨM TẮT LUẬN VĂN Luận văn trình bày giải thuật điều chế dựa kỹ thuật điều chế độ rộng xung PWM cho chuyển đổi nguồn pha AC-AC dạng indirect matrix converter với dòng điện đầu vào điện áp đầu có dạng sin Giải thuật đạt tỉ số điều chế 0.866 hệ số công suất đầu vào mà không phụ thuộc vào tính chất tải Giải thuật trình bày cải tiến để tạo hai mức điện áp DC khác ngõ khối chỉnh lưu Giải thuật phát triển để nhằm mục đích giảm điện áp common-mode indirect matrix converter Kết mô phần mềm Matlab/Simulink thực nghiệm Card DSP TMS320F28335 hoàn toàn giống Luận văn gồm vấn đề sau: chương giới thiệu tổng quan biến đổi AC-AC; chương hai giới thiệu matrix converter giải thuật điều chế ứng dụng, thành phần cấu trúc matrix converter cấu tạo khóa hai chiều, mạch lọc, mạch kẹp, vấn đề chuyển mạch an tồn, đồng thời trình bày indirect matrix converter ưu điểm so với direct matrix converter; giải thuật điều chế độ rộng xung PWM cho indirect matrix converter trình bày chương ba, đồng thời kết mô Matlab/Simulink giải thuật trình bày; chương bốn trình bày q trình thiết kế thi cơng mơ hình thực nghiệm cho indirect matrix converter, đánh giá kết thực nghiệm thu được; phương pháp giảm điện áp common-mode cho indirect matrix converter giới thiệu chương năm, đồng thời so sánh đánh giá kết mô với thực nghiệm; chương sáu đánh giá kết làm hạn chế luận văn v MỤC LỤC Trang bìa i Nhiệm vụ luận văn iii Lời cảm ơn iv Tóm tắt luận văn v Mục lục vi Chương GIỚI THIỆU CHUNG VỀ ĐỀ TÀI 1.1 Tổng quan 1.2 Phạm vi nghiên cứu 1.3 Mục tiêu luận văn 1.4 Điểm luận văn 1.5 Cách thức tiếp cận hướng nghiên cứu 1.6 Bố cục luận văn Chương TỔNG QUAN VỀ INDIRECT MATRIX CONVERTER 2.1 Bộ biến đổi ma trận trực tiếp (direct matrix converter) 2.1.1 Cấu trúc mạch 2.1.2 Phương pháp điều chế 2.1.3 Phương pháp điều chế theo Alesina – Venturini 11 2.1.4 Phương pháp điều chế vô hướng (Roy) 11 2.1.5 Phương pháp điều chế vector không gian (space vector modulation) 12 2.1.6 Phương pháp điều chế gián tiếp (indirect modulation methods) 13 2.2 Bộ biến đổi ma trận gián tiếp (indirect matrix converter) 14 2.3 Khóa bán dẫn hai chiều (bi-directional switch) 16 2.4 Mạch lọc đầu vào 17 2.5 Mạch kẹp 18 2.6 Các vấn đề chuyển mạch 19 2.6.1 Giải thuật chuyển mạch bốn bước điều khiển theo dòng điện ngõ 20 2.6.2 Giải thuật chuyển mạch bốn bước điều khiển theo điện áp ngõ vào 23 2.7 Những ưu điểm IMC so với DMC 24 2.7.1 Chuyển mạch an toàn 24 2.7.2 Giảm số linh kiện bán dẫn 24 2.7.3 Hiệu hệ truyền động nhiều động 25 vi Chương GIẢI THUẬT ĐIỀU CHẾ PWM DÙNG SÓNG MANG CHO INDIRECT MATRIX CONVERTER 27 3.1 Giải thuật điều chế PWM cho khối chỉnh lưu 28 3.1.1 Hàm điều chế 28 3.1.2 Hàm đóng ngắt 30 3.2 Giải thuật điều chế PWM cho khối nghịch lưu 32 3.2.1 Hàm điều chế 32 3.2.2 Hàm đóng ngắt 35 3.3 Xây dựng sơ đồ mô Matlab/Simulink 36 3.3.1 Tổng quan khối mô IMC Matlab/Simulink 36 3.3.2 Kết mô 39 Chương THIẾT KẾ MƠ HÌNH THỰC NGHIỆM CHO INDIRECT MATRIX CONVERTER 48 4.1 Sơ đồ khối cấu trúc phần cứng 48 4.1.1 Mạch lọc ngõ vào 49 4.1.2 Mạch kẹp 50 4.1.3 Mạch kích (mạch lái) 51 4.1.4 Mạch nguồn 15V nguồn +5V 52 4.1.5 Mạch đồng 52 4.1.6 Mạch công suất 53 4.2 Kết thi công phần cứng 54 4.3 Kết thực nghiệm 58 Chương GIẢI THUẬT ĐIỀU CHẾ GIẢM ĐIỆN ÁP COMMON-MODE 65 5.1 Vấn đề điện áp common-mode 65 5.1.1 Tổng quan 65 5.1.2 Điện áp common-mode IMC 66 5.2 Giải thuật điều chế giảm điện áp common-mode IMC 69 5.2.1 Giải thuật điều chế giảm điện áp VDC ngõ khối chỉnh lưu 69 5.2.2 Giải thuật điều chế giảm điện áp common-mode khối nghịch lưu 74 5.3 Kết mô thực nghiệm 79 5.3.1 So sánh kết phương pháp điều chế theo điện áp cao phương pháp điều chế theo điện áp thấp (khối nghịch lưu chưa áp dụng phương pháp xử lý để giảm điện áp common-mode) 79 vii 5.3.2 So sánh kết theo phương pháp điều chế AZSPWM1 AZSPWM3 (khối chỉnh lưu sử dụng phương pháp điều chế theo điện áp thấp) 86 Chương KẾT LUẬN VÀ KIẾN NGHỊ 92 6.1 Kết luận 92 6.2 Kiến nghị 92 Tài liệu tham khảo 93 Phụ lục 96 viii Luận văn cao học CBHD: PGS.TS Nguyễn Văn Nhờ Chƣơng GIỚI THIỆU CHUNG VỀ ĐỀ TÀI 1.1 TỔNG QUAN Nhờ phát triển mạnh mẽ lĩnh vực điện tử công suất, biến đổi AC-AC ngày ứng dụng rộng rãi hệ truyền động động AC nói riêng cơng nghiệp nói chung Bên cạnh đó, với phát triển cơng nghệ xử lý tín hiệu số, vi xử lý việc thực thi điều khiển biến đổi điện tử công suất trở nên dễ dàng xác Một mục tiêu hướng nghiên cứu giới không ngừng cải tiến biến đổi AC-AC nhằm làm giảm tổn hao, nâng cao hiệu suất làm việc, cải thiện chất lượng điện ngõ ra… Bộ biến đổi ma trận (matrix converter) hướng nghiên cứu có khả đáp ứng yêu cầu Nhiều dạng cấu trúc mạch khác ứng dụng để tạo biến đổi xoay chiều AC-AC biến đổi lượng xoay chiều từ biên độ, tần số sang biên độ, tần số khác Các dạng cấu trúc phân thành hai nhóm: nhóm chuyển đổi AC-DC-AC (năng lượng AC trước hết chỉnh lưu thành lượng DC sau chuyển đổi ngược lại thành lượng AC) nhóm chuyển đổi trực tiếp AC-AC (còn gọi biến đổi ma trận – matrix converter, lượng AC đầu vào chuyển đổi trực tiếp thành lượng AC đầu ra) Cả hai nhóm cấu trúc mạch tạo dạng dịng điện đầu hình sin Tuy nhiên, so với cấu trúc AC-DC-AC thơng thường biến đổi ma trận tạo dạng sóng đầu vào, đầu có dạng sin, điều khiển hệ số công suất đầu vào đặc biệt không cần đến thành phần dự trữ công suất, tất khóa bán dẫn HVTH: Trần Quốc Hoàn Luận văn cao học CBHD: PGS.TS Nguyễn Văn Nhờ Với ưu điểm nên biến đổi ma trận thu hút nghiên cứu rộng rãi Bộ biến đổi ma trận giới thiệu lần vào năm 1980 Venturini Alesina [1-5] với chín khóa bán dẫn hai chiều (bi-directional switches) đặt theo dạng ma trận để điện áp pha đầu vào nối với điện áp pha đầu Phương pháp điều khiển biến đổi ma trận đưa Venturini Alesina biết đến phương pháp “trực tiếp” với điện áp đầu mong muốn nhận cách nhân ma trận đóng ngắt với điện áp đầu vào Một phương pháp điều khiển khác dựa ý tưởng “điện áp DC giả tưởng” đưa Rodriguez [6] vào năm 1983 Phương pháp biết đến phương pháp điều khiển “gián tiếp” cho biến đổi ma trận Tuy nhiên việc đóng ngắt khóa bán dẫn kép biến đổi ma trận dễ gây áp q dịng dẫn đến hư hỏng linh kiện, cần phải có mạch bảo vệ phức tạp kèm Vì biến đổi ma trận thơng thường chưa ứng dụng rộng rãi công nghiệp Với phát triển nhiều kỹ thuật điều chế gần đây, kỹ thuật điều chế khác đưa dẫn đến đời biến đổi trực tiếp xoay chiều AC hai tầng Dựa kỹ thuật lớp biến đổi xoay chiều đơn giản phát minh Những biến đổi biết đến biến đổi ma trận kiểu gián tiếp (Indirect matrix converter) Như vậy, dựa vào cấu trúc biến đổi ma trận, phân thành hai dạng: dạng trực tiếp (Direct Matrix Converter), dạng gián tiếp (Indirect Matrix Converter) HVTH: Trần Quốc Hoàn time[0] = Tu1; time[1] = Tv1 - time[0]; time[2] = Tw1 - time[1] - time[0]; time[3] = T1 - time[2] - time[1] - time[0]; time[4] = Tw3; time[5] = Tv3 - time[4]; time[6] = Tu3 - time[5] - time[4]; time[7] = T2 - time[6] - time[5] - time[4]; xung_nl[0] = 0x00190000; xung_nl[1] = 0x001A0000; xung_nl[2] = 0x00160000; xung_nl[3] = 0x00260000; xung_nl[4] = 0x00260000; xung_nl[5] = 0x00160000; xung_nl[6] = 0x001A0000; xung_nl[7] = 0x00190000; // V6 = (1,0,1) // V5 = (0,0,1) // V4 = (0,1,1) // V3 = (0,1,0) // V3 = (0,1,0) } //==================== Sector NL ======================= else if((voa == mid)&&(vob == min)&&(voc == max)) { Tu1 = mup * T1; Tu3 = (1 - mup) * T2; Tv1 = (1 - mvp) * T1; Tv3 = mvp * T2; Tw1 = (1 - mwp) * T1; Tw3 = mwp * T2; time[0] = Tw1; time[1] = Tu1 - time[0]; time[2] = Tv1 - time[1] - time[0]; time[3] = T1 - time[2] - time[1] - time[0]; time[4] = Tv3; time[5] = Tu3 - time[4]; time[6] = Tw3 - time[5] - time[4]; time[7] = T2 - time[6] - time[5] - time[4]; xung_nl[0] = 0x00290000; xung_nl[1] = 0x00190000; xung_nl[2] = 0x001A0000; xung_nl[3] = 0x00160000; xung_nl[4] = 0x00160000; xung_nl[5] = 0x001A0000; xung_nl[6] = 0x00190000; xung_nl[7] = 0x00290000; // V1 = (1,0,0) // V6 = (1,0,1) // V5 = (0,0,1) // V4 = (0,1,1) // V4 = (0,1,1) } //===================== Sector NL ===================== 45 else if((voa == max)&&(vob == min)&&(voc == mid)) { Tu1 = mup * T1; Tu3 = (1 - mup) * T2; Tv1 = mvp * T1; Tv3 = (1 - mvp) * T2; Tw1 = (1 - mwp) * T1; Tw3 = mwp * T2; time[0] = Tv1; time[1] = Tw1 - time[0]; time[2] = Tu1 - time[1] - time[0]; time[3] = T1 - time[2] - time[1] - time[0]; time[4] = Tu3; time[5] = Tw3 - time[4]; time[6] = Tv3 - time[5] - time[4]; time[7] = T2 - time[6] - time[5] - time[4]; xung_nl[0] = 0x00250000; xung_nl[1] = 0x00290000; xung_nl[2] = 0x00190000; xung_nl[3] = 0x001A0000; xung_nl[4] = 0x001A0000; xung_nl[5] = 0x00190000; xung_nl[6] = 0x00290000; xung_nl[7] = 0x00250000; // V2 = (1,1,0) // V1 = (1,0,0) // V6 = (1,0,1) // V5 = (0,0,1) // V5 = (0,0,1) } output = xung_cl|xung_nl[k]; //======================================================= for(;;) { if(temp == 1) { temp = 0; break; } } } // end for } // end main //====================== Initializing ePWM ================================== void InitEPwmTimer() { EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; // Stop all the TB clocks //====================== Initializing ePWM1 ================================== EPwm1Regs.TBPRD = Period; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Set timer period 46 EPwm1Regs.TBCTR = 0; // Clear TB counter EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPA; counter bang CMPA EPwm1Regs.ETSEL.bit.INTEN = 1; EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Count up //TBCLK = SYSCLKOUT/2 //TBCLK = SYSCLKOUT/2 // Cho phep ngat TB // Enable interrupt // Ngat o su kien 1st //====================== Initializing ePWM2 =================================== EPwm2Regs.TBPRD = Period; EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm2Regs.TBCTR = 0; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; counter bang Period EPwm2Regs.ETSEL.bit.INTEN = 1; EPwm2Regs.ETPS.bit.INTPRD = ET_1ST; EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; // Set timer period // Clear TB counter // Count up //TBCLK = SYSCLKOUT/2 //TBCLK = SYSCLKOUT/2 // Cho phep ngat TB // Enable interrupt // Ngat o su kien 1st // Start all the timers synced } //================= Chuong trinh phuc vu ngat Epwm1 =========================== interrupt void epwm1_timer_isr(void) { if(sector == 1) xung_cl = 0x00000024; else if(sector == 2) xung_cl = 0x00000021; else if(sector == 3) xung_cl = 0x00000012; else if(sector == 4) xung_cl = 0x00000006; else if(sector == 5) xung_cl = 0x00000009; else if(sector == 6) xung_cl = 0x00000018; //Scn = 1; Sbp = 1; //Sap = 1; Scn = 1; //Scp = 1; San = 1; //Sbp = 1; San = 1; //Sap = 1; Sbn = 1; //Scp = 1; Sbn = 1; output = xung_cl|xung_nl[k] ; EPwm1TimerIntCount ++; EPwm1Regs.ETCLR.bit.INT = 1; 47 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; return; } //============= Chuong trinh phuc vu ngat Epwm2 ============================ interrupt void epwm2_timer_isr(void) { temp = 1; EPwm1Regs.CMPA.half.CMPA = udk; EPwm2TimerIntCount ++; EPwm2Regs.ETCLR.bit.INT = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; return; } //============ Chuong trinh phuc vu ngat CPU Timer ======================== interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount ++; k ++; if(k > 7) k = 0; output = xung_cl|xung_nl[k] ; CpuTimer0Regs.PRD.all = time[k]; if(CpuTimer0Regs.PRD.all 3600) { wi_t = wi_t - 3600; t = wi_t / wi; } else { wi_t = wi_t; t = t; } pha_ai = wi_t; if(pha_ai>3600) pha_ai = pha_ai - 3600; pha_bi = wi_t + 2400; if(pha_bi>3600) pha_bi = pha_bi - 3600; pha_ci = wi_t + 1200; if(pha_ci>3600) pha_ci = pha_ci - 3600; //============= Tinh gia tri cac goc pha theo wo(t) ==================== wo = 36 * fo; wo_t = wo * to; if(wo_t>3600) { wo_t = wo_t - 3600; to = wo_t / wo; } else { wo_t = wo_t; to = to; } pha_ao = wo_t; if(pha_ao>3600) pha_ao = pha_ao - 3600; pha_bo = wo_t + 2400; if(pha_bo>3600) pha_bo = pha_bo - 3600; 51 pha_co = wo_t + 1200; if(pha_co>3600) pha_co = pha_co - 3600; ua = cos_tb[pha_ai]; ub = cos_tb[pha_bi]; uc = cos_tb[pha_ci]; // Tinh cac gia tri csa,csb,csc if(ua >=0 ) csa = 0x00000001; else csa = 0x00000002; if(ub >=0 ) csb = 0x00000004; else csb = 0x00000008; if(uc >=0 ) csc = 0x00000010; else csc = 0x00000020; output_4b = csa | csb | csc; // xuat cac tin hieu cs dung cho buoc //================= Sector ======================= if((ua >= ub)&&(ub >= uc)) { sector = 1; xung_cl = 0x00000009; m = ua/(ua - uc); } // ================== Sector ====================== else if((ub >= ua)&&(ua >= uc)) { sector = 2; xung_cl = 0x00000006; m = ub/(ub - uc); } // ===================== Sector ================== else if((ub >= uc)&&(uc >= ua)) { sector = 3; xung_cl = 0x00000024; m = ub/(ub - ua); } 52 //========================== Sector =============================== else if((uc >= ub)&&(ub >= ua)) { sector = 4; xung_cl = 0x00000018; m = uc/(uc - ua); } //====================== Sector ================================ else if((uc >= ua)&&(ua >= ub)) { sector = 5; xung_cl = 0x00000012; m = uc/(uc - ub); } //===================== Sector ================================ else if((ua >= uc)&&(uc >= ub)) { sector = 6; xung_cl = 0x00000021; m = ua/(ua - ub); } udk = m * Period; T1 = m * Ts; T2 = Ts - T1; //============= Khau nghich luu ================================= voa = Mi * cos_tb[pha_ao]; vob = Mi * cos_tb[pha_bo]; voc = Mi * cos_tb[pha_co]; if(voa >= vob) { if(voa >= voc) { max = voa; if(vob > voc) { mid = vob; = voc; } else { mid = voc; = vob; } 53 } else { max = voc; mid = voa; = vob; } } else { if(vob >= voc) { max = vob; if(voa > voc) { mid = voa; = voc; } else { mid = voc; = voa; } } else { max = voc; mid = vob; = voa; } } vomax = - max; vomin = - min; vo = (vomax + vomin)/2; mup = voa + vo; mvp = vob + vo; mwp = voc + vo; //================ Sector NL ============================ if((voa == max)&&(vob == mid)&&(voc == min)) { Tv1 = (1 - mvp) * T1; Tv3 = mvp * T2; Tw1 = (1 - mwp) * T1; Tw3 = mwp * T2; time[0] = Tv1; time[1] = Tw1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tw3; 54 time[4] = Tv3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x00290000; xung_nl[1] = 0x00250000; xung_nl[2] = 0x00160000; xung_nl[3] = 0x00160000; xung_nl[4] = 0x00250000; xung_nl[5] = 0x00290000; // V1 = (1,0,0) // V2 = (1,1,0) // V4 = (0,1,1) // V4 = (0,1,1) // V2 = (1,1,0) // V1 = (1,0,0) } //=============== Sector NL ============================= else if((voa == mid)&&(vob == max)&&(voc == min)) { Tu1 = mup * T1; Tu3 = (1 - mup) * T2; Tv1 = mvp * T1; Tv3 = (1 - mvp) * T2; time[0] = Tu1; time[1] = Tv1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tv3; time[4] = Tu3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x00250000; xung_nl[1] = 0x00260000; xung_nl[2] = 0x001A0000; xung_nl[3] = 0x001A0000; xung_nl[4] = 0x00260000; xung_nl[5] = 0x00250000; // V2 = (1,1,0) // V3 = (0,1,0) // V5 = (0,0,1) // V5 = (0,0,1) // V3 = (0,1,0) // V2 = (1,1,0) } //================= Sector NL =========================== else if((voa == min)&&(vob == max)&&(voc == mid)) { Tu1 = (1 - mup) * T1; Tu3 = mup * T2; Tw1 = (1 - mwp) * T1; Tw3 = mwp * T2; time[0] = Tw1; time[1] = Tu1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tu3; time[4] = Tw3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x00260000; // V3 = (0,1,0) 55 xung_nl[1] = 0x00160000; xung_nl[2] = 0x00190000; xung_nl[3] = 0x00190000; xung_nl[4] = 0x00160000; xung_nl[5] = 0x00260000; // V4 = (0,1,1) // V6 = (1,0,1) // V6 = (1,0,1) // V4 = (0,1,1) // V3 = (0,1,0) } //================== Sector NL ========================== else if((voa == min)&&(vob == mid)&&(voc == max)) { Tv1 = mvp * T1; Tv3 = (1 - mvp) * T2; Tw1 = mwp * T1; Tw3 = (1 - mwp) * T2; time[0] = Tv1; time[1] = Tw1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tw3; time[4] = Tv3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x00160000; xung_nl[1] = 0x001A0000; xung_nl[2] = 0x00290000; xung_nl[3] = 0x00290000; xung_nl[4] = 0x001A0000; xung_nl[5] = 0x00160000; // V4 = (0,1,1) // V5 = (0,0,1) // V1 = (1,0,0) // V1 = (1,0,0) // V5 = (0,0,1) // V4 = (0,1,1) } //==================== Sector NL ======================= else if((voa == mid)&&(vob == min)&&(voc == max)) { Tu1 = (1 - mup) * T1; Tu3 = mup * T2; Tv1 = (1 - mvp) * T1; Tv3 = mvp * T2; time[0] = Tu1; time[1] = Tv1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tv3; time[4] = Tu3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x001A0000; xung_nl[1] = 0x00190000; xung_nl[2] = 0x00250000; xung_nl[3] = 0x00250000; xung_nl[4] = 0x00190000; // V5 = (0,0,1) // V6 = (1,0,1) // V2 = (1,1,0) // V2 = (1,1,0) // V6 = (1,0,1) 56 xung_nl[5] = 0x001A0000; // V5 = (0,0,1) } //===================== Sector NL ===================== else if((voa == max)&&(vob == min)&&(voc == mid)) { Tu1 = mup * T1; Tu3 = (1 - mup) * T2; Tw1 = mwp * T1; Tw3 = (1 - mwp) * T2; time[0] = Tw1; time[1] = Tu1 - time[0]; time[2] = T1 - time[1] - time[0]; time[3] = Tu3; time[4] = Tw3 - time[3]; time[5] = T2 - time[4] - time[3]; xung_nl[0] = 0x00190000; xung_nl[1] = 0x00290000; xung_nl[2] = 0x00260000; xung_nl[3] = 0x00260000; xung_nl[4] = 0x00290000; xung_nl[5] = 0x00190000; // V6 = (1,0,1) // V1 = (1,0,0) // V3 = (0,1,0) // V3 = (0,1,0) // V1 = (1,0,0) // V6 = (1,0,1) } output = xung_cl|xung_nl[k]; //======================================================= for(;;) { if(temp == 1) { temp = 0; break; } } } // end for } // end main //====================== Initializing ePWM ================================== void InitEPwmTimer() { EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; // Stop all the TB clocks //====================== Initializing ePWM1 ================================== EPwm1Regs.TBPRD = Period; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTR = 0; // Set timer period // Clear TB counter 57 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPA; counter bang CMPA EPwm1Regs.ETSEL.bit.INTEN = 1; EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Count up //TBCLK = SYSCLKOUT/2 //TBCLK = SYSCLKOUT/2 // Cho phep ngat TB // Enable interrupt // Ngat o su kien 1st //====================== Initializing ePWM2 =================================== EPwm2Regs.TBPRD = Period; EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm2Regs.TBCTR = 0; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; counter bang Period EPwm2Regs.ETSEL.bit.INTEN = 1; EPwm2Regs.ETPS.bit.INTPRD = ET_1ST; EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; // Set timer period // Clear TB counter // Count up //TBCLK = SYSCLKOUT/2 //TBCLK = SYSCLKOUT/2 // Cho phep ngat TB // Enable interrupt // Ngat o su kien 1st // Start all the timers synced } //================= Chuong trinh phuc vu ngat Epwm1 =========================== interrupt void epwm1_timer_isr(void) { if(sector == 1) xung_cl = 0x00000024; else if(sector == 2) xung_cl = 0x00000021; else if(sector == 3) xung_cl = 0x00000012; else if(sector == 4) xung_cl = 0x00000006; else if(sector == 5) xung_cl = 0x00000009; else if(sector == 6) xung_cl = 0x00000018; //Scn = 1; Sbp = 1; //Sap = 1; Scn = 1; //Scp = 1; San = 1; //Sbp = 1; San = 1; //Sap = 1; Sbn = 1; //Scp = 1; Sbn = 1; output = xung_cl|xung_nl[k]; EPwm1TimerIntCount ++; EPwm1Regs.ETCLR.bit.INT = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; return; 58 } //============= Chuong trinh phuc vu ngat Epwm2 ============================ interrupt void epwm2_timer_isr(void) { temp = 1; EPwm1Regs.CMPA.half.CMPA = udk; EPwm2TimerIntCount ++; EPwm2Regs.ETCLR.bit.INT = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; return; } //============ Chuong trinh phuc vu ngat CPU Timer ======================== interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount ++; k ++; if(k > 5) k = 0; output = xung_cl|xung_nl[k]; CpuTimer0Regs.PRD.all = time[k]; if(CpuTimer0Regs.PRD.all

Ngày đăng: 03/02/2021, 23:26

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

TÀI LIỆU LIÊN QUAN

w