在附件中有WDS环路计算工具和笔者的源程序代码。
下面开始环路控制的代码编写。
在本例中,其实是用到了两个环路补偿的计算函数,电压环路和电流环路。都是用的3P3Z的补偿算法。不同的是电压环路在FMAC硬件中进行计算,不占用CPU的时间,而电流环路只能用CPU进行软件计算,比较耗费CPU时间。下图是FMAC工作在IIR滤波器模式下的结构图:
从上图中,可以看到环路的差分方程的计算过程。
在程序的初始化时,要初始化这两个环路参数。
/* Init 2p2z using the FMAC */
if (__3p3zInitFmacInt16( &USER_APPL_FMAC, &cntrlFmac,
A1, A2, 0.0,
B0, B1, B2, 0.0,
post_shift, DUTY_TICKS_MIN, DUTY_TICKS_MAX ) != HAL_OK)
{
/* Configuration Error */
Init_Error_Handler();
}
/* Init 2p2z using the CPU */
CNTRL_3p3zInit(&myDcdc.iLoop, iREF,
iA1, iA2, 0.0,
iB0, iB1, iB2, 0.0,
iK, (float_t)iDUTY_TICKS_MIN, (float_t)iDUTY_TICKS_MAX );
还有一点要注意:FMAC硬件计算电压环路参数用的是定点数,而CPU计算的电流环路用的是浮点数。
在这里,给读者推荐一款环路参数软件(STM32 Biricha WDS,简称WDS),专门为STM32平台开发的环路计算软件,支持STM32G474VE,而且是免费的。
可以去这个网站https://www.biricha.com/下载,要翻墙!!!
对应STM32的平台,这个软件是全功能免费的。当然该软件也有对应TI平台的、Microchip平台的版本,不过后面的这两个平台就是收费的了。
下载完后,网站会免费提供给下载者一个注册密码,可以自行获取,在输入注册码后,在ST平台就可以使用全功能的版本了。这里笔者会在附件中提供该软件,但不提供注册码,避免麻烦。
因为本例中用的是两相交错并联BUCK电路,不是纯BUCK电路,而WDS又没有交错并联BUCK的拓普,所以只能用BUCK电路拓普算出一组环路参数后,再其基础上进行调节。
在此页面中设定电路的拓普和预想要达到的穿越频率和相位裕度。
输出电感和输出电容的相关参数。
这样根据前面预想要达到的环路性能指标,该软件可以自动计算出补偿器的零极点的位置,如果对自动计算的结果不太满意,也可以手动放置补偿器零极点的位置。
同时根据补偿器的参数,会实时将该补偿器传递函数的波特图、功率电路及整体开环传递函数的波特图绘制出来,如上图所示。
然后是PWM周期和ADC采样参数的设置,这些工作进行完毕后,会自动计算出FMAC所需要的参数。
然后在其基础上调试环路参数,使环路稳定。
当要用到CPU计算3P3Z补偿器时,就应该选择浮点数据。如下图所示:
上述过程将环路参数整定完成,再计算恒压环路,等待FMAC计算出结果后,然后用该结果更新DAC1和DAC3的参考值。
因为DC电源工作在恒压恒流的模式下,所以要判断恒压环路的结果与恒流环路的结果,哪个比较小,然后用那个较小的值去更新DAC的参考值,以达到自动切换恒压、恒流这两种输出方式的目地。在FMAC的中断中完成了电压环路的闭环。
电流环路在ADC1的中断中进行。
在本例中,还有更多的细节,笔者并没有进行更深一步的展开。比如DMA的工作方式,ADC发出DMA请求的响应,FMAC的工作方式、FMAC缓存的运行机制、COMP如何快速保护等技术细节都需要读者详细阅读芯片的技术手册。
在输入电压48V,输出电压26V,输出电流60A条件下,用网络分析仪测试电源开环bode图:
在WDS理论计算结果的基础上,进行微调后的bode图如上图所示。穿越频率为2.4KHz,相位裕度为106°,基本上达到了设计目标。
下图是交错并联的两个主MOS管源极波形
本程序中,还没用实现同步MOS管的驱动。如果想实现同步整流的功能也比较简单,如下图所示,当检测到输出电流超过一个限值后,驱动PC7(DCM_CTL)引脚为低电平,即可。
电源工作