基于手持终端的LCD驱动电路的实现

最新更新时间:2011-09-03来源: chinaaet关键字:驱动  LCD  手持终端 手机看文章 扫描二维码
随时随地手机看文章

  现在大部分的便携式手持终端产品,如移动电话、导航系统等,都拥有一个小型LCD显示屏,这使LCD驱动电路的设计成为手持终端设计的重要组成部分。

  LCD驱动电路的设计是手持终端产品的重要组成部分。本文设计并实现了基于S3C2440A的手持终端LCD驱动电路。以应用于特殊行业的手持终端为例,叙述LCD驱动电路的设计实现方法。

  硬件电路设计

  硬件电路结构

  本设计中手持终端CPU采用三星公司ARM920T内核处理器S3C2440A,其LCD控制器支持STN LCD和TFT LCD,实际使用的LCD为LTS350Q1-PE1_PI,属于TFT LCD。

  电路框图如图1所示。

  驱动电路主要包括三部分:第一部分是LCD驱动,采用MAX1779芯片;第二部分是LED背光驱动,采用MP1521芯片;第三部分是VCOM信号驱动,采用LM8261芯片。这里主要叙述LCD驱动和背光电路的实现。

  LCD驱动电路

  由于LCD内集成有数字电路和模拟电路,需要外部提供数字电压DVDD和模拟电压AVDD。另外,为了完成数据扫描,需要TFT轮流开启/关闭。当TFT开启时,数据通过源极驱动器加载到显示电极,显示电极和公共电极间的电压差再作用于液晶实现显示,因此需要控制TFT的开启电压VGH、关闭电压VGL,以及加到公共电极上的电压VCOM。

  MAX1779芯片能产生LCD需要的模拟电压AVDD、栅极开启电压VGH及栅极关断电压VGL。芯片内部集成有3个DC-DC转换器,其中包括两个充电泵和一个升压转换器,可以为小型TFT液晶屏提供高效的调节电压。LCD驱动电路如图2所示。

  这里,一个充电泵产生正电压,作为TFT的开启电压VGH;另外一个充电泵产生负电压,作为TFT的关闭电压VGL。此外,芯片还可以产生-5V电压输出,设计时利用-5V输出电压协助LM8261产生VCOM信号。

  LED背光驱动电路

  LCD作为一种被动显示器件本身并不能发光,必须要有背光模块提供光源。白光LED由于复杂程度较低、成本低且尺寸较小,被普遍用做嵌入式手持设备的LCD背光源。本文中背光驱动电路如图3所示。

  驱动芯片采用MP1521,该芯片有3组独立的电流反馈回路,可同时驱动3组并联的LED。现将3组反馈回路FB1、FB2、FB3短接,可以提供更大的驱动电流,用于驱动6个白色串联LED背光灯。

  MP1521支持两种方式控制LED亮度,一是将BRT连接在范围为0.26V~1.2V的电压上,另外一种是通过PWM信号控制LED亮度。设计时,将其连接在PWM端口,使用PWM控制LCD背光亮度。

  S3C2440A有5个16bit定时器,其中定时器0、1、2、3有PWM功能。将BRT连接到能够输出PWM信号的CPU的TOUT0/GPB0引脚,利用定时器0产生的PWM信号控制LCD亮度。通过改变PWM信号的占空比调整LED亮度,而通过设置CPU内部寄存器的值可以改变PWM的占空比。

  为了节省功耗,电路的使能(EN)端接CPU的LCD_PWREN管脚,高电平时背光电路工作;低电平时背光电路不工作。同时,可将EN端通过电阻直接连接到3.3V电源上以便调试时使用。

  LCD_BCK+和LCD_BCK-分别连接到串联LED的正负两端。软件设计

  手持终端的嵌入式Linux所采用的内核版本是kernel-2.4.18。 为了使LCD能正常显示,还需要在Linux系统下开发LCD的驱动程序。

  字符设备的驱动程序

  字符设备是Linux系统中最简单的设备,可以像文件一样访问。当字符设备初始化的时候,其驱动程序向Linux内核登记,在chrdevs向量表中增加一个device_struct数据结构条目。这个设备的主设备标识符用作这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的device_struct数据结构包括一个登记设备驱动程序名称的指针和一个指向一组文件操作的指针。这组文件操作本身位于这个设备的字符设备驱动程序中,并处理一些特定任务。

  Linux下的帧缓冲设备

  Linux操作系统为LCD等显示设备提供了帧缓冲区。帧缓冲区(Framebuffer)是Linux为显示设备提供的一个接口,是把显存抽象化后的一种设备。为LCD编写驱动程序的实质就是为帧缓冲区编写驱动程序。

  由于帧缓冲驱动程序的实现在许多论文中有详细叙述,这里不再赘述,本文重点讨论背光设备驱动程序的实现。

  LCD背光设备的驱动程序

  LCD背光设备可看作字符设备,可以按照字符设备驱动程序的编写方法进行实现。在驱动程序里实现了LCD各种控制功能。驱动程序主要包括lcdctrl.c和lcdctrl_smdk2440.c。其中lcdctrl.c屏蔽了具体的硬件,它通过钩子函数调用lcdctrl_smdk2440.c相关函数完成各种具体操作。为了形象地说明两个文件之间的关系,这里以LCD亮度调节过程为例,说明函数的调用过程,如图4所示。

  

  lcdctrl.c中的lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这些控制LCD的功能包括亮度调整、对比度调整、关闭LCD、开启LCD等。

  下面分别叙述两个文件的实现。

  lcdctrl.c文件

  1、定义file_operation结构体

  static struct file_operations lcdctrl_fops = {

  ioctl: lcdctrl_ioctl,

  open: lcdctrl_open,

  release: lcdctrl_close };

  LCD的各种控制功能在lcdctrl_ioctl函数中实现,lcdctrl_open和lcdctrl_close不实现具体功能,直接返回0值。

  2、lcdctrl_ioctl函数

  lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这里主要说明亮度调节功能的实现。部分代码如下:

  static int lcdctrl_ioctl(struct inode * inode, struct file *filp, unsigned int cmd , unsigned long arg)

  {……

  switch(cmd)

  { ……

  case

  _LCDCTRL_IOCTL_BRIGHTNESS:

  if ((arg >=0) && (arg <= 100))

  ret = lcdctrl_set_brightness(arg);

  break; //调节LCD背光亮度

  ……

  break;}

  return ret;}

  当应用程序传递的命令参数为LCDCTRL_IOCTL_BRIGHTNESS时,lcdctrl_ioctl调用lcdctrl_set_ brightness具体实现亮度调节功能。

  3、lcdctrl_set_brightness函数

  lcdctrl_set_brightness具体实现亮度调节功能。主要代码如下:

  int lcdctrl_set_brightness(int b)

  {

  brightness = b;

  return lcd_device->set_brightness(b);

  }

  可以看出,此函数调用lcd_ device->set_brightness函数,而lcd_device在初始化时已被指向与具体的硬件相关的函数。

   4、初始化函数

  初始化函数主要完成初始信息的设置和设备的注册。

  lcdctrl.c_smdk2440文件

  1、lcdctrl_device结构体

  lcdctrl_device结构体定义了具体操作LCD的各函数指针,包括LCD初始化函数,LCD开启和关闭函数,亮度、对比度等设置函数。其中LCD关闭函数的本质就是将LCD背光亮度设置为0。

  static struct lcdctrl_device smdk2440_dev = {

  init: smdk2440_lcdctrl_init,

  enable: smdk2440_lcdctrl_enable,

  disable: smdk2440_lcdctrl_disable,

  set_intensity: smdk2440_lcdctrl_set_intensity,

  set_brightness: smdk2440_lcdctrl_set_brightness,

  set_contrast: smdk2440_lcdctrl_set_contrast};

  2、smdk2440_lcdctrl_set_brightnes函数

  这里只叙述亮度设置函数的实现。

  static int smdk2440_lcdctrl_set_brightness( int b)

  { ……

  TCNTB0 = 100;

  TCMPB0 = b*100/100;

  //设置TCMPB0寄存器的值

  TCON = (TCON & ~(0xf)) | ( TCON_0_AUTO | TCON_0_MAN | COUNT_0_OFF);

  TCON = (TCON & ~(0xf)) | 0;

  TCON=(TCON & ~(0xf)) | (TCON_0_AUTO | COUNT_0_ON);}

  函数中的语句大部分是给与定时器相关的寄存器写值。其中b就是上层函数传递下来的bright值,从程序中可以看到,调节亮度本质上是通过TCMPB0寄存器写入与bright相关的值,控制PWM占空比实现亮度调节功能。

  3、lcdctrl_device_get_ops函数

  用于上层获取具体设备的钩子函数。代码如下:

  struct lcdctrl_device *lcdctrl_device_get_ops(void)

  {return &smdk2440_dev;}

  此函数被lcdctrl.c初始化时调用,将设备指向smdk2440_dev。

  至此,驱动程序设计完成,为了更好地实现LCD的管理,需要在上层的Qtopia应用程序中提供人机操作的界面。

  Qtopia应用程序

  Qtopia应用程序提供人机操作界面并调用底层驱动程序完成LCD控制功能,这里,仍然以亮度调节为例叙述应用程序工作过程。

  主要完成功能:

  1、应用程序完成人机操作的界面,为使用人员提供友好界面;

  2、读取亮度值,并将其存入变量bright中;

  3、打开设备文件:fd=open("/dev/devname",O_RDONLY);

  4、调用底层的驱动程序,通过底层的驱动程序将LCD背光亮度调整为指定值。

  ioctl(fd, _BACKLIGHT_ IOCTL_BRIGHT, bright)。

  ioctl函数调用驱动程序完成亮度的调节。

  结语

  经测试,设计完成的LCD能很好地完成图形的显示,终端电源管理界面中包含了LCD亮度调节功能。通过图形管理界面能够方便地管理LCD,达到节约能量、延长手持终端工作时间的目的。

关键字:驱动  LCD  手持终端 编辑:探路者 引用地址:基于手持终端的LCD驱动电路的实现

上一篇:单正向栅驱动IGBT简化驱动电路
下一篇:采用市电供电的LED驱动器

推荐阅读最新更新时间:2023-10-18 15:38

德州仪器最新达芬奇处理器推动便携式数字视频应用发展
新产品为便携式视频应用提供包括低成本与双电源模式在内的众多优化特性 2007 年 1 月 16 日,北京讯 日前,德州仪器 (TI) 宣布开始提供基于达芬奇技术 (DaVinci) 的 TMS320DM6441 片上系统样片。借助多种达芬奇软件与开发工具,DM6441 可实现高质量视频与节电模式,进一步推动了数字视频领域的技术革命,并满足各种便携式音视频应用的需求,其中包括便携式媒体播放器 (PMP)、消费类视频安全设备、医疗设备、数据终端、IP 网络摄像机、车载/机载娱乐系统以及其它数字音视频应用。更多详情,敬请访问: www.ti.com/dm6441pr 。   DM644
[新品]
51单片机学习单片机之路总结
学习单片机有一学期了,现在也由51转到STM32了。一直想对51的学习做一个总结。也希望对别人有一些启发。也给后学者提供一些建议。当然本文是我对自己学习过程的总结,若有不对的地方,还请高手指出。 我想,再看本文之前,最好对单片机有了最基础的了解,最好能用单片机驱动起一个LED灯,否则,可能会不知所云。 首先我想问一个问题,你认为单片机有哪些内容呢?也许你现在手里有一块开发板,你已经开始从流水灯开始,一个一个外设在跑了。也许你已经看过一些单片机入门的书了。如果是这样,我估计你会回答,单片机包括了流水灯,键盘,数码管,定时器,中断,串口,AD,DA,液晶,DS18B20……其实这样的回答其实符合了大多数初学者的心态。因为天祥老
[单片机]
高分辨率全帧CCD芯片FTF4027M的驱动电路设计
本文所要设计的驱动电路是机载CCD相机上的前端驱动电路。机载CCD相机能够将拍摄的图像以数字的形式采集、存储和传输,并与地面实现实时通信,因此可以很好地克服传统光学相机的缺点。随着CCD器件的快速发展,CCD驱动时序的产生有很多种方法,比如可以采用数字集成电路、单片机、EPROM器件或可编程逻辑器件等来实现。本文采用CCD专用的数字集成芯片和单片机进行设计来实现CCD驱动电路。它的优点是结构设计简单、设计周期短、电路可靠性强。而高速时序脉冲产生芯片的运用又克服了单片机晶振频率低的限制,因此足以满足高速大面阵CCD的驱动时序要求。 1 系统总体结构 CCD驱动电路系统框图如图1所示,它以微控制器P89LPC932作为系统
[测试测量]
高分辨率全帧CCD芯片FTF4027M的<font color='red'>驱动</font>电路设计
无刷直流电机的电流换向电路 无刷直流电机的三相全桥驱动电路
无刷直流电机由电动机主体和驱动器组成,是一种典型的机电一体化产品。 无刷电机是指无电刷和换向器(或集电环)的电机,又称无换向器电机。早在十九纪诞生电机的时候,产生的实用性电机就是无刷形式,即交流鼠笼式异步电动机,这种电动机得到了广泛的应用。但是,异步电动机有许多无法克服的缺陷,以致电机技术发展缓慢。上世纪中叶诞生了晶体管,因而采用晶体管换向电路代替电刷与换向器的直流无刷电机就应运而生了。这种新型无刷电机称为电子换向式直流电机,它克服了第一代无刷电机的缺陷。 无刷直流电机由电动机主体和驱动器组成,是一种典型的机电一体化产品,具有响应快速、较大的起动转矩、从零转速至额定转速具备可提供额定转矩的性能,具有可靠性高,稳定性好,适应性强
[嵌入式]
无刷直流电机的电流换向电路 无刷直流电机的三相全桥<font color='red'>驱动</font>电路
多业务融合驱动高清视频芯片整合化
摄像机图像处理芯片是摄像机的核心部件,摄像机传感器在将光信号转换成电信号后都须在SoC芯片组处理后才从后端发射出去,其承载了图像处理与分析、编解码压缩等大量工作,如果是智能设备,还会嵌入大量的智能分析算法,进入高清监控时代,其作用更为凸显。   目前国内安防视频监控系统的主流产品已经从十多年前的纯模拟视频监控系统,逐步转变成了纯数字的百万高清视频监控系统,即从视频采集、视频传输、视频录像和回放全部采用数字信号。相比于模拟视频监控设备,百万高清数字摄像机大大提升了画质,对比模拟监控设备传输技术而言,数字视频监控设备仅需普通网线,易于实现远距离传输,更重要的是降低了工程造价且易于维护。随着纯数字高清监控系统配套设备越来越齐全,解
[安防电子]
TRINAMIC推出全新4安培步进电机驱动芯片
全球 领先的电机及运动控制开发者 TRINAMIC 近日发布了一款全新的步进电机驱动芯片,驱动电流可达 4 安培,丰富了其现有的微步控制的步进电机驱动产品线。新的 TMC2660 集成预驱动器和功率 MOSFET 管,预驱动部分可以实时计算电机线圈电流,功率 MOSFET 将电流放大驱动电机。 该芯片采用多芯片模组封装技术,将驱动器和放大器封装在一个芯片内 ,实现了最低功耗,目前可用于 4 安培的步进电机驱动器。 TMC2660 的 Rds 为 65 毫欧 ,于 4 安培电流的情况下工作只耗 能 2.8 瓦,与之前最具竞争力的解决方案相比减少了 85% 。新芯片 的低能耗消除了对散热器的需求,实现了高集
[工业控制]
省电性大胜LCD一筹 电子纸显示技术进军IoT应用
电子纸显示器具省电优势,这使其与液晶(LCD)显示器产生颇大的差异。 即便电子书阅读器目前仍是电子纸技术的主力应用产品,不过近年来以该技术为基础的电子货架卷标、行李箱电子卷标、电子纸广告牌等,也逐渐成为电子纸显示器的成长动能来源。 而电子纸的省电特性,是其进军物联网应用的最大本钱。 以技术来看,电子纸技术可分成两种,一种是微胶囊电子墨水技术,目前其已广泛使用在电子阅读器上。该技术的微胶囊中混合了含有带正电荷的白色粒子和带负电荷的黑色粒子,它们悬浮在清洁的液体中,再根据用户需要的内容,并使正电或负电电场接通,相对应的粒子会移动至微胶囊顶端,用户就可以在表面看见白色或黑色的影像。 如果电场的作用方向相反,则显示效果也相反,即黑色显示,
[手机便携]
MC33991型二相步进电机驱动
摘要:MC33991是Motorola公司生产的两相步进电机驱动器,可以准确地控制步进电机的运动并及时反馈步时电机的工作状态。该电路有良好的抗干扰能力,可以灵活地控制驱动步时电机,是汽车电子设备特别是汽车仪表中的理想驱动器。 关键词:步时电动机 驱动器 SPI MC33991 汽车仪表 1 MC33991的主要特点 MC33991是单独封装、通过SPI(同步串行外设接口)进行通信、可同时控制二个步进电机的驱动电路。该电路由4个可驱动线圈的功率H桥和辅助逻辑控制器组成。每组H桥的驱动可用来控制步时电机的速度、旋转方向及每相线圈中电流的大小。MC33991有良好的抗干扰能力,可以十分灵活地驱动步进电机,因此是汽车电子设备特别是
[传感技术]
小广播
最新电源管理文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved