LED调光曲线怎么样才能出光不抖
本帖最后由 lazybonesyang 于 2015-11-11 09:45 编辑MCU STM8S105
LED调光方式 PWM
位数 16Bit
用指数曲线,出光的时候,特别是亮度高的时候,变化不够顺滑,感觉有点跳。
如果单用一个固定斜线出光应该也是不满足的。
想问下怎么样才可以让LED的光过渡顺滑。
8Bit PWM如果也可以就更佳。
帖上调光数据,比值是1.03493
16bit PWM调光数据
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
36
37
38
39
41
42
44
45
47
49
50
52
54
56
58
60
62
64
66
68
71
73
76
78
81
84
87
90
93
96
100
103
107
111
114
118
123
127
131
136
141
146
151
156
161
167
173
179
185
192
198
205
212
220
227
235
244
252
261
270
279
289
299
310
321
332
343
355
368
381
394
408
422
437
452
468
484
501
518
537
555
575
595
616
637
659
682
706
731
756
783
810
838
868
898
929
962
995
1030
1066
1104
1142
1182
1223
1266
1310
1356
1403
1452
1503
1556
1610
1666
1724
1785
1847
1911
1978
2047
2119
2193
2269
2349
2431
2516
2603
2694
2788
2886
2987
3091
3199
3311
3426
3546
3670
3798
3931
4068
4210
4357
4509
4667
4830
4999
5173
5354
5541
5735
5935
6142
6357
6579
6809
7046
7293
7547
7811
8084
8366
8658
8961
9274
9598
9933
10280
10639
11011
11395
11793
12205
12631
13073
13529
14002
14491
14997
15521
16063
16624
17205
17806
18428
19071
19738
20427
21141
21879
22643
23434
24253
25100
25977
26884
27823
28795
29801
30842
31919
33034
34188
35382
36618
37897
39221
40591
42009
43476
44994
46566
48193
49876
51618
53421
55287
57218
59217
61286
63426
65642
本帖最后由 myqiang1990 于 2015-11-11 10:20 编辑
插补,然后控制插补周期~~光有曲线还不行,还得配合调光算法~~ 怎么样插补 myqiang1990 发表于 2015-11-11 10:18
插补,然后控制插补周期~~光有曲线还不行,还得配合调光算法~~
应该是中间选择些点,然后通过算法连接起来。但这些点怎么确定 呢? lazybonesyang 发表于 2015-12-30 14:10
应该是中间选择些点,然后通过算法连接起来。但这些点怎么确定 呢?
LZ一个问题搞个把月,也不贴贴中间的故事。有啥经验呢? 本帖最后由 myqiang1990 于 2015-12-30 23:14 编辑
lazybonesyang 发表于 2015-12-30 14:10
应该是中间选择些点,然后通过算法连接起来。但这些点怎么确定 呢?
你上面不是算出一些调光曲线的数据点了吗?吧这些点装在一个表里,然后根据实际调光指令查询需要调到的亮度(对应表里的PWM值),然后控制亮度从表中0开始按照+1+1+1的方式从曲线表中取值,控制+1+1+1的速度,就可以了~其实你还可以用PID算法来调光~~原理类似的~就是插补~然后控制插补的速度~为什么要插补呢?因为如果亮度值一下子阶跃的话,调出来的光是闪动的!这个不行~得柔和线性的变化,为什么要控制插补周期呢?因为如果不控制插补周期(就是+1+1+1的速度),那么调光会严重会滞后与调光指令~~不能及时响应亮度的变化~
插补周期的原则就是:与当前亮度跟设定亮度的差值成反比(频率成正比)。(是不是有点像PID算法呢?) myqiang1990 发表于 2015-12-30 19:19
你上面不是算出一些调光曲线的数据点了吗?吧这些点装在一个表里,然后根据实际调光指令查询需要调到的亮 ...
插快了会感觉跳,插慢了又滞后。大神,谢谢你。 lazybonesyang 发表于 2015-12-31 17:20
插快了会感觉跳,插慢了又滞后。大神,谢谢你。
对的~~所以控制插补周期~插补周期的原则,最后一句我已经说明了~ lazybonesyang 发表于 2015-12-31 17:20
插快了会感觉跳,插慢了又滞后。大神,谢谢你。
插。。。插。。。啪。。。啪 谢谢6楼分享,尝试发现调光低端不闪,另外问题出现切光不够快,即0跳到100%出光响应不够快。 Mark!!!!!!!!! 速度控制好就可以了。 是怎么生成优秀的调光曲线的 好像用呼吸灯方式可以否 调光曲线:
u16 data2={
0 ,0 ,1 ,1 ,2 ,2 ,3 ,4 ,5 ,6 ,8 ,9 ,11 ,12 ,14 ,16 ,18 ,20 ,23 ,25 ,28 ,
30 ,33 ,36 ,39 ,42 ,46 ,49 ,53 ,56 ,60 ,64 ,68 ,72 ,77 ,81 ,86 ,90 ,95 ,
100 ,105 ,110 ,116 ,121 ,127 ,132 ,138 ,144 ,150 ,156 ,163 ,169 ,176 ,182 ,
189 ,196 ,203 ,210 ,218 ,225 ,233 ,240 ,248 ,256 ,264 ,272 ,281 ,289 ,298 ,
306 ,315 ,324 ,333 ,342 ,352 ,361 ,371 ,380 ,390 ,400 ,410 ,420 ,431 ,441 ,
452 ,462 ,473 ,484 ,495 ,506 ,518 ,529 ,541 ,552 ,564 ,576 ,588 ,600 ,613 ,
625 ,638 ,650 ,663 ,676 ,689 ,702 ,716 ,729 ,743 ,756 ,770 ,784 ,798 ,812 ,
827 ,841 ,856 ,870 ,885 ,900 ,915 ,930 ,946 ,961 ,977 ,992 ,1008 ,1024 ,1040 ,
1056 ,1073 ,1089 ,1106 ,1122 ,1139 ,1156 ,1173 ,1190 ,1208 ,1225 ,1243 ,1260 ,
1278 ,1296 ,1314 ,1332 ,1351 ,1369 ,1388 ,1406 ,1425 ,1444 ,1463 ,1482 ,1502 ,
1521 ,1541 ,1560 ,1580 ,1600 ,1620 ,1640 ,1661 ,1681 ,1702 ,1722 ,1743 ,1764 ,
1785 ,1806 ,1828 ,1849 ,1871 ,1892 ,1914 ,1936 ,1958 ,1980 ,2003 ,2025 ,2048 ,
2070 ,2093 ,2116 ,2139 ,2162 ,2186 ,2209 ,2233 ,2256 ,2280 ,2304 ,2328 ,2352 ,
2377 ,2401 ,2426 ,2450 ,2475 ,2500 ,2525 ,2550 ,2576 ,2601 ,2627 ,2652 ,2678 ,
2704 ,2730 ,2756 ,2783 ,2809 ,2836 ,2862 ,2889 ,2916 ,2943 ,2970 ,2998 ,3025 ,
3053 ,3080 ,3108 ,3136 ,3164 ,3192 ,3221 ,3249 ,3278 ,3306 ,3335 ,3364 ,3393 ,
3422 ,3452 ,3481 ,3511 ,3540 ,3570 ,3600 ,3630 ,3660 ,3691 ,3721 ,3752 ,3782 ,
3813 ,3844 ,3875 ,3906 ,3938 ,3969 ,4001 ,4032 ,4064 ,4096 ,
};
定义TIM2比较中断
(u16 CCR1_Val=3000;
u16 CCR2_Val=3000;
u16 CCR3_Val=1500;
u16 CCR4_Val=1500;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 5; 。。。)
中断处理:void TIM2_IRQHandler(void)
{ extern u16 TIM3CCR1_Val;
extern u8 pwm_mark;
u16 capture,capturey;
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
{ TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
capture=TIM_GetCapture1(TIM2);
TIM_SetCompare1(TIM2,capture+TIM1CCR3_Val);
if(ledvalx<data2]){ledvalx++;TIM1CCR3_Val=(data2]-ledvalx);}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
capturey=TIM_GetCapture2(TIM2);
TIM_SetCompare2(TIM2,capturey+TIM3CCR3_Val);
if(ledvalx>data2]){ledvalx--;TIM3CCR3_Val=(ledvalx-data2]);}
} 。。。}
请问这种方法可以吗?我试了好久,不是低端闪烁,就是调光响应太慢。怎么改进呢? myqiang1990 发表于 2015-12-30 19:19
你上面不是算出一些调光曲线的数据点了吗?吧这些点装在一个表里,然后根据实际调光指令查询需要调到的亮 ...
受教了,我看懂了,不知道楼主看懂没,呵呵,感觉这个是不是还能用到调节色温之类的上 请问那个插补周期怎么设置,我使用的那种方式是正确的吗? 调光曲线,mark 记号一下,也在做类似产品,一直觉得效果不太好 直接上芯片SN3193A mark,学习一下
这个必须好好学一下 楼主用的哪款调光芯片?最近在做一款调光板,使用的是LM3409,这两天准备打版了,到时候也要调光 make,学习一下 make,学习一下 把曲线拟合成函数运算一下呢,应该会顺滑一点吧 插补周期指的是什么,你那数组里面有多少个数 插补周期是不是从表头位置每一次指向下一个的速度吗 楼主位画了一幅漂亮的二极管V-I指数曲线。你是不是忘记在二极管上串联电阻了?串联电阻以后,亮度与PWM的关系就接近线性了。 学习学习 刷新频率在200hz以上就不抖了,曲线没问题,如果你要获得更好效果,参考gamma调整 这个调光数据、比值1.03493是怎么来的 xld826 发表于 2016-4-15 21:41
问一下,价格大概多少 raydsp 发表于 2016-4-12 09:38
调光曲线:
u16 data2={
0 ,0 ,1 ,1 ,2 ,2 ,3 ,4 ,5 ,6 ,8 ,9 ,11 ,12 ,14 ,16 ,18 ,20 ,23 ,25 ,28 , ...
请问你这个表是怎么生成的? 参考别人的,然后根据实际情况再修改。 调光算法是为了调光值大范围变化时,出来的光不闪动吗? 也要做调光产品,进来学习一下 做成PID控制,一个比例,一个积分就够用了。
页:
[1]