标题: 各位大神 能解释下这段pwm输出呼吸灯的代码吗? [打印本页]

作者: ckeai    时间: 2018-7-17 16:32
标题: 各位大神 能解释下这段pwm输出呼吸灯的代码吗?

作者: Angle145    时间: 2018-7-18 00:53
问题1: timer1++;//timer1不是周期吗?却一直在变.?
问题2: if(count>100)//为什么count要大于100才开始value的计数?
回答1:timer1是从0至700循环计数,且if(timer1>value)  pwm=1;  else   pwm=0;由此看出timer1是调节占空比的参数, if(count>100) value++; if(value==700)  value=0;可以看出value是周期计数值,一个周期是700*100,因为count计数100次,value才加1,为什么引入count而不直接用value计数,是因为51单片机变量最大值是2的16次方=65536-1,所以value最大只能计数65536次即65ms的周期值,为了突破这一限制,引用count来辅助计数,这样就可以实现65536*65536次的计数次数即最大3.85秒的周期。PS:DIR是计数方式选择位,即是向上计数还是向下计数。

作者: jerry_fuyi    时间: 2018-7-18 08:00
关于大于100开始计数,我猜测可能和LED的压降有关,等效电压在压降以下基本不亮,这一段不应该算在呼吸灯循环里面
作者: ckeai    时间: 2018-7-18 10:57
Angle145 发表于 2018-7-18 00:53
问题1: timer1++;//timer1不是周期吗?却一直在变.?
问题2: if(count>100)//为什么count要大于100才开 ...

timer1是如何调节占空比的?timer1如果最大加到700那么就占周期的1%?
作者: Leo李    时间: 2018-7-18 14:21
首先,要理解呼吸灯的原理,是通过控制PWM波形的占空比来实现的。
1、timer1不是周期,700才是周期,timer是对周期的计时(就是计算是否一个周期完成)
2、100是一个变化单位,100的时候应该是灯光最弱且能被看见的值。应该是100、200、300……700,再700,600……100这样一个“呼吸”变化周期。
作者: ckeai    时间: 2018-7-18 16:53
Leo李 发表于 2018-7-18 14:21
首先,要理解呼吸灯的原理,是通过控制PWM波形的占空比来实现的。
1、timer1不是周期,700才是周期,timer ...

哪一个才是调节占空比的参数呢
作者: kissme    时间: 2019-1-3 23:45
dir这个标志位好像永远都等于1丫




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1