Hi :
My platform is S32k358 with MC33774
Project : NXP HVBMS_RD_800V_Bring_up_Example_1_0_2
In the project cmu code, as following function:
HVBMS_Errors Cmu_StartMeas(Bcc_774a_MsrChainType MeasChain, Bcc_774a_MsrMeasurementType MeasType)
{
Std_ReturnType Status = E_OK;
Bcc_774a_MsrBalPauseType BalPause;
Bcc_774a_MsrSetModeParamsType SetModeParams;
BalPause.BalancingPauseTimer = 0;
BalPause.BalancingAutopauseEn = FALSE;
SetModeParams.PauseBalancing = FALSE;
SetModeParams.OpenLoadNum = MC33774_PRMM_APP_CTRL_VCOLNUM_DISABLED_ENUM_VAL;
uint8 BCC_Device_Addr = 1;
/* Start primary measurements */
if(isCmuChainBroken == true)
{
Status |= Bcc_774a_SetMADD(BCC_CHAIN_ADDR,BCC_BROADCAST,true);
Status |= Bcc_774a_MSR_StartMeasurements(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasChain, BalPause, &BmsTDCfg_Tpl3);
Status |= Bcc_774a_SetMADD(BCC_CHAIN_ADDR,BCC_BROADCAST,false);
Status |= Bcc_774a_MSR_StartMeasurements(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasChain, BalPause, &BmsTDCfg_Tpl3);
}
else
{
Status |= Bcc_774a_MSR_StartMeasurements(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasChain, BalPause, &BmsTDCfg_Tpl3);
}
if(MeasType == BCC_774A_MSR_TYPE_APPLICATION)
{
if(isCmuChainBroken == true)
{
Status |= Bcc_774a_SetMADD(BCC_CHAIN_ADDR,BCC_BROADCAST,true);
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
/* Wait 4ms for measurements to be completed */
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 4000);
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 300);
/* Insert for the 300 us delay */
Status |= Bcc_774a_COM_InsertNop(BCC_CHAIN_ADDR, BCC_BROADCAST, &BmsTDCfg_Tpl3);
Status |= Bcc_774a_SetMADD(BCC_CHAIN_ADDR,BCC_BROADCAST,false);
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
/* Wait 4ms for measurements to be completed */
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 4000);
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 300);
/* Insert for the 300 us delay*/
Status |= Bcc_774a_COM_InsertNop(BCC_CHAIN_ADDR, BCC_BROADCAST, &BmsTDCfg_Tpl3);
}
else
{
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
/* Wait 4ms for measurements to be completed */
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 4000);
Status |= Bcc_774a_MSR_SetMode(BCC_CHAIN_ADDR, BCC_BROADCAST, MeasType, &SetModeParams, &BmsTDCfg_Tpl3);
Status |= Bms_TD_InsertPhyEvent(&BmsTDCfg_Tpl3, PHY_TIMER, 300);
/* Insert for the 300 us delay */
Status |= Bcc_774a_COM_InsertNop(BCC_CHAIN_ADDR, BCC_BROADCAST, &BmsTDCfg_Tpl3);
}
}
else if(MeasType == BCC_774A_MSR_TYPE_SYNCHRONOUS)
{
// Reserved for further development
}
else
{
// Avoid MISRA errors
}
/* Call Bcc_774a_Send */
Status |= Bms_TD_Send(&BmsTDCfg_Tpl3, &PhyError);
if(Status != E_OK)
{
return ERROR_CMU_START_MEASUREMENT_TD_FILL;
}
/* Wait until PHY processes the request */
Td_Wait(&BmsTDCfg_Tpl3);
if(PhyError != PHY_NO_ERROR)
{
return ERROR_CMU_START_MEASUREMENT_TD_SEND;
}
/* Clear TD after completion */
Status = Bms_TD_Clear(&BmsTDCfg_Tpl3);
return NO_ERROR;
}
I want to open auto pause function, but after I open it, when start CB and I still get wrong cell voltage. Is there any idea about this?
Thanks
BR, BillWen