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

📄 pwm.c

📁 freesacle的实时操作系统UCOS的开发程序
💻 C
字号:
  /*
 ***************************************************************************************
 * 文件名:
 *
 * 功能 :	 输出可调节的PWM脉冲,主要是二路的PWM脉冲输出
 *
 * 参数说明 :(1)PWM脉冲的周期Peroid,占空比Duty
 *           (2)输出的引脚。
 *           (3)PWMx Period = Channel Clock Period * (2 * PWMPERx) (left aligned)
 *           (4)Duty Cycle = [PWMDTYx / PWMPERx] * 100% (Polarity = 1)
 * 状态  :
 ****************************************************************************************
 */
#include <mc9s12db128.h> 
#define BusCLK  24000000
void PWM1Init(void){	 
			PWME  &=~0x0c;		  //关闭通道23
			PWMCTL|=0x20;       //整合23通道的一路16位的
      PWMCAE &=~0x08;	    //left aligned output=0,
      PWMPOL|=0x08;       //输出的极性为高电平
  		PWMPRCLK|=0x10 ;		//设置预分值2  。      Clock B  = Bus/2..(Bus=24M)..       
  	  PWMSCLB =0x03 ;		  //设置ClockB预分值3    Clock SB = ClockB/(2*PWMSCLB)	 
  		PWMCLK|=0x08;       //通道的时钟源SB或B...SB=2MHZ 
  		PWME|=0x08;		      //打开通道3 		 
}

void PWM2Init(void){	 
			PWME  &=~0x30;		  //关闭通道45
			PWMCTL|=0x40;       //整合45通道的一路16位的
      PWMCAE &=~0x20;	    //left aligned output=0,
      PWMPOL|=0x20;       //输出的极性为高电平
  		PWMPRCLK|=0x01 ;		//设置预分值2  。      Clock A  = Bus/2..(Bus=24M)..       
  	  PWMSCLA =0x03 ;		  //设置ClockA预分值3    Clock SA = ClockA/(2*PWMSCLA)	 
  		PWMCLK|=0x20;       //通道的时钟源SA或A...SA=2MHZ  
  		PWME|=0x20;		      //打开通道5		 
}

void PWM3Init(void){			
			PWME  &=~0xc0;		  //关闭通道67
			PWMCTL|=0x80;       //整合67通道的一路16位的
      PWMCAE &=~0x80;	    //left aligned output=0,
      PWMPOL |=0x80;      //输出的极性为高电平
      PWMPRCLK|=0x10;	    //设置预分值2          Clock B  = BUS/2 。
  		PWMSCLB =0x03;	     //设置ClockB预分值3。  Clock SB = Clock B/(2*PWMSCLB)
  		PWMCLK |=0x80;      //通道的时钟源SB或B...SB=2MHZ
  	  PWME|=0x80;		     //打开通道7 
}

/*---------------------------------------------------------------------------
*16位的PWM脉冲输出 ,供驼机用 ,输出的引脚为PW3==P2_20整合23通道为一路16位的
*输出的频率为200--12MHZ,占空比为1---100
*/
void PWM1outPut(unsigned long Preiod,unsigned int Duty){	

 		//	PWME &=~0x0c;		    //关闭通道23
		  PWMPER23 = (unsigned int)(2000000/ Preiod);
		  Preiod=((unsigned long)PWMPER23*Duty)/100;
      PWMDTY23 =(unsigned int)Preiod;
    //  PWME|=0x08;		     //打开通道3  
}
/*---------------------------------------------------------------------------
*16位的PWM脉冲输出 ,供驼机用 ,输出的引脚为PW5==P2_22整合45通道为一路16位的
*输出的频率为50--2MHZ,占空比为1---100
*/
void PWM2outPut(unsigned int Preiod,float Duty){	

 		//	PWME &=~0x30;		    //关闭通道45
 		 // PWMCNT45=0x0090;
		  PWMPER45 =(unsigned int)(2000000/ Preiod);
		  Preiod=(unsigned int)(PWMPER45/100);
		  Duty=Duty*Preiod+0.5;;
      PWMDTY45 =(unsigned int)Duty;
    //  PWME|=0x20;		     //打开通道5  

}
/*------------------------------------------------------------------------
*16位的PWM脉冲输出..供马达使用 输出引脚为PW7=P2_24,整合67通道为一路16位的
*输出的频率为200--12MHZ,占空比为1---100
*/
void PWM3outPut( unsigned long Preiod,unsigned int Duty){

  	  //PWME &=~0xc0;	  	//关闭通道67
		  PWMPER67 = (unsigned int)(2000000/ Preiod);
		  Preiod=((unsigned long)PWMPER67*Duty)/100;
      PWMDTY67 =(unsigned int)Preiod;
     // PWME|=0x80;		    //打开通道7
}
 /*-------------------------------------------------------------------------
 *
 * PWM测试程序。test_PWM1.2.3
 */

  
  
  
  
  
  
  
  
  
  
  
 

⌨️ 快捷键说明

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