ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OLED 7T1C像素驱动电路:从复位到发光的原理与调试实践

OLED 7T1C像素驱动电路:从复位到发光的原理与调试实践 说实话做了这么久的显示驱动我最常被问的一句话就是OLED像素到底是怎么做到“自己发光”的每次我都得从最底层的像素电路开始讲。而7T1C驱动电路就是AMOLED面板里每一颗像素的心脏它负责把一根数据线上的电压最终变成OLED器件里一束精确的电流。这颗像素从“复位”到“发光”的完整过程恰恰是理解整个OLED显示技术的钥匙。这篇文章我会用“保姆级”的方式把7T1C这个听起来有点吓人的名词拆得干干净净。看完之后你应该能回答这几个问题为什么要用7个晶体管加1个电容复位阶段到底在复位什么阈值电压补偿是补偿了个寂寞吗以及你在实际调试中大概率会踩到的坑。适合刚入门的显示驱动工程师、做嵌入式但想搞明白面板底层原理的朋友也包括那些对OLED显示原理有好奇心的硬件爱好者。1. 为什么OLED像素必须配一套驱动电路1.1 OLED器件和液晶的本质区别先理清一个基础概念OLED本质是一个电流型发光器件。它不像电压型器件那样你给它一个稳定的电压它就老老实实给你一个稳定的亮度。OLED的亮度和流过它的电流直接相关电流越大越亮而且这个关系在小电流区域还带点非线性。你可能会想那直接把灰度电压加到OLED两端不就行了还真不行。原因有两个。第一OLED本身的阴极和阳极之间存在一个启动阈值电压低于阈值时基本不亮高于阈值后电流又急剧上升直接加电压很难精确控制灰度。第二OLED在有电流通过的时候它的阳极和阴极之间的等效阻抗会随着时间、温度、亮度衰减发生变化。如果直接用电压驱动你设定一个固定电压过一段时间电流变了亮度就漂了。所以OLED像素需要一套“电压进、电流出”的转换电路。这个电路最好能把输入的数据电压线性地、稳定地转换成一个设定好的电流并且这个电流不应该受晶体管本身的工艺波动和老化影响。7T1C这套像素电路就是在干这个事。1.2 为什么是7个晶体管和1个电容你可能见过更简单的像素电路比如2T1C就是2个晶体管加1个电容。2T1C结构确实是最基础的OLED像素电路一个开关管负责写入电压一个驱动管负责把电压变成电流一个电容负责在帧期间保持电压。听起来很简单但它有一个致命的缺陷驱动管的阈值电压Vth不均匀。在半导体制造中即使是同一片晶圆上的两个相邻晶体管它们的阈值电压都会有微小的差异。低温多晶硅LTPS工艺的晶界分布不均匀导致这种差异更明显。如果直接把一个栅极电压加到驱动管上驱动管的Vth差一点输出电流就会差很多屏幕上表现出来就是亮度不均匀俗称mura。更麻烦的是随着使用时间增加驱动管的Vth还会漂移这就成了OLED烧屏的一个诱因。7T1C就是为了解决这个问题而多出来的那几个管。本质上7T1C在2T1C的基础上增加了一套“内部补偿”机制通过一个补偿管把驱动管接成二极管形式利用电容的存储和耦合特性把阈值电压Vth先“采集”下来再在发光阶段把它抵消掉。7个管子各有分工没有一个浪费。1.3 一张图的元件清单下面按教学里最常见的结构把7个晶体管的角色先排一下。不同厂商的7T1C管序会有差异但核心工作方式基本一致。我推荐你把这个清单当成一个地图后面讲时序的时候对着看。T1数据写入开关管Gate接扫描信号SCAN负责控制数据电压进入。T2栅极复位管Gate接复位信号RESET负责把驱动管栅极拉到固定电位。T3补偿管Gate接SCAN负责把驱动管的漏极和栅极短接。T4驱动管Gate接N1节点是整个像素的电流源OLED的亮度全靠它。T5发光控制管Gate接发光控制信号EM负责在发光阶段把驱动管漏极接到OLED阳极。T6OLED阳极复位管Gate接RESET负责把OLED阳极在非发光阶段拉到一个固定低电位。T7驱动管源极/辅助节点复位管作用是在复位阶段把某些关键节点拉到确定电位避免电荷残留导致上一帧的画面残留到下一帧。外加一个存储电容Cst一端接驱动管栅极N1另一端接数据线侧。它的作用非常大既要保持栅极电压又要参与电压耦合。2. 像素从“复位”到“发光”的四步拆解2.1 第一阶段复位把上一帧的记忆彻底清空很多初学者不理解为什么OLED像素也需要复位。OLED又不是静态随机存储器画面一帧一帧刷新上一帧的数据难道不会被新的数据覆盖吗理论上是会但实际电路里有寄生电容各种节点上会有电荷残留。如果不做复位上一帧的残余电压会影响下一帧的写入精度尤其是低灰阶画面时残影会非常明显。复位阶段RESET信号有效T2导通把驱动管栅极N1拉到Vref这个Vref一般是一个稳定的低电平比如0V。同时T6导通把OLED阳极拉到VinitVinit通常是GND或者一个很低的参考电位。T7也导通把驱动管源极侧的辅助节点拉到PVDD或者其他明确电位。这一套动作相当于把整个像素电路里所有“悬空”的节点全部钉死在已知电位上。这时候OLED两端没有有效压差不会发光。你想想如果OLED阳极是一个悬空节点下一帧补偿时它上面的电荷就会干扰补偿精度。实测中如果去掉T6这个复位管低灰阶下屏幕会有一种说不清道不明的“脏感”这就是阳极残压惹的祸。2.2 第二阶段补偿把阈值电压偷偷存进电容复位完成之后SCAN信号拉低T1和T3同时导通。T3的作用是把驱动管T4接成二极管形式也就是说T4的漏极和栅极通过T3短接。你可以想象成把一个晶体管变成了一个从源极到栅极的单向导电元件。此时数据线上给的是补偿参考电压Vref_data假设是0V。由于T5没有导通OLED不发光。但T4的源极接着PVDD所以电流会从PVDD流过T4的沟道再经过T3流入N1节点对存储电容Cst充电。N1的电压会不断上升直到什么程度呢直到驱动管T4的栅源电压等于它的阈值电压VthT4正好进入截止边缘。对p型LTPS晶体管来说Vth是负值假设PVDD是5VVth是-2.5V那N1最终会被充到大约5 - 2.5 2.5V。这一步有个专业说法叫“二极管连接补偿”本质是把每个像素自己的阈值电压信息以电压形式存在了N1节点上。2.3 第三阶段写入数据电压通过电容叠加进栅极这时候SCAN依然有效但数据线上的电压从Vref_data跳变到实际灰度数据Vdata。由于存储电容Cst的一端接N1另一端接数据线电容两端电压不能突变数据线上的电压跳变多少N1节点就跟着跳变多少。所以N1的最终电压变成了原本补偿得到的PVDDVth再加上Vdata和Vref_data之间的差值。简单写成N1 PVDD Vth (Vdata - Vref_data)这个式子看起来复杂但核心在于N1里面现在同时包含了驱动管的阈值电压Vth和我们要显示的数据Vdata。这两个信息会叠加在一起在发光阶段一前一后发挥各自的作用。如果这里直接用导线把N1拉到Vdata而不是通过电容耦合叠加Vth信息就被冲掉了补偿就白做了。2.4 第四阶段发光Vth在电流公式里被精确抵消最后SCAN关闭T1和T3断开N1节点就像被关了闸门一样电压完全由Cst维持。EM信号拉低T5导通把驱动管漏极接到OLED阳极。此时OLED开始发光。发光阶段驱动管T4的栅源电压Vgs等于N1电压减去PVDD。把上面得到的N1代入Vgs [PVDD Vth (Vdata - Vref_data)] - PVDD Vth (Vdata - Vref_data)对OLED驱动管来说输出电流工作在饱和区电流公式大概是I 1/2 · μCox · (W/L) · (Vgs - Vth)²把Vgs代进去神奇的事情发生了I 1/2 · μCox · (W/L) · [(Vth Vdata - Vref_data) - Vth]² 1/2 · μCox · (W/L) · (Vdata - Vref_data)²Vth从公式里被消掉了。这就是整个7T1C内部补偿的精华不管你的阈值电压是-2.3V还是-2.6V不管它漂移了多少最终驱动OLED的电流只取决于数据电压Vdata和Vth无关。这就像一个电子秤每次称重前先去皮把秤本身的零点漂移去掉再放货物读数就只跟货物重量有关了。3. 实操验证从仿真到开发板上的OLED驱动3.1 用LTspice/ngspice搭建像素级仿真纸上谈兵没用我建议你自己搭一个仿真工程来跑一遍时序。用LTspice就可以虽然它不太擅长做面板级仿真但验证单个像素的补偿逻辑完全够用。你需要搭的东西其实不多一个p型TFT模型可以用LTspice自带的PMOS模型代替一个OLED等效模型最简单就是用一个二极管加一个并联大电容一个存储电容Cst大概在200fF到500fF之间然后生成三组脉冲信号——RESET、SCAN、EM。扫描周期建议模拟一下60Hz刷新率下的一行时间大概16微秒到32微秒之间。仿真跑完之后你要盯住的关键节点是N1也就是驱动管栅极。正常情况下你会看到四个阶段非常清晰的波形先是被拉到Vref然后缓慢上升到一个和Vth相关的平台再一下子跳变到N1VDDVthΔVdata最后在发光阶段基本保持不变直到下一帧复位。如果你发现N1在发光阶段有缓慢下降的趋势说明Cst取小了漏电影响太大。如果你发现补偿平台根本没有出现先检查一下T3有没有接对或者T1的信号时序是不是在补偿阶段之前就关闭了。3.2 波形判读怎么确认补偿真的生效了很多第一次搭这个仿真的人看完波形都会一脸懵为什么N1的电压不在扫描期间直接跳到数据电压这就需要你理解前面说的“电容耦合”机制。你去看数据线Data端的波形再看N1的波形如果它们在写入阶段有几乎平行的同向跳变那就说明耦合是正常的。为了更直观地验证补偿效果你可以做两组对比仿真。第一组把所有TFT模型的Vth设成-2.0V第二组设成-3.0V其他参数完全一样然后测量发光阶段流过OLED的平均电流。如果补偿有效这两组的电流波形应该基本重合如果补偿无效第二组电流会明显偏小。这一步做完你对整个7T1C的信心会一下子建立起来。另外要注意OLED等效模型里的二极管阈值不代表TFT的Vth很多人一开始把这两个概念混在一起导致看波形的时候总琢磨为什么OLED还没点亮。实际上在补偿阶段OLED两端的电压被T5隔离根本不在回路里。3.3 从像素电路到0.96寸模块HAL库驱动层面的映射如果说7T1C是面板内部最底层的像素电路那你在淘宝上买的那块0.96寸OLED模块就是一块已经封装好驱动IC和像素矩阵的显示面板。驱动IC常见的是SSD1306负责把I2C或SPI接口传过来的灰度数据转换成面板内部每行每列的扫描和数据信号最终落到每一个像素的7T1C电路上。所以你在嵌入式开发板上的工作其实是在和驱动IC打交道而不是直接控制那几个TFT。用STM32的HAL库驱动SSD1306时流程很经典初始化I2C外设向SSD1306发送一堆初始化命令序列关显示、设置时钟分频、设置电荷泵、设置显示模式然后把显存里的灰度/单色数据按页写入。我给你的实操建议是先把I2C地址确认好0x78是写地址0x7A是另一个地址变体淘宝屏默认大多是0x78。很多“点不亮”的案例第一嫌疑是I2C地址不对第二嫌疑是复位引脚没拉高第三嫌疑才是屏幕本身坏了。SSD1306的复位时序我之后会单独讲但记住一个原则上电后至少等10毫秒再把RESET拉高。4. 常见问题与排查技巧实录4.1 补偿不彻底导致的mura和残影即使你严格按照7T1C的流程来做补偿效果依然可能打折扣。第一个常见问题是补偿时间不够。一行像素的扫描时间是固定的如果T3导通时间太短N1还没充到稳定的Vth平台扫描信号就关了那存进去的Vth信息就是错的下一帧发光的均匀性自然崩溃。处理办法是优化时序给补偿留出足够的裕量或者换迁移率更高的TFT工艺。第二个常见问题是OLED阳极复位不足。如果T6的复位电压Vinit取得不对OLED阳极在复位阶段结束后还有残余电荷发光阶段一开始就会有一个不想要的电流尖峰表现在画面上就是低灰阶下会有轻微的闪烁或拖影。Vinit的选择需要看OLED器件的特性通常略低于OLED的阴极电压接法只要保证复位后OLED两端不正向导通就行。第三个问题是Cst漏电。这个坑在高刷新率面板上特别明显因为帧周期短Cst保持时间也短但如果TFT的漏电流太大N1电压在发光阶段会慢慢爬升或者下降直观表现就是画面有从上到下的亮度渐变或者静止画面出现所谓的“闪烁”。4.2 为什么你测OLED驱动波形时一测就崩如果你拿着示波器探头直接去点OLED像素的关键节点大概率会发现画面闪烁、测量值不准。因为示波器探头本身有输入电容一般10x探头也有十几pF而你像素里的Cst可能只有几百fF探头一上去就把电路负载拉偏了。这种时候你需要用有源探头或者在测试点设计时预留一个源极跟随器做缓冲。做面板测试的老工程师都知道测像素内部节点波形不能用普通探头去怼要用“非接触式”的电压成像技术或者至少在测试结构里加一级放大。这有点像用大铁锤去拧手表螺丝工具不对越测越乱。如果你只是验证驱动IC的输入输出时序比如SCAN、DATA、EM这几根总线信号那普通示波器没问题。但如果你要量N1这种高阻节点请务必用高阻抗有源探头否则测出来的波形会骗你。4.3 0.96寸OLED模块“批量点不亮”的真相很多做嵌入式项目的朋友都遇到过这个问题同一批买了10块0.96寸OLED有三四块怎么都点不亮。我排查过不少这类案例结论通常分三种。第一种是焊接问题。0.96寸模块的引脚间距很小手工焊接时容易出现桥连或者虚焊尤其是I2C接口的两根上拉电阻没焊好SDA和SCL信号不稳定。第二种是驱动IC初始化顺序问题。SSD1306必须先开电荷泵再设置显示模式如果顺序反了屏幕会永远黑着。第三种是屏幕本身有方向或者行列偏移需要代码里设置显示偏移命令。我习惯的做法是写一个非常短的最小驱动函数I2C初始化、复位、关闭显示、设置对比度、打开显示然后向全屏写0xAA。如果这个模式能显示棋盘格基本可以确定屏幕和驱动代码没问题后面再谈动画和汉字显示。记住排查批量性“点不亮”问题时优先怀疑共性问题比如初始化序列、电源时序和焊接工艺而不是一块一块去翻硬件个体差异。4.4 刷新率、PWM调光和OLED闪烁的关系你可能会发现有些OLED屏幕在低亮度的时候会感觉到闪烁。这是因为它使用了PWM调光也就是通过快速开关驱动电流来降低人眼感知的亮度。7T1C发光阶段如果被PWM斩波OLED实际上是在“亮-灭-亮-灭”地交替刷新率不够高时人眼就会捕捉到这个频率。这个问题的物理根源在于OLED的瞬时响应很快不像液晶有保持效应。所以很多方案会在低灰阶时提高PWM频率或者改用DC调光。如果你在做显示驱动开发调低亮度后画面出现闪烁先去查一下PWM频率是不是落入了人眼敏感区间大约200Hz到3000Hz而不是急着换屏。在像素电路层面也可以通过增大Cst来让发光阶段的电流更稳定但这对PWM调光的频闪问题帮助有限。5. 最后再分享一点个人经验5.1 画时序图别偷懒一定要带注释7T1C这种像素电路难点从来不是单个管子怎么工作而是多个信号之间的时序配合。我刚开始做项目时只在脑子里想觉得逻辑通了结果一仿真就发现补偿阶段和写入阶段有重叠冲突数据线跳变导致N1多耦合了几个毫伏。后来我养成了习惯每次设计像素时序先用带箭头的时序图把RESET、SCAN、EM、DATA四个信号画出来并且标出每个阶段对应的N1和OLED阳极电位范围。工具上我推荐用Wavedrom它能用文本快速画出时序图方便版本管理。你也可以直接在纸上画但一定要记得把时间轴对齐尤其是RESET下降沿到SCAN下降沿之间的间隔以及SCAN上升沿到EM下降沿之间的间隔。这两个间隔决定了补偿和发光是否会发生“串扰”。5.2 别把7T1C当成万能灵药内部补偿虽然能消掉TFT的Vth变化但并不能补偿OLED自身的老化衰减。OLED的发光效率会随着使用时间下降红绿蓝三个子像素衰减速率还不一样这就是“烧屏”的物理根源之一。想要解决这个问题就需要用到外部补偿技术比如在面板里加感测电路或者在驱动IC里加上电学补偿算法。这些技术同样依赖像素电路里那第7个管子来提供反馈路径。明白7T1C的边界比明白它能干什么更重要。当你在实际项目里遇到屏幕亮度不均的问题时先判断是TFT的Vth不均还是OLED的效率不均方向判断错了后面全白做。5.3 动手跑一次仿真胜过我写一万字这篇文章写得再细也不如你自己在仿真软件里搭一个像素电路亲手跑一遍复位、补偿、写入、发光的完整时序。当你亲眼看到N1的电压像设计的一样完成“复位-爬升-跳变-保持”四连击时你就能真正理解为什么这些专利里会有那么多个晶体管和电容。技术的东西只有上手了才真正属于你。如果你搭完仿真跑出问题可以回来评论区聊聊波形我踩过的坑肯定比你想的多。
返回列表