zoukankan      html  css  js  c++  java
  • WINCE基于PWM实现的背光驱动

    ********************************LoongEmbedded********************************

    作者:LoongEmbedded(kandi)

    时间:2010.12.16

    类别:WINCE驱动开发

    ********************************LoongEmbedded********************************

     

    硬件

    CPU:S3C2443,背光IC:AT1312BLCD: KD50G9-40NM-A3

    系统

    WINCE6.0

     

    1背光驱动的技术分析

    LCD显示屏自身并不发光,为了可以清楚地看到LCD显示屏的内容,需要一定的白光背光源。在中小尺寸LCD显示屏中,一般采用白光LED作为显示屏的背光源。白色LED背光电源由数个白光LED组成,如手机、数码相机一般仅需要23个白光LED,而PDAPMP则根据其显示屏的面积,可能需要36LED,我们的GPS产品的LCDKD50G9-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,通常调制频率为1kHz200kHz之间。

     

    3.CPUAT1312B的电路设计

    我们产品的背光控制IC采用AT1312B,电路设计部分如下:

    1

     

    5.CPU PWM计时器

    S3C2443516位的定时器,其中定时器0123PWM功能,定时器4只是一个没有输出引脚的内部计数器。本系统用定时器3来输出PWM信号来控制背光亮度,S3C2443PWM定时器结构图如下;

    2

    6.系统中代码实现的部分

    PCLK8prescalerclock diver值的确定

    PCLK:

    本系统的FCLK=400MHZPCLK=FCLK/6

     

    8prescaler的值:

    /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

    下图是根据PCLKprescaler和时钟分割器的值来决定定时器输入频率计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

     

  • 相关阅读:
    c++标准库cstring文件
    c++标准库string文件
    c++标准库cmath文件
    micro:bit用蜂鸣器制作计时器
    【Python入门自学笔记专辑】——PythonUnicode字符
    eclips安装教程
    题目(18)答案
    Console.Write格式化输出
    图像传输有用到,图像与数据流相互转换
    datalist、repearter、gridview显示行号的三种方法 或者是获取datalist行id
  • 原文地址:https://www.cnblogs.com/liang123/p/6325785.html
Copyright © 2011-2022 走看看