前段时间在学习STM32G4系列的MCU的过程中,想找个实际的项目来练练手,所以就用笔者上一篇文章中提到的2KW交错并联+同步整流DC-DC的主板,加上STM32G474VE的MCU做主控芯片操练了一下,也有了一些心得,想与大家分享一下。
笔者初次使用ST平台的产品,如有理解不对的地方,还请读者赐教!
STM32G4系列的产品是ST公司最近推出主流的面向数字电源、电机控制应用的MCU。最高支持170MHz的主频,PWM最高分辨率184ps,12路PWM输出。DAC带斜率补偿输出,5个ADC,可以成对采样,带有丰富的ADC触发模式,ADC最高采样速度4MSPS。7个比较器,最低19ns的输出延时,为功率电路提供更快的保护。具体参数就不再详述了,可以去自行搜索。
先介绍STM32平台的搭建:
下载STM32CubeIDE和STM32CubeMX,安装好。其中STM32CubeIDE是集成开发环境,STM32CubeMX是芯片的图形配置开发包和代码生成器。笔者用的集成开发环境是ST官方的,当然也可以选择第三方的产品。还要说一句,安装好STM32CubeMX后,最好也装上MX中的数字电源插件(X-CUBE-DPower)。这个插件中有许多值得仔细阅读的例程代码,而且配合ST官方的开发板B-G474-DPOW1,能进行数字电源的开发工作。笔者本项目中的许多代码就从这些例程代码中移植而来。
如果环境搭建和IDE使用过程中有什么问题,请自行搜索。
笔者用的仿真器是ST-LINK/V2,在网上可以很方便的买到,但最好买隔离版本的。
笔者用的是STM32G474VE这枚芯片,现将该练手的数字电源主要输入输出参数列出来:
输入电压:38VDC——58VDC
输出电压:26VDC±0.5VDC
输出电流:77A
功率电路拓普:两相交错并联+同步整流BUCK电路。
控制环路模式:峰值电流型全数字控制环路,恒压恒流输出。
功率电路的框图如下:
下面介绍STM32G474VE外设资源的分配:
PWM输出: TA1——PWM1A
TA2——PWM1B
TB1——PWM2A
TB2——PWM2B
ADC采样: 输出电压采样Vout_FB——ADC3的IN11通道
输出电流采样Iout_FB——ADC1的IN3通道
比较器: 输入电流互感器信号CS1+——COMP1+
输入电流互感器信号CS2+——COMP3+
DMA: 连接ADC3的IN11通道,传送输出电压采样值。
串口: USART2
FMAC(滤波计算加速器):用硬件来做环路算法,只提供了一个。分配给稳压环路计算,稳流环路就只能用软件计算了。
外设中断: FMAC中断(计算电压环路)、ADC1采样中断(计算电流环路)、串口中断。
系统中断: 系统tick定时器中断,用来产生1ms的系统定时心跳。默认优先级最低,为了不被其它的中断干扰,将其改为0(最高)优先级。
DAC: DAC1——COMP1-(带斜率补偿)
DAC3——COMP3-(带斜率补偿)
下图就是芯片外设的配置及互连框图:
接下来,在MX中先配置系统时钟。
本例中,用的是外接12MHz的晶振,所以这样配置:
再选择编程接口,笔者用的是Serial Wire接口。
选择系统外接晶振选项:
接下来,详细说明外设的配置过程。
1)PWM输出
在STM32G474VE中PWM输出是由HRTIM(高精度定时器)来完成的。HRTIM又包含多个定时器子模块:MasterTimer、TimerA至TimerF,总共7个独立定时器,其中MasterTimer不能输出PWM,其它的TimerA至TimerF每个定时器都能输出一组(两路)PWM。笔者用到的是TimerA(TA1和TA2)、TimerB(TB1和TB2)共四路PWM输出。TA1和TA2互补,TB1和TB2互补。因为TA和TB交错180°,所以要用MasterTimer同步TA和TB的相位。下图是PWM产生的原理。
本例中每路PWM的工作频率为150KHz。先配置MasterTimer
周期寄存器的计算公式:
MasterTimer中的Compare1寄存器的值为周期寄存器的1/2,设为18133。
然后开始配置TA和TB。
TA
然后是TA1输出高电平或低电平的条件:
设置TA1和TA2之间的死区时间:
死区时间的计算公式(设死区时间为200ns):
TB
TB1输出的高低电平的配置与TA1相似,主要区别是TB1高电平是由MasterTimer的Compare1事件触发的,以实现与TA1交错180°相位差。
TB1和TB2的死区:
说明一下:在前面的配置中周期寄存器和Compare1寄存器本应设定一个具体的数值,但为了以后修改方便,笔者将这些寄存器的内容在程序文件中用#define XXX XXX的形式表示出来,这样就可以通过修改预定义的值来达到修改寄存器内容的目地,会方便很多。
且该寄存器内容的选项中要勾选“No check”,否则MX会认为该寄存器内容格式错误。
然后就可以生成代码了。
生成的代码是基于ST官方的HAL库。因为G474VE芯片不再支持以前的标准库函数了,只支持ST的HAL库和LL库。至于HAL库函数的优缺点网上有详细的说明,这里不再展开。
生成的代码目录结构如下:
*.ioc文件就是MX的图形配置文件,直接双击就可以进入MX,进行配置的修改。
Drivers目录中是HAL库相关的驱动文件,包含了大量的功能函数,并进行了多次的封装。这些文件不需要修改,也不能修改,否则系统将无法正常工作。
Core目录就是用户添加功能代码的地方。
生成的PWM配置,还需要用户添加相应的启动代码后,才能开始工作。
完成上述代码后,PWM就可以输出波形了。
下图是控制板,原理图在附件可以下载。