1. 显示驱动基础:LCD与OLED工作原理、TFT阵列结构、像素寻址与刷新机制

各位同学,咱们今天聊聊显示驱动最底层的那些事。说实话,我刚入行那会儿,觉得显示驱动不就是往屏幕扔数据嘛,有什么难的?直到第一次调屏,画面花得像抽象画,我才意识到——不懂底层原理,你连bug都找不到在哪。

1.1 LCD与OLED:两种完全不同的发光哲学

先说说LCD。LCD本身不发光,它就是个光阀门。背光一直亮着,液晶分子像百叶窗一样旋转,控制光线通过量。你想想看,这就像你站在窗户前,用手掌挡住阳光——手掌就是液晶,阳光就是背光。

具体怎么转的呢?液晶分子在电场作用下会扭转。不加电压时,分子排列整齐,光线能通过;加了电压,分子扭转,光线被挡住。这就是常说的「常白模式」和「常黑模式」的区别。

关键参数:响应时间

LCD的响应时间一般在4-8ms。我做过一个项目,客户要求1ms响应,最后只能上OLED。LCD的液晶分子扭转需要时间,这是物理限制,没办法。

OLED就完全不同了。每个像素自发光,像一个个微型LED。有机材料在电流驱动下直接发光,不需要背光。好处很明显——黑色就是真的黑,因为像素完全关闭了。

但OLED有个坑:老化不均。我记得有个项目,屏幕用了半年,状态栏那块明显发黄。为什么?因为状态栏一直显示,那部分像素老化更快。这就是「烧屏」现象。

特性 LCD OLED
发光方式 背光+液晶阀门 自发光
对比度 1000:1 ~ 5000:1 100000:1 以上
响应时间 4-8ms 0.1-1ms
功耗(暗画面) 高(背光常亮) 低(像素关闭)
寿命 50000小时以上 30000-50000小时

1.2 TFT阵列结构:每个像素背后的晶体管

你看到的屏幕有几百万个像素,每个像素背后都有一个TFT(薄膜晶体管)在控制。说白了,TFT就是个开关,控制液晶或OLED的驱动电压。

TFT的结构是这样的:栅极(Gate)、源极(Source)、漏极(Drain)。栅极连到行扫描线,源极连到列数据线,漏极连到像素电极。

个人经验:我调试过一块4K屏,像素间距只有0.1mm。TFT的沟道宽度才几微米,稍微有点工艺偏差,整行像素就偏色。那时候我拿着显微镜看了一整天,才找到问题——栅极金属线有毛刺。

TFT的材料也有讲究。早期用非晶硅(a-Si),迁移率低,但成本便宜。现在高端屏用低温多晶硅(LTPS)或氧化物半导体(IGZO)。

  • a-Si:迁移率约0.5 cm²/Vs,适合低分辨率
  • LTPS:迁移率50-100 cm²/Vs,适合高分辨率、高刷新率
  • IGZO:迁移率10-50 cm²/Vs,漏电流极低,适合低功耗

嗯,这里要注意:IGZO的漏电流低到什么程度?低到你可以用60Hz刷新率驱动静态画面,功耗比LTPS低30%以上。我做过一个电子书项目,用的就是IGZO屏,待机功耗只有0.1mW。

1.3 像素寻址:怎么找到你要控制的那个像素

屏幕上有M行×N列像素,你怎么精确控制第i行第j列的那个点?答案是:行扫描+列驱动。

行扫描线(Gate Line)逐行选通。比如我要写第5行,就把第5行的Gate电压拉高,这一行的所有TFT都打开。然后列驱动线(Source Line)把数据电压送到每个像素的源极。

这个过程叫「逐行扫描」。一帧画面有1080行,就扫描1080次。每次扫描的时间叫「行周期」,大约是1/60/1080 ≈ 15.4微秒。

避坑指南:我曾经遇到过一个问题:画面有横纹。查了半天,发现是Gate驱动芯片的上升沿太慢,导致相邻两行同时导通了一小段时间。数据串扰了。解决办法是调整Gate驱动器的输出斜率,让上升沿控制在100ns以内。

像素寻址的时序是这样的:

// 伪代码:逐行扫描流程
for (row = 0; row < V_Total; row++) {
    // 1. 关闭上一行
    Gate(row-1) = LOW;
    
    // 2. 打开当前行
    Gate(row) = HIGH;
    
    // 3. 等待TFT完全导通(约1-2us)
    delay(2);
    
    // 4. 写入数据
    for (col = 0; col < H_Total; col++) {
        Source(col) = PixelData[row][col];
    }
    
    // 5. 保持数据稳定(约10us)
    delay(10);
    
    // 6. 关闭当前行,锁存数据
    Gate(row) = LOW;
}

1.4 刷新机制:为什么60Hz就够了?

人眼的视觉暂留效应大约是16.7ms。也就是说,画面更新速度低于60Hz,你就会感觉到闪烁。这就是为什么标准刷新率是60Hz。

但游戏玩家要144Hz甚至240Hz,为什么?因为快速移动的画面中,60Hz会产生运动模糊。你想想看,一个物体在16.7ms内移动了10个像素,你的大脑会把它「拖成」一条线。

刷新机制的核心是「帧同步」。驱动芯片内部有个帧计数器,每扫描完一帧,就产生一个VSYNC(垂直同步)信号。这个信号告诉主控:可以送下一帧数据了。

实际项目中的坑:我调试过一个双屏异显的项目,主屏60Hz,副屏30Hz。结果副屏画面撕裂。为什么?因为主控送数据的节奏是按60Hz来的,副屏还没刷完,新数据就来了。

解决办法:给副屏加一个FIFO缓冲区,等它刷完当前帧再更新。说白了就是「等一等,别着急」。

刷新率也不是越高越好。高刷新率意味着更短的行周期,对TFT的充电时间要求更高。比如240Hz下,行周期只有约4微秒。TFT必须在4微秒内把像素电容充到目标电压。如果TFT的驱动能力不够,画面就会偏暗或偏色。

我建议各位在实际项目中,先确认TFT的充电时间常数。公式很简单:τ = R_on × C_pixel。R_on是TFT导通电阻,C_pixel是像素电容。充电时间至少要5τ,才能保证电压误差小于1%。

举个例子:R_on = 1MΩ,C_pixel = 0.5pF,τ = 0.5μs。5τ = 2.5μs。如果你的行周期只有2μs,那就充不满。这时候要么换TFT(降低R_on),要么降低分辨率(增加行周期)。

好了,这一章的内容就这些。LCD和OLED怎么发光、TFT怎么控制像素、怎么找到你要写的那个点、刷新率怎么定——这些是显示驱动最基础的东西。下一章咱们聊聊驱动IC的内部架构,看看数据是怎么从接口走到像素的。