
DSP28335三相逆变电路电压闭环程序及数字电源程序源代码文件与PDF说明
最近在搞三相逆变电源的项目,用DSP28335做电压闭环控制真是酸爽。这玩意儿既要懂电力电子又
要会写代码,调试时被炸过几次管子的兄弟应该都懂。今天咱就唠唠这个数字电源开发里的门道,关键代
码直接贴出来分析。
硬件部分建议先拿现成驱动板练手,重点注意母线电容的ESR参数。我见过有人拿普通电解电容硬
上,结果闭环震荡直接炸出烟花。软件层面最核心的是ADC同步采样,用EPWM触发采样序列这个配置特别关
键:
```c
void Init_ADC(void) {
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF; //采样窗口16个SYSCLK
AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; //HSPCLK四分频
AdcRegs.ADCMAXCONV.bit.MAX_CONV = 2; //转换3个通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; //A相电压
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; //B相电压
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 2; //C相电压
}
```
这段配置实现了三相电压同步采样,注意ADC的采样保持时间要和PWM载波周期匹配。之前有个坑是
采样窗口设太小导致结果抖动,后来发现是没考虑PCB走线的分布电容。
闭环控制的核心在PID算法实现,这里用增量式PID防止积分饱和。特别要注意Q格式处理,DSP的定
点运算得做好防溢出:
```c
int32 PID_Calc(PID_Struct *pid, int32 error) {
int32 p_term = _IQmpy(pid->Kp, error);
int32 i_term = _IQmpy(pid->Ki, pid->integral);
int32 d_term = _IQmpy(pid->Kd, error - pid->last_error);
pid->integral += error;
pid->last_error = error;
//输出限幅防止过调
int32 output = p_term + i_term + d_term;