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

📄 bldcdrv.c

📁 MC56F802BLDC 可以使用的算法 就是电机启动有点慢
💻 C
字号:
/*****************************************************************************
*
* bldcdrv.c - Brushless DC Motor driver implementation
*
*****************************************************************************/

#include "types.h"
#include "arch.h"
#include "mc.h"
#include "bldcdrv.h"

#include "bldc.h"

   /* the following constant declarations have been moved to const.h */

/*****************************************************************************/
/** Commutation table for EMV Motor Kit and independed PWM mode				**/
/*****************************************************************************/

const mc_tPWMSignalMask   bldcCommutationTableInd[8] = { MC_PWM_ALL_SIGNALS,
	 (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_0),
	 (MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0),
	 (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_0),
	 (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1),
	 (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0),
	 (MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1),
												          MC_PWM_ALL_SIGNALS
															  };

#ifdef PWM_SWAP_1 //if the swap operations are allowed
/*****************************************************************************/
/** Commutation table for EMV Motor Kit and complementary PWM mode			**/
/*****************************************************************************/

const pwm_sChannelControl bldcCommutationTableComp[8] = {
            { MC_PWM_ALL_SIGNALS, PWM_ZERO_MASK },
			{ (MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2), (PWM_SWAP_1 | PWM_SWAP_0) },
			{ (MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0), (PWM_SWAP_2 | PWM_SWAP_0) },
			{ (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4), (PWM_SWAP_0) },
			{ (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4), (PWM_SWAP_2 | PWM_SWAP_1) },
			{ (MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0), (PWM_SWAP_1) },
			{ (MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2), (PWM_SWAP_2) },
 			{ MC_PWM_ALL_SIGNALS, PWM_ZERO_MASK },
														};
#endif

/*****************************************************************************/
/** Commutation table for sensorless control                                **/
/**               EMV,LV,HV Motor Kits and independed PWM mode	            **/
/*****************************************************************************/
const mc_tPWMSignalMask  BldcZC_Cmt_StepTable[] = { 
       (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1),
       (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0),
       (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_0),
       (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_0),
       (MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0),
       (MC_PWM_SIGNAL_4 | MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2 | MC_PWM_SIGNAL_1)
                                                    };

#if 0 //Debug 02.11.26 begin
/*****************************************************************************/
/** Commutation table for sensorless control                                **/
/**               EMV,LV,HV Motor Kits and complementary PWM mode	        **/
/*****************************************************************************/
const pwm_sChannelControl  BldcZC_Cmt_StepTableComp [MAX_STEP_CMT+1] = {
            { (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4), (PWM_SWAP_2 | PWM_SWAP_1) },
            { (MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0), (PWM_SWAP_1) },
            { (MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2), (PWM_SWAP_1 | PWM_SWAP_0) },
            { (MC_PWM_SIGNAL_5 | MC_PWM_SIGNAL_4), (PWM_SWAP_0) },
            { (MC_PWM_SIGNAL_1 | MC_PWM_SIGNAL_0), (PWM_SWAP_2 | PWM_SWAP_0) },
            { (MC_PWM_SIGNAL_3 | MC_PWM_SIGNAL_2), (PWM_SWAP_2) }
#endif //Debug 02.11.26 end                                                                        };


/**************************************************************************************/
/** Zero Crossing tables for sensorless Zero Crossing EMV,LV,HV Motor Kits PWM mode  **/
/** for (level)Zero Crosing bldczc algorithms (used with HW comparator Zero Crossing)**/
/**************************************************************************************/	

const UWord16 Mask_ZCInpTab[MAX_STEP_CMT+1] = { MASK_ZC_PHASE_C, MASK_ZC_PHASE_A, MASK_ZC_PHASE_B,\
                                                MASK_ZC_PHASE_C, MASK_ZC_PHASE_A, MASK_ZC_PHASE_B };

const UWord16 Expect_ZCInp_Tab [ MAX_STEP_CMT+1 ] [2] = \
{ {ZCINP_PHASE_C_Lev1,ZCINP_PHASE_C_Lev0},{ZCINP_PHASE_A_Lev0,ZCINP_PHASE_A_Lev1},\
  {ZCINP_PHASE_B_Lev1,ZCINP_PHASE_B_Lev0},{ZCINP_PHASE_C_Lev0,ZCINP_PHASE_C_Lev1},\
  {ZCINP_PHASE_A_Lev1,ZCINP_PHASE_A_Lev0},{ZCINP_PHASE_B_Lev0,ZCINP_PHASE_B_Lev1} };

/*************************************************************************************/
/** Zero Crossing tables for sensorless Zero Crossing EMV,LV,HV Motor Kits PWM mode **/
/** for edge Zero Crosing bldczc algorithms (used with ADC Zero Crossing)           **/
/*************************************************************************************/

const UWord16 SetADC_ZCInp_Tab [ MAX_STEP_CMT+1 ] [ 2 ] =
{ {ADCZC_PHASE_C_NEG_POS,ADCZC_PHASE_C_POS_NEG},{ADCZC_PHASE_A_POS_NEG,ADCZC_PHASE_A_NEG_POS},\
  {ADCZC_PHASE_B_NEG_POS,ADCZC_PHASE_B_POS_NEG},{ADCZC_PHASE_C_POS_NEG,ADCZC_PHASE_C_NEG_POS},\
  {ADCZC_PHASE_A_NEG_POS,ADCZC_PHASE_A_POS_NEG},{ADCZC_PHASE_B_POS_NEG,ADCZC_PHASE_B_NEG_POS} };

const Word16 ZC_Phase_Tab [] = { INDEX_ZC_PHASE_C, INDEX_ZC_PHASE_A, INDEX_ZC_PHASE_B, \
                                 INDEX_ZC_PHASE_C, INDEX_ZC_PHASE_A, INDEX_ZC_PHASE_B };
const int Expect_ZCInpFlag_Tab [ MAX_STEP_CMT+1 ] [2] = \
{ {1,0},{0,1},\
  {1,0},{0,1},\
  {1,0},{0,1} };
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -