📄 bldczc.c
字号:
inline static Result ZCToffTimeout ( bldczc_sStates *pStates )
{
pStates->State_ZCros.Cmd_ZCros.B.ZC_ToffFlag = 0;
pStates->State_General.Cmd_General.B.ZCToff_TimedFlag = 0;
pStates->State_General.Cmd_General.B.ZCToffStart_CmdFlag = 0;
pStates->State_General.Cmd_General.B.ZCToffTest_Hndlr_RqFlag = 0;
pStates->State_General.Cmd_General.B.ZCToffEnd_CmdFlag = 1;
return (PASS);
}
/*--------------------[ ZCToffTimeout - End ]------------------------------*/
/* -------------------[ PrepareProcTiming - Begin ]------------------------
Prepare Toff Timing for timer
* T_Next=T_Cmt0+Const_PerProcCmt
* pCmd_General->B.CmtProc_TimedFlag = 1;
* pCmd_General->B.Timer_RqFlag = 1;
* ------------------------------------------------------------------------*/
inline static Result PrepareProcTiming (bldczc_uCmdGeneral *pCmd_General,
UWord16 *T_Next,
UWord16 T_Cmt0,
UWord16 Const_PerProcCmt)
{
/* temporary registers - unions for 16bit MSB,LSB or 32 bit acces */
uReg32 Temp1F32;
uReg32 Temp2F32;
/* Removed UWord16 TempOMR; */
/* *T_Next = T_Cmt0 + Const_PerProcCmt
16 bits rest, no saturation
- loose MSB part - for timer capture register UWord16!!! */
Temp1F32.RegParts.MSBpart = 0;
Temp1F32.RegParts.LSBpart = T_Cmt0;
Temp2F32.RegParts.MSBpart = 0;
Temp2F32.RegParts.LSBpart = Const_PerProcCmt;
Temp2F32.Reg32bit = L_add( Temp1F32.Reg32bit, Temp2F32.Reg32bit );
*T_Next = Temp2F32.RegParts.LSBpart;
/* Removed asm(move OMR,TempOMR); */ /* store OMR status */
/* Removed archSetNoSat(); */ /* switch saturation off */
/* Removed *T_Next = T_Cmt0 + Const_PerProcCmt; */
/* Removed asm(move TempOMR,OMR); */ /* store OMR status */
pCmd_General->B.CmtProc_TimedFlag = 1;
pCmd_General->B.Timer_DrvRqFlag = 1;
return (PASS);
}
/*--------------------[ PrepareProcTiming - End ]--------------------------*/
/* -------------------[ PrepareToffTiming - Begin ]------------------------
Prepare Toff Timing for timer
* T_Next = T_Cmt0 + Per_Toff
* pCmd_General->B.ZCToff_TimedFlag = 1;
* pCmd_General->B.Timer_RqFlag = 1;
* ------------------------------------------------------------------------*/
inline static Result PrepareToffTiming (bldczc_uCmdGeneral *pCmd_General,
UWord16 *T_Next,
UWord16 T_Cmt0,
UWord16 Per_Toff)
{
/* temporary registers - unions for 16bit MSB,LSB or 32 bit acces */
uReg32 Temp1F32;
uReg32 Temp2F32;
/* UWord16 TempOMR; */
/* *T_Next = T_Cmt0 + Per_Toff;
16 bits rest, no saturation
- loose MSB part - for timer capture register UWord16!!! */
Temp1F32.RegParts.MSBpart = 0;
Temp1F32.RegParts.LSBpart = T_Cmt0;
Temp2F32.RegParts.MSBpart = 0;
Temp2F32.RegParts.LSBpart = Per_Toff;
Temp2F32.Reg32bit = L_add( Temp1F32.Reg32bit, Temp2F32.Reg32bit );
/* Removed asm(move OMR,TempOMR); */ /* store OMR status */
/* Removed archSetNoSat(); */ /* switch saturation off */
/* Removed *T_Next = T_Cmt0 + Per_Toff; */
/* Removed asm(move TempOMR,OMR); */ /* store OMR status */
*T_Next = Temp2F32.RegParts.LSBpart;
pCmd_General->B.ZCToff_TimedFlag = 1;
pCmd_General->B.ZCToffStart_CmdFlag = 1;
pCmd_General->B.ZCToffTest_Hndlr_RqFlag = 0;
pCmd_General->B.Timer_DrvRqFlag = 1;
return (PASS);
}
/* -------------------[ PrepareToffTiming - End ]--------------------------*/
/****************************************************************************************************
*
* MODULE: bldczcHndlrInit ( bldczc_sStates *pStates,
* bldczc_sTimes *pTimes,\
* UWord16 T_Actual,
* UWord16 Start_PerProcCmt,
* bldczc_eStartingMode Starting_Mode )
*
* DESCRIPTION: function bldczcHndlrInit() is initialization of the command interface bldczcHndlr()
* Refer to SDK documentation for detailes.
*
* RETURNS: The function returns the PASS (0)
*
* SUBMODULES USED: PrepareProcTiming ( bldczc_uCmdGeneral *pCmd_General,
* UWord16 *T_Next,
* UWord16 T_Cmt0,
* UWord16 Const_PerProcCmt )
*
* ARGUMENTS: The function has four arguments: in/out - pointer to bldczc_sStates structure that
* contains the status variables for all
* BLDC motor BEMF Zero Crossing algorithms
* in/out - pointer to bldczc_sTimes structure that
* contains the time variables for all
* BLDC motor BEMF Zero Crossing algorithms
* in - T_Actual - 16bit range Actual Time
* in - Start_PerProcCmt - 16bit range
* Starting commutation
* proceeding Periode
* in - Starting_Mode - enum BLDCZC_SET_DEFAULT,
* BLDCZC_DO_NOT_EFFECT
*
* RANGE ISSUES: All the time variables and components T_x in bldczc_sTimes structure are
* computed as 16 bit rollower registers. It mean that if their results overflows
* 16 bits, they are not saturated, just the overflow bit is ignored and low 16 bits
* word is taken as a result. Then the T_x variables can be used as outputs and inputs
* from a 16 bit past compare timer used as a system clock base!
*
* SPECIAL ISSUES: The function calculates correct results if the saturation mode is set or not .
*
****************************************************************************************************/
/*--------------------[ bldczcHndlrInit - Begin ]--------------------------*/
Result bldczcHndlrInit ( bldczc_sStates *pStates,
bldczc_sTimes *pTimes,\
UWord16 T_Actual,
UWord16 Start_PerProcCmt,
bldczc_eStartingMode Starting_Mode )
{
if (Starting_Mode == BLDCZC_STARTING_M)
{
pStates->State_General.Cmd_General.B.StartMode_HndlrFlag = 1;
/* Initialization (clears) of all command flags Cmd - Begin */
pStates->State_Comput.Cmd_Comput.B.CmtPreComp_CmdFlag = 0;
/* Init Commutation PreComputed Command Flag */
pStates->State_Comput.Cmd_Comput.B.ToffComp_CmdFlag = 0;
/* Init Period Toff Computed Command Flag */
pStates->State_Comput.Cmd_Comput.B.CmtComp_CmdFlag = 0;
/* Init Commutation Computed Command Flag */
pStates->State_Comput.Cmd_Comput.B.ZC_ComputFlag = 0;
/* Init Zero Crossing Computed Flag
Prepare flags noZCCalculation before PresetCalculation */
/* Warning: this flag may be set by bldczcComputInit if
pComputInit->Mode_TimesInit == BLDCZC_SET_DEFAULT*/
pStates->State_General.Cmd_General.B.Timer_DrvRqFlag = 0;
/* Init Timer Request Flag */
pStates->State_Comput.Cmd_Comput.B.ZCOKGet_Comput_RqFlag = 0;
/* Init Zero Cross OK Get Comput Request Flag */
pStates->State_Comput.Cmd_Comput.B.ZCMiss_Comput_RqFlag = 0;
/* Init Zero Cross Missed Comput Request Flag */
pStates->State_General.Cmd_General.B.EndStartMode_HndlrCmdFlag = 0;
/* Init End Start Mode Flag */
pStates->State_General.Cmd_General.B.MaxZCrosErr_HndlrCmdFlag = 0;
/* Init Zero Crossing Errors >= maximal Command Flag */
pStates->State_General.Cmd_General.B.ToffComp_Timeout_InfoFlag = 0;
/* ?Toff period Computed Information Flag */
pStates->State_General.Cmd_General.B.CmtPreset_TimedFlag = 0;
/* Init Commutation Preset (before Zero Crosing)
Timed Flag */
pStates->State_General.Cmd_General.B.CmtProc_TimedFlag = 0;
/* ?Init Commutation Proceeding Timed Flag */
pStates->State_General.Cmd_General.B.ZCToff_TimedFlag = 0;
/* Init Zero Crossing Time off Timed Flag */
pStates->State_General.Cmd_General.B.ZCToffStart_CmdFlag = 0;
/* Init Zero Cross Toff timing Start Command Flag */
pStates->State_General.Cmd_General.B.ZCToffTest_Hndlr_RqFlag = 0;
/* Init Zero Cross Toff Test Hndlr Request Flag */
pStates->State_General.Cmd_General.B.CmtProcEnd_CmdFlag = 0;
/* Init Commutation Proceeding End Command Flag */
pStates->State_General.Cmd_General.B.ZCToffStart_CmdFlag = 0;
pStates->State_General.Cmd_General.B.ZCToffEnd_CmdFlag = 0;
/* Init Zero Crossing Time off End Command Flag */
pStates->State_Cmt.Cmd_Cmt.B.CmtServ_CmdFlag = 0; /* Init Commutation served Command Flag */
pStates->State_Cmt.Cmd_Cmt.B.CmtDone_CmdFlag = 0; /* Init Commutation Done Command Flag */
pStates->State_Cmt.Cmd_Cmt.B.CmtPreset_DrvRqFlag = 0; /* ?Init Preset new Commutation Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZCOKGet_CmdFlag = 0;
/* Init Zero Crossing OK Get Command Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZCMiss_CmdFlag = 0; /* Init Zero Crossing missed Command Flag */
pStates->State_ZCros.Cmd_ZCros.B.noZCErr_CmdFlag = 0;
/* Init no Zero Crossing get between commutations */
pStates->State_ZCros.Cmd_ZCros.B.ZCMissErr_CmdFlag = 0;
/* Zero Crossing missed Error Command Flag */
pStates->State_ZCros.Cmd_ZCros.B.EndStart_ZCrosServ_CmdFlag = 0;
/* Init End StartUp Command Flag*/
pStates->State_ZCros.Cmd_ZCros.B.MaxZCrosErr_ZCrosServ_CmdFlag = 0;
/* Init Zero Crossing Errors >= maximal Command Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZCrosInt_EnblFlag = 0;
/* Init Zero Crossing Interrupt enable Flag*/
pStates->State_ZCros.Cmd_ZCros.B.ZCInpMaskPreset_DrvRqFlag = 0;
/* ?Init Preset Input Mask Driver Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZCInpSet_DrvRqFlag = 0;
/* Init Set ZC Input Driver Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.CmtProcEnd_ZCrosServ_RqFlag = 0;
/* Init Commutation Proceeding End
Zero Cros Service Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.CmtServ_ZCrosServ_RqFlag = 0;
/* Init Commutation served
Zero Cros Service Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZC_GetFlag = 0; /* ?Init Zero crossing Get Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZC_SoonFlag = 1; /* ?Init Zero crossing Soon Flag */
pStates->State_ZCros.Cmd_ZCros.B.ZC_ToffFlag = 1; /* ?Init Zero Crossin Toff flag*/
/* Initialization (clears) of all command flags Cmd - End */
pStates->State_General.Cmd_General.B.Cmt_TimedFlag = 0;
pStates->State_General.Cmd_General.B.CmtTimedStart_CmdFlag = 0;
pStates->State_General.Cmd_General.B.CmtTest_Hndlr_RqFlag = 0;
pStates->State_ZCros.Cmd_ZCros.B.Cmt_ProcFlag = 1;
pTimes->T_Cmt0 = T_Actual; /* T_Cmt0 must be set before PrepareProcTiming function */
PrepareProcTiming (&pStates->State_General.Cmd_General, &pTimes->T_Next,\
pTimes->T_Cmt0, Start_PerProcCmt);
pStates->State_General.Cmd_General.B.ZCPrepared_Timeout_InfoFlag = 0;
pStates->State_General.Cmd_General.B.StepPrepared_Timeout_InfoFlag = 0;
pStates->State_Cmt.Cmd_Cmt.B.Cmt_DrvRqFlag = 1; /* ?Commutation Driver Request Flag*/
pStates->State_Cmt.Cmd_Cmt.B.CmtDone_CmtServ_RqFlag = 1;
pStates->State_General.Cmd_General.B.CmtServ_AlgoRqFlag = 1; /* ?Init bldczcCmtServ Algorithm call Request Flag */
pStates->State_ZCros.Cmd_ZCros.B.CmtDone_ZCrosServ_RqFlag = 1;
/* Init Commutation Done Zero Cros Service Request Flag */
pStates->State_General.Cmd_General.B.ZCrosServ_AlgoRqFlag = 1; /* Init bldczcZCrosServ algorithm call Request Flag */
pStates->State_Comput.Cmd_Comput.B.CmtDone_Comput_RqFlag = 1; /* ?0 Commutation Done Comput Request Flag */
pStates->State_General.Cmd_General.B.Comput_AlgoRqFlag = 1; /* ?0 bldczcComput function call Request Flag */
}
else
{
pStates->State_General.Cmd_General.B.StartMode_HndlrFlag = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -