ct007 发表于 2008-12-25 14:56:45

51单片机PWM占空比可调 定时器实现,,,只求方法,,望大侠赐教【恢复】

51单片机PWM占空比可调  定时器实现,,,只求方法,,望大侠赐教

占空比从10%————50%

频率为500HZ

kejian2000 发表于 2008-12-27 09:35:59

500=200+300

500=100+400

500=。。。。

很多啊

H_cnter=X,高电平计时参数

L_cnter=500-X,低电平计时参数

ct007 发表于 2008-12-27 09:11:49

你理解错了, 这样怎么可以调节呢?

kejian2000 发表于 2008-12-27 08:57:27

设置一个counter

counter++

当counter的0 bit 为1时

定时器计时200高电平

当counter的0 bit 为0时

定时器计时300低电平



这样就可以得到脉宽2/5的PWM

ct007 发表于 2008-12-27 08:53:53

不懂, 想用一个定时器实现,能再参考一下吗?

kejian2000 发表于 2008-12-25 15:53:23

用一个定时器也可以

分次定时

奇数次做高电平计时

偶数次做低电平计时

高+低电平=500HZ

ct007 发表于 2008-12-25 15:49:12

谢谢, 有点 理解

cowboy 发表于 2008-12-25 15:03:01

最基本的方法,两个定时器,一个计500HZ的周期,一个计占空比时长。

the5moon 发表于 2009-3-1 23:42:29

一个定时器,做500*256HZ频率,定一个字符型变量自加
喝另一个变量(脉宽值)比较
小于输出低电平,大于输出高电平

suaige 发表于 2009-3-6 20:13:14

定时器,调pwm还是很简单的。

如果用stc12/MPC82xxx带2~6 路硬件pwm,就更简单了。。。

rogetxu 发表于 2009-3-6 21:00:56

用硬件的吧!

lin135 发表于 2009-3-7 10:34:57

用个定时器,每100uS中断,每去一次加1一个寄存器,加到20要满值,比如清0寄存器置上IO,加到3清IO,一直加到20清0寄存器再置上IO。这样占空比是3/20=15%。

lin135 发表于 2009-3-7 10:35:00

用个定时器,每100uS中断,每去一次加1一个寄存器,加到20要满值,比如清0寄存器置上IO,加到3清IO,一直加到20清0寄存器再置上IO。这样占空比是3/20=15%。

lin135 发表于 2009-3-7 10:36:37

软件做PWM的缺点是频率做不过,分辨率做不高

minghua 发表于 2009-4-16 22:39:44

用一个定时器就可以了。
我这个是我现在用的,5%-95%可调。不过频率不是500HZ的。如果要用到500HZ,可以用模式1,这样频率就可以低一些。然后每次进入定时器更新TH和TL就可以了。模式1进入中断可能要停定时器。如果是调压,模式2就可以了。重载很方便的。
void timer1svr (void) interrupt 3 using 0
{
if(duty)           //如果此时是正脉宽,自动置数负脉宽置数,下面要更新为正脉宽置数以便下次中断使用
{
   TH1=dutyH;
          AV=0;

}
else                  //否则自动置数正脉宽,下面要更新为负脉宽置数以便下次中断使用
{
    TH1=dutyL;
    AV=1;

}
duty=~duty;//脉宽状态取反
}
duty是脉宽的状态,AV是某个IO,dutyH,dutyL是前面设定好的置数。更改置数就可以调节脉宽占空比。

linxi 发表于 2009-6-2 23:02:40

还没有做呢。、哈哈

ct007 发表于 2009-6-3 08:49:38

我做了一个, 非常的成功,实测波形非常好!
方法稍后奉上

ufowanli 发表于 2009-6-15 22:48:13

学习了,不错。

追枫少年 发表于 2014-5-27 09:52:25

分析:
你占空比10%~50% 分成50个等级 (如果分成5个等级)
F=500HZT=2000US你定时器 装40us(5个等级400us)
页: [1]
查看完整版本: 51单片机PWM占空比可调 定时器实现,,,只求方法,,望大侠赐教【恢复】