#51单片机#PWM

PWM,全称Pulse Width Modulation,译为脉冲宽度调制。

功能:改变脉冲宽度,实现不同效果。可用数字信号达到模拟信号的效果

PWM在单片机中应用广泛,不同的应用场合意义不尽相同。

先看一张图:
#51单片机#PWM_第1张图片
这是一个周期为10ms,频率为100Hz的波形。每个周期内的高低电平脉冲宽度各不相同,这就是PWM的本质。这里需要记住一个概念——占空比。占空比是指,高电平的时间在整个周期中所占的比例。比如第一部分波形的占空比是40%,第二部分是60%,第三部分是80%,这就是PWM的解释。

演示代码:

#include 

sbit PWMOUT = P0^0;

unsigned char HighRH = 0; //高电平重载的高字节
unsigned char HighLH = 0; //高电平重载的低字节
unsigned char LowRH = 0;  //低电平重载的高字节
unsigned char LowLH = 0;  //低电平重载的低字节

void ConfigPWM(unsigned int fr, unsigned char dc);
void ClosePWM();

void main()
{
	unsigned int i;
	EA = 1;				     //开启中断总开关

	while(1)
	{
		ConfigPWM(100,10);	 //频率100Hz,占空比10%
		for(i=0;i<4000;i++);
		ClosePWM();
		for(i=0;i<4000;i++);
		ConfigPWM(100,40);	 //频率100Hz,占空比40%
		for(i=0;i<4000;i++);
		ClosePWM();
		for(i=0;i<4000;i++);
		ConfigPWM(100,60);	 //频率100Hz,占空比60%
		for(i=0;i<4000;i++);
		ClosePWM();			 //关闭PWM,相当于占空比100%
		for(i=0;i<4000;i++);
	}
}

//配置并启动PWM,fr——频率,dc——占空比
void ConfigPWM(unsigned int fr, unsigned char dc)
{
	unsigned int high,low;
	unsigned long tmp;

	tmp = (11059200/12)/fr;   //计算一个周期需要的计数值
	high = (tmp*dc)/100;      //计算高电平需要的计数值
	low = tmp - high;	      //计算低电平需要的计数值
	high = 65536 - high + 12; //计算高电平的重载值并补偿中断延时
	low = 65536 - low + 12  ; //计算低电平的重载值并补偿中断延时

	HighRH = (unsigned char)(high>>8); //将高电平重载值拆分为高低字节
	HighLH = (unsigned char)high;
	LowRH = (unsigned char)(low>>8);   //将低电平重载值拆分为高低字节
	LowLH = (unsigned char)low;

	TMOD &= 0XF0;	 //清零T0的控制位
	TMOD |= 0X01;	 //配置T0为模式1

	TH0 = HighRH;	 //加载T0重载值
	TL0 = HighLH;

	ET0 = 1;	  	 //使能T0中断
	TR0 = 1;	 	 //开启T0
	PWMOUT = 1;	 	 //输出高电平
}

//关闭PWM
void ClosePWM()
{
	ET0 = 0;   //停止中断
	TR0 = 0;   //停止T0
	PWMOUT = 1;//输出高电平
}

//T0中断服务函数,产生PWM输出
void InterrupeTimer0() interrupt 1
{
	TH0 = HighRH;
	TL0 = HighLH;

	if(PWMOUT == 1)	//当前输出为高电平时,装载低电平值并输出低电平
	{
		TH0 = HighRH;
		TL0 = HighLH;
		PWMOUT = 0;
	}
	if(PWMOUT == 0)	//当前输出为低电平时,装载高电平值并输出高电平
	{
		TH0 = LowRH;
		TL0 = LowLH;
		PWMOUT = 1;
	}
}

标准的51单片机中没有专门的PWM模块。此程序在定时器中加入了中断以产生PWM。

ps:很多单片机都会集成硬件的PWM模块,程序员只需计算周期和占空比。

你可能感兴趣的:(单片机)