Luận văn này nghiên cứu thiết kế và điều khiển bộ lọc công suất tích cực sử dụng bộ nghịch lưu hai bậc, để lọc thành phần hài bậc cao và bù công suất phản kháng trong lưới điện có tải phi tuyến. Bộ nghịch lưu hai bậc được chọn bởi các ưu điểm như hoạt động tốt ở công suất trung bình và nhỏ. Quá trình được điều khiển vòng kín sử dụng lý thuyết công suất tức thời. Kết quả mô phỏng sử dụng phần mềm MatlabSimulink và thực nghiệm cùng card điều khiển TMS320F28335 được trình bày để minh chứng cho các nghiên cứu lý thuyết.
i TÓM TẮT LUẬN VĂN Luận văn nghiên cứu thiết kế điều khiển lọc công suất tích cực sử dụng nghịch lƣu hai bậc, để lọc thành phần hài bậc cao bù công suất phản kháng lƣới điện có tải phi tuyến Bộ nghịch lƣu hai bậc đƣợc chọn ƣu điểm nhƣ hoạt động tốt công suất trung bình nhỏ Quá trình đƣợc điều khiển vòng kín sử dụng lý thuyết công suất tức thời Kết mô sử dụng phần mềm Matlab/Simulink thực nghiệm card điều khiển TMS320F28335 đƣợc trình bày để minh chứng cho nghiên cứu lý thuyết ii ABSTRACT This thesis concerns the control of an active power filter (APF), based on a twolevel inverter for harmonic and reactive power compensation in three-wire power network with nonlinear loads The two-level topology, suitable for slow/medium power applications The control process was conducted in a closed-loop manner adopting the instantaneous power theory for the active power filter current references injection Simulation using Matlab/Simulink software and experiment results using TMS320F28335 control card are provided to verify the theoretical study MỤC LỤC LỜI CAM KẾT Error! Bookmark not defined LỜI CẢM ƠN Error! Bookmark not defined TÓM TẮT LUẬN VĂN i MỤC LỤC ii DANH MỤC BẢNG BIỂU vi DANH MỤC CÁC LƢU ĐỒ, HÌNH ẢNH vii Chƣơng 1: TỔNG QUAN ĐỀ TÀI NGHIÊN CỨU 1.1 Lý chọn đề tài: 1.2 Cơ sở khoa học ý nghĩa thực tiễn đề tài 1.2.1 Ảnh hƣởng s ng hài bù c ng suất phản kháng 1.2.1.1 Ảnh hƣởng sóng hài 1.2.1.2 Bù công suất phản kháng 1.2.2 Nguyên lý hoạt động mạch lọc tích cực (active power Filter – APF) iii 1.2.3 Phân loại mạch lọc tích cực 1.2.4 Phƣơng pháp xác định dòng bù cho mạch lọc tích cực 1.2.2.3.1 Phƣơng pháp xác định dòng bù miền tần số 1.2.2.3.2 Phƣơng pháp xác định dòng bù miền thời gian 1.3 Phạm vi nghiên cứu đề tài 12 1.4 Mục tiêu đề tài 13 Chƣơng 2: BỘ NGHỊCH LƢU BẬC V CÁC PHƢƠNG PHÁP ĐIỀU KHIỂN 14 2.1 Giới thiệu chung nghịch lƣu hai bậc 15 2.2 Cấu trúc điều khiển mạch lọc tích cực dùng nghịch lƣu hai bậc 17 2.2.1 Phƣơng pháp vòng hở 17 2.2.2 Phƣơng pháp vòng kín 18 2.3 Phƣơng pháp điều khiển nghịch lƣu hai bậc 19 2.3.1 Phƣơng pháp điều chế sóng mang (CBPWM) 20 2.3.2 Phƣơng pháp điều chế vector không gian (SVPWM) 22 2.3.2.1 Giới thiệu chung 22 2.3.2.2 Sơ đồ xếp vector V0 -> V7 trục Va; Vb; Vc 24 2.3.2.3 Giới thiệu vector V ref 26 2.3.2.4 Cách tính toán thời gian để tạo vector V ref 26 2.3.2.5 Giản đồ đ ng ngắt kh a để tạo Vector V ref sector 29 2.4 Phƣơng pháp điều khiển dòng 32 2.4.1 Phƣơng pháp điều khiển dòng hysteresis 32 2.4.2 Phƣơng pháp điều khiển dòng PI 33 2.4.2.1 Cấu trúc điều khiển PI 33 2.4.2.2 Điều khiển dòng PI cho nghịch lƣu ba pha 33 2.4.3 Phƣơng pháp điều khiển dòng Deadbeat 37 2.4.3.1 Hệ tọa độ dq 37 2.4.3.2 Điều khiển dòng deadbeat 38 iv Chƣơng 3: LÝ THUYẾT CÔNG SUẤT TỨC THỜI 40 3.1 Phép biến đổi Clarke 41 3.2 Lý thuyết công suất tức thời hệ ba pha ba dây 44 3.3 Ứng dụng lý thuyết p-q vào lọc tích cực song song 48 Chƣơng 4: THIẾT KẾ MÔ HÌNH VÀ GIẢI THUẬT ĐIỀU KHIỂN 51 4.1 Thiết kế mô hình 51 4.2 Bộ điều khiển 51 4.3 Mạch công suất 52 4.3.1 Board mạch công suất 52 4.3.2 Mạch lái MOSFET 52 4.3.3 Mạch công suất nghịch lƣu 54 4.4 Mạch cảm biến dòng 55 4.5 Mạch cảm biến áp 56 4.6 Các phần tử khác mô hình 57 4.6.1 Biến áp nguồn 57 4.6.2 Tải phi tuyến 57 4.6.3 Cuộn kháng lọc dòng nghịch lƣu 57 4.6.4 Tụ DC 58 4.7 Giải thuật điều khiển hoàn chỉnh 58 4.7.1 Giải thuật tính dòng cần bù 58 4.7.2 Giải thuật điều khiển dòng hysteresis 59 Chƣơng 5: MÔ PHỎNG VÀ THỰC NGHIỆM 60 5.1 Mô 60 5.1.1 Mô lọc chƣa tác động 63 5.1.2 Mô c tác động lọc 66 5.2 Thực nghiệm 68 Chƣơng 6: ĐÁNH GIÁ V HƢỚNG PHÁT TRIỂN 70 6.1 Một số kết thực nghiệm APF giới 70 v 6.2 Đánh giá kết đạt đƣợc 72 6.3 Hƣớng phát triển 72 TÀI LIỆU THAM KHẢO 74 Phụ lục A: GIỚI THIỆU DSP TMS320F28335 75 Phụ lục B: CODE ĐIỀU KHIỂN APF 87 Phụ lục C: TIÊU CHUẨN IEEE std 519 98 DANH MỤC CÁC TỪ VIẾT TẮT THD Total harmonic distortion IEEE Institute of electrical and Electronics Engineers CSPK Công suất phản kháng APF Active power Filter UPQC Unified Power Quality Controller VSI Bộ nghịch lƣu nguồn áp CSI Bộ nghịch lƣu nguồn dòng DFT Discrete Fourier Transform FFT Fast Fourier Transform RDFT Recursive Discrete Fourier Transform SVPWM Space vector PWM vi DANH MỤC BẢNG BIỂU Bảng 1.1: Cấu hình lọc phù hợp với ứng dụng 14 Bảng 2.1: Thời gian chuyển mạch kh a bán d n sector 31 vii DANH MỤC CÁC LƯU ĐỒ, HÌNH ẢNH Hình 1.01: Thành phần hài Hình 1.02: Phổ sóng hài Hình 1.03: Nguyên lý mạch lọc tích cực …5 Hình 1.04: Các đại lƣợng dòng nguồn, dòng tải dòng cần bù mạch lọc Hình 1.05: Cấu trúc mạch lọc tích cực VSI Hình 1.06: Cấu trúc mạch lọc tích cực CSI Hình 1.07: Cấu hình mạch lọc tích cực song song (shunt APF) Hình 1.08: Cấu hình mạch lọc tích cực nối tiếp ((Series APF) Hình 1.09: Cấu hình lọc kết hợp (UPQC ) Hình 1.10 : Cấu hình mạch lọc hổn hợp (hybrid) Hình 1.11: Thuật toán xác định toàn dòng bù hệ dq 10 Hình 1.12: Thuật toán lựa chọn s ng điều hòa cần bù hệ dq 11 mạch1.13: Hình ảnh mạch lọc tích cực APF 2000 hãng Delta 13 Hình 2.01: Bộ nghịch lƣu hai bậc nguồn điện lƣới AC 15 Hình 2.02: Giản đồ vectơ nghịch lƣu 16 Hình 2.03: (a) Khi IL trùng Us (b) Khi IL ngƣợc với Us 17 Hình 2.04: (a) Cấu trúc điều khiển vòng hở , (b) Sơ đồ mạch tƣơng đƣơng 18 Hình 2.05: (a) Cấu trúc điều khiển vòng hở , (b) sơ đồ mạch tƣơng đƣơng 19 Hình 2.06: Tín hiệu sóng mang s ng điều khiển phƣơng pháp CBPWM 20 Hình 2.07: Nguyên lý phƣơng pháp điều chế CBPWM 21 Hình 2.08: pham vi điều khiển tuyến tính khi ma ≤ 22 Hình 2.09: Sơ đồ nguyên lý đồ nghịch lƣu pha 23 Hình 2.10: Trạng thái đ ng ngắt khóa nghịch lƣu 24 Hình 2.11: Bộ nghịch lƣu trạng thái V1 25 Hình 2.12 : V7 & V0 25 Hình 2.13: Các vector sở sector V ref hệ trục α –β 26 Hình 2.14: Một phần sáu hình lục giác phƣ ơng pháp SVPWM 27 Hình 2.15: Hình mẩu xung chuyển mạch cho sector 30 viii Hình 2.16: Thời gian chuyển mạch kh a bán dần sector 31 Hình 2.17: Điều khiển dòng hysteresis cho nghịch lƣu hai bậc 32 Hình 2.18 Sơ đồ mô tả điều khiển dòng điện phƣơng pháp hysteresis 32 Hình 2.19: Sơ đồ cấu trúc điều khiển pi 33 Hình 2.20: Bộ nghịch lƣu ba pha đơn giản hóa 35 Hình 2.21: Sơ đồ điều khiển dòng PI hệ tọa độ αβ 36 Hình 2.22: Chuyển đổi từ hệ tọa độ abc sang hệ tọa độ dq 37 Hình 2.23: Bộ quan sát trạng thái 39 Hình 3.01: Vector áp, dòng phức hệ tọa độ αβ 43 Hình 3.02: Ý nghĩa vật lý công suất tức thời thực ảo 47 Hình 3.03: Nguồn ba pha cân tải phi tuyến cầu diode 48 Hình 3.04: Công suất tức thời hệ thống tải phi tuyến (a) p (b) q 48 Hình 3.05: Bộ lọc tích cực song song 49 Hình 3.06: Tính dòng cần bù dựa theo lý thuyết p-q 50 Hình 4.01: Sơ đồ khối thực nghiệm lọc tích cực hoàn chỉnh 51 Hình 4.02: Hình ảnh board điều khiển dùng dsp TMS320F28335 52 Hình 4.03: Hình ảnh board công suất lọc tích cực 52 Hình 4.04: Mạch lái MOSFET dùng IC IR 2110S 53 Hình 4.05: Hinh ảnh IC IR2110S 53 Hình 4.06: Sơ đồ mạch nội IC IR2110S 54 Hình 4.07: Ký hiệu, Thông số, Hình ảnh MOSFET IRF640S 55 Hình 4.08: Mạch cảm biến dòng dùng IC ACS712-5 55 Hình 4.09: Mạch cảm biến áp dùng IC AMC1200 56 Hình 4.10: Hình ảnh IC AMC1200 56 Hình 4.11: Tải phi tuyến 57 Hình 4.12: Cuộn kháng lọc dòng 58 Hình 4.13: Giải thuật chi tiết tính dòng cần bù 59 Hình 4.14: Giải thuật điều khiển dòng hysteresis chi tiết 60 Hình 5.01: Sơ đồ mô APF 61 Hình 5.02: Sơ đồ mô khối Nonlinear load 62 ix Hình 5.03: Sơ đồ mô khối PQ & I – compensation Calc 62 Hình 5.04: Sơ đồ mô khối Hysteresis controler 63 Hình 5.05: Áp nguồn ba pha kh ng lọc 63 Hình 5.06: Dòng nguồn ba pha kh ng lọc 63 Hình 5.07: Pha a kh ng lọc : (a) Áp nguồn; (b) Dòng nguồn; (c) Dòng tải 64 Hình 5.08: Phân tích FFT dòng nguồn kh ng lọc, THD = 28.38 % 64 Hình 5.09: Tỉ lệ biên độ hài bậc cao so với hài In/I1 chƣa lọc 65 Hình 5.10: Các đại lƣợng công suất nguồn lọc chƣa tác động 65 Hình 5.11: Áp nguồn ba pha đƣợc lọc 66 Hình 5.12: Dòng nguồn ba pha đƣợc lọc 66 Hình 5.13: Pha a lọc: (a) Áp nguồn (b) Dòng nguồn (c) Dòng tải (d) Dòng lọc 66 Hình 5.14: Phân tích FFT dòng nguồn đƣợc lọc , THD = 2.31% 67 Hình 5.15: Tỉ lệ biên độ hài bậc cao so với hài In/I1 đƣợc lọc 67 Hình 5.16 : Các đại lƣợng công suất nguồn sau lọc tác động 68 Hình 5.17: Dạng s ng pha A kh ng lọc (a) áp nguồn; (b) dòng nguồn 69 Hình 5.18: Dạng s ng pha A đƣợc lọc (a) áp nguồn; (b) dòng nguồn 69 Hình 6.01: Kết Lucian Asiminoaei [7] 71 Hình 6.02: Kết của K Nishida [15] 71 Hình 6.03: Kết của Luigi Malesani [16] 72 Chương 1: TỔNG QUAN ĐỀ TÀI NGHIÊN CỨU 1.1 Lý chọn đề tài: Trên lƣới điện truyền tải có nhiều phần tử phi tuyến, d n tới làm xuất thành phần sóng hài Các thành phần sóng hài gây nhiều tác hại nghiêm trọng nhƣ làm tăng tổn hao, làm giảm hệ số công suất, ảnh hƣởng tới thiết bị tiêu dùng điện, làm giảm chất lƣợng điện Do đ để nâng cao chất lƣợng điện ta phải giới hạn đƣợc sóng hài lƣới theo tiêu chuẩn tiêu chuẩn IEEE std 519, việc tuân theo tiêu chuẩn bắt buộc để đảm bảo chất lƣợng điện Có nhiều giải pháp khác để hạn chế sóng hài lƣới, số đ sử dụng lọc tích cực dựa linh kiện bán dẩn Vì vậy, t i lựa chọn đề tài “Thiết kế lọc tích cực dùng nghịch lƣu bậc lọc sóng sóng hài bậc cao bù công suất phản kháng” 1.2 Cơ sở khoa học ý nghĩa thực tiễn đề tài 1.2.1 Ảnh hưởng sóng hài bù công suất phản kháng 1.2.1.1 Ảnh hưởng sóng hài Sóng hài coi nhƣ tổng dạng sóng sin mà tần số bội số nguyên tần số Hình 1.01: Thành phần hài 85 Digital Value = 4096 x (Điện áp ngõ vào Analog – DCLO)/3 ngõ vào khoảng (0V;3V) (ADCLO: chân nối với điện áp tham chiếu, đa số ứng dụng thƣờng nối với 0V) - Chế độ chuyển đổi tự động cho phép chuyển đổi 16 lần phiên chuyển đổi - Có thể bắt đầu chuyển đổi (SOC) theo kiện: S/W- dùng phần mềm lệnh chuyển đổi ePWM 1-6 GPIO XINT2 - Khả tạo ngắt linh hoạt kết thúc phiên chuyển đổi (EOS) Nguyên lý chuyển đổi: Bộ sequencer ADC gồm sequencer trạng thái độc lập đƣợc ghép nối tiếp (cascaded mode) để trở thành sequencer 16 trạng thái Trong trƣờng hợp ADC có khả tự động chuyển đổi, nghĩa lần nhận yêu cầu “start of conversion – SOC” bắt đầu chuyển đổi, giá trị chuyển đổi kênh ADCINxx đƣợc chứa ghi ADCRESULTn theo thứ tự: ADCINA0 → ADCRESULT0 ADCINB0 → ADCRESULT1 ADCINA1 → ADCRESULT2 ADCINB1 → ADCRESULT3 … ADCINB7 → ADCRESULT15 Module ADC hoạt động lấy m u đồng thời lấy m u tuần tự, trạng thái ghi CONVxx định chân lấy m u chuyển đổi Lấy m u (sequential sampling): bit CONVxx định chân lấy m u với MSB chọn S/H, bit số thứ tự chân, ví dụ 0101b ADCINA5 đƣợc chọn chân lấy m u, 1011b ADCINB3 đƣợc chọn Lấy m u đồng thời (simultaneous sampling): MSB bit CONVxx đƣợc bỏ qua, bit số thứ tự chân đƣợc chọn (cho hai kênh A B), ví dụ CONVxx = 0110b ADCINA6 đƣợc lấy m u S/H-A đồng thời ADCINB6 đƣợc lấy m u S/H-B 86 Hình A.12: Lấy m u đồng thời 87 Phụ ục B: CODE ĐIỀU KHIỂN APF #include #include #include #include #include "DSP28x_Project.h" #include "Discrete.h" #include "rtwtypes.h" // Khai báo số lựa chọn bật tắt tính lọc tích cực // Nếu FILTER_ON = thực tính lọc // Nếu FILTER_ON = tắt tính lọc #define FILTER_ON // Các chân tín hiệu chip DSP #define #define BEEP_ON BEEP_OFF GpioDataRegs.GPCSET.bit.GPIO79 GpioDataRegs.GPCCLEAR.bit.GPIO79 #define #define #define #define #define #define #define #define DATA_HIGH DATA_LOW SCK_HIGH SCK_LOW STR_HIGH STR_LOW ENA_HIGH ENA_LOW GpioDataRegs.GPASET.bit.GPIO16 GpioDataRegs.GPACLEAR.bit.GPIO16 GpioDataRegs.GPASET.bit.GPIO18 GpioDataRegs.GPACLEAR.bit.GPIO18 GpioDataRegs.GPASET.bit.GPIO19 GpioDataRegs.GPACLEAR.bit.GPIO19 GpioDataRegs.GPASET.bit.GPIO17 GpioDataRegs.GPACLEAR.bit.GPIO17 #define #define #define #define MENU UP DOWN ESC GpioDataRegs.GPBDAT.bit.GPIO45 GpioDataRegs.GPBDAT.bit.GPIO44 GpioDataRegs.GPBDAT.bit.GPIO43 GpioDataRegs.GPBDAT.bit.GPIO42 #define #define DISPLAY_ENABLE DISPLAY_OFF GpioDataRegs.GPACLEAR.bit.GPIO17 GpioDataRegs.GPASET.bit.GPIO17 #define #define BUCK_OFF BUCK_ON GpioDataRegs.GPCSET.bit.GPIO68 GpioDataRegs.GPCCLEAR.bit.GPIO68 #define #define DUTY_MAX DUTY_MIN 2940 200 #define SAMPLE 600 void delay_ms(unsigned int ms); void Gpio_Settings(void); void shift_data(unsigned char Data); void display(float data); interrupt void ScaRxISR(void); void scia_putchar(int a); void scia_msg(char *msg); void SetDuty_ePWMs(unsigned int *duty); void process_command(void); interrupt void Cpu_Timer0_Isr(void); 88 void SetDuty_ePWM1(unsigned int *duty); void SetDuty_ePWM2(unsigned int *duty); void SetDuty_ePWM3(unsigned int *duty); extern void DSP2833x_Remove_NoiseLib(void); extern double LPF_Filter(double value); void Discrete_initialize(void); unsigned char DIGIT[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; char Command[8]; char Message[64]; unsigned int Duty_ePWM1 = DUTY_MIN; unsigned int Duty_ePWM2 = DUTY_MIN; unsigned int Duty_ePWM3 = DUTY_MIN; int isProcessCommand = 0; int Running = 0; int DirectionInDebug = 1; // Khai báo nhớ đệm tín hiệu để hiển thị dạng sóng int Debug_Buffer_A[SAMPLE]; int Debug_Buffer_B[SAMPLE]; unsigned int Index_Debug = 0; // Khai báo biến điện áp dòng điện double double double double double double Voltage_Phase_A, Voltage_Phase_B, Voltage_Phase_C; Current_Source_Phase_A, Current_Source_Phase_B, Current_Source_Phase_C; Current_Load_Phase_A, Current_Load_Phase_B, Current_Load_Phase_C; Current_Comp_Phase_A, Current_Comp_Phase_B, Current_Comp_Phase_C; Volt_DC, Ref_VDC = 30; Ploss; real_T real_T double double double double rtb_Sum; rtb_Saturate; Valpha, Vbeta, Ialpha, Ibeta; Pv, Qv, Posc, LPF_P; Ic1, Ic2; ICa, ICb, ICc; // Khai báo cấu trúc liệu PI số DW_Discrete_T Discrete_DW; ExtU_Discrete_T Discrete_U; ExtY_Discrete_T Discrete_Y; RT_MODEL_Discrete_T Discrete_M_; RT_MODEL_Discrete_T *const Discrete_M = &Discrete_M_; P_Discrete_T Discrete_P = { 99.4957728522049, /* Variable: Ki * Referenced by: '/Integral Gain' 89 0.0497478864261024, 10.0, 100.0, 1900.0, 0.001, 0.0 */ /* Variable: Kp * Referenced by: '/Proportional Gain' */ /* Mask Parameter: DiscretePIDController_Kb * Referenced by: '/Kb' */ /* Mask Parameter: DiscretePIDController_LowerSatu * Referenced by: '/Saturate' */ /* Mask Parameter: DiscretePIDController_UpperSatu * Referenced by: '/Saturate' */ /* Computed Parameter: Integrator_gainval * Referenced by: '/Integrator' */ /* Expression: InitialConditionForIntegrator * Referenced by: '/Integrator' */ }; // Hàm tạo trễ thời gian void delay_ms(unsigned int ms) { unsigned int i; for(i = 0; i < ms ; i++) { DELAY_US(1000); } } // Hàm thiết lập thông số ban đầu cho điều khiển PI void Discrete_initialize(void) { rtmSetErrorStatus(Discrete_M, (NULL)); (void) memset((void *)&Discrete_DW, 0,sizeof(DW_Discrete_T)); Discrete_U.u = 0.0; Discrete_Y.y = 0.0; Discrete_DW.Integrator_DSTATE = Discrete_P.Integrator_IC; } // Hàm thực truyền liệu led hiển thị void shift_data(unsigned char Data) { unsigned char i; for(i = 0; i < 8; i++) { if((Data & 0x80) == 0x80) { DATA_HIGH = 1; } else 90 { DATA_LOW = 1; } SCK_LOW = 1; Data *= 2; SCK_HIGH = 1; } SCK_LOW = 1; } void display(float data) { unsigned int number; if((data < 10000) && (data >= 1000)) { number = (unsigned int)(data); shift_data(DIGIT[((number % 1000) % 100) % 10]); shift_data(DIGIT[((number % 1000) % 100) / 10]); shift_data(DIGIT[(number % 1000) / 100]); shift_data(DIGIT[(number / 1000)]); } if((data < 1000) && (data >= 100)) { number = (unsigned int)(data * 10); shift_data(DIGIT[((number % 1000) % 100) % 10]); shift_data(DIGIT[((number % 1000) % 100) / 10] & 0x7F); shift_data(DIGIT[(number % 1000) / 100]); shift_data(DIGIT[(number / 1000)]); } if((data < 100) && (data >= 10)) { number = (unsigned int)(data * 100); shift_data(DIGIT[((number % 1000) % 100) % 10]); shift_data(DIGIT[((number % 1000) % 100) / 10]); shift_data(DIGIT[(number % 1000) / 100] & 0x7F); shift_data(DIGIT[(number / 1000)]); } if((data < 10) && (data >= 0)) { number=(unsigned int)(data * 1000); shift_data(DIGIT[((number % 1000) % 100) % 10]); shift_data(DIGIT[((number % 1000) % 100) / 10]); shift_data(DIGIT[(number % 1000) / 100]); shift_data(DIGIT[(number / 1000)]& 0x7F); } STR_HIGH = 1; delay_ms(1); STR_LOW = 1; } // Hàm thiết lập trạng thái chân tín hiệu ban đầu cho DSP void Gpio_Settings(void) { EALLOW; GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; 91 GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF; GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF; GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 0; GpioCtrlRegs.GPCDIR.bit.GPIO68 = 1; GpioDataRegs.GPCSET.bit.GPIO68 = 1; // : GPIO // : Output, = Input // Shutdown Buck GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 0; GpioCtrlRegs.GPCDIR.bit.GPIO79 = 1; GpioDataRegs.GPCCLEAR.bit.GPIO79 = 1; // : GPIO // : Output, = Input GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0; GpioCtrlRegs.GPADIR.bit.GPIO16 = 1; GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; GpioCtrlRegs.GPADIR.bit.GPIO17 = 1; GpioDataRegs.GPASET.bit.GPIO17 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0; GpioCtrlRegs.GPADIR.bit.GPIO18 = 1; GpioDataRegs.GPACLEAR.bit.GPIO18 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; (SCITXDA) // Enable pull-up for GPIO28 (SCIRXDA) // Enable pull-up for GPIO29 GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; operation GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; operation // Asynch input GPIO28 (SCIRXDA) // Configure GPIO28 for SCIRXDA // Configure GPIO29 for SCITXDA GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pull-up on GPIO0 (EPWM1A) // Enable pull-up on GPIO1 (EPWM1B) GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // Configure GPIO0 as EPWM1A // Configure GPIO1 as EPWM1B GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pull-up on GPIO2 (EPWM2A) // Enable pull-up on GPIO3 (EPWM2B) GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // Configure GPIO2 as EPWM2A // Configure GPIO3 as EPWM2B GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO4 (EPWM3A) // Enable pull-up on GPIO5 (EPWM3B) GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // Configure GPIO4 as EPWM3A // Configure GPIO5 as EPWM3B GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; 92 GpioDataRegs.GPACLEAR.bit.GPIO3 = 1; GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; GpioDataRegs.GPACLEAR.bit.GPIO5 = 1; GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO45 = 0; // Input MENU GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO44 = 0; // Input UP GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO43 = 0; // Input DOWN GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO42 = 0; // Input ESC EDIS; } // Hàm thực copy vùng nhớ RAM void MemCopy(unsigned int *SourceAddr, unsigned int* SourceEndAddr, unsigned int* DestAddr) { while(SourceAddr < SourceEndAddr) { *DestAddr++ = *SourceAddr++; } return; } // Hàm ngắt Timer, sau 20us DSP đọc giá trị điện áp, dòng điện thực tính lọc (tùy vào giá trị FILTER_ON) interrupt void Cpu_Timer0_Isr(void) { CpuTimer0.InterruptCount++; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; ngắ AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; i động while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {} n asm(" RPT #11 || NOP"); n chu để ộ ề ị ại ạng i đ ng nế không n đ ngắ động xong chu kylmau // Nếu FILTER_ON = không lọc, để tự nhiên #if FILTER_ON == Voltage_Phase_A = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT0) >> 4) * / 4096 0.9) / 1.2 - 0.1); Voltage_Phase_B = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT2) >> 4) * / 4096 0.9) / 1.2 - 0.1) + 0.6; Voltage_Phase_C = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT4) >> 4) * / 4096 0.9) / 1.2 - 0.1) + 1.2 ; Current_Source_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT14) >> 4) * / 4096)) - 12.5 - 0.3; Current_Source_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT13) >> 4) * / 4096)) - 12.5 - 0.35; 93 Current_Source_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT15) >> 4) * / 4096)) - 12.5 - 0.3; Current_Load_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT6) >> 4) * / 4096)) - 12.5 - 0.38; Current_Load_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT8) >> 4) * / 4096)) - 12.5 - 0.35; Current_Load_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT10) >> 4) * / 4096)) - 12.5 - 0.35; Current_Comp_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT7) >> 4) * / 4096)) - 12.5 - 0.3; Current_Comp_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT9) >> 4) * / 4096)) - 12.5 - 0.3; Current_Comp_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT11) >> 4) * / 4096)) - 12.5 - 0.3; Volt_DC = 28 * ((float)((AdcRegs.ADCRESULT12) >> 4) * / 4096) ; #else // Nếu FILTER_ON = thực lọc // Đ giá trị điện áp dòng điện Voltage_Phase_A = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT0) >> 4) * / 4096 0.9) / 1.2 - 0.1); Voltage_Phase_B = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT2) >> 4) * / 4096 0.9) / 1.2 - 0.1) + 0.6; Voltage_Phase_C = 183 * (0.3 * ((float)((AdcRegs.ADCRESULT4) >> 4) * / 4096 0.9) / 1.2 - 0.1) + 1.2 ; Current_Source_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT14) >> 4) * / 4096)) - 12.5 - 0.3; Current_Source_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT13) >> 4) * / 4096)) - 12.5 - 0.35; Current_Source_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT15) >> 4) * / 4096)) - 12.5 - 0.3; Current_Load_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT6) >> 4) * / 4096)) - 12.5 - 0.38; Current_Load_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT8) >> 4) * / 4096)) - 12.5 - 0.35; Current_Load_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT10) >> 4) * / 4096)) - 12.5 - 0.35; Current_Comp_Phase_A = * (1.47 * ((float)((AdcRegs.ADCRESULT7) >> 4) * / 4096)) - 12.5 - 0.3; Current_Comp_Phase_B = * (1.47 * ((float)((AdcRegs.ADCRESULT9) >> 4) * / 4096)) - 12.5 - 0.3; Current_Comp_Phase_C = * (1.47 * ((float)((AdcRegs.ADCRESULT11) >> 4) * / 4096)) - 12.5 - 0.3; Volt_DC = 28 * ((float)((AdcRegs.ADCRESULT12) >> 4) * / 4096) ; Discrete_U.u = Ref_VDC - Volt_DC; rtb_Sum = Discrete_P.Kp * Discrete_U.u + Discrete_DW.Integrator_DSTATE; 94 if (rtb_Sum > Discrete_P.DiscretePIDController_UpperSatu) { rtb_Saturate = Discrete_P.DiscretePIDController_UpperSatu; } else if (rtb_Sum < Discrete_P.DiscretePIDController_LowerSatu) { rtb_Saturate = Discrete_P.DiscretePIDController_LowerSatu; } else { rtb_Saturate = rtb_Sum; } Discrete_Y.y = rtb_Saturate; Ploss = (Discrete_Y.y); Discrete_DW.Integrator_DSTATE += ((rtb_Saturate - rtb_Sum) * Discrete_P.DiscretePIDController_Kb + Discrete_P.Ki * Discrete_U.u) * Discrete_P.Integrator_gainval; // Chuyển đ i sang hệ alpha-beta Valpha = 0.81649658092772603273242802490196 * (Voltage_Phase_A - (0.5 * Voltage_Phase_B) - (0.5 * Voltage_Phase_C)); // sqrt(2/3) Vbeta = 1.4142135623730950488016887242097 * ((0.5 * Voltage_Phase_B)-(0.5 * Voltage_Phase_C)); //sqrt(2) Ialpha = 0.81649658092772603273242802490196 * (Current_Load_Phase_A-(0.5 * Current_Load_Phase_B)-(0.5 * Current_Load_Phase_C)); // sqrt(2/3) Ibeta = 1.4142135623730950488016887242097 * ((0.5 * Current_Load_Phase_B) (0.5 * Current_Load_Phase_C)); //sqrt(2) Pv = (Valpha * Ialpha) + (Vbeta * Ibeta); Qv = (Vbeta * Ialpha) - (Valpha * Ibeta); LPF_P = LPF_Filter(Pv); Posc = Ploss + LPF_P - Pv; Ic1 = (-1/(Valpha * Valpha + Vbeta * Vbeta)) * ((Posc * Valpha)-(Qv * Vbeta)); Ic2 = (-1/(Valpha * Valpha + Vbeta * Vbeta))*((Posc * Vbeta) + (Qv * Valpha)); // Tính dòng bù ICa = 0.81649658092772603273242802490196 * (Ic1); // sqrt(2/3) ICb = 0.81649658092772603273242802490196 * ((0.5*Ic1)+((0.86602540378443864676372317075294)*Ic2)); // sqrt(2/3) ICc = 0.81649658092772603273242802490196 * ((-0.5*Ic1)((0.86602540378443864676372317075294)*Ic2)); DSP2833x_Remove_NoiseLib(); // Làm cho dòng điện cuộn lọc bám theo dòng bù if(ICa >= Current_Comp_Phase_A) { GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO0 = 1; 95 } else { GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO1 = 1; } if(ICb >= Current_Comp_Phase_B) { GpioDataRegs.GPACLEAR.bit.GPIO3 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO2 = 1; } else { GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO3 = 1; } if(ICc >= Current_Comp_Phase_C) { GpioDataRegs.GPACLEAR.bit.GPIO5 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO4 = 1; } else { GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; DELAY_US(10); GpioDataRegs.GPASET.bit.GPIO5 = 1; } #endif // Ghi tín hiệu cần đ nhớ đệm để hiển thị dạng sóng if(Index_Debug < SAMPLE) { Debug_Buffer_A[Index_Debug] = (int)((Voltage_Phase_B) * 100); Debug_Buffer_B[Index_Debug] = (int)((Current_Source_Phase_B) * 100); Index_Debug++; } else { Index_Debug = 0; } PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } // Hàm thiết lập đ ADC void SetupADC(unsigned int maxConv, unsigned int adcChselSEQ1Reg, unsigned int adcChselSEQ2Reg, unsigned int adcChselSEQ3Reg, unsigned int adcChselSEQ4Reg) { AdcRegs.ADCTRL1.bit.SUSMOD = 0x0; // Emulation suspend ignored AdcRegs.ADCTRL1.bit.ACQ_PS = 4; // i i i n in i ời gian ấ AdcRegs.ADCTRL1.bit.CPS = 1; // Core clock pre-scaler, flck/2 mcro 96 AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; // Core clock divider AdcRegs.ADCREFSEL.bit.REF_SEL = ; // n g ng n tham iế AdcRegs.ADCOFFTRIM.bit.OFFSET_TRIM = 0;// Set Offset Error Correctino Value ng i AdcRegs.ADCTRL1.bit.CONT_RUN = 0;// 0:Start-Stop or continuous sequencer mode AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; //Bandgap and reference powered up, sau // ộ ộ ới động n AdcRegs.ADCTRL3.bit.SMODE_SEL = ; // 1:Simultaneous, 0:Sequential sampling AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = maxConv;// Number of conversions in CONV2 when // ing ộ chuyên đ i ự động AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1:Cascaded, 0:Dual sequencer iế ậ ộ // ển đ i casc AdcRegs.ADCCHSELSEQ1.all = adcChselSEQ1Reg;/* Channels for conversion*/ AdcRegs.ADCCHSELSEQ2.all = adcChselSEQ2Reg;/* Channels for conversion*/ AdcRegs.ADCCHSELSEQ3.all = adcChselSEQ3Reg;/* Channels for conversion*/ AdcRegs.ADCCHSELSEQ4.all = adcChselSEQ4Reg;/* Channels for conversion*/ AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; ề trang i n } // Hàm ơng trình void main(void) { // Thiết lập giá trị hệ thống cho DSP InitSysCtrl(); i động ệ ống điề //Peripheral Clocks iển n PLL, WatchDog, enable // Thiết lập IO Gpio_Settings(); EALLOW; // Lựa chọn clock cho ADC #if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) //25.0 MHz #endif #if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) //25.0 MHz #endif EDIS; EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK; EDIS; MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); InitFlash(); DINT; InitPieCtrl(); // Global Disable all Interrupts i ghi điề iển ới ạng i địn = = 97 IER = 0x0000; // Disable CPU interrupts IFR = 0x0000; // Clear all CPU interrupt flags InitPieVectTable(); // Cho phép véc i động ng cho ơng n ngắ ngắt EALLOW; PieVectTable.TINT0 = &Cpu_Timer0_Isr; EDIS; memset(Command,0,8); // Thiết lập ADC InitAdc(); i iế ị ng ại i SetupADC(7U, 12816U, 30292U, 0U, 0U); Discrete_initialize(); // Thiết lập Timer InitCpuTimers(); ConfigCpuTimer(&CpuTimer0, 150, 20); // 20us // Cho phép ngắt hệ thống PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//Enable the PIE block PieCtrlRegs.PIEIER9.bit.INTx1 = 1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; IER |= M_INT9; IER |= M_INT1; EINT;// cho ERTM;//cho // PIE Group 9, int1 //Cho phep ngat INT7 cua Group // Enable CPU INT ngắ ngắ n tiên // Bât loa BEEP_ON = 1; delay_ms(100); BEEP_OFF = 1; delay_ms(250); BEEP_ON = 1; delay_ms(100); BEEP_OFF = 1; delay_ms(250); DISPLAY_ENABLE = 1; // Hiển thị liệu mẫu để thử phần display display(12.68); // Cho phép chạy Timer CpuTimer0Regs.TCR.all = 0x4001; ại i 98 while(1) { delay_ms(100); } } Phụ ục C: TIÊU CHUẨN IEEE std 519 Đây tiêu chuẩn Viện Kỹ thuật Điện Điện tử (IEEE – Institute of Electrical and Electronics Engineers) quy định giới hạn cho phép thành phần hài hệ thống phân phối điện Nội dung tiêu chuẩn thể hai bảng sau: 99