电子说
本项目通过单片机I/O口输出一个PWM脉宽调制信号来控制输送到LED灯的电压变化,从而实现控制发光二极管亮度的效果。通过两个按键控制灯的亮度。系统上电时,灯在最暗状态,按住其中一个键,灯的亮度逐渐增强,增到最亮时,再回到最暗;按住另外一个键,灯的亮度逐渐减弱,减到最暗时,再回到最亮。
1、PWM信号
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,也就是一种周期一定而高低电平可调的方波信号,在一个信号周期中,高电平持续时间的为T1,低电平持续时间的为T2 。
占空比:在一个信号周期中,高电平持续时间与信号周期的比值,即T1/Time。比如,Time=40,T1=20,则占空比=20/40=50%,即方波信号的占空比就是50%.
当输出脉冲的频率(周期的倒数)一定时,输出脉冲的占空比越大,其高电平持续的时间越长,只要改变T1和T2的值,即改变波形的占空比,达到PWM脉宽调制的目的。
**2、如何实现PWM信号输出
**
实现PWM信号输出有两种方式可实现:一是可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成模块,只需要配置好频率和占空比,简单几步就好了。这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。如下图所示,引脚标明PWM的表示硬件支持;
二是通过软件模拟实现PWM输出。如果对PWM频率要求不是很高的话,可以利用I/O口设置一些参数来输出PWM信号。因为PWM信号其实就是一高一低的一系列电平组合在一起。具体方法是通过定时器控制I/O的高低电平,对于你要求输出的PWM信号频率与你的定时器一致,用定时器中断来计数,通过调整计数值来改变占空比,当然如果要求不高也可以通过软件延时来实现。
3、PWM信号应用--调光灯案例
交流调光电路,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就减弱,前提是PWM的频率要大于我们人眼识别频率,要不然会出现闪烁现象。下面用单片机控制LED亮度,模拟调光灯效果。调光灯电路原理图如下所示,通过S2和S3调整LED的亮度。
软件流程图:单片机上电,首先初始高电平、低电平延时初始值T1=0,T2=500。然后点亮LED,通过软件实现延时时间T1;然后熄灭LED,延时时间T2。由于此时T1=0,占空比最小,此时灯在最暗状态。
全部实现代码如下:
#include
//定义三个位变量,分别对应按键S2、S3
sbit key_plus=P3^2;//LED——count+1
sbit key_minus=P3^3;//LED——count-1
sbit LED=P1^3;
//延时函数
void delay(unsigned int i)
{
unsigned int k;
for(k=0;k
}
void main()
{
//定义一个记录LED亮灯个数变量
int T1,T2;
T1=0;//低电平持续时间
T2=500;//高电平持续时间
//循环处理按键,控制LED亮度
while(1)
{
LED=0;//点亮LED
delay(T1);//亮灯延时时间
LED=1;//熄灭LED
delay(T2);//熄灭延时时间
//判断按键S2的状态,占空比增加
if(0==key_plus)
{
delay(100);//10ms消抖
if(0==key_plus)//再次检测按键是否按下
{
T1++;
T2--;
if(0==T2)//如果LED灯已经最亮,使其变为最暗
{
T1=0;//低电平持续时间
T2=500;//高电平持续时间
}
}
}
//判断按键S3的状态,占空比减小
if(0==key_minus)
{
delay(100);//10ms消抖
if(0==key_minus)//再次检测按键是否按下
{
T1--;
T2++;
if(0==T1)//如果LED灯已经最亮,使其变为最暗
{
T1=500;//低电平持续时间
T2=0;//高电平持续时间
}
}
}
}
}
收录于合集 **#**单片机
47个
上一篇PWM工作原理----调光灯案例下一篇实用:牛人总结的单片机三种应用程序架构!
全部0条评论
快来发表一下你的评论吧 !