本帖最后由 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);
}
|