调光曲线:
u16 data2[256]={
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[DMX_buf[0]]){ledvalx++;TIM1CCR3_Val=(data2[DMX_buf[0]]-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[DMX_buf[0]]){ledvalx--;TIM3CCR3_Val=(ledvalx-data2[DMX_buf[0]]);}
} 。。。}
请问这种方法可以吗?我试了好久,不是低端闪烁,就是调光响应太慢。怎么改进呢? |