本帖最后由 reayfei 于 2011-12-11 17:02 编辑
LM3S811使用心得—从零开始学Cortex-M3内核单片机(五)
实验4 基于脉宽调制器实现2路PWM输出控制LED亮度
本文中程序可以控制LED5(蓝色)和LED6(红色)由亮到暗的连续变化。
每个Stellaris PWM模块提供3个PWM 发生器模块和1个输出控制模块。每个发生器模块有2个PWM输出信号,它们可以单独操作,或者作为带有插入死区延时的一对信号来使用。每个发生器模块还有一个中断输出和一个触发输出。控制模块决定了PWM信号的极性以及哪些信号经过模块到达管脚。
Stellaris PWM 模块具有的特性有:
3 个发生器模块,每个包含:
>> 1 个16 位的递减或递增/递减计数器
>> 2 个比较器
>> PWM 发生器
>> 死区发生器
控制模块
>> PWM 输出使能
>> 输出极性控制
>> 同步
>> 故障处理
>> 中断状态
Stellaris系列ARM提供的PWM模块功能非常强大,可以应用于众多方面:
>> PWM作为16为高分辨率D/A
16位PWM信号 + 低通滤波器 + 输出缓冲器,如图所示:
>> PWM调节LED亮度
不需要低通滤波器,通过功率管还可以控制电灯泡的亮度。
>> PWM调节LED亮度
不需要低通滤波器,通过功率管还可以控制电灯泡的亮度。
>> PWM演奏乐曲、语音播放
PWM方波可直接用于乐曲演奏。作为D/A经功放电路可播放语音。
>> PWM控制电机
直流电机
交流电机
步进电机
Stellaris系列ARM支持多种系统时钟来源,如外接晶振、内部振荡器、内部PLL等。源程序中clockInit( )函数给出了采用外部6MHz晶振和采用内部PLL的典型配置方法。默认的配置是外接6MHz晶振,PLL配置部分被“/*...*/”注释掉了,如果要启用PLL可去掉注释。
在clockInit( )函数里,库函数SysCtlLDOSet( )的作用是设置LDO的输出电压。LDO是“Low Drop-Out”的缩写,是片内集成的低压差线性稳压器,这就为用户节省了一个外部的电源稳压器。LDO输出电压在2.25~2.75V之间,步进50mV,可通过调用库函数SysCtlLDOSet( )来设置。LDO输出直接连到LDO第6管脚,也可为处理器内核提供稳定可靠的电源。
芯片内部有个PLL(锁相环)单元,能够把输入的较低频率时钟信号锁定到200MHz输出。当然处理器内核最高只能工作在50MHz,因此必须要进行4以上的分频。但是,要当心:在启用PLL之前必须要把LDO输出电压设置在最高的2.75V。这是因为PLL单元会消耗较大的功率,再加上芯片其它的功耗,如果LDO电压不够高就容易造成死机。
|