在前面几篇文章中,着重讲述了从初学者角度,如何上手搭建一个数字电源开发板,对于程序内部PI差分方程参数是如何计算的,笔者一带而过,并没有太深入地介绍。
最近在用simplis做数字电源的仿真,觉得有必要向读者介绍一种计算PID参数的思路,与对此感兴趣的读者共同讨论。仿真模型就是前面文中用到的数字电源开发板上其中的同步buck电路。下面,笔者先抛砖引玉,介绍一下具体的方法。仿真模型可以在附件中下载。
1)主功率电路的传递函数的获得。
从图中可以看到,数字电源中的PI软件算法其实已经用数字电路的方式搭建起来,我们仿真的主要目标就是要得到PI电路中的GAIN_2和GAIN_3的参数。
先将“1”和“2”打到如图所示的位置。进行AC开环仿真。得到开环环路bode图:
将开环传递函数的曲线导入到matlab中,至于如何导入,笔者以前的文章中也有介绍,这里不再重复。最终在MATLAB中得到与上图一致的曲线
通过系统识别,可以得到主功率电路的s域传递函数。
设主功率电路传递函数为Gp:
对于数字电源来说,与模拟电源相比,开环环路中多两个环节:零阶保持器和PWM更新延时环节。所以Gp还要与这两个环节的传递函数相乘,然后再离散化,这样才能得到数字电源主功率电路的Z域传递函数。下面就是求取离散传递函数的的过程:
设T为采样时间,因为ADC触发设定为每2个PWM周期采样一次,所以T=20us
Td为PWM更新延时,因为从ADC被触发开始到PWM更新完成,要经历了一个PWM周期,所以Td=10us。
matlab代码如下:
Gz就是数字电源离散化的主功率Z传递函数。我们要把这个函数导入到sisotool中,计算PID的参数,命令是:
得到:
即使当PID补偿器是1时,开环环路也是稳定的。只是穿越频率太低,186Hz。
在计算PID参数之前,需要将输出电压的采样分压比写入到H中。按下面次序:
点击“OK”后,再进行PID计算
穿越频率设为2KHz,相位裕度设为75°。
算出的补偿器C的Z传递函数为
如果想将C导入到matlab主界面下,如下:
将C的Z域传递函数改写为PID的形式,
将得到的参数代入到simplis模型中,注意图中红圈中两个开关的位置。
GAIN_2的增益为101171,GAIN_3的增益为5324,进行AC仿真
与matlab得到的曲线图对比
从图中可以看出,simplis仿真出来的bode图的穿越频率为2KHz,相位裕度为75°,与matlab计算值一致。
下图为simplis仿真出来的一些关键节点的波形
将上面的参数写入到dsp硬件中,用网络分析仪测试实际环路波形。
输入电压:15V
输出电压:4.21V 输出电流:1A
如下图:
可以得到实际数字电源的穿越频率为3.3KHz,相位裕度为60°。与计算值有较大的误差,估计与实际电路中输出电解电容的ESR和simplis模型中电解电容的ESR有较大出入有关,另外,实际电路中的MOS管驱动芯片的延时较大,也是影响相位裕度的主要的因素,simplis仿真中驱动延时较小,所以与实际误差较大。但是曲线的整体形状与simplis仿真生成的曲线比较相似,仿真出的结果还是有一定价值的。有助于我们在计算结果的基础上调试实际电源。
总结:
介绍了一种计算数字电源环路的方法,结合matlab强大的计算能力,能较快速的得到PID参数。受制于simplis模型的准确程度,计算值与实际值有较大误差,但在计算值的基础上再进行硬件的调试工作,就会比较容易得到更准确的结果。