做LED显示这些年,我见过太多人在驱动方案上栽跟头。前阵子帮朋友调一块16×16点阵屏,现象特别典型:低亮度下整屏偏红,亮度一拉高颜色又正常了。查了一圈,最后问题出在驱动芯片的低电流段——芯片用的是AM驱动,低灰度时LED波长发生漂移。这个案例让我觉得有必要把LED显示里PM和AM驱动这件事彻底讲透,尤其是它们的工作原理、性能差异和踩坑点。很多做单片机、做显示屏的工程师,看芯片手册时看到“PWM”和“AM”两个词,以为只是命名习惯不同,其实这俩是两条完全不同的技术路线,直接决定了你的屏能不能做到高灰高刷、低亮不偏色。
这篇文章就专注于一件事:PM和AM驱动的区别。我会从概念、原理、参数对比一路讲到实际项目中的电路搭建和排障,内容偏实操,适合正在做LED显示屏、点阵屏、背光调光的工程师,也适合刚入门想搞懂驱动原理的电子爱好者。
1. 先聊清楚:PM和AM到底各指的是什么
1.1 在LED驱动语境里,PM就是PWM的另一种叫法
很多芯片手册里会把PWM直接写成PM,因为英文全称Pulse Width Modulation,缩写是PWM,但部分台湾厂商和海外应用笔记里习惯简写成PM,这里的PM可不是下午时间,而是脉冲调制。这个命名混乱确实很容易误导人,我最早看某款LED驱动芯片的资料时,看到PM引脚还琢磨了半天,后来翻到英文原版才发现就是PWM输出。
PM驱动的核心思想是“调时间”。LED两端始终接的是恒流源,电流峰值恒定不变,但驱动芯片内部有一个MOSFET开关,这个开关以固定频率打开和关闭。开关导通的时间占比叫占空比,占空比越大,LED在一个周期内发光的时间越长,人眼感知到的平均亮度就越高。简单来说,PM驱动就是通过控制发光时间比例来调节亮度,峰值电流从头到尾都是同一个值。
打个比方,PM驱动就好像一个间歇性开水龙头的人,水压恒定,但每次只拧开一小段时间,通过控制“开多久、关多久”来调节出水量。LED显示里的PM驱动,本质上就是把人眼无法分辨的高频开关动作“平均”成一个稳定的亮度效果。
1.2 AM驱动走的是“调幅度”路线
AM对应的是Amplitude Modulation,幅度调制。这条路线的思路完全不同,它不改变LED的发光时间,而是直接改变流过LED的电流大小。电流大,亮度高;电流小,亮度低。LED在一个工作周期内始终处于导通状态,只是导通的电流幅度可以动态调节。
继续用刚才的比喻,AM驱动就像一个人站在水龙头前面,不是去反复拧开关,而是直接旋转阀门,把水流量调大或调小,水流持续不断,但水压不同。
AM驱动在实现上通常有两种方式。一种是模拟电路方案,靠电位器、DAC输出电压控制恒流源的基准电压,从而连续调节输出电流幅度;另一种是数字分段方案,芯片内部集成多档电流源,通过切换电流档位实现亮度变化。无论哪种方式,AM驱动的本质特征是“发光时间基本不变,发光强度在变”。
1.3 两个概念为什么容易被混为一谈
搞混的原因主要有三个。第一是命名问题,很多芯片把AM写成“模拟调光”,把PM写成“PWM调光”,但实际上有些厂家说的“模拟调光”只是在AM基础上加了一些数字控制功能,边界模糊。第二是应用场景交叉,LED显示屏行业里很多驱动芯片内部既做了AM又做了PM,只从外部看引脚根本区分不出来。第三是很多资料把“恒流驱动”和“AM驱动”当成一回事,但这个说法不准确,恒流驱动描述的是电源特性,AM和PM描述的是调光方式,两者根本不在一层。
我个人的习惯是在看芯片手册时先看它的灰度实现框图。如果框图里明确画了比较器和计数器,那基本是PM路线;如果画的是电流基准DAC或电流档位寄存器,那就是AM路线。这样判断比看宣传词靠谱得多。
2. 原理拆解:两种驱动在LED显示中的工作链路
2.1 PM驱动的完整信号链路
PM驱动在LED显示系统里是一条标准的数字链路。MCU或FPGA把灰度数据送进驱动芯片的数据寄存器,驱动芯片内部对灰度数据和一个高频计数器做比较,当计数值小于灰度数据时,对应通道的输出开关导通,否则关闭。这样每个PWM周期内,每个LED的导通时间就和灰度数据一一对应。
举个例子,假设PWM计数器是12位,满量程4096,某个像素灰度值是1024,那这个通道在每个PWM周期内导通1024个时钟,占空比就是25%。灰度值越高,导通时间越长。这个逻辑非常直观,所以PM驱动在实现高灰度等级时天然有优势,你现在看到的很多号称16bit灰度的LED显示屏,用的就是PM路线。
对于动态扫描屏,PM驱动的实现要再复杂一层。扫描屏把整个显示区域按行分成若干扫描时间片,每个时间片只点亮一行,其他行关闭。每个扫描行的时间片内部再细分出PWM周期。这样一来,灰度数据的刷新周期和行扫描周期必须严格同步,否则会出现亮度不均或者整屏闪烁的问题。
PM驱动还有一个关键引脚,就是OE(Output Enable,输出使能)。很多新手不理解OE的作用,其实OE脚就是全局亮度调节的“总闸”。你可以用MCU输出一个脉宽信号给OE,当OE拉低时,所有通道同时关闭,这个脉宽的占空比就是整体亮度的倍率。在扫描屏里,OE一般由硬件定时器生成,频率和扫描周期精确对齐。
2.2 AM驱动的完整信号链路
AM驱动的信号链路相对简单,但模拟味更重。最典型的实现结构是:MCU通过SPI或I2C接口,把灰度或亮度数据写入芯片内部的DAC寄存器,DAC输出一个模拟电压,这个电压作为恒流源电路的基准,决定输出电流的幅度。
在这种架构里,每个LED的导通时间是固定的,至少在一个显示刷新周期内保持不变,亮度高低完全由电流幅度决定。比如一个8位DAC,控制电流从0mA到20mA分255级变化,那么第128级大约对应10mA电流,LED显示的亮度就是半亮。
AM驱动的瓶颈也很明显,就是LED的电学特性。LED的正向电压和电流不是线性关系,而是一条指数曲线,小电流时电压变化很敏感,大电流时电压变化又趋于平缓。更麻烦的是,LED的波长会随电流密度发生漂移,低电流下蓝绿LED的波长变化尤其明显,这就是我开头说那块点阵屏低灰偏红的根本原因。
另外,AM驱动对电源纹波很敏感。因为输出电流大小直接跟随基准电压和电源电压,电源上有一点波动,电流上就会原样放大,表现出来就是亮度抖动。PM驱动因为电流恒定在峰值,电源纹波主要影响LED峰值电流的稳定性,影响效果完全不同。
2.3 中间路线:先调幅再调宽或调宽调幅组合
实际上,现在市面上中高端的LED驱动芯片,很少是纯粹的PM或纯粹的AM,绝大多数采用混合方案。最常见的组合是“电流增益+PM脉宽”双控制:AM设定一个全局电流档位,相当于先定好亮度上限,PM再在全局档位下面做精细灰度调制。
这种组合的好处很明显。纯AM方案低灰度段容易偏色,纯PM方案在极低占空比时LED导通时间太短,开关切换的上升沿和下降沿会吃掉一部分时间,导致低灰线性度变差。混合方案里,AM负责把整体电流压低到一个合适范围,PM在压低后的范围内做高精度灰度切换,既能保持灰度分辨率,又能避开发光不稳定的低电流区。
我调试过的很多LED驱动芯片,比如一些支持高刷新率的恒流芯片,内部其实都是这种混合架构。从芯片手册里看,它有全局电流寄存器,也有PWM灰度寄存器,两个寄存器一起配合。在工程上,这个全局电流寄存器由MCU在初始化时配置一次,运行时一般不动,灰度变化全交给PWM寄存器处理。
2.4 调光中的灰度、刷新和人眼感知
不管是PM还是AM,最终目的都是让LED呈现出人眼可识别的灰度层次。但有一个底层规律必须搞清楚,就是人眼对亮度的感知不是线性的,而是近似对数的。这意味着,从0%到10%的亮度变化,人眼感受比从50%到60%更明显。因此,LED显示系统在灰度映射时通常要做gamma校正,把线性灰度值转换为更符合人眼感知的指数曲线。
PM驱动的gamma校正比较容易做,因为数字灰度本身就是线性值,MCU端建一张gamma查找表,把原始灰度映射成调整后的PWM值即可。AM驱动做gamma校正稍麻烦一些,DAC输出电流和亮度之间虽然没有绝对线性关系,但至少方向是一致的,芯片内部往往会内置一些分段校正逻辑,把低灰度段的电流切换步进调小,高灰度段调大。
刷新率也要单独强调。PM驱动的刷新率取决于PWM计数频率和扫描行数,比如一个16bit灰度、1/8扫描的屏,PWM计数器频率是10MHz,单行灰度的数据更新就要4096个时钟,整个屏的视觉刷新率大约是10M/(4096×8),约等于305Hz,这个数值对大多数应用够用了。AM驱动因为没有开关动作,刷新率主要由数据更新频率决定,实际做出来往往能做得更高,但AM的灰度级数如果不够,高刷新率并没有实质意义,画面层次感照样出不来。
3. 硬指标对比与选型决策
3.1 核心指标对比表
这两条技术路线的差异,用文字描述不够直观,我直接列一张表,把我在实际项目中常关注的几个硬指标放在一起看。
| 对比项 | PM驱动(脉宽调制) | AM驱动(幅度调制) |
|---|---|---|
| 灰度实现 | 改变导通时间占空比 | 改变输出电流幅度 |
| 峰值电流 | 恒定 | 随亮度变化 |
| 灰度等级 | 容易做高,12bit以上很常见 | 受DAC精度限制,通常到8bit~10bit |
| 低灰表现 | 极低占空比时易受开关沿影响 | 低电流段LED易偏色 |
| 刷新率上限 | 受PWM频率和扫描行数限制 | 更容易做高,无斩波动作 |
| 电源纹波敏感度 | 较低,恒流源对电源有抑制 | 较高,电流直接随基准波动 |
| EMC特性 | 高频开关动作带来更多干扰 | 波形干净,干扰小 |
| 电路复杂度 | 需要计数比较逻辑,芯片数字部分多 | 需要高精度DAC和模拟基准 |
| 成本 | 中高端芯片偏贵 | 中低端方案偏便宜 |
| 典型应用 | 小间距LED屏、高灰高刷显示 | LCD背光、简单点阵屏、照明调光 |
这个表格不是我凭空写的,是我做过的几个项目对比出来的一般规律。当然特殊情况也有,比如有些AM芯片做得很好,成本很高,也能用在高端舞台灯光上,但从大方向看,LED显示屏走PM路线是主流,背光和照明走AM路线是主流。
3.2 不同应用场景的选型思路
具体到选型,核心是看你的屏“重什么”。
小间距LED显示屏是第一优先级吃灰度的场景。会议室屏、指挥中心大屏,观众离得近,灰度不足会出现色块和条纹,必须选PM驱动芯片,灰度位数至少12bit,首选16bit,刷新率要跑到1920Hz以上。这类项目不能用AM,低灰偏色在近距离观察下会非常明显,客户一眼就能看出来。
LCD背光或LED氛围灯的应用,优先级在“平滑无闪烁”。背光调光如果用低频PWM,低频段会出现明显的频闪,手机摄像头一拍就是一条条黑色滚带。这种情况AM驱动反而更合适,因为电流连续变化,没有快门干涉问题。当然现在高端背光会用AM+PWM混合,高亮度段用PWM拉刷新,低亮度段用AM保证平滑过渡。
点阵屏、数码管、广告字这类产品,成本敏感度高,灰度要求又低,大部分用的是简单的AM恒流驱动,配合MCU的扫描逻辑,甚至直接用电阻限流都行。这个场景不需要纠结PM还是AM,能稳定亮、成本低就是好方案。
照明调光则是另一套逻辑,LED照明讲究调光深度和色温稳定性,常用方案是AM调光加PWM调光的组合,低频用AM平滑调光,高频用PWM避免人眼可察觉的闪烁。
3.3 从需求倒推芯片选型的一个实际例子
我举一个接地气的例子。前两年我做一块1/16扫描的室内全彩显示屏模组,客户要求灰度16bit、刷新率不低于1920Hz、刷新过程不能出现低灰偏色。
先算PM路线的可行性。1/16扫意味着每个扫描行只有约1/16的时间处于工作状态,16bit灰度需要65536个灰度时钟。如果PWM核心频率是20MHz,那么单个扫描行需要65536/20000000约3.28ms,16行刷新一轮就是约52.4ms,算下来视觉刷新率只有19Hz,跟要求的1920Hz差了100倍,这明显不行。所以实际方案必须用“子场+扫描行细分”的增强型PWM架构,或者把16bit灰度拆成高灰度位和低灰度位分别处理,低灰度位用AM电流补偿,高灰度位用PWM。
最后我选的方案是一个支持“内置PWM+全局电流增益”的驱动芯片,灰度位拆成12bit PWM加4bit电流增益,相当于用AM拉低整体电流来抵消低灰度段的偏色问题,再用PWM保证灰度细节。这个项目让我彻底明白,芯片数据手册的“16bit灰度”宣传语背后,其实是PM和AM的巧妙配合。
4. 项目实操:把两种驱动落到电路上
4.1 最小系统的构成:控制端、驱动端、显示端
很多新手有个误区,以为用STM32的GPIO直接点几个LED就算接触显示驱动了,那个只能算是跑马灯。真正可灰度、可调光、可扫描的LED显示系统,最少由三部分构成:控制端(MCU或FPGA)、驱动端(驱动芯片或分立恒流电路)、显示端(LED矩阵或模块)。
控制端的任务是输出灰度数据和行扫描信号。STM32F103这类MCU跑简单点阵屏完全够用,但做高灰高刷的大屏就要上FPGA了。如果你只是想学习PM驱动的原理,用STM32加SPI接口的驱动芯片就够了,比如用STM32的TIM+DMA生成OE脉宽,同时用SPI把灰度数据灌进驱动芯片,练手足够。
驱动端的核心是恒流源。PM驱动芯片内部有比较器逻辑和MOSFET开关,AM驱动芯片内部是高精度DAC和电流基准电路。不管哪种芯片,你都要格外注意两件事:电流设定电阻的精度和去耦电容的摆位。电流设定电阻通常决定了恒流源的满量程电流,这个电阻用1%精度的温漂小的型号,比如金属膜电阻,绝对不能随手从包里抓一个碳膜电阻凑合。
LED矩阵这部分根据像素密度选择共阴或共阳架构。点阵屏用共阴多,把LED阴极接到驱动芯片输出脚,阳极统一接到电源或扫描行管。共阳共阴的选择会影响驱动极性,也决定了OE信号是高有效还是低有效,调试时首先要确认这一点。
4.2 PM驱动调试中最容易踩的三个坑
第一个坑是OE时序抖动。OE信号在PM驱动里就是全屏亮度的总开关,如果MCU生成OE脉宽时中断频繁被打断,OE的占空比会不稳定,肉眼看起来就是亮度微微波动。解决办法是把OE脉宽放到定时器的DMA模式生成,不让CPU参与每周期更新。
第二个坑是扫描时间片和PWM周期没有对齐。动态扫描时,每一行的显示时间片必须正好覆盖整数个PWM周期,否则会出现行与行之间亮度不一致,也就是俗称的“一行亮一行暗”。我在调试16横扫描时遇到过这个问题,现象是每隔4行有一条暗带,后来把行扫描时钟和PWM计数器设为同一个时钟源,问题就消失了。
第三个坑是刷新率不等于数据更新率。很多新手把“灰度数据每秒钟更新多少次”当成刷新率,但视觉刷新率是“整屏完成一轮完整扫描的时间间隔的倒数”。如果灰度数据更新得很快,但16个扫描行一个轮回的周期很长,人眼还是会看到闪烁。正确做法是先定视觉刷新率目标,再倒推单行时间片和PWM计数频率。
4.3 AM驱动调试中要较真的四个细节
AM驱动的坑多数不在逻辑上,而在模拟电路上。
第一个细节是电流设定电阻必须远离热源。LED显示模组工作时热量很大,电流设定电阻如果贴近驱动芯片或LED矩阵,温度升高后阻值漂移,电流就会慢慢变化,表现为亮度热漂移。我一般在Layout时把这个电阻放在板子边缘,并留出散热过孔。
第二个细节是去耦电容要用陶瓷电容加电解电容的组合。AM驱动对高频纹波敏感,电源入口放一个100μF电解电容吸收低频波动,在芯片电源脚旁放0.1μF陶瓷电容滤高频噪声。如果条件允许,再串一个磁珠隔离驱动芯片和数字芯片的电源,效果会更好。
第三个细节是低灰度段的色偏修正不能只靠软件。AM驱动的低灰度靠小电流实现,LED波长在小电流下漂移,这个物理现象没法靠改gamma彻底消除。工程上可以做最小电流限制,让芯片在低灰度时不低于某个电流值,然后用PM去压缩占空比达到更暗效果。这也是为什么我前面说高级方案要用AM+PM混合。
第四个细节是测量电流不能用普通万用表串联。AM驱动的电流是连续的,万用表串进去后接触电阻会影响测量结果,而且测的是一个平均值,看不出动态变化。看电流波形要用电流探头配合示波器,或者用采样电阻测压降换算电流。
4.4 调试工具和个人经验
调试PM和AM驱动,我手边常备的工具清单是:示波器、逻辑分析仪、电流探头、还有一部能手动调节快门参数的手机。
示波器主要看OE波形、数据时钟和电源纹波。调PM驱动时,把OE信号和一个通道的PWM输出同时接到示波器上,看有没有毛刺和抖动;调AM驱动时,重点看电源纹波幅度,纹波峰峰值最好控制在50mV以内。
手机拍刷新率是个实用土办法。把手机快门调到1/1000s,正对屏幕拍一张照片,如果照片上出现黑色横带,说明刷新率低于1000Hz,黑带越宽刷新率越低。这个方法精度不高,但用来快速判断有没有闪烁问题非常高效,比带亮度计去现场省事得多。
逻辑分析仪用来抓数据时序。PM驱动出问题,十有八九是数据线和时钟线的时序不满足芯片要求,比如建立时间不够、时钟极性反了。抓一次CE、CLK、DATA的波形,对照芯片手册的时序图检查,问题基本就能定位。
4.5 小贴士:点灯实验和真实显示系统的差距
我见过不少刚入行的同事,觉得在开发板上用GPIO控制LED闪烁,就等于掌握了LED驱动。实话说,这两者有天壤之别。GPIO点灯只涉及电平高低,不涉及电流控制;而真正的LED显示系统,难点全在驱动端。同样的MCU,配上PM驱动芯片和AM驱动芯片,写出来的程序逻辑完全不同,硬件设计也不同。
如果你想快速体验PM驱动的精髓,建议买一块现成的LED点阵驱动模块,比如常见的MAX7219或类似芯片,先看它是怎么用扫描方式驱动8×8点阵的。虽然MAX7219内部主要是恒流扫描结构,偏AM多一些,但它能帮你建立“扫描、灰度、亮度调节”这几个核心概念。之后再去接触带真正PWM灰度调制的恒流驱动芯片,会顺很多。
5. 常见问题与排查技巧
5.1 低灰偏色:不是你的gamma写错了
前面已经提到过,低灰偏色最常见的原因是AM驱动的电流幅度太低。LED的波长随注入电流变化,蓝绿LED在低电流时波长会往短波方向偏移,导致红绿蓝三色的亮度衰减速度不一致,表现就是低灰度下画面偏红或偏紫。排查时不要一上来就改gamma表,先用示波器或电流探头看低灰度时的实际电流值,确认驱动芯片是否真的给出了设定的低电流值,再检查LED本身的色温漂移特性。
5.2 整屏闪烁:刷了多少遍心里要有数
闪烁问题的根源是视觉刷新率不够。排查时先用手机快门法确认闪烁的大致频率范围,再用示波器测扫描周期。如果视觉扫描周期大于20ms,也就是刷新率低于50Hz,那画面一定会闪。解决方案分两路:PM驱动就把PWM计数频率提高,或者降低灰度位数换取刷新率;AM驱动就检查数据更新是否有延迟,尤其是MCU在切换灰度数据时是否有过长中断阻塞了数据刷新。
5.3 水波纹和摩尔纹:不是你的电路坏了
水波纹是PM驱动在摄像头上特别容易被拍到的现象,本质上是PWM开关频率和摄像头行扫描频率之间的差频干扰。屏幕本身肉眼看不出问题,但用手机一拍,满屏都是滚动的横纹。解决方案有三个方向:把PWM频率提高到摄像头采样频率的整数倍以上、给PWM信号加随机相位抖动、或者改成AM驱动方案。如果是LED显示屏在演播室环境使用,这个坑几乎是必踩的,布局时就要提前把频率预留好。
5.4 一行亮一行暗:先查扫描通路再到电路板
一行暗的现象在动态扫描屏里非常典型。排查思路是从后往前查:先确认暗行对应的行驱动管是否导通,再看行驱动管供电是否正常,最后检查PCB走线上这一行的电阻压降。很多时候问题出在PCB走线太长、太细,电流全压在走线上,行末端供电不足。AM驱动对这个更敏感,因为亮度直接跟电流走,PM驱动因为有恒流源顶着,表现要好一点。
5.5 灰阶断层:OE时序永远是第一嫌疑人
灰阶断层,也就是调亮度时画面出现明显的跳变台阶,看起来像色带。PM驱动出现这个现象,优先查OE信号的占空比是否在每一个更新帧都准确加载。OE信号如果相邻帧之间占空比略有偏差,亮度差会被灰度映射放大,肉眼就看出来。其次检查灰度数据有没有在行扫描的某个阶段被锁存器意外更新,导致一部分像素用了旧数据,一部分用了新数据。
还有一个隐藏很深的坑是驱动芯片的灰度时钟和数据时钟不同源,导致计数器比较逻辑错位。遇到这种问题,把示波器探头同时夹到GCLK和DCLK上,如果两个时钟之间有明显相位漂移,就把它们改成同一个时钟源头。
我在实际项目里还发现一个规律:排查这类问题,不要一上来就怀疑芯片坏了。LED显示系统的问题,百分之八十出在时序配合和电源质量上,真正芯片本体损坏的比例很低。高效率的排查顺序一定是先量电源、再看时序、最后换芯片。
最后再分享一点个人体会。做了这几年LED显示项目,我的最大感受是,PM和AM不是对立关系,而是互补关系。纯PM方案做高灰度没问题,但低灰偏色和EMC问题难处理;纯AM方案波形干净,但灰度做不高。现在越来越多的中高端方案都是两条路线并行,让AM先把电流抬到合适区间,再让PM在这个区间里精细雕刻灰度,最终才能同时拿到高灰度、高刷新、低偏色的显示效果。如果你是刚接触这块,我建议从PM驱动入手,先把脉宽调制的时序概念吃透,再回头看AM和混合方案,思路会清晰得多。