本帖最后由 lilijin1995 于 2023-5-14 21:25 编辑
利用ch32v003的ADC采光强,再转PWM控制LCD屏幕亮度遇到的问题:
1.一致性不好,虽然都是200Hz的PWM,但是不同屏响应不同;
2.光敏二极管灵敏度很高,虽然有做算术均平滤波,1S周期采样完成进入PWM渐变调控
3.但客户反馈有两段变化,手一挥过就能检测到由亮变暗,由暗变亮过程。
所以希望各位能够不吝赐教,如何进行AD采样和PWM调整。
- /***********************************************************************************
- * 渐变算法
- * 误差 <= 2
- ************************************************************************************/
- u32 ColorToColor(u32 last_pwm, u32 _pwm)
- {
- u32 NStep=0,i=0,temp=0; // 需要几步
- int32_t differPWM=0;
- float avrStep=0;
- (last_pwm<_pwm)?(NStep=_pwm-last_pwm):(NStep=last_pwm-_pwm);
- differPWM=_pwm-last_pwm;
- // 渐变开始
- avrStep = (float)differPWM / NStep;
- for(i=0; i<NStep; i++)
- {
- temp = last_pwm + (int)(avrStep * i);
- TIM_SetCompare2(TIM2, temp);
- Delay_Ms(100);
- }
- // 渐变结束
- return 1;
- }
- while(1)
- {
- sum+=ADC_ConvertedValue;
- if(++count==1000)
- {
- currpwm=map(sum/count,0,826,25,499);
- printf("lastpwm=%d,currpwm=%d\r\n",lastpwm,currpwm);
- ColorToColor(lastpwm,currpwm);//渐变调光
- lastpwm=currpwm;
- sum=0;count=0;
- }
- Delay_Ms(1);
- }
|