电子电路–PWM

电子电路–PWM最开始接触到PWM就是学习呼吸灯,所以我们这里也由呼吸灯切入主题。呼吸灯的实现要实现一个呼吸灯,可以通过改变一定周期内的亮灯时间占比来实现灯的亮度。持续改变这个亮灯时间占比就可以实现亮度的持续改变,进而实现呼吸灯效果。下面来看代码实现:#include<reg51.h>sbit

大家好,欢迎来到IT知识分享网。

最开始接触到PWM就是学习呼吸灯,所以我们这里也由呼吸灯切入主题。

呼吸灯的实现

要实现一个呼吸灯,可以通过改变一定周期内的亮灯时间占比来实现灯的亮度。持续改变这个亮灯时间占比就可以实现亮度的持续改变,进而实现呼吸灯效果。下面来看代码实现:

#include<reg51.h>
sbit LED=P1^0;

void deley(unsigned int t){
    while(t--);
}
void main(){
	unsigned char time,i;
	while(1){ 
		for(time=0;time<100;time++){
			for(i=0;i<20;i++){
			LED=0;
			deley(time);
			LED=1;
			deley(100-time);
			}
		}
		for(time=100;time>0;time--){
			for(i=0;i<20;i++){
			LED=0;
			deley(time);
			LED=1;
			deley(100-time);
			}
		}
	}
}	

这种方式,是用deley卸载主循环里,那么主循环就不能做其它事情了,所以一般PWM采用定时器的方式来实现。
有些单片机有PWD的任务,但是STC89C52没有,只能定时器来实现。

PWM基本介绍

PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域
PWM重要参数:频率 = 1 / TS 占空比 = TON / TS 精度 = 占空比变化步距
电子电路--PWM

PWM的生成

电子电路--PWM
通过定时器来生成周期
代码实现:

#include <REGX52.H>
#include <Timer0.h>
#define PERIOD 100 //周期长度,值越小变化越快,值越大变化越慢
unsigned char counter;//计数值
unsigned char compare;//比较值
unsigned char direction;//方向 0 灯暗到灯亮,1 灯亮到灯暗
sbit LED=P1^1;

void main(){
	Timer0_Init();
	compare=0;
	direction=0;
	while(1){
	if(counter<compare)
	{
		LED=0;
	}else{
		LED=1;
	}
	}
}
void Timer0_Routine() interrupt 1
{//晶振12MHz 100微妙执行1次,10次1毫秒,变化周期100,则是10毫秒,100个脉冲就是1000毫秒,就是1秒,从灯灭到灯亮1秒
	TL0 = 0x9C;
	TH0 = 0xFF;
	counter++;
	if(counter==PERIOD){
		if(direction){
			compare--;
		}else{
			compare++;
		}
		if(compare==PERIOD||compare==0)
		{
			direction=!direction;
		}
	}
	counter%=PERIOD;
}




免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31387.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信