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的内部架构,看看数据是怎么从接口走到像素的。