用于MAX6964 LED驱动器的PWM强度控制

描述

以下应用笔记介绍了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个时钟周期,PWM开/关频率为32000/240 = 133.33Hz。

当相应的极性位为0时,连接到MAX6964输出的LED的强度取决于主端口和单个端口控制的重叠导通时间(逻辑低电平)。

MAX6964的主强度控制由寄存器0x0F的D7–D4位决定。这四个主控位将PWM周期划分为15个时隙。对于 0001、0010、...、1101 和 1110 位模式,插槽上的主时间分别为 1/15、2/15、...、13/15 和 14/15th。

各个端口控制位(每个端口每组 4 个)位于寄存器中,0x10到0x17。端口 16 控制位位于寄存器0x0F的 D3 到 D0 处。寄存器0x0F的这些位 (D3–D0) 也用于全局控制(如果启用了该选项)。每个主时隙由 16 个内部振荡器时钟周期组成。这些时钟周期可以激活 1/16、2/16、...、15/16 和 16/16,位模式分别为 0000、0001、...、1110 和 1111。

图1显示了当极性位为0时,主导通时间为2/15(对应于位模式为0010)和单个端口的导通时间为2/16(对应于位模式为0001)的端口输出波形。有两个主导通时隙可用,它们都处于 2/16 开启状态,具体取决于单个端口的导通时间。

led驱动器

图1.端口的输出波形。

端口 7 到 0 和端口 15 到 8 的相位 0 极性位分别位于寄存器0x02和 0x03 中。同样,端口 7 到 0 和端口 15 到 8 的相位极性位可以在寄存器0x0A和 0x0B 中找到。端口 16 的极性由寄存器0x0F的相位 1 (D5) 和相位 0 (D4) 位指示。未启用闪烁功能时,只有相位 0 极性位相关。

图2显示了端口的输出波形,主端口位模式和单个端口位模式相同,为0010和0001,但极性位为1。比较图1和图2,可以观察到开和关时间是相反的——它们形成互补波形。最好以极性 0 对强度级别进行编程,但闪烁需要极性为 1。

led驱动器

图2.一个的互补波形。

MAX6964驱动的LED可通过切换BLINK输入或翻转闪烁翻转位(寄存器0x0F的D1)使LED闪烁(开和关)。闪烁使能位(寄存器0x0F的D0)必须设置为1才能激活BLINK输入和闪烁翻转位。主机控制器需要改变BLINK输入逻辑电平,或者每次闪烁事件都需要写入MAX6964。启用闪烁 (D0 = 1) 时,特定端口的 LED 极性与相位 0 或相位 1 相关,具体取决于 BLINK 输入和闪烁翻转位的独占 OR 是否等于 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 周期持续更长,以使闪烁事件明显。

led驱动器

图3.在阶段 0 和阶段 1 之间闪烁。

以下是 I 的示例2C命令序列发送到MAX6964,以在特定PWM强度水平下开启LED。

以下三个我2C 写入命令可用于以最低强度水平打开 O16 LED。我2MAX6964的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

以下我2C 写入命令可用于以最低强度水平打开所有 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 个步骤。

 

个人 主人 强度 个人 主人 强度
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
一个 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 一个 150
一个 2 22 F 一个 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
一个 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。我2C例程向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
I2C(Write, 0x0E, MasterPort(1, i));        // Set master intensity level
I2C(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。此表沿对角线对称,从上角到左上角,在右下角旁边结束。

 

  主端口强度
0 1 2 3 4 5 6 7 8 9 一个 B C D E F
单个
端口
强度
0 关闭 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 关闭 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
2 关闭 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45
3 关闭 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
4 关闭 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75
5 关闭 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90
6 关闭 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105
7 关闭 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
8 关闭 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135
9 关闭 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150
一个 关闭 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165
B 关闭 12 24 36 48 60 72 84 96 108 120 132 144 156 168 180
C 关闭 13 26 39 52 65 78 91 104 117 130 143 156 169 182 195
D 关闭 14 28 42 56 70 84 98 112 126 140 154 168 182 196 210
E 关闭 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225
F 关闭 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/240th,Short2 列表的跳过为 4/240th。您还可以通过沿表 2 所示的对角线使用这些主端口和单个端口组合来获得 2 的幂增加趋势。或者,您可以通过从表 2 中选择最接近的组合来拟合所需的增长趋势。

 

选择 1 选择 2 强度级别 x 240
个人 主人 个人 主人 短1 短2
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 一个 10 10  
一个 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 一个 20 20 20
6 3 2 7 21    
一个 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 一个 30 30  
7 4 3 8 32 32 32
一个 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 一个 40 40 40
6 6 5 7 42 42  
一个 4 3 B 44 44 44
8 5 4 9 45 45  
B 4 3 C 48 48 48
9 5 4 一个 50 50  
C 4 3 D 52 52 52
8 6 5 9 54 54  
一个 5 4 B 55    
7 7 6 8 56 56 56
9 6 5 一个 60 60 60
8 7 6 9 63 63  
F 4 F 4 64 64 64
C 5 4 D 65    
一个 6 5 B 66 66 66
9 7 6 一个 70 70  
B 6 5 C 72 72 72
E 5 4 F 75 75  
一个 7 6 B 77 77 77
C 6 5 D 78 78  
9 8 7 一个 80 80 80
8 9 8 9 81 81  
B 7 6 C 84 84 84
一个 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  
一个 9 8 B 99    
9 一个 9 一个 100 100 100
C 8 7 D 104 104 104
E 7 6 F 105 105  
B 9 8 C 108 108 108
一个 一个 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
一个 B 一个 B 121 121  
D 9 8 E 126 126 126
F 8 F 8 128 128 128
C 一个 9 D 130 130  
B B 一个 C 132 132 132
E 9 8 F 135 135 135
D 一个 9 E 140 140 140
C B 一个 D 143 143  
B C B C 144 144 144
E 一个 9 F 150 150 150
D B 一个 E 154 154 154
C C B D 156 156 156
F 一个 F 一个 160 160 160
E B 一个 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 个可区分的强度级别。为了遵循所有强度级别的这种增长趋势,需要在某些步骤中向后设置主强度级别。这可以通过使用设置数组来实现,例如伪编程代码中显示的数组。

以下我2C写命令可用于闪烁MAX6964驱动的LED。我2MAX6964的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 强度电平。否则,其互补波形将驱动LED。

总之,MAX6964 LED驱动器可以编程为在互补波形定义的一对不同强度电平之间闪烁。逐渐的强度水平变化,有时称为衰落,也可以通过适当的编程来完成。

MAX7313/MAX7314具有与MAX6964相似的LED驱动能力,所有端口均可用作带转换检测的逻辑输入。MAX6965、MAX7315和MAX7316也是同类器件,但端口数量只有一半。本应用笔记中介绍的MAX6964通用编程技术也可用于控制这些类似器件的PWM强度。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分