lazybonesyang 发表于 2015-11-11 09:42:34

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:18:21

本帖最后由 myqiang1990 于 2015-11-11 10:20 编辑

插补,然后控制插补周期~~光有曲线还不行,还得配合调光算法~~

litiang 发表于 2015-12-9 11:46:42

怎么样插补

lazybonesyang 发表于 2015-12-30 14:10:05

myqiang1990 发表于 2015-11-11 10:18
插补,然后控制插补周期~~光有曲线还不行,还得配合调光算法~~

应该是中间选择些点,然后通过算法连接起来。但这些点怎么确定 呢?

gmyu 发表于 2015-12-30 17:59:59

lazybonesyang 发表于 2015-12-30 14:10
应该是中间选择些点,然后通过算法连接起来。但这些点怎么确定 呢?

LZ一个问题搞个把月,也不贴贴中间的故事。有啥经验呢?

myqiang1990 发表于 2015-12-30 19:19:33

本帖最后由 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算法呢?)

lazybonesyang 发表于 2015-12-31 17:20:16

myqiang1990 发表于 2015-12-30 19:19
你上面不是算出一些调光曲线的数据点了吗?吧这些点装在一个表里,然后根据实际调光指令查询需要调到的亮 ...

插快了会感觉跳,插慢了又滞后。大神,谢谢你。

myqiang1990 发表于 2015-12-31 18:31:42

lazybonesyang 发表于 2015-12-31 17:20
插快了会感觉跳,插慢了又滞后。大神,谢谢你。

对的~~所以控制插补周期~插补周期的原则,最后一句我已经说明了~

skyseeingliqy 发表于 2015-12-31 19:50:12

lazybonesyang 发表于 2015-12-31 17:20
插快了会感觉跳,插慢了又滞后。大神,谢谢你。

插。。。插。。。啪。。。啪

raydsp 发表于 2016-3-26 15:16:32

谢谢6楼分享,尝试发现调光低端不闪,另外问题出现切光不够快,即0跳到100%出光响应不够快。

zh313212 发表于 2016-3-26 16:31:35

Mark!!!!!!!!!

bmagui 发表于 2016-3-26 23:27:15

速度控制好就可以了。

Ray______ 发表于 2016-4-1 16:37:32

是怎么生成优秀的调光曲线的

heicnhei3 发表于 2016-4-1 17:01:20

好像用呼吸灯方式可以否

raydsp 发表于 2016-4-12 09:38:20

调光曲线:
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]);}       
                                               
                                                        }   。。。}
请问这种方法可以吗?我试了好久,不是低端闪烁,就是调光响应太慢。怎么改进呢?

lyz1900 发表于 2016-4-12 09:49:01

myqiang1990 发表于 2015-12-30 19:19
你上面不是算出一些调光曲线的数据点了吗?吧这些点装在一个表里,然后根据实际调光指令查询需要调到的亮 ...

受教了,我看懂了,不知道楼主看懂没,呵呵,感觉这个是不是还能用到调节色温之类的上

raydsp 发表于 2016-4-12 10:00:00

请问那个插补周期怎么设置,我使用的那种方式是正确的吗?

cenkey 发表于 2016-4-12 11:43:32

调光曲线,mark

hz_luping 发表于 2016-4-15 17:55:32

记号一下,也在做类似产品,一直觉得效果不太好

xld826 发表于 2016-4-15 21:40:29

直接上芯片SN3193A

xld826 发表于 2016-4-15 21:41:28

52HLX 发表于 2016-4-19 17:32:11

mark,学习一下

pazulin 发表于 2016-4-19 17:44:32

这个必须好好学一下

ITOP 发表于 2016-4-19 17:46:22

楼主用的哪款调光芯片?最近在做一款调光板,使用的是LM3409,这两天准备打版了,到时候也要调光

kite2006 发表于 2016-4-19 17:56:59

make,学习一下

yangbo18416 发表于 2016-4-20 11:36:30

make,学习一下

iridescent_rsy 发表于 2016-4-20 12:31:32

把曲线拟合成函数运算一下呢,应该会顺滑一点吧

litiang 发表于 2016-4-28 23:38:05

插补周期指的是什么,你那数组里面有多少个数   插补周期是不是从表头位置每一次指向下一个的速度吗

Azuresky 发表于 2016-5-2 20:34:38

楼主位画了一幅漂亮的二极管V-I指数曲线。你是不是忘记在二极管上串联电阻了?串联电阻以后,亮度与PWM的关系就接近线性了。

zhzj2007 发表于 2019-8-19 18:43:32

学习学习

durgy 发表于 2019-8-19 22:43:38

刷新频率在200hz以上就不抖了,曲线没问题,如果你要获得更好效果,参考gamma调整

了无 发表于 2019-11-27 17:21:08

这个调光数据、比值1.03493是怎么来的

szxszx 发表于 2019-11-27 17:42:08

xld826 发表于 2016-4-15 21:41


问一下,价格大概多少

dgdzas 发表于 2020-7-1 18:35:53

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 , ...

请问你这个表是怎么生成的?

raydsp 发表于 2020-7-6 13:48:36

参考别人的,然后根据实际情况再修改。

ff4120 发表于 2020-10-11 20:44:58

调光算法是为了调光值大范围变化时,出来的光不闪动吗?

liufabing 发表于 2023-7-7 22:29:59

也要做调光产品,进来学习一下

陆小凤之北京 发表于 2023-7-10 10:53:43

做成PID控制,一个比例,一个积分就够用了。
页: [1]
查看完整版本: LED调光曲线怎么样才能出光不抖