LCD控制器驱动的24位TFT真彩屏接口设计
扫描二维码
随时随地手机看文章
在嵌入式设计中常常会使用lcd屏,现在常用的屏大部分都是高性能的。因为lcd屏的生产厂商很多,标准也不统一,lcd屏往往不能与lcd控制器无粘合连接,所以在使用lcd屏时,厂家还会推荐使用其专为lcd屏是设计的时序芯片,例如,sharp的lcd lq035q7db02配套的控制器为lz9fc22;日本的lcd屏是16位色的,本身价格很高,控制器成本也非常高,性能却不见得好,采用高性能的24位真彩色屏是比较理想的,但接口逻辑需要重新设计。
1 rgb565-rgb888的转换
以友达光电auo生产的a06qu01[1]为例,这是一种24位的tft真彩屏,分辨率为320×240,每个象素由rgb888表示,其控制时序如图1所示,lcd要求的时序由帧同步(vsync)、行同步(hsysnc)、比特时钟(dclk)及数据(data[0:7])构成,帧同步和行同步指示每一帧和每一行的开始。a06qu01每帧240行,每行320个象素,每个像素由依次产生的8b红、8b绿、8b蓝(r1,g2,b3,r4,g5,b6…)构成,所以称为rgb888。
以pxa25x为代表的嵌入式处理器拥有一个lcd控制器,可以将这个控制器配置为最高16位的tft lcd屏控制器,其控制时序如图1所示,lcd要求的时序由帧同步(vsync)、行同步(hsysnc)、点时钟(pclk)及数据(data[0:15]构成,帧同步和行同步指示每一帧和每一行的开始。对于a06qu01,每帧将有240行,每行有320个像素,每个像素由5b红、6b绿、5b蓝构成16位数据,称为rgb565。
将rgb565转换为rgb888要解决2个问题:
1)比特时钟3倍频。lcd控制器每一个像素用一个时钟1次送出16b数据,而lcd屏每个像素需要3个时钟,每次获得8b。这样就需要产生1个3倍于点时钟pclk的时钟。
2)16b到24b数据分解。在lcd控制器送出16b数据时,需要缓存,并分解出rgb信号分别送出,5b红、6b绿、5b蓝构成16位数据可以采用补0的方法,构成8b红、8b绿、8b蓝。数据高位补0时色彩较柔和,低位补0时彩色较艳丽。
通常情况下,使用模拟锁相环技术可以实现均匀倍频,在这个设计中,3倍频时钟与rgb数据必须同步,否则会出现颜色错位;同时锁相环还需要数据分解电路配合使用,这样一个数字和模拟混合的电路会增加成本,因而特别设计使用了数字电路实现非均匀3倍频。具体方案是:使用一个大于6小于7倍的lcd屏比特时钟作为cpld的主控制时钟,lcd屏的时钟频率约为7m赫兹,所以选择cpld的主控制时钟频率为48m赫兹。如图1所示,pclk为控制器输出的点时钟,pdata为rbg565数据,pclkout和pdataout是送往lcd的信号,x7pclk为cpld的定时时钟,在pclk上升沿将pdata存入缓冲器pdatabuf,并将内部状态位datavalid置位,在x7pclk的上升沿,如果检测到datavalid为高,则使pclkout为低,将缓冲器中的数据取出高5位红色信号,补零后送到pdataout,并将datavalid置为低,在下一个x7pclk的上升沿将pclkout置高,8b数据送出到lcd屏。使用这种方法依次将绿色及蓝色信号送出,在蓝色信号送出后,保持pclkout为高,直到下一个datavalid为高,进入下一次转换,从图1中可以看出,数字3倍频信号pclkout不是均匀的,蓝色数据时钟的占空比不是50%。根据lcd屏数据手册的要求,pclkout的占空比变化容许的范围是40%-60%,因而只要调整好x7pclk的时钟频率,还是比较容易产生符合占空比要求的pclkout时钟的,lcd屏正常工作还需要帧同步(vsync)和行同步(hsysnc)信号,这些信号可以由软件驱动程序编程产生。
2 lcd背光及lcd偏置的电源产生器
lcd屏需要特殊的供电,用于背景照明和lcd偏置,现在使用的小尺寸lcd大多数使用led作为背光,以及-10v的偏置电压,本设计使用的lcd屏是2路各4个白光led串联,每路需要的供电电压约为10v,电流为20ma。lcd偏置电压为-10v,电流为3-5ma。这些电源利用lcd控制器内部的电源控制器实现。如图2所示,由l1、v1构成升压型dc-dc转换器,l1为高频功率电感,v1为高频小功率开关晶体管。c4和r1构成的微分电路可以提高v1的导通和关闭速度,有利于提高电源效率,v1由脉冲宽度调制信号控制,在导通期间使用l1存储能量,在关闭时电感向负载释放能量,这样v1的集电极上生成高压脉冲信号,这个信号经过d1、c3和c6整流滤波后得到用于led供电正电压,同样经过c2隔直流后再整流滤波得到用于lcd偏置的负电压,注意,电容c7是正端接地的。led电流限制使用图3所示的电路,v3和v4为led驱动管,v2为电流采样管,v2、v3、v4是3个型号相同的晶体管。这3个晶体管的基级相连,因而基极电压相等。因为型号相同,所以基极到发射极电压近似相等,于是,r3、r6、r7上的压降近似相等,这样r3、r4上的电流被转换为r2上的反馈电压。控制器根据反馈电压自动调整图2中的pwm控制信号的占空比,从而改变输出led供电电压,使反馈电压稳定在0.6v,通过led的电流稳定在22ma,lcd偏置电压大约稳定在-10v。
3 数字倍频及数据分解实现
rgb565-rgb888转换器用xc9536实现,如图4所示,来自lcd控制器的信号为:16b数据l_dd0..15、同步信号l_fclk及l_lclk、点时钟信号l_pclk,输出到lcd屏的信号为:8b数据信号lcd_d0..7、同步信号lcd_vsync及lcd_hsync、时钟信号lcd_dclk。x7clk来自于48m赫兹的晶体振荡器,使用verilog hdl开发。如果连接无误,则上电后加载带有tft屏驱动的嵌入式linux内核,一般在lcd屏左上角能看到企鹅图案,如果实际显示的图案位置和色彩不正确,则需要根据实际看到的图像调整lcd控制寄存器中的时序设置,实现正确的显示。
4 总结
由于接口标准不统一、将一个新型号的lcd屏接到嵌入式处理器比较困难,需要认真分析lcd控制器及lcd屏的时序和驱动方式,使用低价可编程逻辑电路,可以实现接口的时序转换,lcd屏需要的背光电源及偏置电源可以按本文所述方法,利用lcd屏内部集成的电源控制器实现,也可以通过外接专用的lcd背光电源和lcd偏置实现。