应用笔记 4253

MAX6964 LED驱动器的PWM亮度控制

By: Walter Chen

摘要 : 本应用笔记介绍MAX6964 LED驱动器的特性以及在需要亮度控制的应用中怎样正确使用这些特性。本应用笔记还提供实例程序,演示主机和MAX6964每个端口的亮度控制选项。LED亮度控制功能非常适合汽车应用,在这种应用中,白天和晚上不同状态下需要对LED进行亮度调整。

MAX6964是大电流输出、17端口LED驱动器,具有8位脉冲宽度调制(PWM)亮度控制功能。每个端口支持最大50mA的吸收电流。流入地引脚的最大总吸收电流被限制为350mA。8位PWM亮度控制被分成应用于所有端口的4位主机控制,以及另外4位独立端口控制。主机亮度控制可以用于调整普通设备LED亮度,以适应环境亮度变化,例如汽车在白天和晚上的情况。独立端口控制可以用于产生符合应用需求的亮度。或者,可以采用4个全局控制位来同时控制所有独立端口的亮度。寄存器0x0E的D0位到D3位可以用于全局或者端口O16亮度控制,而且,可以结合主机和独立亮度控制功能来产生所有端口的渐暗效果。

大家通常都知道,如果光源接通/关断足够快,那么,人眼感觉到物体是一直亮着的。PWM亮度控制功能改变接通时间,同时将接通/关断保持在固定频率上,从而调整感知亮度。为避免闪烁效应,PWM接通/关断频率一般要高于100Hz。MAX6964的PWM亮度控制由内部振荡器进行驱动,额定频率为32kHz。MAX6964的PWM持续240个时钟周期,产生32000/240 = 133.33Hz的PWM接通/关断频率。

当相应的极性位是0时,和MAX6964输出相连接的LED的亮度取决于主机和独立端口控制的重叠接通时间(逻辑低电平)。

MAX6964的主机亮度控制由寄存器0x0F的D7–D4位确定。这4个主机控制位将PWM周期分成15个时间片。主机接通时间片分别是0001、0010、...、1101和1110位模式的1/15、2/15、...、13/15和14/15。

每个端口以4位分组的独立端口控制位位于寄存器0x10至0x17。端口16控制位位于寄存器0x0F的D3至D0。如果使能了该选项,寄存器0x0F的这些位(D3–D0)也被用于全局控制。每个主机时间片含有16个内部振荡器时钟周期。这些时钟周期可以分别工作在具有0000、0001、...、1110和1111位模式的1/16、2/16、...、15/16和16/16。

图1显示了当极性为是0时,相应于0010位模式2/15主机接通时间的端口输出波形,以及相应于0001位模式2/16独立端口接通时间的端口输出波形。有两种主机接通时间片,二者都可以接通2/16,由独立端口的接通时间决定。

图1. 一个端口的输出波形
图1. 一个端口的输出波形

端口7到端口0以及端口15到端口8的相位0极性位分别位于寄存器0x02和0x03。同样的,端口7到端口0以及端口15到端口8的相位1极性位位于寄存器0x0A和0x0B。端口16的极性由寄存器0x0F的相位1 (D5)和相位0 (D4)位指示。当没有使能闪烁特性时,只和相位0极性位有关。

图2显示了具有相同主机和独立端口位模式0010和0001的端口输出波形,但是极性位是1。对比图1和图2,可以看出,接通和关断时间相反—它们构成了互补波形。最好采用极性0来设置亮度等级,但是闪烁时需要采用极性1。

图2. “1”的互补波形
图2. “1”的互补波形

MAX6964驱动LED时,触发BLINK输入,或者翻转闪烁翻转位(寄存器0x0F的D1),使其闪烁(接通和关断)。闪烁使能位(寄存器0x0F的D0)必须设置为1,以激活BLINK输入和闪烁翻转位。每次闪烁时,主机控制器需要改变BLINK输入逻辑电平或者写入MAX6964。使能闪烁(D0 = 1)后,某一端口的LED极性与相位0或者相位1相关,具体取决于BLINK输入和闪烁翻转位异或的结果是0还是1。

为激活所需端口的闪烁功能,相应的相位0和1极性位必须不同。当使能了闪烁后,由于PWM亮度控制还在起作用,闪烁LED不但可以接通和关断,而且还可以受控,在正常和互补波形基础上,亮度在较亮和较暗模式之间变化。而且,通过分别选择不同端口相位0和1逻辑电平,它们能够反相闪烁,或者根本就不闪烁。例如,设置端口1相位0位为0,相位1位为1,端口2相位0位为1,相位1位为0,使它们反相闪烁。设置端口的相位0和相位1位同时为0或者1将使端口停留在较亮或者较暗模式中。

图3显示了最初以及互补波形相位0和相位1的闪烁。相位0和相位1的持续时间取决于主机控制器的工作,一般要比明显闪烁的单个PWM周期长得多。

图3. 相位0和相位1之间的闪烁
图3. 相位0和相位1之间的闪烁

下面的I²C命令序列发送给MAX6964,以接通LED,达到一定的PWM亮度等级。

下面的3条I²C写命令可用于接通O16 LED,达到最小亮度等级。MAX6964的I²C器件地址是0x49。
0x49 0x0F 0x30                  // Turn off the global bit
0x49 0x0E 0x10                  // Select 1/15th for master and 1/16th
                                // for O16
0x49 0x0F 0x00                  // Set phase 0 and 1 polarity bits of 
                                // O16 to 00
可以采用下面的I²C写命令来接通所有的LED,达到最小亮度等级。
0x49 0x0F 0x30                  // Turn off the global bit
0x49 0x0E 0x10                  // Select 1/15th for master and 1/16th for O16
0x49 0x0F 0x00                  // Set phase 0 and 1 polarity bits of O16 to 00
0x49 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 // Set 1/16th for all ports
0x49 0x02 0x00 0x00             // Set phase 0 polarity bits for all ports
最后两条命令利用了寄存器地址自动递增特性,支持使用单条写命令写入多个寄存器。

LED有时需要在上电期间逐渐接通。可以在每个主机设置中,设置主机控制为低到高,改变每个端口控制为从低到高,从而调整LED亮度从低到高。由于某些主机和独立端口组合产生相同或者相似的亮度等级,并不需要进行所有的设置来产生亮度递增。在高亮度等级上,必须跳过某些底层独立端口设置(表1)。由于跳过了某些相同或者相似的亮度等级,亮度等级的增加基于双环(主机亮度变化为一个环,独立端口为第二个环)。表1只显示了240种组合中的59步。

表1. 双环递增
Individual Master Intensity Individual Master Intensity
X 0 0 C 4 52
0 1 1 D 4 56
1 1 2 E 4 60
2 1 3 F 4 64
3 1 4 C 5 65
4 1 5 D 5 70
5 1 6 E 5 75
6 1 7 F 5 80
7 1 8 D 6 84
8 1 9 E 6 90
9 1 10 F 6 96
A 1 11 D 7 98
B 1 12 E 7 105
C 1 13 F 7 112
D 1 14 E 8 120
E 1 15 F 8 128
F 1 16 E 9 135
8 2 18 F 9 144
9 2 20 E A 150
A 2 22 F A 160
B 2 24 E B 165
C 2 26 F B 176
D 2 28 E D 195
E 2 30 F D 208
F 2 32 E E 210
A 3 33 F E 224
B 3 36 E F 225
C 3 39 F F 240
D 3 42      
E 3 45      
F 3 48      

下面的文本是伪编程代码,在LoopLength x WaitTime秒内逐步接通LED。I²C程序向MAX6964寄存器发出一条写命令,提供由阵列定义的亮度。利用寄存器地址自动递增特性,可以完成多次写操作。
LoopLength;                             // Total number of step in the increase in 
                                        // intensity 
MasterPort(2, LoopLength);              // Array for master/port setting pairs of every 
                                        // step
StepTime;                               // Lighting duration at each intensity step
For i = 1 to LoopLength                 // Start intensity increasing loop
I²C(Write, 0x0E, MasterPort(1, i));        // Set master intensity level
I²C(Write, 0x10, MasterPort(2, i), MasterPort(2, i), ...); // Set port 
                                        // intensity 
                                        // levels
Wait(StepTime);                         // Lighting up
End                                     // End loop
LED亮度等级取决于主机和独立端口PWM控制位选择。两个不同的主机和独立端口组合可以复现某些亮度等级。另一方面,某些亮度等级则不可能由任何组合实现。表2列出了对应于主机和独立端口PWM亮度控制位的亮度等级。亮度等级是当极性位为0时,表中的数字除以240。该表沿对角线对称,从左上角第二行到右下角倒数第二行。

表2. 基于主机和独立端口选择的亮度等级
  Master Port Intensity
0 1 2 3 4 5 6 7 8 9 A B C D E F
Individual
Port
Intensity
0 off 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 off 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
2 off 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45
3 off 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
4 off 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75
5 off 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90
6 off 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105
7 off 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
8 off 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135
9 off 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150
A off 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165
B off 12 24 36 48 60 72 84 96 108 120 132 144 156 168 180
C off 13 26 39 52 65 78 91 104 117 130 143 156 169 182 195
D off 14 28 42 56 70 84 98 112 126 140 154 168 182 196 210
E off 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225
F off 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240

表2中,注意,16之前的整数是连续的。16以后,没有了素数(即,不能通过1到16和1到15之间的数相乘得到的数)。此外,可以通过主机和独立端口设置的多种选择来产生较多的数字/事件。表3显示了亮度等级线性递增趋势。Short1列的亮度等级跳过了2/240,Short2列跳过了4/240。您还可以通过使用这些主机和独立端口组合以及表2中的对角线实现平方递增趋势。或者,从表2中选取最近组合得到所需要的递增趋势。

表3. 主要的平滑递增趋势
Choice 1 Choice 2 Intensity Level x 240
Individual Master Individual Master Full Short1 Short2
X 0 X 0 0 0 0
0 1 0 1 1    
1 1 0 2 2 2  
2 1 0 3 3    
3 1 0 4 4 4 4
4 1 0 5 5    
5 1 0 6 6 6  
6 1 0 7 7    
7 1 0 8 8 8 8
8 1 0 9 9    
9 1 0 A 10 10  
A 1 0 B 11    
B 1 0 C 12 12 12
C 1 0 D 13    
D 1 0 E 14 14  
E 1 0 F 15    
F 1 1 8 16 16 16
8 2 1 9 18 18  
9 2 1 A 20 20 20
6 3 2 7 21    
A 2 1 B 22 22  
B 2 1 C 24 24 24
4 5 4 5 25    
C 2 1 D 26 26  
8 3 2 9 27    
6 4 3 7 28 28 28
9 3 2 A 30 30  
7 4 3 8 32 32 32
A 3 2 B 33 33  
6 5 4 7 35    
B 3 2 C 36 36 36
C 3 2 D 39 39  
9 4 3 A 40 40 40
6 6 5 7 42 42  
A 4 3 B 44 44 44
8 5 4 9 45 45  
B 4 3 C 48 48 48
9 5 4 A 50 50  
C 4 3 D 52 52 52
8 6 5 9 54 54  
A 5 4 B 55    
7 7 6 8 56 56 56
9 6 5 A 60 60 60
8 7 6 9 63 63  
F 4 F 4 64 64 64
C 5 4 D 65    
A 6 5 B 66 66 66
9 7 6 A 70 70  
B 6 5 C 72 72 72
E 5 4 F 75 75  
A 7 6 B 77 77 77
C 6 5 D 78 78  
9 8 7 A 80 80 80
8 9 8 9 81 81  
B 7 6 C 84 84 84
A 8 7 B 88 88 88
E 6 5 F 90 90  
C 7 6 D 91 91 91
B 8 7 C 96 96 96
D 7 6 E 98 98  
A 9 8 B 99    
9 A 9 A 100 100 100
C 8 7 D 104 104 104
E 7 6 F 105 105  
B 9 8 C 108 108 108
A A 9 B 110 110  
D 8 7 E 112 112 112
C 9 8 D 117 117 117
E 8 7 F 120 120 120
A B A B 121 121  
D 9 8 E 126 126 126
F 8 F 8 128 128 128
C A 9 D 130 130  
B B A C 132 132 132
E 9 8 F 135 135 135
D A 9 E 140 140 140
C B A D 143 143  
B C B C 144 144 144
E A 9 F 150 150 150
D B A E 154 154 154
C C B D 156 156 156
F A F A 160 160 160
E B A F 165 165 165
D C B E 168 168 168
C D C D 169 169 169
F B F B 176 176 176
E C B F 180 180 180
D D C E 182 182 182
F C F C 192 192 192
E D C F 195 195 195
D E D E 196 196 196
F D F D 208 208 208
E E D F 210 210 210
F E F E 224 224 224
E F E F 225 225 225
F F F F 240 240 240

表3显示了在240个主机和独立端口设置组合中有96个不同的亮度等级。按照所有亮度等级的这种递增趋势,需要在某些步骤中后向设置主机亮度等级。可以使用设置阵列来实现这一点,例如伪编程代码中所列出的。

可以采用下面的I²C写命令来闪烁MAX6964驱动的LED。MAX6964的I²C器件地址还是0x49。
0x49 0x02 0x00 0x00             // Set phase 0 polarity to all zeros to 
                                // turn LEDs on
0x49 0x0E 0xF0                  // Set master intensity to full
0x49 0x0F 0x0D                  // Set the blinking enable bit to start
0x49 0x0F 0x0F                  // Switch blinking flip bit to blink
0x49 0x0F 0x0D                  // Switch back the blinking flip bit to 
                                // blink
...
0x49 0x0F 0x0C                  // Reset the blinking enable bit to stop 
                                // blinking
0x49 0x02 0xFF 0xFF             // Set phase 0 polarity to all ones to 
                                // turn LEDs off
对于上面的命令,假设所有端口的相位1极性位被设置为1 (上电默认)。对于没有被设置为闪烁的端口,相位0和相位1寄存器中的极性位可以设置为相同的值。PWM亮度等级设置在闪烁期间有效。如果相位0或者相位1中的极性位是0,PWM亮度等级置位。否则,“1”互补波形将驱动LED。

总之,可以设置MAX6964 LED驱动器在互补波形定义的一对不同亮度等级之间闪烁。通过正确的设置,还可以实现亮度等级逐渐变化,有时也被称为渐暗。

MAX7313/MAX7314具有和MAX6964相似的LED驱动能力,其所有的端口还可以用作带有转换探测功能的逻辑输入。MAX6965、MAX7315和MAX7316也是相似的型号,只是端口数量减半。本应用笔记介绍的MAX6964常用编程方法还可以用于控制这些相似型号的PWM亮度。
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 4253:
应用笔记 4253,AN4253, AN 4253, APP4253, Appnote4253, Appnote 4253