大联大友尚ST数字电源板之
BUCK-BOOST数字电源评测
产品开箱
之前在网络上闲逛的时候看到大联大友商ST B-G474E-DPOW1小型数字电源板介绍说可以基于三相维也纳架构设计的双向15kw三相双向充电桩电源方案,现在电动汽车充电越来越普遍,于是也想了解一下就申请了开发板。后面收到面包板社区Vcher的确认信息时还是挺意外的。再确认信息后很快就收到了发件信息。效率还是很高的!
下面是刚收到开发板时的拍的照片,包装做的还是很好的,板的做工还是很精致的。
图1 开发板照片
开发板使用了四层板,元器件主要都在正面。反面原件很少,基本都是大面积的铺地。板上配置了USB-TYPE-C接口可以提供3A的电流能力可以使用手机type–c接口电压3.75~15V,同时还提供了ST-LINK调试接口这个方便了开发人员插上USB线就可以开发调试了。同时还提供了BUCK-BOOST转换电路方便了对数字电源的学习和了解,同时还提供了板载负载电阻可用于数字电源带载测试,考虑的很周全!另外板上的还有一个高亮的三个LED,在介绍中说可以进行LED的高亮控制。
在拿到开发板后上电测试只能看到四个LED 的闪亮和高亮LED显示不同颜色。其他功能就不知道了。后面找到开发板的资料(en.stm32cubeg4_v1-3-0.zip)后开始编译工程与下载,第一次下载时遇到ST-LINK-V3的驱动无法安装的问题,后面下载最新的驱动重新安装后可以识别成功,在下载时又出现了下载失败的提示:
stm32烧写失败Contents mismatch at: 08000000H (Flash=FFHRequired=00H)问题 后百度了一下 给出的解法方法如下:
打开STM32 ST-LINK Utility软件,使用ST_link连接电脑和板子,打开Target-connect,连接时,会报flash sectors read protect的警告,此时需要对芯片的flash进行全擦除就可以了。
后面就可以正常下载调试了,之前一直在使用STM32F4系列产品刚开始觉得可能和G4差别不大,看了DEMO程序和硬件手册后G4还是做了很多优化定制,DEMO中时的用的高精度定时器HRTIM 还有硬件滤波加速器。
应用思路
刚开始申请是想三相维也纳架构设计的双向三相双向充电桩电源方案的,后面咨询了技术支持这边他们只对和他们的合作客户开放这个方案的源码参考。在没有参考的情况下做这个完成的可行性太低了,开发板在手上总不能让他吃灰吧!结合开发板上的资源看了一下于是就改测试一下BUCK-BOOST转换电路,看介绍电源的带宽会比较宽,准备用它来带动一个音圈电机,之前也一直在为音圈电机的驱动头痛,音圈电机的需要比较高的响应才可以有些音圈驱动使用模拟放大器来做驱动已获得高的带宽。
借鉴知乎对数字电源的介绍如下
(https://zhuanlan.zhihu.com/p/92723661):
全数字电源
全数字电源应用在对电源的输出要求多变,同时又对电源的即时保护以及恢复时间有较高要求的复杂应用环境。其具有精准的ns级输出关断,可控的恢复时间,多样的控制模式:直流,充电,直流充电,过充限定等实用功能。
下面给出模拟电源与数字电源的结构对比,以及全数字电源的控制流。
下面给出模拟电源与数字电源的结构对比,以及全数字电源的控制流。
使用BUCK-BOOST电路的拓扑结构
操作方法
在Demo例程中使用了3p3z控制器,在ST官网上对这个介绍并使很多,后面再www.bilibili.com网站上看到一位 電源那些事儿的版主发布的视频对数字电源的原理图和实现录制了一系列视频讲的很好!对于刚开始接触这块知识的可以去了解学习一下。详细的资料可以参考https://www.bilibili.com/video/BV1XA411Y7TS 。在后面的截图是从视频中截取出来的。
在模拟控制数字电源的时候我们使用的RC和放大器组成补偿网络来对电源进行控制的,在数字电源控制时我们最先想到的可能还是经典的PID控制。为什么又要引入一个3p3z控制器控制器了,在使用TI的CompDesigner 工具可以看到PID和 3P3Z的明显区别,使用3P3Z扩展了系统带宽和稳定性。
下图是使用的PID控制的BODE图
下图是使用的3P3Z控制的BODE图
上面控制原理可以参考视频网站上的 《環路補償器設計基礎》
从这个图中我们Tol(s)使我们期望的传递函数,Gplant(s使我们硬件系统的传递函数 Hcomp(s)就是我们需要的补偿器样子,这样就引出了3P3Z的控制补偿器,同时也可以知道使用单独的PID是不能够实现我们期望的理想传递函数。详细的知识可以在视频资料中得到补充。
通过 网站上视频介绍的中通过输入与我们硬件相关的参数 既可以得到我们需要的3P3Z数字补偿器的参数
这个地方得到的a0~a3 ,b0~b3就是我们需要的补偿系数。
由于在STM32G474中集成了FMAC数学加速器和高精度定时器因此很适合来做数字电源控制器,关于数学加速器和3P3Z的实现我们可以用下图的来理解,3P3Z可以看成一个数字滤波器前面的得到的a0~a3 ,b0~b3 也就是下图中的前馈系数和反馈系数
高精度定时器hrtim 可以帮助我们实现高精度的PWM,相对于以前的使用的PWM可以简单的认为是由高频率时钟源的PWM的可以实现200K或400k的PWM 同时可以在精确的设定PWM的占空比
功能体验
在我的实际中控制的负载需要升压和降压控制,因此实在BUCKBOOST的例程基础上进行测试的。
下图是刚开始使用DEMO程序测试带外部负载电压的波动情况 如下图所示
图中CH4 为输出电压波动图 可看到在加载负载的是否电压有一个下落但很快的就恢复了 ,但负载卸载的是否电压有一点过冲但幅度很小,同时系统的纹波也很小。可以说系统稳定的。
下图是放大中间一个的波形图
CH1 为程序中GPO1_GPIO_Port的信号输出,也就是中断执行函数执行 CH2 前级BUCK的的PWM型号 CH3 为后级BOOST部分的PWM CH4为输出电压。输出电压的纹波时很小的。
下图是在负载切换时波形图
后面再程序中加入UC-PROBRE通过界面来调节控制输出电压
刚开始通过来调节电压时发现输出电压不能输出太小,也不能输出太大,通过观察输出输出波形可以看到BOOST处的PWM输出存在饱和现象,前面的BOOST电路PWM占空比固定,后面加入程序前级根据后级电路输出电压调节前级的PWM 占空比。
后面再加入接入外部负载后带动音圈电机左开环的往复运动,由于供电电压比较低在高频动作时幅度会比较小,后面需要制作电路来使用高一点的电压来提高高频时音圈电机的动作幅度。
下图是空载状态下图使用J-SCOPE获取的
这是加载时波形图使用J-SCOPE获取的,图中的毛刺时ADC反馈切换时存在的临界信号,实际用用示波器看是没有这个毛刺信号的
通过空载和带载波形可以看到系统是稳定的
客观评价
在数字电源在需要可变多样化时相对模拟电源还是有很多优势的,如果需要通信控制设置电源的工作模式切换将变得容易,在设计实现过程中需要对控制原理和数学理论知识有一定的要求,有原来在硬件工程师完成的电源设计部分现在转为由软件工程师来控制,对软件人员的知识要求比较高,需要一个过程的积累才能够逐渐完善数字电源部分的设计。
在数字电源方面也可以参考TI 和Microchip的资料,他们在这一块的资料相对丰富一些,希望ST在数字电源的设计资料开放更多一些,让大家可以从不同的角度来学习数字电源,并将其应用到实际应用中。
总结
在这次对BUCK-BOOST的电源使用学习,对STM32G474的新增加的FMAC和FRTIM等新增外设也有更多的认识和理解。
通过这次电源的控制的学习可以对控制理论有了一些更多的理解和认识,这对以后做其他控制系统有许多启发和帮助。
这次测试是在板上的电路测试没有做电路测试,后期还要做一个电路来扩展电压和电流把负载功率提升起来,看是否可以在工业应用中使用,同时通过新的硬件设计,来对补偿参数的设计和验证来对这一块知识掌握情况。
代码展示
中断处理程序
/**
*@brief This function handles FMAC interrupt.
*/
int FMAC_Count=0;
int Buck_PWM =50;
extern int32_t SetVal;
void FMAC_IRQHandler(void)
{
#ifdef DSMPS_DEBUG
/*Set GPO1 to high for timing purposes */
LL_GPIO_SetOutputPin(GPO1_GPIO_Port, GPO1_Pin);
#endif /* DSMPS_DEBUG */
HAL_GPIO_WritePin(GPIOA, (uint16_t)GPIO_PIN_3,GPIO_PIN_SET);
/*Update PWM */
uint32_t m_Out = READ_REG(hfmac.Instance->RDATA);
m_Out = (m_Out > 0x00007FFF ? 0 : m_Out);
FMAC_Count++;
if(FMAC_Count>8000){ // 200k/8000 >25HZ
FMAC_Count=0;
if(StateMachine==STATE_BUCKBOOST)
{
if(SetVal ==7000)
SetVal= 3000;
else
SetVal= 7000;
}
}
switch (StateMachine)
{
case STATE_BUCK:
__HAL_HRTIM_SETCOMPARE(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C,HRTIM_COMPAREUNIT_1, m_Out);
break;
case STATE_BUCKBOOST:
//
if(SetVal >=9000)
Buck_PWM= 90;
else
Buck_PWM= SetVal/100;
__HAL_HRTIM_SETCOMPARE(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C,HRTIM_COMPAREUNIT_1, Demo.periodBuck * Buck_PWM / 100);
__HAL_HRTIM_SETCOMPARE(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D,HRTIM_COMPAREUNIT_1, m_Out);
break;
default :
Error_Handler();
break;
}
HAL_GPIO_WritePin(GPIOA, (uint16_t)GPIO_PIN_3, GPIO_PIN_RESET);
SEGGER_RTT_Write(1, &FMAC_Count, 4);
ProbeScope_Sampling();
#ifdef DSMPS_DEBUG
/*Set GPO1 to low for timing purposes */
LL_GPIO_ResetOutputPin(GPO1_GPIO_Port, GPO1_Pin);
#endif /* DSMPS_DEBUG */
}
ADC 转换显示程序
temp=(*Fmac_Wdata);
if(temp> 32767)
temp= temp-65535;
temp= temp +REF;
ADCValue= temp *424/100;
在使用J-SCOPE和UC-probe 组件需要添加的文件如下
全部回复 1
- 6 主题
- 13 帖子
- 801 积分
身份:LV3 中级技术员
E币:535
发消息
厉害啦