????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); ????} ???? ???? ????/*********************************************************************************** *?渐变算法 *?误差?<=?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
利用ch32v003的ADC采光强,再转PWM控制LCD屏幕亮度遇到的问题:
1.一致性不好,虽然都是200Hz的PWM,但是不同屏响应不同;
2.光敏二极管灵敏度很高,虽然有做算术均平滤波,1S周期采样完成进入PWM渐变调控
3.但客户反馈有两段变化,手一挥过就能检测到由亮变暗,由暗变亮过程。
所以希望各位能够不吝赐教,如何进行AD采样和PWM调整。
热门产品 :
CH585: 集成高速USB和NFC的蓝牙MCU