void Alg_BusSoftStarvoid static uint16_t u16PwmCnt = 0; ifst_TimerFlagu16_b100ms !=1return; if1==DcFaultWrdbDcFAULT DcDcu16BusFaultCnt++; ifDcDcu16BusFaultCnt50 10
void Alg_BusSoftStar(void) { static uint16_t u16PwmCnt = 0; //定义并初始化静态变量u16PwmCnt为0
if(st_TimerFlag.u16_b100ms !=1)return; //如果100ms定时器标志位不为1,则退出函数
if(1==DcFaultWrd.bDcFAULT) //如果直流故障标志位为1
{
DcDc.u16BusFaultCnt++; //直流直流故障计数器加1
if(DcDc.u16BusFaultCnt>50) //如果直流故障计数器大于50
{
DcDc.u16BusFaultCnt=11; //将直流故障计数器重置为11
}
else
{
DcFaultWrd.bDcFAULT=0; //否则将直流故障标志位清零
}
}
if(((1==tSysState.PV1Connect&0x1)||(1==tSysState.PV2Connect&0x1)||(1==tSysState.PV3Connect&0x1)||(1==tSysState.PV4Connect&0x1))&&(0==tSysState.PVSoftOver&0x1)) //如果PV1、PV2、PV3、PV4中有一个连接且PV软启动未结束
{
DcDc.fPv1PwmDuty = 0.5f*DCDCMax_PERIOD; //将PV1的占空比设置为最大占空比的一半
DcDc.fPv2PwmDuty = 0.5f*DCDCMax_PERIOD; //将PV2的占空比设置为最大占空比的一半
DcDc.fPv3PwmDuty = 0.5f*DCDCMax_PERIOD; //将PV3的占空比设置为最大占空比的一半
DcDc.fPv4PwmDuty = 0.5f*DCDCMax_PERIOD; //将PV4的占空比设置为最大占空比的一半
u16PwmCnt++; //PWM计数器加1
if(tDc.fBus_VltFilter>tDc.fBus_SoftVlt) //如果母线电压大于软启动电压
{
tSysState.PVSoftOver=1; //将PV软启动结束标志位置为1
DcDc.u16BusFaultCnt=0; //将直流故障计数器清零
}
if(u16PwmCnt>5) //如果PWM计数器大于5
{
if(tDc.fBus_VltFilter<6.0f) //如果母线电压小于6.0V
{
u16PwmCnt=5; //将PWM计数器重置为5
DcFaultWrd.bDcFAULT=1; //将直流故障标志位设置为1
}
}
}
else //否则
{
u16PwmCnt=0; //将PWM计数器清零
tSysState.PVSoftOver &=0X01; //将PV软启动结束标志位清零
}
if(0x01==DcFaultWrd.bBusVltLow) //如果母线电压低故障标志位为1
{
tSysState.PVSoftOver=0; //将PV软启动结束标志位清零
}
原文地址: https://www.cveoy.top/t/topic/g9n0 著作权归作者所有。请勿转载和采集!