⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bldczc.c

📁 MC56F802BLDC 可以使用的算法 就是电机启动有点慢
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -