你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【ST公益分享】 STM8 - PWM

[复制链接]
henai521 提问时间:2011-3-23 23:56 /
在单片机应用系统中,也常常会用到PWM信号输出,例如电机转速的控制。现在很多高档的单片机也都集成了PWM功能模块,方便用户的应用。对于PWM信号,主要涉及到两个概念,一个就是PWM信号的周期或频率,另一个就是PWM信号的占空比。例如一个频率为1KHZ,占空比为30%,有效信号为1的PWM信号,在用示波器测量时,就是高电平的时间为300uS,低电平的时间为700uS的周期波形。
在单片机中实现PWM信号的功能模块,实际上就是带比较器的计数器模块。首先该计数器循环计数,例如从0到N,那么这个N就决定了PWM的周 期,PWM周期=(N+1)*计数器时钟的周期。在计数器模块中一定还有一个比较器,比较器有2个输入,一个就是计数器的当前值,另一个是可以设置的数, 这个数来自一个比较寄存器。当计数器的值小于比较寄存器的值时,输出为1(可以设置为0),当计数器的值大于或等于比较寄存器的值时,输出为0(也可设置 为1,与前面对应)。
了解了这个基本原理后,我们就可以使用STM8单片机中的PWM模块了。下面的实验程序首先将定时器2的通道2设置成PWM输出方式,然后通过设置 自动装载寄存器TIM2_CCR2,决定PWM信号的周期。在程序的主循环中,循环修改占空比,先是从0逐渐递增到128,然后再从128递减到0。
当把下面的程序在ST的三合一板上运行时,可以看到发光二极管LD1逐渐变亮,然后又逐渐变暗,就这样循环往复。如果用示波器看,可以看到驱动LD1的信号波形的占空比从0变到50%,然后又从50%变到0。
同样还是利用ST的开发工具,生成一个C语言程序的框架,然后修改其中的main.c,修改后的代码如下。
 
//  程序描述:用PWM输出驱动LED
 
#include "STM8S207C_S.h"
 
void CLK_Init(void);
void TIM_Init(void);
 
// 函数功能:延时函数
// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ
// 输出参数:无
// 返 回 值:无
// 备    注:无
void DelayMS(unsigned int ms)
{
  unsigned char i;
  while(ms != 0)
  {

    for(i=0;i
收藏 评论3 发布时间:2011-3-23 23:56

举报

3个回答
yuanruiysl 回答时间:2011-5-29 12:14:17

RE:【ST公益分享】 STM8 - PWM

还不错,STM8就是没有这么的详细讲解!
eric wang 回答时间:2011-8-5 11:27:48

RE:【ST公益分享】 STM8 - PWM

而且例程都太简单了,文档说的也很简略,出点问题都不知道看那个文档
Darren_52 回答时间:2014-5-4 15:26:16

RE:【ST公益分享】 STM8 - PWM


LED 驱动,实现!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版