现在大街上随处可见的led显示屏,还有装饰用的led彩灯以及led车灯,处处可见led灯的身影,led已经融入到生活中的每一个角落。led无疑是当前最热的一个应用,无论是手持设备、游戏机、霓虹灯、广告牌等等,眩目的色彩及高质的光亮,总能第一时间吸引人的眼球。在当前众多的led控制器面前,如何选择一款功能丰富且性价比又高的产品来迎合自己的设计,无疑是摆在每个设计师面前的问题。
最简单的led驱动,我们可以用普通的i/o来实现。但i/o控制只能实现led的on与off,无法用来进行混光、闪烁等功能,而且每个led都需要占用一个单独的i/o资源,无疑性价比很低。我们也可以用专用的大电流led控制器来设计,但昂贵的成本首先会成为问题,而且设计复杂,程度也会跟着各种干扰的出现相应地提高。
基于这些,恩智浦(nxp)推出一系列使用i2c接口的led驱动器,它可以通过i2c接口的两根线,去同时控制从4个到24个不等led的on/off、闪烁及rgb混光。在混光方案里,每个led都是由一个独立的8bit/256阶pwm来驱动。目前,通过芯片本身能驱动的每个led电流范围为25ma到100ma之间。当然,对于一些大电流的应用场合,我们只需用外加场效应管的方式来实现。
这种基于i2c的led控制方式,增加了设计的方便性与灵活性,而且也会减少在软硬件方面的投入,使披着神秘面纱的led对我们来讲顿时显得简单和精彩。下面,我们将会以恩智浦led驱动器pca9633为例,通过几个简单的应用来全面阐述这种led驱动器的优势所在。pca9633是四路led驱动器,且每路可驱动最大25ma电流,并根据封装的不同提供了可选的固定i2c地址和带4位或7位硬件可编硬件地址(图1)。
从图1我们可以看到,每一路led都是由一个单独的8bit/256阶的pwm来控制,且由于pwm足够快,使其理论上可以通过它所驱动的四个led混出任意颜色的光。除了每一路单独的pwm,pca9633还提供了一个group pwm,通过它我们可以用来控制所调混色光的亮度及频率,弥补了只调单个pwm不能实现的一些功能。那么pca9633究竟如何来实现调光呢?秘密还是在pwm上面。如果不使用pwm,那么它只能完成开和关的动作;低速的pwm只能实现led闪烁,并不足以达到混色的目的;高速的pwm就可以实现rgb混色;如果pwm速度可控,那么就可以实现闪烁和混色的双重功能。而且通过可控的8bit/256阶pwm,加大了色阶提升了色彩的层次感(见图2)。
知道了混色的原理,那么一个具体的色彩又是如何产生的呢?我们知道人眼对色彩的感知是各种色彩亮度均值的叠加,我们可以通过控制pca9633每个pwm的占空比,去控制所驱动led的亮度。根据三基色原理,如果我们驱动的是rgb(或者rgba)led,那么通过调节这三个led的不同光亮,就可以得到所要的色彩。图3是pca9633控制rgb三个led来调粉色光的例子。
通过以上的描述,我们基本知道了pca9633的内部结构和驱动原理。下面我们将会以pca9633固定i2c地址的几个应用,来进一步理解这种led控制器的优势所在。
第一个应用,我们将用pca9633来控制亮度条。我们知道一般像亮度条这样的应用,往往需要用到大量led串联来进行。如果用单个接口去控制每个led,会使成本和软件复杂度大大增加。而通过i2c,在硬件上只需要两条控制线,在软件上只需发一条字节命令,就可以轻松进行操控。除此之外,由于i2c器件地址的唯一性,可以按所驱动led的数量使用几个pca9633来进行控制。如果实际应用中pca9633本身的驱动电流不够,只需在外围加一个fet就可以轻松解决。另外,pca9633独有的group pwm使得控制整个亮度条的光强和闪烁变的得心应手。下面是其原理图(见图4),其中i2c master由系统提供,可以是mcu,也可以是逻辑电路。
图4中左半部为i2c的master,不作细述。右边最上为led限流电阻,通常led的前向电压为3v左右,根据不同的颜色和制造工艺会有一些差别。我们可以通过所需led电流去计算这个限流电阻的值:r=(vsupply-vfsum)/if。如果所需的led电流大于25ma,那么图中所加的fet可以轻松解决这一问题。当我们外加了fet以后,只需把pca9633的相应寄存器的outdrv设为高就可以了,以区别于它的默认值。
现在我们可以看到用pca9633去控制如此多的led,原理图相当简洁,同样在软件设置寄存器上也同样方便。pca9633提供了简易且完整的内部寄存器,例如led输出结构设置、节电模式设置、芯片使能模式设置、led的输出状态设置,以及每个pwm和group pwm的控制寄存器设置等。除此之外,pca9633还提供了一个寄存器设置递增位,也就是说如果我们设置了这一位,那么我们可以通过一个指令序列来完成内部所有寄存器的顺序配置,这在一些特定的应用中是非常有用的,能最大程度节省软件和系统资源。下面,我们将通过另外一个例子来说明内部寄存器的设置。
第二个例子是我们用pca9633来完成呼吸灯的功能。虽然pca9633内部不带呼吸灯模块,但我们可以通过一些简单的寄存器设置来实现这个功能,这样相比于专用的呼吸灯芯片在成本上无疑有很大的优势。为了便于说明,我们只用pca9633来控制一个led的呼吸动作,原理图很简单,在此略去,通过控制这一个led的渐亮与渐暗过程以达到呼吸的目的。要实现这个功能,pca9633的独立pwm将是最主要的因素。如前我们已经提到每个led都是由一个8bit/256阶pwm来控制,那么也就是说,每个灯有256段亮暗色阶可调,可以完美实现呼吸功能。具体,我们通过控制pwm的占空比来完成。如果我们的led是由pca9633的pwm0来控制,那么pwm0的占空比将决定这个led的亮度:bright(duty cycle)=pwm0[7:0]/256。
到此,一个完整的呼吸过程就完成了,用几个简单的寄存器设置,就完成了看起来似乎只有用复杂系统或专用芯片才能做的事情。从以上两个例子,我们可以看到用恩智浦的i2c led驱动器,不论是硬件上还是软件上都是非常简单和易操作的,而且用此类器件所能实现的功能,丝毫不比一些系统和专有芯片逊色。
综上所述,恩智浦i2c led驱动器提供了高性价比的led设计方案,相比于用gpio或专用led驱动器,不仅节省了系统资源,也使设计的成本和复杂度大大减少,并可以有效提高设计的可靠性和驱动光的均匀性。此外,采用此类led驱动器,可以很有效地帮助我们减少设计周期并提升设计灵活性。
恩智浦目前可以向客户提供从4路到24路不等的i2c led驱动器,并已应用于汽车、家电、通信等各大领域。虽然led在生活中处处可见,但是led也还有一些不足需要我们的设计人员拥有更加专业的知识储备,这样才能设计出更加符合生活所需的产品。