ARTICLE DETAIL

资讯详情

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

TM2666恒流LED驱动芯片:16段9位144点阵单点辉度可控详解

TM2666恒流LED驱动芯片:16段9位144点阵单点辉度可控详解 做显示驱动这块的工程师大概都有过这种纠结手头要做一块带数字、字母、小图标甚至简单图形的显示面板如果只用普通的数码管驱动芯片图形和图标基本没法画如果上点阵屏驱动基本数字又杀鸡用牛刀成本、布线、代码复杂度全部上去了。我最近在整理一套显示方案时认真看了一颗共阴极16段9位144点阵、支持单点辉度可控的恒流LED驱动芯片 TM2666越看越觉得这类“既可数码管、又可点阵”的复合驱动芯片才是中小尺寸显示面板的真正解药。这篇文章我把 TM2666 的原理、硬件设计、软件驱动流程以及调试中容易踩的坑全部整理出来。内容以这颗芯片为主线但思路同样适用于同类型恒流 LED 驱动芯片做家电面板、工业仪表、车载显示或者自己玩点阵显示的朋友都可以直接拿来做参考。1. 先看芯片定位从“能驱什么”和“怎么驱”两个角度理解1.1 共阴极、16段、9位、144点阵这些参数到底在说什么很多人第一次看到“共阴极16段9位144点阵”这种描述会有点懵拆开看其实很清晰。“共阴极”是说芯片设计针对的是共阴极接法的LED灯组即所有LED的阴极连接在一起作为公共端芯片从阳极侧提供驱动电流。这种接法在数码管和点阵屏里非常普遍尤其是多位数码管几乎清一色共阴极。芯片明确标注支持共阴极说明它的端口结构、扫描策略、恒流方向都是按这个接法优化的。“16段”指每一位显示单元内部被拆成了最多16个独立可控的段。普通七段数码管只有7个笔画段加一个小数点只能显示数字和少量字母16段的结构意味着每一位都可以显示完整的英文字母、数字、部分符号甚至能拼出简单图形。这比七段显示灵活太多很多高端仪器仪表、音响设备、广告灯牌用的都是16段显示。“9位”代表芯片可以同时驱动9个这样的16段单元也就是9个“字符位”。9×16算下来正好是144所以标题里说的“144点阵”就是从另一角度描述同一件事——144个可独立控制的LED点。你完全可以不把它当成数码管而是当成一个9×16或者16×9的单色点阵屏来用显示自定义图标、进度条、图形动画本质上没有区别。这一类芯片最大的价值在于一套驱动逻辑同时覆盖“字符显示”和“图形点阵”两种需求。你不需要为数字和图形分别准备两套方案一颗芯片、一套接口、一套代码全部搞定。1.2 恒流驱动的意义为什么不是简单串个限流电阻LED的亮度本质上由流过它的电流决定电压稍微波动一点电流就可能变化很大亮度随之起伏。传统做法是给每一段LED串一个限流电阻电压稳定时问题不大但供电一波动或者LED本身压降有差异亮度就会明显不一致。恒流驱动则是芯片内部用恒流源电路主动控制每一路的输出电流不管LED压降怎么变、供电电压怎么抖电流始终稳定在设定值。这样一来同一颗芯片驱动的所有LED亮度就能做到非常一致这在数字和图形混合显示时尤其重要——否则数字亮度正常、图标暗了一块观感非常差。恒流值的大小通常通过一颗外部电阻设置芯片会输出一个参考电流内部再按比例镜像放大到各路输出。这个设计意味着你用同一块PCB可以覆盖不同尺寸、不同工作电流的LED灯组小尺寸高亮LED就把电流调小大尺寸低亮LED就调大只需要改一颗电阻。1.3 单点辉度可控到底改变了什么辉度这个词听起来专业其实就是亮度等级。所谓“单点辉度可控”是指芯片对144个点中的每一个都可以独立设置亮度等级而不是全局统一亮度或者只有亮和灭两种状态。这个能力放在字符显示场景里意义是你能让不同字符位显示不同亮度比如突出显示当前选中的数字、让报警图标闪烁的同时主显示区保持常亮。放在点阵场景里意义更大——它就是灰度显示的基础。常见的灰度实现方式是PWM脉宽调制即通过调整每个点在一个刷新周期内的亮灯时间占比来模拟不同亮度。占比100%是最亮50%是半亮0%就是灭。芯片内部如果集成了灰度寄存器和PWM控制逻辑你只需要写入一个亮度等级数值后续的脉宽调制就由芯片自动完成主控完全不占资源。这也是这类“带灰度”的驱动芯片跟普通恒流驱动最大的区别。2. 硬件设计实战外围电路、器件选型和PCB布局2.1 核心外围电路怎么搭电阻、电容、接口一个都不能少TM2666这类芯片虽然集成了恒流和扫描逻辑但外围电路并不复杂核心就三块恒流设定电阻、去耦电容、输入接口。恒流设定电阻的取值直接决定LED工作电流这个电阻一般接在芯片的设定引脚和地之间。芯片会通过这个引脚提供一个基准电流内部电流源再按固定比例放大到每个输出端。假设某型号的电流放大倍数是100倍你希望每路输出5mA那基准电流就是50μA再根据基准电压算出电阻值。具体阻值公式一定要以对应型号的官方数据手册为准不同型号差异很大。去耦电容绝对不能省。LED驱动是典型的瞬态大电流负载扫描切换瞬间电流会剧烈跳变如果电源旁路做得不好轻则显示亮度抖动重则干扰其他电路。建议在芯片电源引脚旁边放一个0.1μF陶瓷电容再在PCB电源入口处放一个10μF到47μF的电解电容或者大容量钽电容两者配合才能扛住扫描瞬间的电流尖峰。输入接口部分按通信协议来接一般是时钟CLK、数据DI、锁存LAT三根线外加地线。如果主控是3.3V系统而芯片是5V供电注意查看芯片IO是否兼容3.3V输入不兼容的话需要加电平转换电路或者选择本身就支持宽电压IO输入的型号。2.2 共阴极接法的布线细节公共端走线宽度非常重要共阴极LED屏的公共端是所有LED阴极汇聚的地方扫描时每一瞬间只有一个位导通但这一位的电流可能是144个点里属于该位的所有点同时点亮的总和。比如你驱动9位的点阵屏每位16个点如果某位的16个点全部点亮每个点20mA这一瞬间公共端要承受320mA的电流。所以公共端走线一定要够宽我个人经验是公共端铜箔宽度不要小于2mm如果是长距离走线最好铺铜处理减少电阻引起的压降。公共端压降一旦偏大这一位的LED实际工作电压就偏低亮度会比其他位明显暗这种现象在多位扫描显示里非常常见排查起来也比较麻烦最好的办法就是从一开始把公共端走线做足。段信号线虽然电流是逐点分布的但同样不能太细。尤其是PCB面积紧张的时候很多人喜欢把所有走线都做细结果就是段线电阻偏大亮度均匀性变差。0.3mm以上是底线有条件的话0.5mm更稳妥。2.3 电源设计电流峰值核算与纹波控制电源部分是很多人容易忽略的重灾区。9位144点全亮、每点20mA的话总电流接近2.88A即便只是一般的点阵屏应用瞬时电流也摆在那里。选电源的时候不能只按平均功耗算要按“最极端显示内容”来算留足裕量。还建议在电源输出端和芯片阵列之间加一个大的储能电容比如470μF左右的电解电容放在PCB板上。这样扫描瞬间的电流尖峰主要由本地电容供应电源模块的压力会小很多。实测下来加了储能电容之后显示亮度抖动和电源纹波都能明显改善。如果你的系统里还有背光、继电器、电机这类感性负载一定要把它们的电源和LED驱动电源分开布线要么通过磁珠隔离要么直接独立供电。否则一旦继电器吸合电源波动就会直接体现在显示亮度上那种忽亮忽暗的现象非常掉档次。3. 软件驱动核心通信时序、数据映射和灰度实现3.1 通信接口与时序基础三根线怎么把数据送进去TM2666这类芯片一般用类似移位寄存器的串行接口主控通过CLK和DI两根线把数据一位一位移进去全部数据移完后给LAT一个锁存信号数据才会同时生效输出到LED端。时序上要注意的是建立时间和保持时间即数据信号在时钟边沿前后必须保持稳定。这个参数在数据手册里一般会给比如建立时间不小于几十纳秒保持时间不小于几纳秒。用主控GPIO模拟时只要不是极端情况基本都能满足但如果你用的是SPI硬件外设注意SPI时钟极性和相位要跟芯片要求的边沿对齐。锁存信号之后新的显示数据才会真正刷新到输出端。这个机制类似于“先准备好数据再统一更新”好处是刷新过程不会出现半中间数据错乱、显示撕裂的现象。还有一个实用技巧如果你想用主控实现动态扫描来提升显示效果比如软件PWM叠加芯片本身如果支持的话可以通过调整锁存频率实现。不过这要小心时序冲突如果主控任务比较繁忙建议还是使用芯片内置的灰度控制功能不要自己折腾软件扫描。3.2 144个点如何映射成数据帧从段到位到字节编程之前先把数据映射关系搞清楚。16段×9位 144个点芯片内部一般会把它们组织成若干组数据寄存器。最常见的方式是按“位”分组第一位16个段对应一个16位数据字第二位对应另一个16位数据字依次类推9个数据字覆盖全部144点。主控发送数据时通常要把这些数据字按固定顺序、固定长度组装成一帧数据然后逐位或逐字节送出。一个比较直观的思路是建立两个数组一个保存9位×16段的开关状态一个保存对应的辉度等级每次要更新显示时先把数组整理成帧缓冲再调用发送函数一次送出。这里特别提醒一句很多“看起来不亮”或者“显示乱码”的问题根源就是数据位顺序搞反了。段A对应的是最低位还是最高位、第一位数据是先发还是后发不同芯片定义可能完全不同。拿到新芯片的第一步不是写完整驱动而是先点亮单个点验证位序再全量铺开。3.3 灰度控制的实现逻辑寄存器和PWM的关系单点辉度控制的代码实现核心是搞清楚“数据寄存器”和“灰度寄存器”之间的关系。数据寄存器决定每个点亮不亮灰度寄存器决定亮的点的亮度等级。芯片内部的PWM模块通常按固定的周期循环扫描所有点每个点在一个周期内的实际导通时间是“灰度值 × 基准时间”。灰度值越大实际亮的时间越长看起来就越亮。这个机制对主控完全透明你只要在初始化时配置好灰度位数和刷新频率之后每次更新显示把对应点的灰度值写进寄存器就行。灰度等级和高亮之间的权衡也要心里有数。灰度位数越多亮度等级越细腻但PWM频率会受限制或者数据量会增加。144个点如果每个点8bit灰度一帧数据就是144字节对大多数主控来说完全没压力。但如果要做到16bit甚至更高灰度数据量翻倍刷新率也会跟着下降需要综合评估。还有一个实际的点灰度控制和“闪烁”是一对矛盾。如果PWM频率太低虽然灰度等级做到了肉眼会看到明显的闪烁频率调高又可能因为单次导通时间太短导致低亮度下出现偏色。解决办法是按应用场景取一个折中频率比如500Hz到2kHz具体值可以通过实验微调人眼感觉不到闪烁且低灰阶显示均匀为佳。4. 场景拆解数码管字符、自定义图形和点阵动画4.1 家电面板温控器、咖啡机、洗衣机这类应用怎么做家电面板是这种芯片最典型的应用场景。一个温控器上通常需要显示当前温度、设定温度、工作模式还要显示若干状态图标比如加热中、待机、故障报警。如果全部用LED组合实现PCB要放几十个灯驱动电路复杂度很高用TM2666这类芯片数字用16段字符位图标和状态灯直接占用点阵区域一颗芯片全搞定。软件上要做的是预先规划好“常数表”哪些点是数字的哪一段哪些点组成加热图标哪些点组成Wi-Fi图标全部编码成位置信息存在Flash里。显示切换时直接把对应点的开关状态和灰度值更新进去不会出现显示内容冲突。还有一个值得注意的地方家电产品对EMC要求比较严LED驱动芯片本身虽然不会主动产生干扰但扫描瞬态大电流会在电源线上形成噪声。硬件设计时除了去耦电容建议在电源输入端加一个磁珠或共模电感软件上尽量避免整屏数据频繁全量刷新只更新变化的部分对EMC和功耗都有好处。4.2 工业仪表16段字母数字显示比七段强在哪儿工业仪表很多需要显示单位和数值的组合比如“电压 220V”“温度 125.5°C”“压力 0.8MPa”。七段数码管显示字母V、C、M、P这些字母非常勉强很多字符显示出来需要靠猜。16段显示就比较从容英文字母全部可以标准显示小数点和特殊符号也支持识别度提升非常明显。这种场景下单点辉度控制还有一个巧妙的用途把小数点、负号、单位这样的辅助信息设为较低亮度把数值主体设为高亮主次分明操作员扫一眼就能看到关键数据。之前用普通驱动芯片所有段亮度一致虽然也能看出来但视觉层级感确实差一些。工业环境里的电源波动通常比家电更剧烈恒流驱动在这里的优势会被放大。供电电压从4.5V波动到5.5V限流电阻方案的LED亮度可能已经肉眼可见地变化但恒流芯片的显示基本纹丝不动。这也是为什么工业仪表普遍愿意用恒流驱动方案的原因。4.3 点阵玩法进度条、波形图、自定义动画既然芯片本质是144点阵那就完全可以跳出“数码管”思维来做点阵应用。比如做一个2×6的图标区域显示蓝牙状态、电量百分比趋势、音频频谱或者直接把整个显示区当作16×9的小点阵屏刷一个简单的动画。点阵显示需要准备字模数据。“16×16点阵汉字转换器”这类工具在社区里很常见用来把汉字转成数组但对于9×16的小点阵汉字确实放不下建议用来显示数字、字母、简单符号或者自制的图标。字模生成工具可以把每个点对应到一个bit生成的一维数组直接映射到芯片的数据寄存器即可。灰度在这里又可以玩出花样——渐变进度条、呼吸灯效果、闪烁的报警图标。因为每个点的灰度是独立控制的实现这些效果其实非常直接定时更新灰度值数组做一组线性或者曲线的亮度变化表然后周期性地写入芯片。5. 调试实录亮度、闪烁、串扰和纹波的排查方法5.1 亮度不均匀先看公共端压降再看恒流电阻如果屏幕上某些位整体偏暗或者某些LED明显比同类暗建议按顺序排查三类问题。第一是公共端走线压降。用万用表直接测暗的那一位公共端引脚和电源GND之间的电压差如果明显偏高基本就是公共端走线太细太长的问题。解决办法是加宽走线、铺铜或者调整位扫描顺序让最远的位不至于压降过大。第二是恒流设定电阻的精度和温漂。有的电阻精度只有5%温度一高阻值漂移全屏亮度就会跟着变化。建议用1%精度、低温度系数的电阻贵不了多少但效果稳定很多。第三是LED本身的一致性。不同批次、不同供应商的LED在相同电流下可能有明显亮度差异尤其是红色和绿色LED压降不同、发光效率不同混用时要特别小心。最稳妥的办法是用同一品牌、同一批次、同一封装参数的LED不同颜色尽量安排在不同显示区域不要混在同一位里。5.2 闪烁问题刷新率、主控卡顿和PWM频率闪烁一般分两种情况一种是周期性、均匀的闪烁另一种是突然卡顿一下再恢复。均匀闪烁大概率是刷新率不够。人眼对50Hz以下的光源闪烁非常敏感尤其是在余光区域。LED驱动芯片通常有一个内置的刷新时钟或者外部提供扫描时钟确认刷新率至少要在100Hz以上理想状态是200Hz以上。突然卡顿再恢复多半是主控在某个瞬间被高优先级任务抢占导致数据发送延迟、锁存信号不准。解决办法有两种一是把显示刷新放到定时器中断里保证周期性二是用DMA或者硬件SPI发送数据减少主控占用时间。如果芯片支持也可以把显示数据通过一次突发传输全部更新完缩短可能被打断的时间窗口。最后要单独提一下PWM频率。灰度PWM频率不要低于1kHz否则即使整体刷新率够低灰阶时因为单次导通时间很长视觉上会感觉LED在“抖动”。调高PWM频率后低灰阶均匀度会明显改善。5.3 鬼影和串扰消隐时序与寄生电容的处理鬼影是指不该亮的点微微发光或者前一个显示内容在切换后还能隐约看到残留。这个问题在共阴极点阵屏上很常见一般有以下几个原因。扫描切换时如果位选信号关断不够快上一位的电流会通过段线残留到当前位造成“拖影”。解决方案是在位切换之间插入一个消隐时间即先关闭所有段输出再切换位选最后再打开段输出。很多芯片在数据更新和锁存时本身就会产生短暂的消隐窗口确认数据手册里是否包含这个机制如果没有主控里人为加一个几微秒的延时就好。寄生电容也是一个隐蔽元凶。LED引脚和PCB走线之间存在分布电容扫描切换瞬间这些电容会存储电荷然后缓慢释放导致LED残亮。解决方法是尽量缩短段线和位线的走线长度减少走线面积降低寄生电容如果问题依然存在可以在每个段线上对地加一个小阻值的泄放电阻但这会增加静态功耗是否值得要按项目实际功耗预算来权衡。5.4 快速定位问题的调试建议从最小系统开始最后分享一个我一直坚持的调试习惯拿到新芯片不要一上来就写完整驱动、接满144个点而是先搭一个最小系统。最小系统就是一块芯片、一个主控、一组电源、一个恒流电阻然后接上LED矩阵或者直接用一个LED灯珠验证。先写一个最简单的程序让第一个点以最低灰度点亮确认写数据的方向、移位顺序、锁存时序都正确再点亮第二个点确认数据按预期递增最后再尝试灰度值从0到最大值连续变化确认PWM工作正常。这一步看起来慢实际上是最快的。今天在这颗芯片上花20分钟做的验证能省下后面整板调试时的一两天时间。我在看TM2666这类芯片时也把整个寄存器映射和位序验证做了一遍后面再写复杂显示逻辑就非常顺手基本不会再碰到“莫名其妙不亮”或者“显示乱码”的问题。如果你也在用这颗芯片做产品或者用同类型的恒流LED驱动芯片踩了类似的坑欢迎按这个顺序一步步排查大概率能快速找到症结。
返回列表