在调试OLED面板或者折腾显示方案的时候,很多人会遇到一个奇怪的现象:明明给像素写入的电压一模一样,屏幕上的不同区域却出现一块亮一块暗,甚至同一块区域用一段时间后亮度还会慢慢漂移。这背后的根源,往往不是驱动IC的逻辑写错了,而是像素电路里那颗驱动晶体管的阈值电压(Vth)在作怪。今天这篇帖子,我想围绕7T1C驱动电路,把OLED像素从“复位”到“发光”的完整过程掰开揉碎讲一遍。这篇内容适合刚接触AMOLED像素电路设计的工程师、从嵌入式转显示驱动开发的朋友,以及所有想搞明白“面板内部像素到底怎么工作”的硬件爱好者。
老规矩,先说明我的思路:7T1C不是某家厂商的专利结构,而是显示驱动领域里一种非常经典的像素补偿架构。我会先用2T1C作为参照物讲清楚OLED像素的“痛点”,再逐级拆解7T1C里每个晶体管和那颗存储电容的职责,最后按“复位 -> 补偿与写入 -> 发光”三个阶段,把一帧画面里像素电路每一个节点的电压变化过程完整走一遍。中间穿插一些我在实际仿真和项目调试里踩过的坑。
1. 从2T1C说起:OLED像素为什么对“电流精度”这么挑剔
1.1 OLED是电流型器件,不是电压型器件
LCD液晶屏幕里的每个子像素,本质上是一个电压型器件——施加的电压决定了液晶分子的偏转角度,进而控制背光穿透量。但OLED完全是另一个逻辑:它的发光亮度直接取决于流过有机发光二极管的电流大小,电流越大,激发的激子越多,光子输出越多。
这个特性决定了OLED像素电路的核心任务:必须为OLED提供一个精确可控、稳定持久的驱动电流。你不能像控制开关一样简单地把电压接到OLED两端就完事,因为OLED没有“阈值电压截止”的天然缓冲,微小的电压波动会导致电流指数级变化,亮度对电压的敏感度非常高。
所以AMOLED面板的像素电路里,都会设计一个“驱动管”来把电压信号转换成电流。这个驱动管通常工作在饱和区,因为饱和区里漏极电流与栅源电压满足平方律关系:
I_d = 1/2 * μCox * (W/L) * (Vgs - Vth)^2
也就是说,只要控制住驱动管的栅源电压差Vgs,就能得到一个相对稳定的驱动电流。问题在于,这个公式里藏着一个对工艺和老化非常敏感的变量——Vth。
1.2 阈值漂移:LTPS晶体管最大的“脾气”
早期AMOLED面板普遍使用LTPS(低温多晶硅)工艺制作像素TFT。LTPS的优点非常突出:载流子迁移率高,晶体管可以做得很小,响应速度快,适合做高分辨率面板。但它有一个先天毛病——多晶硅晶界处的缺陷态会导致不同位置的TFT阈值电压不均匀。
面板出厂时,额,同一块玻璃基板上不同像素的Vth可能就差个几十毫伏甚至上百毫伏。更麻烦的是,驱动管长期工作在偏压应力下,缺陷态会随着时间积累,Vth会逐渐漂移。这就是为什么有些OLED屏幕用久了会出现残影(image sticking)或者说“烧屏”——不是发光层真的烧坏了,而是驱动管的Vth在每个像素位置漂移的程度不一样,导致即使输入相同的数据电压,每个像素的驱动电流也不同,最终表现出来就是亮度不均匀和残留影像。
1.3 2T1C的局限:亮度均匀性从哪里开始崩的
最简单的像素电路是2T1C——两颗晶体管加一颗电容。一颗作为开关管(负责采样数据线上的电压),一颗作为驱动管(负责把电压转成电流),电容负责在开关管关断后保持驱动管栅极电压。结构图很好画:扫描线接开关管栅极,数据线接开关管源极,开关管漏极接驱动管栅极,驱动管源极接电源正极,驱动管漏极接OLED阳极,存储电容跨接在驱动管栅极和地之间。
2T1C的问题在哪里?看驱动电流公式就明白了:
I_OLED = 1/2 * μCox * (W/L) * (Vgs - Vth)^2
其中Vgs由数据电压Vdata决定,但Vth是个随工艺和老化变化的变量。假设两个像素的数据电压相同,一个Vth是1.0V,另一个是1.1V,只差100mV。如果Vgs设计为2V,那么两个像素的电流分别是:
- 像素A:(2.0 - 1.0)^2 = 1.0
- 像素B:(2.0 - 1.1)^2 = 0.81
亮度差接近20%!人眼对低灰阶亮度差异的敏感度非常高,这种程度的差异在实际画面里会表现为明显的mura(影像不均匀)斑点。这就是2T1C无法在高品质OLED面板上大规模使用的原因——它没有一个环节来“测量并抵消”Vth的漂移。
7T1C电路之所以大量出现在中高端AMOLED面板里,核心目的就是为了解决Vth漂移问题。它不是简单地增加晶体管数量,而是引入了一整套“先测量Vth,把它存进电容,再在发光时抵消掉”的补偿机制。
2. 7T1C电路拓扑拆解:七个晶体管和一颗电容各司其职
2.1 一个能讲通道理的等效结构
7T1C的字面意思很直白:7个TFT晶体管加1个存储电容。这7个晶体管里,只有1个是真正干“电流转换”活儿的驱动管,其余6个都是开关管,负责在不同的时间阶段把各个关键节点接到正确的电位上去。不同面板厂商的7T1C拓扑细节会有差异,但功能框架高度相似。
为了后面解释复位和发光过程时不至于混乱,我采用一种比较通用的等效模型来描述这个电路。里面的关键节点有三个:
- N_G:驱动管的栅极节点,也是存储电容Cst的上极板
- N_S:驱动管的源极节点,直接连接OLED阳极,也是Cst的下极板
- N_D:驱动管的漏极节点,通过发光控制管接到电源VDD
下面我用一个功能示意的方式列出7颗管的连接关系,不纠结于某个具体型号的版图,重点是让你看懂每颗管子在什么阶段导通、把哪里接到了哪里。
2.2 七个管子各自担任什么角色
| 晶体管 | 连接关系 | 控制信号 | 职责 |
|---|---|---|---|
| Tdr(驱动管) | N_G控制,N_D到N_S | 内部 | 将Vgs转换为OLED驱动电流,全篇主角 |
| Tsw(数据开关管) | 数据线Vdata到耦合节点 | SCAN[n] | 写入数据电压 |
| Tcp(补偿开关管) | N_G到N_D | SCAN[n] | 补偿阶段把驱动管接成二极管形式 |
| Tem(发光控制管) | VDD到N_D | EM[n] | 控制电源是否接入驱动管,决定是否发光 |
| Tr1(源极复位管) | OLED阳极N_S到VINT | SCAN[n-1] | 复位OLED阳极节点电压 |
| Tr2(栅极复位管) | N_G到VINT | SCAN[n-1] | 复位驱动管栅极电压 |
| Tr3(耦合节点复位管) | 耦合节点到VREF | SCAN[n-1] | 复位数据耦合节点,为写入做准备 |
存储电容Cst接在N_G和N_S之间。你没看错,电容不是一端接地,而是跨接在栅极和源极之间。这很关键——只有这样,当耦合节点上的电压变化时,改变量才能通过电容完整地传递到驱动管栅极,实现“叠加”效果。如果电容一端接地,数据电压就只能直接写入栅极,Vth就没办法被“存住”再“抵消”了。
2.3 为什么需要两行扫描信号和一条发光控制线
如果你仔细看上面表格里的控制信号,会发现三个有趣的信号来源:SCAN[n-1](上一行扫描线)、SCAN[n](当前行扫描线)、EM[n](发光控制线)。
SCAN[n-1]负责复位,SCAN[n]负责补偿和写入,EM[n]负责发光使能。为什么不能用同一根扫描线把复位和写入一起搞定?因为复位必须发生在“当前行写入之前”。如果某像素当前行的扫描信号SCAN[n]到来之前,它已经被复位好了,那么上一行扫描线SCAN[n-1]恰好就是这个像素最近一次被“预卷”的机会——它和当前行本身没有逻辑冲突。
这就是AMOLED行扫描流水线设计的巧妙之处:上一行的扫描信号,被复用为当前行的复位信号。一行像素的完整周期跨越两行扫描时间,既保证了时序正确,又不需要额外增加很多控制引脚。EM[n]则是独立的发光控制线,因为发光阶段和扫描写入阶段必须互斥——写入时不能让OLED提前点亮,否则画面就会出现错乱。
3. 复位阶段:把像素的“上一帧记忆”彻底清空
3.1 不复位会怎样:残留电荷和残影的温床
先想象一个没有复位阶段的2T1C像素:当数据开关管关断时,驱动管栅极上的电压靠存储电容保持。如果下一帧数据还没写入,驱动管会继续按上一帧的电压驱动OLED发光。没问题,这本来就是AMOLED的保持特性。但如果上一帧是非常亮的画面,这一帧突然要显示黑色,电容上残留的高电压需要一定时间才能被新的低电压“压下去”——如果扫描时间和数据线驱动能力不足,就会出现上一帧画面的残影拖尾。
更关键的是,OLED阳极节点在前一帧发光结束后,会残留一个与发光亮度相关的电压。如果不把这个电压复位到一个已知的固定电位,下一帧的补偿阶段就无法在统一的起点上工作。补偿的精度直接依赖“每个像素都从同一个电压状态出发”,一旦起点不一致,补偿结果就会偏离理想值,Vth的漂移抵消效果就要打折扣。
3.2 复位时各节点电压怎么走
复位阶段由SCAN[n-1]触发。当SCAN[n-1]变高时,三个复位管Tr1、Tr2、Tr3同时导通,电路里主要节点的电压变化如下:
- N_G(驱动管栅极)被Tr2拉到VINT
- N_S(OLED阳极)被Tr1拉到VINT
- 耦合节点被Tr3拉到VREF
此时EM[n]为低,Tem关断,VDD不会接入驱动管漏极,所以无论驱动管是否满足开启条件,都不会有电流流过OLED。数据开关管Tsw和补偿开关管Tcp也都处于关断状态,数据线上的电压不会串进来。
这三个节点被复位到固定电位意义各不同:N_G和N_S复位到同一个VINT,可以理解为让驱动管的Vgs从0开始,电容上不残留上一帧的电荷;耦合节点复位到VREF,是为下一阶段的数据叠加提供一个基准电位。
3.3 复位电压VINT该选多少
VINT这个电压的选取,在实际项目里是个需要仔细权衡的点。常见的选择是让VINT略低于数据电压的动态范围下限,这样复位完成后,驱动管处于“绝对关断”状态,不会在补偿阶段之前就产生意料之外的电流。
另一个值得注意的问题是:OLED阳极在复位瞬间会被拉低,如果VINT和OLED阴极电位差过大,会在OLED两端形成反向偏压。虽然OLED反向偏压不会发光,但长期反复的反向偏压冲击会影响器件寿命和可靠性。所以很多面板设计里,VINT并不会直接接到0V,而是选一个比阴极电位稍高一些的固定电平,既能稳定黑场,又不过度应力。
这里补充一个我在仿真测试中反复确认的经验:复位管导通电阻不宜太大,否则复位时间会被拉长,在4K/8K高刷新率面板里,一行像素的时间只有十几微秒,接复位管的扫描线要预留足够的裕量,否则会出现“上一帧还没清干净,下一帧就开始写入”的情况。
4. 补偿与写入:让驱动管自己“说出”阈值电压
4.1 二极管接法:把驱动管变成一只高精度的电压表
复位完成后,驱动管栅极和源极都在VINT,Vgs为0。这时候要让电路知道当前驱动管的Vth到底是多少。怎么测量?7T1C采用的方法叫“二极管接法”——把驱动管的漏极和栅极通过Tcp短接起来。
当SCAN[n]变高、Tcp导通时,N_G和N_D被直接连接,驱动管Tdr从“栅源控制的三端器件”变成“只有两个端口的二极管”。这时候VDD通过Tem接入N_D,电流路径变成:VDD -> Tem -> N_D -> Tdr -> N_S -> OLED阳极。由于Tdr的栅极和漏极被短接,它天然工作在饱和区,并且会一直导通,直到Vgs降低到略低于Vth,电流趋近于0为止。
我打个比方:这就像你给一个水龙头一个很大的进水压力,但出水口连着一个小水箱,水箱水位升高后龙头两端的压差越来越小,最终流不动了,停下来的那个水位差,就精确记录了这个龙头的“最低开启压差”。
对TFT来说,这个“最终停下来的Vgs”就是Vth。电容Cst把N_G和N_S之间的这个电压差记下来。此时N_G约等于N_S加上Vth,也就是:
V(N_G) = VINT + Vth
这个Vth被“锁”在电容里。值得注意的是,这个测量过程对Vth本身的绝对值不用做任何预判,不管Vth漂移到了0.8V还是1.2V,电路都能自动收敛到对应的Vth值——这就是内部补偿的最大优势。
4.2 数据耦合写入:怎么把数据电压叠加上去
补偿完成后,Tcp关断,驱动管栅极悬空(除了Cst保持电压)。现在要通过Tsw把数据线上代表灰阶的电压Vdata送进电路。
但如果直接把Vdata接到N_G,N_G会被钳位到Vdata,Vth就全丢了。所以7T1C电路里数据写入采用的是“电容耦合”方式——数据电压通过Tsw写入到耦合节点,而不是直接写到驱动管栅极。
具体过程:耦合节点在复位阶段被Tr3拉到VREF,补偿结束后,Tsw导通,数据线电压Vdata接管耦合节点,把耦合节点从VREF拉高到Vdata(或者反过来,取决于数据电压范围)。因为Cst跨接在N_G和N_S之间,而N_S被Tr1保持在VINT(实际上N_S的电压可能略有变化,受OLED阳极电容和Cst分压的影响),所以耦合节点的电位跳变会通过Cst叠加到N_G上。
理想情况下,最终驱动管栅极电压变成:
V(N_G) = VINT + Vth + k * (Vdata - VREF)
k是耦合系数,由Cst和N_G节点总寄生电容的分压比例决定,设计时希望它尽可能接近1。此时驱动管栅源电压为:
Vgs = V(N_G) - V(N_S) = Vth + k * (Vdata - VREF)
你看,Vth明晃晃地出现在Vgs里。接下来要做的,就是在发光阶段让这个Vth和电流公式里的Vth互相抵消。
4.3 推导一下:为什么补偿后电流与Vth无关
发光阶段,Tem导通,VDD接入,驱动电流流过OLED。根据饱和区电流公式:
I_OLED = 1/2 * μCox * (W/L) * (Vgs - Vth)^2
代入上面得到的Vgs:
I_OLED = 1/2 * μCox * (W/L) * [Vth + k*(Vdata - VREF) - Vth]^2 = 1/2 * μCox * (W/L) * [k*(Vdata - VREF)]^2
Vth被消掉了!最终电流只与数据电压Vdata、参考电压VREF和耦合系数k有关,与阈值电压的初始偏差和长期漂移都无关。这就是7T1C补偿电路最核心的价值:你用一套模拟电路的“自我测量”机制,把最讨厌的工艺漂移参数从电流公式里踢了出去。
需要提醒一句:这个推导是在“N_S在发光前后基本维持VINT”的前提下成立的。实际上OLED阳极在发光时电压会升高到OLED的工作电压,N_S电位会变化。所以严密的电路设计会在Cst和寄生电容之间做精心匹配,让N_S的上升量也通过耦合回馈到N_G,尽可能保持Vgs不变。这部分属于像素电路设计里比较深的优化内容,工程实现上就是用足够大的Cst来“锁住”Vgs,让短时间内的电压变化消耗不到电荷上。
5. 发光阶段:Cst里存的那点电压如何变成稳定亮度
5.1 发光时电路状态与OLED阳极电压建立
当SCAN[n]变低、Tsw和Tcp都关断后,驱动管栅极N_G完全由Cst保持电压。此时EM[n]拉高,Tem导通,电源VDD穿过Tem到达驱动管漏极N_D。
驱动管Tdr的栅源电压Vgs已经确定,它开始以饱和区电流向OLED注入电荷。OLED阳极电位从VINT逐渐上升,直到阳极电位达到“由驱动电流和OLED自身I-V特性共同决定的工作点”。因为驱动管工作在饱和区,它的电流基本只由Vgs决定,所以OLED阳极电位会自己找到一个平衡位置,让OLED电流等于驱动管饱和电流。
这个阶段Cst承担了一个非常重要的功能:维持Vgs稳定。如果OLED阳极电位在发光过程中逐渐上升,N_S升高,按理说Vgs会变小。但Cst的一端连着N_S、另一端连着N_G,N_S升高时会通过电容把N_G也“顶”上去,让栅极电位跟着源极电位一起抬升,从而维持栅源电压基本不变。这就是“自举”(bootstrap)效应,也是Cst跨接在栅源之间的另一个重要原因。
5.2 2T1C与7T1C的对比:一个公式看出差距
| 对比项 | 2T1C | 7T1C |
|---|---|---|
| 晶体管数 | 2 | 7 |
| 存储电容 | 1颗 | 1颗 |
| 是否补偿Vth | 否 | 是 |
| 驱动电流公式 | ∝(Vdata - Vth)^2 | ∝(Vdata - VREF)^2 |
| Vth漂移影响 | 直接导致亮度偏差 | 被内部补偿消除 |
| 所需控制信号 | 1根扫描线 | 两根扫描线+1根发光控制线 |
| 像素面积 | 小 | 大 |
| 良率 | 高 | 较低 |
表格里最后几行说明了一个事:7T1C不是免费的午餐。更多晶体管意味着更大的像素面积,在同等尺寸面板上做高分辨率会更难,同时像素区内晶体管数量增多,也会增加版图布线的复杂度和制造缺陷的概率。这也是为什么真正量产的手机OLED面板,往往不是单纯堆7T1C,而是结合外部补偿算法、甚至采用LTPO混合工艺来平衡性能与成本的。
5.3 灰阶控制与调光方法:Tem的额外用途
说到亮度控制,7T1C里Tem这颗发光控制管还有一个好处:它可以被用来做像素级PWM调光。普通模拟调光是改变Vdata电压来调节亮度,但在低灰阶时,Vdata微小变化对应的电流变化会被噪声淹没,容易产生灰阶不均。而PWM调光通过让EM信号在发光阶段高频开关,控制每个帧周期内发光时间的占空比,从而调节感知亮度。响应速度更快,低亮度一致性更好。
当然,PWM调光也有它的代价——扫描线和EM线同时高频翻转,面板功耗会明显上升,而且低频率PWM调光对于敏感人群会产生视觉疲劳。所以很多面板实际是把模拟调光和PWM调光混合使用:高亮度区间用模拟调光保证功耗和画质,低亮度区间切到PWM避免灰阶不均。这也是为什么你会在一些屏幕评测里看到“高亮度类DC调光、低亮度PWM调光”之类说法的原因——根子其实就在像素电路的控制策略上。
6. 完整一帧的时序配合:从复位到发光的编排逻辑
6.1 一行像素在一帧内的状态变化
把一个像素在一帧内的完整工作过程写成年代表:
| 阶段 | 触发信号 | 导通管 | 关断管 | 关键结果 |
|---|---|---|---|---|
| 复位 | SCAN[n-1]高 | Tr1, Tr2, Tr3 | Tsw, Tcp, Tem | N_G、N_S复位到VINT,耦合节点复位到VREF |
| 补偿 | SCAN[n]高,EM高 | Tcp, Tem | Tsw, Tr1, Tr2, Tr3 | 驱动管二极管接法,N_G充到VINT+Vth |
| 数据写入 | SCAN[n]高,EM低 | Tsw | Tcp, Tem | 耦合节点从VREF变为Vdata,Vth叠加保留 |
| 发光 | EM高,SCAN[n]低 | Tem | Tsw, Tcp | 驱动电流流过OLED,与Vth无关 |
注意一个细节:补偿阶段和数据写入阶段共用SCAN[n],也就是说在SCAN[n]高电平这一段时间里,电路经历了两步操作——先是补偿管Tcp导通完成Vth的测量锁定,之后Tcp关断、Tsw导通完成数据写入。具体时序上,Vdata信号需要提前准备好,避免在补偿期间数据线上的电压变化干扰二极管接法的收敛过程。实际驱动IC里,这两步由时序控制器精确控制,间隔只有几微秒甚至更短。
6.2 行扫描流水线与跨行复用
整块屏幕不是一行一行复位、补偿、发光顺序执行完再执行下一行——那样效率太低了。实际AMOLED驱动里,整屏像素处于“流水线”工作状态:第n行像素在扫描线SCAN[n]到来时做写入时,第n+1行像素正在被SCAN[n]兼任的“上一行复位线”复位,而前面的行可能已经在EM控制下发光了。
这种跨行复用极其重要。因为OLED是持续发光型器件,靠人眼余晖效应是无法模拟“保持”的,每一行在写完数据后必须尽快进入发光阶段,并且一直发光到下一帧再次写入前。所以EM信号通常和扫描信号错开,不同行的EM信号可以看作一个“逐行点亮”的扫描发光模式。如果你用逻辑分析仪同时抓一条扫描线和高一行的扫描线,你会发现信号之间几乎没有空闲期,时序排得非常紧凑。
6.3 实际项目中容易踩的几个坑
聊点真正对干活有帮助的东西。我在做像素电路仿真和测试的时候,至少碰到过四类反复出现的坑,这里挑典型的说。
第一个是时钟馈通效应。Tsw作为开关管,栅极连接SCAN[n],源漏极跨接在数据线和耦合节点之间。当SCAN[n]从高变低关断Tsw的瞬间,栅极电压的跳变会通过寄生电容Cgd耦合到耦合节点上,把数据电压“踢”歪一个固定量。这个量如果设计时不预留补偿,或者耦合节点电位本身就不稳定,会导致灰阶偏移。解决思路通常是:数据写入结束后多留一段稳定时间,或者把Tsw的尺寸设计得小一些,减小寄生电容,同时牺牲一小部分写入速度。
第二个是存储电容漏电。Cst在面板制造中的高质量实现并不容易,如果电容绝缘层存在缺陷,存储电荷会缓慢流失,Vgs在发光阶段慢慢衰减,亮度就会在帧内逐渐下降。视觉上的表现是高频刷新下不明显,但低频驱动(比如LTPO面板的1Hz刷新模式)下会呈现可观的亮度衰落。选中Cst工艺和增加电容面积可以缓解,但面积又和分辨率冲突,这是面板设计永恒的博弈。
第三个是EM信号跨行时序的建立保持时间。发光不是“EM一拉高,亮度瞬间到位”的,OLED阳极寄生电容需要充电时间。如果你把扫描写入时序压得太紧,上一行的数据还没完全写入、EM就已经拉高,会出现行之间亮度串扰。我常用一个不算技巧的技巧:仿真时把EM信号相对SCAN[n]的下降沿故意调整几十纳秒,观察亮度突变位置是否跟着动,如果跟着动,说明时序裕量不足。
第四个坑比较隐蔽——VINT电平在不同亮度下的稳定性。VINT一般由面板内部的电源管理单元生成,它要同时给整块屏幕几百万个像素的复位管供电。同一时刻有大量像素在复位,VINT线会产生压降或者反弹,不同位置的像素实际拿到的复位电压不一样,补偿起点就有了细微差异。处理方式往往是加粗面板内电源走线,或者把VINT的电平设计成略高于目标值,利用复位管的导通压降压回目标电压。
6.4 从像素电路到整块屏幕:内部补偿不是万能药
最后说一个大实话:7T1C内部补偿能消除Vth漂移带来的影响,但它并不能解决OLED面板里所有亮度不均问题。OLED发光材料本身的效率不均匀、微腔效应导致的视角颜色偏移、电源线IR压降带来的亮度梯度,这些都不是像素电路能感知和补偿的。
所以量产面板里,除了像素电路层面的内部补偿,还有一道重要的外部光学补偿工序。面板出厂前会用高精度相机拍摄每一块屏在各个灰阶下的实际亮度分布,生成一个“去mura”校正表,烧录到驱动IC里。外部补偿负责像素电路管不到的偏差,内部补偿负责Vth漂移和老化——两者配合,才能达到高端手机屏幕那种均匀细腻的显示效果。这个分层思路,建议做显示系统设计的同学牢记。
在做这个7T1C项目之前,我一直觉得像素电路就是个“电压进电流出”的简单模块。真正上手做了一遍从复位、补偿到发光的全流程仿真后,最深的体会是:模拟电路里每一个晶体管的存在都是有代价的,它们交换的是“精确性”和“稳定性”。7T1C用了额外的6个开关管换来Vth的自抵消能力,让OLED屏幕可以坦然面对几十万小时的老化过程。搞通了这层逻辑,后面再看其他像素补偿架构、外部补偿算法,甚至OLED驱动IC里那些复杂得吓人的时序配置,都会顺畅很多。