WINCE基于PWM实现的背光驱动

 

********************************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

 

原文地址:https://www.cnblogs.com/LoongEmbedded/p/1907507.html