PWM LED调光线性度怎么做好?
最近做一个PWM驱动LED呼吸灯电路,使用STC12C5604AD内置的PWM输出,发现在低占空比时,LED的亮度变化非常快,可以说肉眼能非常容易分辨的亮度变化区域在占空比5%~30%之间就完成了,剩下变化阶段亮度变化都不怎么明显。因此最终效果非常不好!请问这是由于占空比分辨率不够高引起的么?如果改用软件PWM提高分辨率到1000级会不会好一些?我的打算是低占空比段(0~300)放慢速度,其它部分加快以获得比较线性的亮度变化输出
请高人指点 刚刚试了仅使用5%~50%范围的输出,放慢变化速度,线性度好一些了,但是最低亮度时出现了闪烁。。。。 PWM的频率调低些试试? 把PCA的时钟源改一下, 就可以调硬件PWM的频率了
呼吸灯我没玩过, 所以就帮不了LZ了... 没效果,PWM占空比参数范围取值在1~80效果会稍微好一些,如果取1~255则有很大的非线性效果
请问应该如何取值来补偿人眼对线性调光的视觉效果,也就是说PWM占空比变化控制曲线应该怎样设定才能得到视觉上线性的亮度变化效果?使用指数曲线会有这样的效果么? 改变PWM频率没有大的改善,PWM频率从40Hz到1KHz我都测了,效果差不多了,低频率时还有明显的闪烁感 以前我试过,是对数关系,具体忘了,要一个一个算出来的,比如分10级亮度, PWM有有255级: 10=x.log255,算出这个x,然后9,8,7.....2,1反过来应用公式算出对应的PWM值,每一级对应一个相应的PWM值,按照这个PWM值变出来的LED亮度才是平顺变化的,否则如果PWM是线性增加,亮度一开始是急剧变化,到最后变化就不明显了。 我感觉还是要用多级数的PWM输出,看了下商品PWM LED调光IC多为4096级的PWM输出,而单片机内置的硬件PWM才256级,分辨率差太多了。。
明天改用定时器+12bit软件计数器的方式做软件PWM输出试试看 回复【6楼】iamyanh
以前我试过,是对数关系,具体忘了,要一个一个算出来的,比如分10级亮度, pwm有有255级: 10=x.log255,算出这个x,然后9,8,7.....2,1反过来应用公式算出对应的pwm值
-----------------------------------------------------------------------
请问这个X是指期望的亮度级别么? 明白了,X是个常量! 10才是,x是一个系数,比如如果你要20级变化,公式就变成20=x.log255了----------255是指PWM级数,我只用过AVR的255级的PWM 对数关系?
那就占空比每次乘 2 咯? 好像上看过一篇文章
说人的感官天生就是一个对数运算器
感受到的强度就是功率取对数以后的值 根据6楼提供的思路,亮度设置为10级的话,PWM值应该这样设置:
10:255
09:146.52
08:84.18
07:48.37
06:27.79
05:15.97
04:9.17
03:5.27
02:3.03
01:1.74
00:1
马上改写程序试试效果 测试结果:
分10级亮度,亮度变化的视觉效果比较线性,但是亮度跳跃过于明显。也许至少得分20级以上才行。这个需要慢慢测试了!
不过用对数曲线区控制基本上是可行了,再次感谢iamyanh的指教 学习了~ 占空比真正要设置到100%的话
值是256 , STC的PWM控制有9位, 最后一位就是为256设计的 255的话应该会有个小脉冲, 虽然在LED上无关紧要, 不过还是应该注意的问题呢 回复【18楼】Pony279霍斯
255的话应该会有个小脉冲, 虽然在led上无关紧要, 不过还是应该注意的问题呢
-----------------------------------------------------------------------
你这个差值不是关键问题
你的计算方法比较简单,但是级数有所减少(255范围的PWM实际只能做出9段亮度),实际测试亮度变化更激进!
不过无论是你的算法还是iamyanh的算法,STC内置的硬件PWM输出是完全不够用的,为了得到比较理想的效果,必须使用更多bit的PWM。考虑硬件电路已经定型,决定做软件PWM输出,具体参数明天计算! 根据iamyanh提供的思路,我做了一个专用计算表,可以很直观的给出PWM值,然后用查表的方式去实现。
点击此处下载 ourdev_704507P1RTXM.xls(文件大小:18K) (原文件名:LED亮度变化视觉效果线性化控制参数计算表.xls) 不错到时我也试下 mark 瞎扯啥呢,LED亮度流过它的平均电流有关,说通俗点就是它的限流回路的参数,
占空比只是其中之一,如果50%时已经接近饱和,那50%-100%就没有意义了。 mark led调节电流才是正道 回复【24楼】r166
-----------------------------------------------------------------------
用PWM的话LED就只有开关两种状态, 这样就只能从能量的角度去考虑啦
功率和占空比可以认为是线性关系的, 除非PWM的频率没设置好 支持楼上的 回复【24楼】r166
瞎扯啥呢,led亮度流过它的平均电流有关,说通俗点就是它的限流回路的参数,
占空比只是其中之一,如果50%时已经接近饱和,那50%-100%就没有意义了。
-----------------------------------------------------------------------
我看你才是真正没搞懂我们在说什么
PWM调光电路如果连平均电流变化比例与PWM占空比变化比例对应都做不好,那还是别玩PWM调节了!
我们在讨论的是如何控制LED上的平均电流变化曲线,使得LED的亮度变化效果在视觉上是线性的,这个是很多高阶应用的基础。因为人眼对亮度变化的感知特性,如果LED上的平均电流变化是线性的,则出来的调光效果非线性非常严重,暗处变化非常快而亮处变化很难察觉。 回复【29楼】bigeblis
-----------------------------------------------------------------------
平均电流变化比例与PWM占空比变化比例怎么对应? 请指教我是新手 平均电流变化比例与PWM占空比变化比例怎么对应? 回复【31楼】Lost boy韩超
回复【29楼】bigeblis
-----------------------------------------------------------------------
平均电流变化比例与pwm占空比变化比例怎么对应? 请指教我是新手
-----------------------------------------------------------------------
频率选择合适的话基本是线性对应的 mark mark 我也要作PWM led调光,可具体怎么做呢?指教一下! mark 回去试试~~ mark 楼主的问题我也遇到过,虽然光通量和占空比是线性关系,但是肉眼感觉是非线性的,耳朵听声音也是有这个问题,所以音量电位器是非线性的.
正如楼主最后的方法,找出较为线性的对应值做成表格,在软件中用查表法找到某一亮度对应的占空比.但是32级亮度变化会不会太少了,比如要你用液晶显示当前亮度百分比,点按一下亮度加,亮度压根没变化,但是已显示增加了一个亮度百分比
另外想请教楼主一个问题:
现有R,G,B三路LED,如何用PWM方法调成白光(各种色温的白光),简单说,如何做到白平衡? 先mark下收藏 楼主和我碰到的问题一摸一样~~~我试试楼主的曲线~~~
mark 回去试试~~ 不知道是我记得错了还是大家写错的了,有这样表示(log255)的吗?应该是(lg255)。 标记ledpwn亮度调节 用这个公式算,第一级调光是怎么都不能为零的!
我按各位大神们的公式写了个程序,可以按输入的PWM级数,调光级数输出数据,然后直接复制到到程序! STC的PCA有16bit吗,建议用PCA+中断有更高的调节范围 pwm不是唯一的调制方式
可以PWM也可以PFM也可以混合调制
PWM即pulse width modulation的缩写,脉冲宽度调制,保持开关周期不变,调节开关导通时间
PFM即pulse frequence modulation缩写,频率调制,保持开关导通时间不变,改变开关周期
led调光适合选择PWM比较合适
还有就是LED灯的光电流曲线不是线性的,(没记错的话较前面的一段比较线性)楼主可以自己搜索一下。
关键就是PWM频率得选择与占空比范围的选择决定了调节的好坏,频率高了PWM等级调节对LED的发光调节不明显,低了闪烁
占空比调节范围小了调节不明显,太宽又也烁
我也做过一个PWM的呼吸灯,占空比调节范围是0.7%到99%频率固定在77HZ 129级调节。回家了就发上来代码。
我也是单片机新手不对的请大家指教 额,用在PWM控制电机转速上也可以这么计算么? mark…… mark一下,学习了 我用2次方,已经觉得很诺基亚了……而且不用查表! /* 目的:心型矩阵PWM定频呼吸灯
材料:AT89S52,12M晶振
*/
PWM_OUT EQU P3.7
TEMP_NEQU 20H ;存PWM负半周中间变量
TEMP_PEQU 21H ;存PWM正半周中间变量
TEMP_NN EQU 22H ;存PWM负半周最终波形变量
TEMP_PP EQU 23H ;存PWM正半周最终波形变量
ORG 0000H
SJMP START
ORG 000BH
LJMP INT
RETI
ORG 0030H
START:
CLR PWM_OUT ;初始化PWM输出为关
SETB F0 ;初始化明暗调节方向控制位,1为变量,0为变暗
MOV TEMP_N,#1D ;初始化PWM中间变量,最暗
MOV TEMP_P,#129D
MOV TMOD,#01H ;初始化定时器0工作在模式1,50毫秒一次中断
MOV TH0,#0B1H
MOV TL0,#0E0H
SETB EA
SETB ET0
SETB TR0
MAIN:
MOV TEMP_NN,TEMP_N ;把PWM中间变量的值传递给最终变量
MOV TEMP_PP,TEMP_P
CLRPWM_OUT ;输出低电平,小灯点亮
M_LOOP1: ;通过最终变量的值控制输出低电平时间
LCALL DELAY100US
DJNZ TEMP_NN,M_LOOP1
SETB PWM_OUT ;输出高电平,小灯熄灭
M_LOOP2: ;通过最终变量的值控制输出高电平时间
LCALL DELAY100US
DJNZ TEMP_PP,M_LOOP2
LJMP MAIN ;进入大循环
INT: ;中断子程序
CLR EA ;关中断
MOV TH0,#0B1H ;重新装入定时初值
MOV TL0,#0E0H
JNB F0,BA ;判断调节方向
MOV A,TEMP_N
CJNE A,#129D,L ;最亮了吗?
CLR F0 ;切换为由亮变暗
SETB EA ;开中断
RETI
L:
INC TEMP_N ;由暗变量的过度
DEC TEMP_P
SETB EA
RETI
BA: ;开始变暗
MOV A,TEMP_P
CJNE A,#129D,LL ;判断是不是最暗了
SETB F0 ;最暗了切换调节方向
SETB EA ;开中断
RETI
LL:
DEC TEMP_N ;由亮变暗的过程
INC TEMP_P
SETB EA
RETI
DELAY100US: ;pwm最小长度因子
MOV R6,#01H
DL0:
MOV R5,#2FH
DJNZ R5,$
DJNZ R6,DL0
RET
END ;程序结束
mark,實驗看看
如果你用的线性横流电源,占空比调光绝对是很好的,不过你的眼睛可能对强光不敏感。 mark.~学习了。~~~~~~ 本帖最后由 电子爱好者_MCU 于 2013-4-12 16:02 编辑
LED最有效的控制方式还是 电流源来控制 软件通过PWM控制 属于间接控制 通过修改输出电压来控制流过LED的电流 LED的亮灭与流过的电流有个范围 我们应该在其范围内操作 那样效果比较明确 之所以在某段PWM中无明显变化 那是因为那段区间不属于这个范围 也就是盲区 这个属于硬件结构,软件是无法弥补的 我们只有将软件的可调范围 压缩到这段有限的区域 这样做才是最好的 MARK{:biggrin:} mark,还是不是很懂 学习了,这几天刚好要用到这个 wsdzwsdz 发表于 2012-2-3 19:27 static/image/common/back.gif
楼主的问题我也遇到过,虽然光通量和占空比是线性关系,但是肉眼感觉是非线性的,耳朵听声音也是有这个问题,所 ...
现在才看见
阿莫少个有人回复帖子通知的功能
你这个,建议用专门的三基色驱动芯片来控制吧。全靠软件模拟调控太复杂了,得不偿失啊!人眼对三基色的敏感度不一样的,加上本来就有的非线性特性,想要完全软件控制三路PWM输出,完美调制需要的颜色很麻烦 256级PWM,10级亮度,感觉灯的亮度变化梯度有点大。 dz20062008 发表于 2013-4-9 10:42 static/image/common/back.gif
pwm不是唯一的调制方式
可以PWM也可以PFM也可以混合调制
PWM即pulse width modulation的缩写,脉冲宽度调制 ...
完全非线性的吧,在额定电流下,发光效率极高,好点的都在150lm/w以上,然后随着电流增加,一直往下降,直到最大电流。
请参考 cree R5 http://www.cree.com/led-components-and-modules/products/xlamp/discrete-directional/~/media/Files/Cree/LED%20Components%20and%20Modules/XLamp/Data%20and%20Binning/XLampXPG.pdf
第4和6页。电压电流增加很快,但是光通量增加越来越慢。 freshuman 发表于 2012-12-17 14:22 static/image/common/back.gif
不知道是我记得错了还是大家写错的了,有这样表示(log255)的吗?应该是(lg255)。 ...
看来数学不咋地啊,一样,简写而已{:titter:} 我试试楼主的曲线 楼主的思路不对,之所以看起来不线性是因为增长率不线性导致,比如8BIT的PWM 1/255到2/255增长率上一次的一倍253/255/-254/255增长率就很小,所以造成了视觉不线性 学习中。。。 這個要用到模擬電子類了,用AGC。用算法是不行的,無法解決生產工藝的離散和光衰。 人眼对光的感觉是db刻度,pwm调电流是线性刻度 没想过,回去试试 根据前面提供的计算公式,我也做了一个图形界面的计算程序,欢迎试用,win7环境开发的,不知道xp能不能用。 bigeblis 发表于 2011-12-14 20:23 static/image/common/back.gif
回复【24楼】r166
瞎扯啥呢,led亮度流过它的平均电流有关,说通俗点就是它的限流回路的参数,
占空比只 ...
正解!!! dz20062008 发表于 2013-4-11 23:23
/* 目的:心型矩阵PWM定频呼吸灯
材料:AT89S52,12M晶振
*/
人才啊,居然是汇编啊 tonyone 发表于 2013-5-13 23:24
256级PWM,10级亮度,感觉灯的亮度变化梯度有点大。
256级PWM,是什么意思? 考虑弄个恒流源,然后用占空比调节电流,自我感觉这样做比较好。 iamyanh 发表于 2011-12-14 00:20
以前我试过,是对数关系,具体忘了,要一个一个算出来的,比如分10级亮度, PWM有有255级: 10=x.log255, ...
很有启发 能在仔细点就好 我做的呼吸灯也是出现这个问题 本帖最后由 iamyanh 于 2014-9-18 23:04 编辑
minwang440 发表于 2014-9-18 22:25
很有启发 能在仔细点就好 我做的呼吸灯也是出现这个问题
比如要分10级,算出常数k=10/log255,
第十级的PWM值为255,那么第九级是10^(9/k),第八级是10^(8/k) .................以此类推,当然这个值只能四舍五入。 我用定时器做过,频率要做高点 频率是关键吧 不知道楼主的频率设定在多少?
不知道楼主的频率设定在多少? billmcu 发表于 2013-9-4 21:39
楼主的思路不对,之所以看起来不线性是因为增长率不线性导致,比如8BIT的PWM 1/255到2/255增长率上一次的一倍 ...
这位童鞋的说法突然让我有些提湖灌顶的顿悟,以前还真没想过这个问题,这种解释很有道理.假设1级是1,下一个是2, 那功率增加两倍,下一个为3, 功率增加1.5倍,下一个为4,功率增加1.33倍,所以如果以每次递增1的方式增加PWM值,那等于是每次的功率增长都比以前少,越低的PWM增长越大,越高的PWM值增长越少,这就造成了递增PWM到后来感觉变化越来越小 刚照14楼的童鞋验证69楼的想法,验证结果她们的说法虽然不同,但结果是一样的,浅显一点的说法就是和上一级的功率增长率不一样造成不连续的感觉
照69的说法是功率增长问题,我反回去推算14楼的功率增长率是1.74
10:255
09:146.52
08:84.18
07:48.37
06:27.79
05:15.97
04:9.17
03:5.27
02:3.03
01:1.74
00:1
这是原来14楼的推算,底下以功率增长率做计算
第1级 1
第2级 1*1.74 = 1.74
第3级 1.74*1.74 = 3.0276
第4级 3.03*1.74 = 5.2722
第5级 5.27*1.74 = 9.1698
第6级 9.17*1.74 = 15.9558
第7级 15.97*1.74 = 27.7878
第8级 27.79*1.74 = 48.3546
第9级 48.37*1.74 = 84.1638
第10级 84.18*1.74 = 146.4732
第11级 146.52*1.74 = 254.9448
结果是极为接近 对调光来说,段数越多代表变化越线性,让人感觉变化比较柔和,按照功率增长倍数的思路,代表了取第一个PWM值很重要,不能太低,太低了对应下一个功率增长的数值会变大,这就造成了在有限的PWM范围内,段数会减少,理论上第一个值越大越好,但太大了,PWM的范围有限,后面又没空间了,我以PWM256阶为例,起始值设为10,功率增长率为1.1算出最多可得38段的调整值,应该是算不错了,以下是我算的结果,有兴趣的人可以试一试.
10,11,12,13,14,15,16,17,18,19,
21,23,25,27,29,32,35,38,41,45,
49,54,59,65,71,78,85,93,102,112,
132,145,159,175,192,211,232,255
程序可以建表来得出PWM值!! 电子爱好者_MCU 发表于 2013-4-12 16:01
LED最有效的控制方式还是 电流源来控制 软件通过PWM控制 属于间接控制 通过修改输出电压来控制流过LED的电 ...
电流调节法会改变led两端的电压,led的色温会随电压降低,显色指数降低会直接影响显示清晰度,pwm只是光通量降低,色温不变,显示效果好,只是有频闪问题,眼睛容易疲劳 学习了,收藏 iamyanh 发表于 2011-12-14 00:20
以前我试过,是对数关系,具体忘了,要一个一个算出来的,比如分10级亮度, PWM有有255级: 10=x.log255, ...
受教了,我之前正在调这个,现在有方向了,谢谢了。 帮别人写调光程序,用得上了,谢谢 老姚的STC帝国,我玩不懂啊,只能敬而远之啊; 关键是pwm的分辨率 好帖,mark 前段时间用PWM调光, 频率是不好调,后来改用模拟调光了. 亮度,貌似是對數關係。 我有个疑问 我想用51单片机做一个旋转LED灯可以利用视觉暂留效果形成各种各样的图案1 51单片机哪种性能比较好?2 想要做上位机需要学习那些知识?哪种语言 或者推荐我看看哪本书? 根据led特性 选择适当的调光曲线 频率加高一些就看不到闪烁,加个光敏电阻作负反馈,线形度就好了。 最近在做呼吸灯不是很懂! 人眼的感光是非线性的,占空比也要设成非线性。 学习了。 额。。你这是问题吗?如果是的话,需要做一个对照表查表实现。。
bigeblis 发表于 2011-12-14 00:47
测试结果:
分10级亮度,亮度变化的视觉效果比较线性,但是亮度跳跃过于明显。也许至少得分20级以上才行。 ...
楼主你这样做出来的效果怎么样,我的做法也是跟你一样,我的PWM输出最大值是1000,分255个等级但是做出来在有些地方灯还是会有抖动
页:
[1]
2