********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
时间:2010.12.16
类别:WINCE驱动开发
********************************LoongEmbedded********************************
硬件
CPU:S3C2443,背光IC:AT1312B,LCD: KD50G9-40NM-A3
系统
WINCE6.0
1背光驱动的技术分析
LCD显示屏自身并不发光,为了可以清楚地看到LCD显示屏的内容,需要一定的白光背光源。在中小尺寸LCD显示屏中,一般采用白光LED作为显示屏的背光源。白色LED背光电源由数个白光LED组成,如手机、数码相机一般仅需要2到3个白光LED,而PDA和PMP则根据其显示屏的面积,可能需要3到6个LED,我们的GPS产品的LCD是KD50G9-40NM-A3,就用了12个白色LED作为背光源。对背光驱动电路的要求是:
⑴ 满足背光的亮度要求;
⑵ 整个显示屏亮度均匀(不允许有某一部分较亮、另一部分较暗的情况);
⑶ 亮度可以方便地调节;
⑷ 驱动电路占PCB空间要小;
⑸ 工作效率高;
⑹ 综合成本低;
⑺ 对系统其它模块干扰小。
目前调光方式主要有两种,一种是通过改变LED的直流工作电流的方式来调整亮度,例如,有的芯片通过设置内部的寄存器来直接设置LED的直流工作电流,从而达到不同的亮度级,这种方式的缺点是可能会产生色移。所谓白光LED,其实是利用一种作为其管芯的蓝光LED所发出的短波长紫蓝光,激发涂布于输出光学透镜内壁的荧光材料,进而产生波谱较宽的白色复合光。在非额定电流工作情况下,LED所产生的光谱会有变化,导致最终的白光有色移。
而另一种方式就是PWM调光,利用人眼的视觉暂停原理,以一定的频率和占空比来周期性的控制白光LED的导通电流在零电流到额定工作电流之间来回切换,从而调整亮度,这种调光方式就不会产生色移。在应用时,为了确保人眼看不到LED周期亮灭的情况,PWM调光的频率一般要大于100Hz,否则会给别人闪烁的感觉。
2.PWM的原理
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出(高电平或是低电平)来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器(比如S3C2443的计时器3)的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz,通常调制频率为1kHz到200kHz之间。
3.CPU和AT1312B的电路设计
我们产品的背光控制IC采用AT1312B,电路设计部分如下:
图1
5.CPU PWM计时器
S3C2443有5个16位的定时器,其中定时器0、1、2和3有PWM功能,定时器4只是一个没有输出引脚的内部计数器。本系统用定时器3来输出PWM信号来控制背光亮度,S3C2443中PWM定时器结构图如下;
图2
6.系统中代码实现的部分
⑴PCLK、8位prescaler和clock diver值的确定
PCLK:
本系统的FCLK=400MHZ,PCLK=FCLK/6
8位prescaler的值:
见/Src/Common/Timer/timer_fixedtick.c下的OALTimerInit函数的下面的代码
图3
所以可得到prescaler value=14。
clock diver值:
我们在/Src/Oal/Oallib/init.c中实现InitPWMTimer3函数,在这个函数中选择时钟分隔值的代码如下:
图4
下图是定时器配置寄存器中相关部分
图5
结合图6,可知定时器3的输入时钟源的频率为PCLK/(2*(14+1))
图6
所以可以算出定时器输入时钟频率= PCLK/(2*(14+1))=400MHZ/(2*6*15)=20MHZ/9
⑵系统启动的时候在/Src/Oal/Oallib/init.c中的函数OEMInit中调用InitPWMTimer3函数,这个函数体如下:
图7
下图是根据PCLK,prescaler和时钟分割器的值来决定定时器输入频率计PWM频率的计算示例图
图8
图9
图10
⑶背光驱动中控制背光的亮度
应用程序通过改变注册表项的值,从而通过SetEvent的方式告诉背光驱动的IST,从而背光的IST来根据应用程序新的注册表值来设置PWM的脉冲宽度来控制背光亮度,下面来看背光驱动的线程相关调控背光亮度部分的代码如下:
背光驱动创建所需要的事件对象
图11
背光驱动的IST相关部分
图12
通过改变PWM脉冲宽度来调整背光亮度
图13
脉冲宽度调制
http://baike.baidu.com/view/168039.htm
LCD背光控制的实现(PWM应用)(1)
http://hi.baidu.com/rwen2012/blog/item/f96a4dd17509bdd6562c8410.html
背光驱动电路的选择策略和应用介绍
http://www.dzsc.com/news/html/2006-9-11/16817.html