📄 pwm.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 + -