• 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

     

  • 相关阅读:
    MyBatis学习笔记
    通过Executor来启动线程比用Thread的start()更好
    步骤2:JMeter 分布式测试(性能测试大并发、远程启动解决方案)
    步骤1:JMeter 录制脚本接口测试
    adb常用命令(手机测试)
    电商购物核心功能测试点
    APP测试基本流程以及APP测试要点
    Jmeter-jtl性能测试报告转换-2种导出方法
    Linux之find查找命令
    linux之top命令详解
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/1907507.html
Copyright © 2020-2023  润新知