程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STM32F103 TIM1輸出PWM設置

STM32F103 TIM1輸出PWM設置

編輯:C++入門知識

//TIM1 分頻
#define	TIM1_DIV1	  (1-1)
#define	TIM1_DIV2	  (2-1)
#define	TIM1_DIV4	  (4-1)
#define	TIM1_DIV8	  (8-1)
#define	TIM1_DIV9	  (9-1)
#define	TIM1_DIV18	  (18-1)
#define	TIM1_DIV72	  (72-1)


#define		TIM1PinA_Enb  	 	TIM1->CCER |= 0X0001 //比較通道1輸出到IO
#define		TIM1PinB_Enb 	 	TIM1->CCER |= 0X0010 //比較通道2輸出到IO
#define		TIM1PinC_Enb  		TIM1->CCER |= 0X0100 //比較通道3輸出到IO
#define		TIM1PinA_Dis   		TIM1->CCER &= ~0X0001 //比較通道1禁止輸出到IO
#define		TIM1PinB_Dis  		TIM1->CCER &= ~0X0010 //比較通道2禁止輸出到IO
#define		TIM1PinC_Dis  		TIM1->CCER &= ~0X0100 //比較通道3禁止輸出到IO


#define		VT_PWM				1000 //PWM 計數最大值 頻率8K
//#define		VT_PWM				500 //PWM 計數最大值 頻率16K

//*************************************
// 函數名稱:TIM1_PWMMode_Init
// 函數功能:TIM1 作PWM模式初始化	用作比較輸出用
// 入口參數:計數個數 分頻數
// 出口參數:無
// 返回值  :無
// 此設置適合用作BLDC驅動控制中驅動三對MOS
//***************************************
void TIM1_PWMMode_Init(int16_t Tcon,uint16_t psc)
{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
    TIM_DeInit(TIM1);            //復位定時器

	TIM1->ARR = Tcon ;	 //定時器重裝載值
 	TIM1->PSC = psc ;	//時鐘預分頻系數
 	TIM1->CR1 &= ~(1<<4) ; //向上計數

   	TIM1->CR1 |= (1<<7);  //使能自動重裝載
			 
//清除更新中斷  比較1234中斷標志
	TIM1->SR &= ~0X001F ; 

 //	通道1 2 3 配置為PWM1模式
	TIM1->CCMR1 = 0X6868 ; //
	TIM1->CCMR2 = 0X0068 ;
// 不使能比較通道1 2 3輸出到IO 且1電平為有效電平
	TIM1->CCER  = 0X0000 ;
//
	TIM1->CCR1 = 0 ;
	TIM1->CCR2 = 0 ;
	TIM1->CCR3 = 0 ;
	TIM1->CCR4 = 0 ;
	//	關更新中斷 比較1-4中斷
 	TIM1->DIER &= ~0X001F ;	
//	TIM1->DIER |= 0X0002 ;	 //開比較1 中斷

    TIM1->BDTR |= (1<<15) ;	//主輸出使能   !!!
//清除更新事件標記位 並初始化所有寄存器
	TIM1->EGR &= ~0X0001 ; 
			 
    TIM1->CR1 |= 0X0001 ;            //開啟時鐘

}

//*************************************
// 函數名稱:ToPWM_Value
// 函數功能:設置PWM占空比
// 入口參數:計數個數 分頻數
// 出口參數:無
// 返回值  :無
//***************************************/
void ToPWM_Value(uint16_t InValue)
{
	TIM1->CCR1 = InValue ;
	TIM1->CCR2 = InValue ;
	TIM1->CCR3 = InValue ;	
}

//*************************************
// 函數名稱:BLDC_RUN_ONESTEP
// 函數功能:電機六步走向
// 入口參數:電機運行的當前步
// 出口參數:無
//***************************************/
void BLDC_RUN_ONESTEP(uint32_t STEP)
{
	switch(STEP)
	{
		case 1 : // AB
			TIM1PinB_Dis ;
			TIM1PinC_Dis ;
			TIM1PinA_Enb ;
			UdePinA_Off ;
			UdePinC_Off ;
			UdePinB_On ;			
			break ;
		case 2 :	//AC
			TIM1PinB_Dis ;
			TIM1PinC_Dis ;
			TIM1PinA_Enb ;
			UdePinA_Off ;
			UdePinB_Off ;
			UdePinC_On ;					
			break ;
		case 3 : //BC	
			TIM1PinA_Dis ;
			TIM1PinC_Dis ;
			TIM1PinB_Enb ;
			UdePinA_Off ;
			UdePinB_Off ;
			UdePinC_On ;								
			break ;
		case 4 ://BA	
			TIM1PinA_Dis ;
			TIM1PinC_Dis ;
			TIM1PinB_Enb ;
			UdePinB_Off ;
			UdePinC_Off ;
			UdePinA_On ;				
			break ;
		case 5 ://CA	
			TIM1PinA_Dis ;
			TIM1PinB_Dis ;
			TIM1PinC_Enb ;
			UdePinB_Off ;
			UdePinC_Off ;
			UdePinA_On ;
			break ;
		case 6 :	//CB	
			TIM1PinA_Dis ;
			TIM1PinB_Dis ;
			TIM1PinC_Enb ;
			UdePinA_Off ;
			UdePinC_Off ;
			UdePinB_On ;		
							
			break ;		
		default : 	

			break ;
	}			
}

//----實例應用------
	 //72M/(9) = 8M  pwm周期=(1/8)*1000=125U 
	TIM1_PWMMode_Init(VT_PWM,TIM1_DIV9) ;  //PWM 頻率設置初始化 頻率F=8K

	
//	ToPWM_Value(500) ; //設置三相驅動的PWM占空比 500/1000 = 50%
//	TIM1PinA_Enb ; //PWM輸出到IO 此時可在IO上看到有PWM信號輸出

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved