天堂之泪 发表于 2015-9-17 20:05:31

IAP15W4K58S4 高精度PWM波型发生器官方例程很难理解

在datasheet里有个"利用PWM波形发生器控制舞台灯光的示例程序"


以PWM3为例,注释里的1/2550的高电平是怎么算出来的,实在很难理解。

小李非刀 发表于 2015-9-17 21:59:12

程序中的PWM周期有修改,就是CYCLE,原来定义的值是2550,后来改为0x1000(4096),但是注释没有改过来。测试程式是经常要改参数测试的。改回这个值你就明白了:
#defineCYCLE2550

另外,else if(Wide == CYCLE)用该改为:
else if(Wide >= CYCLE)

天堂之泪 发表于 2015-9-18 09:06:42

小李非刀 发表于 2015-9-17 21:59
程序中的PWM周期有修改,就是CYCLE,原来定义的值是2550,后来改为0x1000(4096),但是注释没有改过来。测 ...

原来是这样。我还有个地方不懂,占空比好像是定义为(PWM3T2-PWM3T1)/PWMC,当PWM3T2=0,PWM3T1=1时,(0-1)/2550,这样算出来的是负数,跟PWM3T2=1,PWM3T1=0时,是一个意思么?

像这种的寄存器定义,PWM3T1是等价于PWM3T1H还是PWM3T1L

STCunio 发表于 2015-9-18 11:30:17

天堂之泪 发表于 2015-9-18 09:06
原来是这样。我还有个地方不懂,占空比好像是定义为(PWM3T2-PWM3T1)/PWMC,当PWM3T2=0,PWM3T1=1时,(0-1 ...

第2个翻转值放在第1个翻转值后面,PWM3T2-PWM3T1>0,int型占2个字节的空间

天堂之泪 发表于 2015-9-19 11:30:19

谢谢啦。

hejun 发表于 2016-4-5 16:25:30

小李非刀 发表于 2015-9-17 21:59
程序中的PWM周期有修改,就是CYCLE,原来定义的值是2550,后来改为0x1000(4096),但是注释没有改过来。测 ...

最近在上一个项目,想选用IAP15W4K61S4,就是看中了它带了6路独立的PWM,查看了官方的Datasheet,一直没找到公式算PWM的周期和占空比。一直有个疑问,已经给了2个翻转计数器,两次翻转得到的波形刚好就是一个周期啊,干嘛还有一个PWM计数器?

小李非刀 发表于 2016-4-6 14:14:04

LZ可能没有仔细看STC的规格书。
PWMCH(高7位)和PWMCL(低8位)构成15位计数器,这个控制PWM的周期,而PWMxT1和PWMxT2两个16位寄存器设置需要翻转输出的时刻,就是控制占空比。使用翻转输出的方式简单,但不是很好,所以很快就退出的STC8F系列,将使用置位和复位的方式,更合理。

本站做的四轴飞控就用的这些PWM。

hejun 发表于 2016-4-8 13:42:18

小李非刀 发表于 2016-4-6 14:14
LZ可能没有仔细看STC的规格书。
PWMCH(高7位)和PWMCL(低8位)构成15位计数器,这个控制PWM的周期,而PWM ...

难道是我对PWM的理解错误了?我是这样理解的。初始化的时候将PWM输出端口设置为0(或者1),到达PWMnT1的时候已经得到T1时间段的0(或者1)电平。在T1时刻发生翻转以后就变成了1(或者0),此时再等到PWM计数器PWMCH计数满的时刻,就得到了从T1到PWMCH这段时间的1(或者0),然后这个周期就结束,所以PWM的T2显得好像是多余的。再者,如果T2的时刻小于PWMCH,那一个周期就发生了2次翻转,这样得到的波形一个周期就有三段了:一、从0时刻到T1时刻的一段。二、从T1时刻到T2时刻的一段。三、从T2时刻到PWMCH的一段

wkman 发表于 2016-4-8 14:55:02

这种PWM适合输出一定稳定频率的场合(多输出少输出几w个脉冲无所谓){:lol:},,,如果用在伺服定位,需要一定准确数量的脉冲场合,就比较麻烦了{:sweat:}

15156535189 发表于 2016-8-16 16:32:20

我也有相同的疑问~pwm占空比可调·吗?

小李非刀 发表于 2016-8-16 17:50:51

15156535189 发表于 2016-8-16 16:32
我也有相同的疑问~pwm占空比可调·吗?

PWM,就是“脉冲宽度调制”的意思,你觉得占空比可调吗?不可调占空比的还叫PWM吗?
页: [1]
查看完整版本: IAP15W4K58S4 高精度PWM波型发生器官方例程很难理解