用户工具

站点工具


侧边栏

抱歉,您没有权限增加页面
4.单片机入门教程:10.pwm脉宽调制

单片机入门教程之PWM脉宽调制

一:实验原理:
阿弥陀佛,老衲中文名叫脉冲宽度调制,英文名叫PWM,我能用数字输出对模拟电路进行控制。关于我的就不多说了,佛曰:不可说,一说就错.

首先我们要参悟空即是色之PWM占空比,占空比指通电时间与周期之比,即高电平持续时间。若PWM是5V的电压幅值,设置占空比为50%,那么得到的平均电压就是2.5V,这样,在PWM输出管脚接一个LED灯,占空比越高,则LED灯越亮。

还有个概念就是频率,就是一个波波从高电平到低电平再回到高电平的时间,也可理解为每秒钟占空比出现的次数,再来拿LED说,通电亮断电灭,如果连续通断的次数很多,每秒钟几千次,那么你看到的LED将是一直亮着的,不会再看到闪烁,频率就是这么回事。这时候LED的亮度就跟占空比有关系了,即通电的时间(高电平)越长断电的越短你看到的LED就是越亮的,所谓脉宽调制就是这么回事。懂呼?不懂,那就去后山面壁思过吧……

来看个图,更容易理解脉宽调制:

再来看个图吧,板子上芯片输出PWM是如何控制LED的。

STC12C5A60S2集成了2个可编程计数阵列(PCA),PCA说白了就是功能强大的定时器/计数器。可用于产生2路PWM输出,PWM是由PCA模块产生的,参见数据手册第307页往下看就明白了。模块0输出管脚为P1.3,模块1为P1.4。板子上使用的是模块1,P1.4脚连在了PNP三极管的基极,这样,改变占空比越大LED就越暗。

二:实验现象与代码演示
单片机内部PWM脉宽调制实验,8位,PWM输出信号接到LED上改变占空比,LED逐渐变亮,形成呼吸灯效果

注:本代码完整工程在stc51 discovery开发板【实验例程】【入门实验】【实验三十三】

三:代码解释

1. 先从PWM初始化配置开始,第39行CMOD=0x00; CMOD是PCA工作模式寄存器,主要用于配置PWM时钟输入源,PWM频率计算跟这个时钟源有关,CMOD中的B1B2B3这3位组合配置时钟,程序中时钟源选择为系统时钟/12,PWM频率就为SYSclk/12/256.寄存器主要功能如下:

3. 第43行,CCAPM1=0x42;PCA模块1工作模式寄存器,这里配置成PWM模式,8位,无中断。

4. 第45,46行,CL=0;CH=0;PCA装载值寄存器,说明如下:

5. 第47行,CR=1;启动PCA计数器,这一位在上面CCON寄存器中。

6.现在看主函数中,第29行,CCAP1H=CCAP1L = num; 用来设定占空比,值越大占空比越小,说明如下:

7.第31行,num++;PWM是8位的,范围为0-255,值越来越大,占空比越来越小,LED就越来越亮,形成呼吸灯效果。

对于PWM是如何通过PCA产生的,我的理解是这样的,仅供参考。PCA定时器是一直在计数的,它的最低位CL和比较寄存器低位CCAP1L做比较,当CL的值大于等于CCAP1L时输出为高,当CL小于CCAP1L时输出为低,这样就产生了PWM,比如:我设定的占空比为100,CCAP1L=100;那么它和CL计数值比较,大于100的计数输出为高就成了占空比,所以CCAP1L的值越大,占空比越小。看下面的图:

4.单片机入门教程/10.pwm脉宽调制.txt · 最后更改: 2017/03/07 10:44 由 wawooo