一、硬件初始化配置1. 系统时钟与GPIO配置#includeDSP28x_Project.hvoidSystemInit(void){// 关闭看门狗DINT;InitSysCtrl();// 配置系统时钟为150MHzInitPllSys(150,10,1,0);// 配置GPIO为外设功能EALLOW;GpioCtrlRegs.GPADIR.bit.GPIO00;// ePWM1A设为输入GpioCtrlRegs.GPADIR.bit.GPIO10;// ePWM1B设为输入GpioCtrlRegs.GPADIR.bit.GPIO20;// ePWM2A设为输入GpioCtrlRegs.GPADIR.bit.GPIO30;// ePWM2B设为输入EDIS;}2. ePWM模块初始化以ePWM1为例voidEPwm1_Init(uint16_tperiod,floatduty){// 1. 时钟分频配置EPwm1Regs.TBPRDperiod-1;// 周期寄存器10kHz对应1000EPwm1Regs.TBCTL.bit.CTRMODETB_COUNT_UPDOWN;// 双向计数EPwm1Regs.TBCTL.bit.HSPCLKDIV0;// 主时钟分频EPwm1Regs.TBCTL.bit.CLKDIV0;// 系统时钟分频// 2. 比较值配置EPwm1Regs.CMPA.half.CMPA(uint16_t)(duty*period);// 占空比EPwm1Regs.CMPBperiod-EPwm1Regs.CMPA;// 互补通道// 3. 动作限定配置EPwm1Regs.AQCTLA.bit.CAUAQ_SET;// A通道递增时置高EPwm1Regs.AQCTLA.bit.CADAQ_CLEAR;// A通道递减时清零EPwm1Regs.AQCTLB.bit.CBUAQ_SET;// B通道递增时置高EPwm1Regs.AQCTLB.bit.CBDAQ_CLEAR;// B通道递减时清零// 4. 死区控制1.5μsEPwm1Regs.DBCTL.bit.DBFED150;// 上升沿延迟EPwm1Regs.DBCTL.bit.DBRIS1;// 启用死区// 5. 启动计数器EPwm1Regs.TBCTL.bit.ENABLE1;// 使能计数器}二、ADC同步采样配置1. ADC模块初始化voidAdc_Init(void){// 关闭ADC电源EALLOW;AdcRegs.ADCCTL1.bit.ADCPWDNZ0;DELAY_US(1000);// 等待电源稳定AdcRegs.ADCCTL1.bit.ADCPWDNZ1;// 上电// 配置ADC时钟为12MHzSYSCLK/2AdcRegs.ADCCTL1.bit.ADCREFSEL0;// 内部1.2V参考AdcRegs.ADCCTL1.bit.ADCCLKPS0x3;// 分频系数// 配置通道同步采样ePWM1触发AdcRegs.ADCSOC0CTL.bit.CHSEL0;// 通道0电压采样AdcRegs.ADCSOC0CTL.bit.TRIGSEL5;// ePWM1触发AdcRegs.ADCSOC0CTL.bit.ACQPS14;// 采样保持时间AdcRegs.ADCSOC1CTL.bit.CHSEL1;// 通道1电流A相AdcRegs.ADCSOC1CTL.bit.TRIGSEL5;AdcRegs.ADCSOC1CTL.bit.ACQPS14;AdcRegs.ADCSOC2CTL.bit.CHSEL2;// 通道2电流B相AdcRegs.ADCSOC2CTL.bit.TRIGSEL5;AdcRegs.ADCSOC2CTL.bit.ACQPS14;AdcRegs.ADCSOC3CTL.bit.CHSEL3;// 通道3电流C相AdcRegs.ADCSOC3CTL.bit.TRIGSEL5;AdcRegs.ADCSOC3CTL.bit.ACQPS14;// 启动ADCAdcRegs.ADCCTL1.bit.ADCEN1;}三、双闭环控制算法1. 电压外环PI控制typedefstruct{floatKp;floatKi;floatintegral;floatoutput_max;}PI_Controller;floatVoltage_PI_Control(PI_Controller*pi,floatVref,floatVdc){floaterrorVref-Vdc;pi-integralerror;// 抗积分饱和if(pi-integralpi-output_max)pi-integralpi-output_max;if(pi-integral-pi-output_max)pi-integral-pi-output_max;returnpi-Kp*errorpi-Ki*pi-integral;}2. 电流内环PR控制typedefstruct{floatKp;floatKr;floatalpha;}PR_Controller;floatCurrent_PR_Control(PR_Controller*pr,floatIref,floatIfb,floattheta){// Park变换floatIdIref*cos(theta)Ifb*sin(theta);floatIq-Iref*sin(theta)Ifb*cos(theta);// PR调节floatVdpr-Kp*Idpr-Kr*(Id-Iq);floatVqpr-Kp*Iqpr-Kr*(Iq-Id);// 逆Park变换returnVd*cos(theta)-Vq*sin(theta);}四、中断服务程序ADC触发interruptvoidAdc_isr(void){// 读取ADC结果右对齐floatVdc(AdcResult.ADCRESULT0*3.3f)/4096.0f;floatIa(AdcResult.ADCRESULT1*3.3f)/4096.0f;floatIb(AdcResult.ADCRESULT2*3.3f)/4096.0f;floatIc(AdcResult.ADCRESULT3*3.3f)/4096.0f;// 锁相环计算相位角staticfloattheta0.0f;thetaSRF_PLL(Va,Vb,Vc,theta);// 基于SRF-PLL的相位同步// 电流指令生成单位正弦波floatIref_aIref*cos(theta);floatIref_bIref*cos(theta-2*M_PI/3);floatIref_cIref*cos(theta2*M_PI/3);// 电流环控制floatDuty_aCurrent_PR_Control(current_pr,Iref_a,Ia,theta);floatDuty_bCurrent_PR_Control(current_pr,Iref_b,Ib,theta);floatDuty_cCurrent_PR_Control(current_pr,Iref_c,Ic,theta);// 更新PWM占空比EPwm1Regs.CMPA.half.CMPA(uint16_t)(Duty_a*EPwm1Regs.TBPRD);EPwm2Regs.CMPA.half.CMPA(uint16_t)(Duty_b*EPwm2Regs.TBPRD);EPwm3Regs.CMPA.half.CMPA(uint16_t)(Duty_c*EPwm3Regs.TBPRD);// 清除中断标志PieCtrlRegs.PIEACK.allPIEACK_GROUP1;}五、锁相环SRF-PLL实现floatSRF_PLL(floatVa,floatVb,floatVc,floattheta_prev){// Clark变换到静止坐标系floatalphaVa;floatbeta(Va2*Vb)/sqrt(3);// Park变换到旋转坐标系floatvdalpha*cos(theta_prev)beta*sin(theta_prev);floatvq-alpha*sin(theta_prev)beta*cos(theta_prev);// PI调节器staticfloatintegral0.0f;floaterror0.0f;// 目标vq0integralerror;floatomegaKp_pll*errorKi_pll*integral;// 更新相位角floatthetatheta_prevomega*TS_SAMPLE;// 角度归一化if(theta2*M_PI)theta-2*M_PI;returntheta;}六、保护机制实现1. 过流保护ePWM Trip-ZonevoidEPwm_TripConfig(void){// 配置TZ模块EPwm1Regs.TZSEL.bit.CBC1;// 比较器B触发保护EPwm1Regs.TZCTL.bit.TZA2;// 过流时强制A通道低电平EPwm1Regs.TZCTL.bit.TZB2;// 过流时强制B通道低电平// 中断配置EPwm1Regs.TZINTSEL.bit.TZIF1;// 使能TZ中断EPwm1Regs.TZINTFLG.bit.TZIF0;// 清除标志}interruptvoidEPwm_TZ_ISR(void){// 快速关断所有PWMEPwm1Regs.TZCTL.bit.TZA2;EPwm2Regs.TZCTL.bit.TZA2;EPwm3Regs.TZCTL.bit.TZA2;// 记录故障fault_flag1;// 清除中断标志EPwm1Regs.TZINTFLG.bit.TZIF0;}七、主程序流程voidmain(void){// 系统初始化SystemInit();EPwm1_Init(1000,0.5f);// 10kHz, 50%占空比Adc_Init();EPwm_TripConfig();// 主循环while(1){// 执行后台任务如通信、数据记录}}// 中断向量表配置#pragmaCODE_SECTION(Adc_isr,ramfuncs);#pragmaINTERRUPT(Adc_isr,1);参考代码 三相PFC数字控制代码www.youwenfan.com/contentcss/73162.html八、调试与验证示波器观察点三相电流波形对称性THD5%PWM占空比与电流指令的跟随性直流母线电压纹波2% Vdc性能测试数据参数测试条件典型值输入功率因数220V/50Hz0.998THD1kW负载3.2%效率额定功率96.5%九、扩展功能建议数字预充电通过GPIO控制继电器实现预充电回路。CAN通信集成CAN模块上传运行状态至上位机。自适应PI参数根据负载变化动态调整PI系数。