简介
该项目主要是实现BAT电池端降压输出DC端12V,电池为6串三元锂电池,最高电压25.2V,工作最低电压18V,所以DC端输出12V时,只需电池端稳定降压输出即可。
当接负载时,电压能恒定在12V左右,带负载能力最大10A,电路上主要是通过控制H桥右边两个MOS管PWM占空比,使得占空比稳定在小范围浮动,即12V上下,原理上左边两个MOS管,上管直通,下管关闭即可。电路示意图如下:
一、如何输出12V
1) PWM_H1和PWM_L1为1路PWM互补输出,PWM_H2和PWM_L2为一路互补输出;
2) BAT降压输出,通过控制PWM_H2和PWM_L2的PWM占空比变化,PWM_H1导通,PWM_L1关闭,当DC端采样得到12V时,即稳定PWM小幅度变化;
3) 采用状态机的逻辑,首先得到一个初始的PWM值,即为V_DC/V_BAT * 100%,然后先输出PWM_H2、PWM_L2互补PWM,再输出PWM_H1、PWM_L1互补PWM,最后,在此基础上向12V电压方向控制PWM步数。
问题1:按以上逻辑实现可输出12V,但是没有带负载能力,测得PWM_H1和PWM_L1波形带负载时波形失真?
解决问题:PWM驱动IC是EG2132,是通过外围自举电容充电放电来提供高电压输出,当LO脚为低电平时,自举电容充电,这里PWM_L1接的LO脚,PWM_L1如果低电平,MOS管就一直关闭,就无法接地,就不能给自举电容充电,因为这里是悬浮的地,所以,PWM_L1需要给一个1%占空比,才能给自举电容充电,才能有带负载能力。
二、程序实现
稳压算法采用状态机的思想,如下:
控制PWM_H2和PWM_L2的PWM占空比变化,PWM_H1、PWM_L1占空比固定。
void pri_dc12v_pwm_ctl(void)
{
static uint16_t su16Dc12VPwmCnt = 0;
switch(su8DcPwmState)
{
case 0:
if(g_stuAdcCollect.m_u16RealBatVol > g_stuAdcCollect.m_u16RealDcOutVol)
{
su16Dc12VPwmCnt = (1200 * 200)/ g_stuAdcCollect.m_u16RealBatVol;
}
else
{
su16Dc12VPwmCnt = PS_INIT_DC12V_PWM;
}
su8DcPwmState = 1;
break;
case 1:
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3,su16Dc12VPwmCnt); //PWM_H2 L2
su8DcPwmState = 2;
break;
case 2:
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,196); //PWM_H1 L1 H1=98% L1=2%
su8DcPwmState = 3;
break;
case 3:
if(g_stuAdcCollect.m_u16DcOutVol <= 142) //PV_REV=12.8V 分压1.42V
{
su16Dc12VPwmCnt ++;
su8DcPwmState = 1;
}
else if(g_stuAdcCollect.m_u16DcOutVol >= 147) //PV_REV=13.3V 分压1.47V
{
su16Dc12VPwmCnt --;
su8DcPwmState = 1;
}
break;
default:break;
}
}
三、异常策略:
1) 超过11A则,则提示过流保护,并关闭DC输出;
2) DC输出超过16V,则提示过压保护,并关闭DC输出;
3) 开启DC时,DC输出低于2V,则提示短路保护,并关闭DC输出;
4) 电池端低电压保护,关闭DC输出。