本帖最后由 AlexWeng 于 2017-3-23 00:30 编辑
如何解决背光闪的问题
关键字:PWM DC 背光闪
适应机种:MST6M181/182/306/309
背光调节分PWM调光和DC调光两种。如果某些参数设置不对,就会导致背光闪。下面分情况说明:
1.DC调光
这种情况下出现的背光闪绝大多数跟频率有关。一般情况下,我们要将频率调至几十KHz,当然具体情况要根据屏的规格书而定,一般30K比较通用。调节频率的地方见下面代码的红色部分。
2.PWM调光
这种情况背光闪分两种情况。第一种同DC调光。第二种情况是PWM的所谓的VDBEN属性造成的。该属性见下图。一般这种属性设错后,从波形上我们也看的出来,即在主PWM方波旁边会出现一小尖波。具体代码修改见蓝色部分。
#if(defined(ADJUST_BACKLIGHT_TYPE)&&ADJUST_BACKLIGHT_TYPE)//added by Weng ,ADJUST_BACKLIGHT_TYPE为1表PWM调光
#define PWM0_SYNC_WITH_VSYNC 1
#else
#define PWM0_SYNC_WITH_VSYNC 0
#endif
#define PWM1_SYNC_WITH_VSYNC 0
#define PWM2_SYNC_WITH_VSYNC 0
#define PWM3_SYNC_WITH_VSYNC 0
//-----------------------------------------------------------------------------
void Mst_PwmPortInit( void )
{
PWM_DbgLv PWMDbLv = E_PWM_DBGLV_NONE;
PWM_Result PWMRet = E_PWM_FAIL;
PWM_ChNum PWMPort;
if(PWMRet == MDrv_PWM_Init(PWMDbLv))
printf("PWM initial FAIL !!!\n");
#if defined(PWM_UNIT_DIV)
MDrv_PWM_UnitDiv(PWM_UNIT_DIV);
#else
MDrv_PWM_UnitDiv(0);
#endif
#if defined(PWM0_PERIOD) && defined(INIT_PWM0_DUTY)
if ( !PAD_PWM0_IS_GPIO )
{
PWMPort = E_PWM_CH0;
#if defined(ADJUST_BACKLIGHT_TYPE)//added by Weng
MDrv_PWM_Period(PWMPort, BACKLIGHT_PERIOD);//调这里频率变动比较大
MDrv_PWM_DutyCycle(PWMPort, INIT_PWM0_DUTY);
MDrv_PWM_Div(PWMPort, BACKLIGHT_FREQUENCY);//细调频率调这里
#else
MDrv_PWM_Period(PWMPort, PWM0_PERIOD);
MDrv_PWM_DutyCycle(PWMPort, INIT_PWM0_DUTY);
MDrv_PWM_Div(PWMPort, 0);
#endif
MDrv_PWM_Polarity(PWMPort, NON_INVERSE);
#if PWM0_SYNC_WITH_VSYNC
MDrv_PWM_Vdben(PWMPort, YES);
#else
MDrv_PWM_Dben(PWMPort, YES);
MDrv_PWM_ResetEn(PWMPort, YES);
#endif
MDrv_PWM_Oen(PWMPort, 0); /* Set 0 for output enable */
}
#endif
......
}
|