用SDK包開發K66FX18學習筆記(3)

FTM輸出PWM

1、宏定義

#define FTM_INSTANCE	FTM2	//FTM端口
#define FTM_CHANNAL0	0U		//FTM通道
#define FTM_CHANNAL1	1U		//FTM通道
#define FTM_CLKFREQ()	CLOCK_GetFreq(kCLOCK_BusClk)	//獲取總線時鐘頻率
#define FTM_PORT		PORTB	//PORT端口
#define FTM_PIN1		18U		//PWM引腳
#define FTM_PIN2		19U		//PWM引腳

2、PWM初始化

void FWM_INIT(void)
{
	ftm_config_t FTMconfig;//初始化結構體句柄
	
	CLOCK_EnableClock(kCLOCK_PortB);//GPIOB端口時鐘初始化
	PORT_SetPinMux(FTM_PORT,FTM_PIN1,kPORT_MuxAlt3);//端口複用爲FTM模式
	PORT_SetPinMux(FTM_PORT,FTM_PIN2,kPORT_MuxAlt3);//端口複用爲FTM模式

	ftm_chnl_pwm_signal_param_t FTM_PARAM[2];	//初始化參數配置數組
	FTM_PARAM[0].chnlNumber = FTM_CHANNAL0;		//配置通道
	FTM_PARAM[0].dutyCyclePercent = 0U;			//初始化的佔空比
	FTM_PARAM[0].firstEdgeDelayPercent = 10U;	//死區時間
	FTM_PARAM[0].level = kFTM_HighTrue;			//極性爲高電平
	
	FTM_PARAM[1].chnlNumber = FTM_CHANNAL1;		//配置通道
	FTM_PARAM[1].dutyCyclePercent = 0U;			//初始化的佔空比
	FTM_PARAM[1].firstEdgeDelayPercent = 10U;	//死區時間
	FTM_PARAM[1].level = kFTM_HighTrue;			//極性爲高電平
	
	FTM_GetDefaultConfig(&FTMconfig);			//配置重置
	
	FTM_Init(FTM_INSTANCE,&FTMconfig);			//初始化配置
	
	FTM_SetupPwm(FTM_INSTANCE,FTM_PARAM,2U,kFTM_EdgeAlignedPwm,200000,FTM_CLKFREQ());//配置PWM     
	
	FTM_StartTimer(FTM_INSTANCE,kFTM_SystemClock);//開啓定時器,時鐘源配置爲系統時鐘	
}

其中,FTM_SetupPwm函數的參數爲:

status_t FTM_SetupPwm(FTM_Type *base,		//FTM端口號
                      const ftm_chnl_pwm_signal_param_t *chnlParams,	//初始化參數配置數組地址    
                      uint8_t numOfChnls,	//通道個數
                      ftm_pwm_mode_t mode,	//PWM模式,一般選擇邊沿觸發
                      uint32_t pwmFreq_Hz,	//輸出PWM頻率
                      uint32_t srcClock_Hz)	//時鐘源

FTM_StartTimer的函數

static inline void FTM_StartTimer(FTM_Type *base,		//FTM端口號
					 ftm_clock_source_t clockSource)//時鐘源(系統時鐘)     

3、改變佔空比

void FTM_UpdatePwmDutycycle(FTM_Type *base,		//FTM端口號
                            ftm_chnl_t chnlNumber,	//通道號
                            ftm_pwm_mode_t currentPwmMode,	pwm模式(一般爲邊緣觸發)			
                            uint8_t dutyCyclePercent)	//佔空比(0-100)
//行如:
FTM_UpdatePwmDutycycle(FTM0_INSTANCE,FTM0_CHANNAL0,kFTM_EdgeAlignedPwm,duty);

4、使能軟件流控制

static inline void FTM_SetSoftwareTrigger(FTM_Type *base,//FTM端口號
									 bool enable)		//布爾值(0或1)
 //行如:
FTM_SetSoftwareTrigger(FTM_INSTANCE,1);

這裏注意一點:每次改變完佔空比後都要使能軟件流控制,不然不會執行,也就是沒有PWM輸出

發佈了11 篇原創文章 · 獲贊 12 · 訪問量 2205
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章