TM3100驱动控制示例

Created on: December 21, 2024

Answered using O1 by Chat01

Question

©Titan Micro Electronics www.titanmec.com
V1.0
1
16 通道LED 恒流驱动 TM3100
特性描述
TM3100是LED显示面板设计的驱动IC,它内建的CMOS位移寄存器与锁存功能,可以将串行的输入数
据转换成平行输出数据格式。TM3100具有16个电流源,可以在每个输出端口提供535mA恒定电流量以驱
动LED,每个OUT驱动通道输出可短接后得到更大的电流输出,且当环境发生变化时,对其输出电流影响
很小。同时可以选用不同阻值(REXT)的外接电阻来调整TM3100各输出端口的电流大小,因此,可精确
地控制LED的发光亮度,适用于高质量白平衡显示驱动模组。本产品性能优良,质量可靠。
功能特点
Ø 16个恒流源输出通道
Ø OUT端口耐压30.0V
Ø 电流输出大小不因输出端负载电压变化而变化
Ø 恒流电流范围值,5
35mA@VDD=5V
Ø 极为精确的电流输出值
(通道与通道)最大误差:≤±2.5%
(芯片与芯片)最大误差:≤±2.5%
Ø 通过调节外部电阻,可设定精密电流输出值
Ø 高达 25MHz 时钟频率
Ø 工作电压:4.5V~5.5V
Ø 应用领域户内、外单、双、全彩(动态、静态)LED显示屏,灯饰、节能照明。
Ø 封装形式:SSOP24、QSOP24
©Titan Micro Electronics www.titanmec.com
V1.0
2
16 通道LED 恒流驱动 TM3100
内部结构框图
图1
管脚信息
OUT7 12 13 OUT8
11 14
10 15
9 16
8 17
7 18
6 19
5 20
LE 4 21 OE
CLK 3 22 SDO
SDI 2 23 R-EXT
GND 1 24 VDD
Top View
OUT6 OUT9
OUT5 OUT10
OUT4 OUT11
OUT3 OUT12
OUT2 OUT13
OUT1 OUT14
OUT0 OUT15
图2
GND
● ● ●
● ● ●
● ● ●
OUT0 OUT1 OUT14 OUT15
VDD
SDI
CLK
LE
OE
R-EXT
GND
SDO
VDD
16 位移位寄存器模块
LSB MSB
0 15
LSB MSB
输出开/关数据锁存模块
恒流控制电路
.
.
恒流源电流输出模块
● ● ●
电流调节
©Titan Micro Electronics www.titanmec.com
V1.0
3
16 通道LED 恒流驱动 TM3100
管脚功能
引脚名称 引脚序号 I/O 功能说明
SDI 2 I 串行数据输入端,施密特缓冲输入
CLK 3 I 串行数据移位时钟输入端,施密特缓冲输入,时钟上升时移位数据
LE 4 I
数据锁存控制端,施密特缓冲输入,当LE是高电平时,串行数据会被传入至输入锁
存器;当LE是低电平时,数据会被锁存
OE 21 I
输出使能控制端,当 OE 是低电平时,即会启动 OUT0~OUT15
输出;当 OE 是高电平时,OUT0~OUT15 输出会被关闭,该引脚内部对VDD有上拉
电阻
R-EXT 23 I/O 恒流值设置端;设置OUT0OUT15输出端的电流,对GND接外部电阻
SDO 22 O 串行数据输出端,在CLK上升沿输出,可接至下一个芯片的 SDI 端口。
OUT0 5 O 恒流源输出端。每个输出端可短接,提高恒流。
OUT1 6 O 恒流源输出端
OUT2 7 O 恒流源输出端
OUT3 8 O 恒流源输出端
OUT4 9 O 恒流源输出端
OUT5 10 O 恒流源输出端
OUT6 11 O 恒流源输出端
OUT7 12 O 恒流源输出端
OUT8 13 O 恒流源输出端
OUT9 14 O 恒流源输出端
OUT10 15 O 恒流源输出端
OUT11 16 O 恒流源输出端
OUT12 17 O 恒流源输出端
OUT13 18 O 恒流源输出端
OUT14 19 O 恒流源输出端
OUT15 20 O 恒流源输出端
VDD 24 - 芯片电源
GND 1 - 控制逻辑及驱动电流回路接地
©Titan Micro Electronics www.titanmec.com
V1.0
4
16 通道LED 恒流驱动 TM3100
输出及输入等效电路
LE
VDD
GND
OE
VDD
GND
CLK
VDD
GND
SDI
VDD
GND
SDO
OUTn
图3
在干燥季节或者干燥使用环境内,容易产生大量静电,静电放电可能会损坏集成电路,天微电子建议采取一切
适当的集成电路预防处理措施,如果不正当的操作和焊接,可能会造成ESD 损坏或者性能下降, 芯片无法正
常工作。
绝对最大额定值范围(1)(2)
参数名称 参数符号 极限值 单 位
电源电压 Vdd -0.4~6.0 V
输入端电压范围 Vin -0.4~VDD+0.4V V
输出端电流(DC) Iout 5~35 mA
输出端电压范围 Vout -0.4~+6.0 V
时钟频率 Fclk 25 MHZ
工作温度范围 Topr -40~+85 ℃
储存温度范围 Tstg -55~+150 ℃
抗静电能力ESD HBM 3000 V
(1)以上表中这些等级不能让芯片长时间工作在极限值,芯片长时间工作在极限值下,容易降低器件的可靠性,可能
会出现永久性损伤。天微电子不建议在其它任何条件下,芯片超过这些极限参数工作。
(2)所有电压值均相对于网络地测试
推荐工作条件范围
在-45℃
+85℃下测试,除非另有说明 TM3100
参数名称 参数符号 测试条件 最小值 典型值 最大值
单位
电源电压 VDD 4.5 5.0 5.5 V
输出端耐压范围 VO OUT0OUT15 30 V
高电平输入电压 VIH 0.7×VDD 5.0 VDD+0.7 V
低电平输入电压 VIL GND-0.7 0 0.3×VDD V
高电平输出电流 IOH VDD=5V,SDO=4.5V -8 mA
低电平输出电流 IOL VDD=5V,SDO=0.5V 16 mA
恒定输出灌电流 IOLC
OUT0
OUT15
4.5V≤VDD≤5.5V
5 35 mA
工作温度范围 TA -40 +85 ℃
©Titan Micro Electronics www.titanmec.com
V1.0
5
16 通道LED 恒流驱动 TM3100
工作结温范围 TJ -40 +125 ℃
数据移位时钟频

FCLK CLK 25 MHZ
TWH0 CLK 15 ns
TWH0 CLK 15 ns
TWH1 LE 25 ns
TWH2 OE 60 ns
脉冲持续时间
TWL2 OE 30 ns
TSU0 SDI – CLK↑ 5 ns
时间建立
TSU1 LE↓– CLK↑ 12 ns
TH0 SDI – CLK↑ 5 ns
时间保持
TH1 LE↓– CLK↑ 12 ns
电气特性
在VDD=5V 和TA=+25℃测试条件下 TM3100
参数名称 参数符号 测试条件 最小值 典型值 最大值
单位
高电平输出电压 VOH IOH=-6mA:SDO VDD-0.4 VDD V
低电平输出电压 VOL IOL=10mA:SDO 0.4 V
输入电流 IIN
VIN= 接VDD 或者GND
SDI,CLK,LE,OE
0.5 1.0 2 mA
ICC0
SDI/CLK/LE=0,OE=1,
Riref=开路
9 mA
ICC1
SDI/CLK/LE=0,OE=1,
Riref=1.2K
10 mA
ICC2
OUT0OUT15 开
启,SDI,CLK,LE,OE=0,
Riref =600Ω
12 mA
电源电流(IDD)
ICC3
OUT0
OUT15 开
启,SDI,CLK,LE,OE=0,
Riref =1.2K
10 mA
恒定输出电流 IOLC
OUT0OUT15 开启,VOUTn=
1V=VOUTfix=1V,Riref=600
Ω,VDD=5V,TA=25℃
29.25 30 30.75 mA
输出漏电流 IOLKG
OUTn=OFF,VOUTn=VOUTfix=
5.5V,OE=1,Riref=1.5K,
0.1 uA
恒流误差
(通道对通道)
ΔIOLC0
OUT0
OUT15 开启,VOUTn
=1V=VOUTfix=1V,Riref=47

±2.0 ±2.5 %
恒流误差
(芯片对芯片)
ΔIOLC1
OUT0OUT15 开启,VOUTn=
1V=VOUTfix=1V,Riref=1.5
±2.0 ±2.5 %
©Titan Micro Electronics www.titanmec.com
V1.0
6
16 通道LED 恒流驱动 TM3100
K,VDD=5V,TA=25℃
线性调整 ΔIOLC2
OUT0
OUT15 开启,VOUTn=
1V=VOUTfix=1V,Riref=470
Ω,VDD=5 V
±0.5 ±1 %/V
负载调整 ΔIOLC3
OUT0OUT15 开启,VOUTn=
1V
3V,VOUTfix=1V,Riref=
470Ω
±1 ±3 %/V
基准电压输出 VIREF Riref=470Ω,TA=25℃ 1.16 1.20 1.24 V
上拉电阻 RPUP OE 32 40 48 kΩ
下拉电阻 RPDWN LE 32 40 48 kΩ
开关特性
在VDD=5V 和TA=+25℃测试条件下 TM3100
参数符号 参数名称 测试条件 最小值 典型值 最大值
单位
TR0 SDO 50 100 nS
上升时间
TR1 OUTn 80 160 nS
TF0 SDO 50 100 nS
下降时间
TF1 OUTn 80 160 nS
TD0 CLK↑至SDO↑↓ 60 120 nS
TD1
LE ↑ 或OE ↑ ↓ 至OUT0/OUT7/OUT8
/OUT15 开/关
100 150 nS
TD2
LE ↑ 或OE ↑ ↓ 至OUT1/OUT6/OUT9
/OUT14 开/关
120 170 nS
TD3
LE ↑ 或OE ↑ ↓ 至OUT2/OUT5/
OUT10/OUT13 开/关
140 190 nS
传输延迟时

TD4
LE ↑ 或OE ↑ ↓ 至OUT3/OUT4/
OUT11/OUT12 开/关
160 210 nS
输出误差时

TON_ERR -50 50 nS
©Titan Micro Electronics www.titanmec.com
V1.0
7
16 通道LED 恒流驱动 TM3100
时序图
TWH0,TWL0,TWH1,TWH2,TWL2:
INPUT(1) 50%
TWH TWH
VCC
GND
TSU0,TSU1,TH0,TH1:
VCC
GND
INPUT(1) 50%
CLOCK
VCC
INPUT(1) 50%
DATA/CONTROL
TSU TH
tR0,tR1,tF0,tF1,tD0,tD1,tD2,tD3,tD4:
VCC
GND
INPUT(1) 50%
VOH or VOUTn
VOL or VOUTn
OUTPUT 50%
tD
tR or tF
90%
10%
图4
©Titan Micro Electronics www.titanmec.com
V1.0
8
16 通道LED 恒流驱动 TM3100
逻辑图
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OFF
ON
OFF
ON
OFF
ON
OFF
ON
OFF
ON
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
SDI
CLK
LE
OE
SDO
OUT0
OUT1
OUT2
OUT3
OUT15
● ● ●
● ● ●
● ● ●
Don't Csre
图5
CLK LE OE SDI OUT0…OUT7…OUT15 SDO
↑ H L Dn Dn…Dn – 7…Dn – 15 Dn – 15
↑ L L Dn + 1 No change Dn – 14
↑ H L Dn + 2 Dn + 2…Dn – 5…Dn – 13 Dn – 13
↓ — L Dn + 3 Dn + 2…Dn – 5…Dn – 13 Dn – 13
↓ — H Dn + 3 Off Dn – 13
应用信息
如下图所示,由外接一个电阻(Rext)调整输出电流(IOUT),套用下列公式可计算出输出电流值:
15
= 1.20 ´
Riref
V
Iout
图6
公式中的Riref是指R-EXT端的电阻。当电阻值是600Ω,通过公式计算可得输出电流值30mA;当电
阻值是1KΩ时,输出的电流则为18mA。
©Titan Micro Electronics www.titanmec.com
V1.0
9
16 通道LED 恒流驱动 TM3100
Output Voltage
-5
0
5
10
15
20
25
30
35
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
(V)
(mA)
600Ω
750Ω
1K
1.45K
2.7K
5.7K
图7
R-EXT引脚对GND接不同的阻值可在OUT引脚输出端得到不同的恒电流,但不同的恒电流下进入恒
流转折点电压是不同的,图中可见,在30mA下恒流电压点≈0.8V,而在15mA下恒流电压点降到≈0.5V,
在设计电路时应充分考虑OUTx端压降问题,以免驱动电流达不到设定的预值。
另外,OUTx端在导通时也不适宜长时间工作在较高压降上,这会增加芯片的功率损耗,从而导致
芯片发热严重,影响系统稳定性能。
在实际应用时,可能因为信号走线或者其它因素产生的电磁干扰,为避免此类故障,建议TM3100
与LED显示模组的距离较短越好。
©Titan Micro Electronics www.titanmec.com
V1.0
10
16 通道LED 恒流驱动 TM3100
封装示意图:SSOP24
e
b
D
E
E1
A1
A2
A
L
θ
C
Dimensions In Millimeters Dimensions In Inches
Symbol
Min Max Min Max
A 1.75 2.10 0.068 0.082
A1 0.05 0.20 0.001 0.007
A2 1.70 1.90 0.066 0.074
b 0.4TYP 0.015TYP
0c 0.09 0.2 0.003 0.007
D 12.9 13.1 0.507 0.515
E 5.9 6.1 0.232 0.240
E1 7.6 8.2 0.299 0.322
e 1.00TYP 0.039TYP
L 0.33 0.73 0.012 0.028
θ 0° 8° 0° 8°
©Titan Micro Electronics www.titanmec.com
V1.0
11
16 通道LED 恒流驱动 TM3100
封装示意图:QSOP24
b e
D
E
E1
A1
A2
A
L
θ
C
Dimensions In Millimeters Dimensions In Inches
Symbol
Min Max Min Max
A 1.50 1.80 0.059 0.070
A1 0.102 0.249 0.004 0.009
A2 1.40 1.55 0.055 0.061
b 0.2 0.3 0.007 0.011
c 0.2TYP 0.007TYP
D 8.585 8.738 0.337 0.344
E 3.86 3.998 0.151 0.157
E1 5.842 6.198 0.23 0.244
e 0.635TYP 0.025TYP
L 0.406 0.889 0.015 0.035
θ 4°TYP 4°TYP
All specs and applications shown above subject to change without prior notice.
(以上电路及规格仅供参考,如本公司进行修正,恕不另行通知)

阅读这个说明书,帮我把代码写出来,单片机

Thought

读取产品手册

我正在仔细阅读16通道LED恒流驱动器TM3100的产品手册。手册包括引脚描述、内部结构、电气特性和逻辑。这将帮助我编写与单片机接口的代码。

确定接口

我正在为单片机如Arduino编写代码,思考用中文评论。根据手册,TM3100通过串行数据控制16个通道。

设定输出电流

我正在调整输出电流,通过调整电阻Riref来控制。代码需要初始化引脚,串行数据传输,数据延迟锁存,并控制输出使能。

向用户解释

我正在解释如何编写代码,并提供一个示例代码,适用于类似Arduino的常见单片机,确保代码包括引脚定义、数据缓冲区和功能函数,兼容TM3100。

思考,持续 5 秒

Answer

根据您提供的TM3100 16通道LED恒流驱动器的说明书,我将为您编写一个适用于单片机(以Arduino为例)的示例代码。该代码将演示如何通过单片机控制TM3100的16个LED通道。

硬件连接

首先,确保您已将TM3100与单片机正确连接。以下是一个典型的连接示意:

  • 单片机引脚连接:
    • SDI(串行数据输入)连接到单片机的某个数字输出引脚(如D2)
    • CLK(时钟输入)连接到单片机的另一个数字输出引脚(如D3)
    • LE(锁存使能)连接到单片机的另一个数字输出引脚(如D4)
    • OE(输出使能)连接到单片机的另一个数字输出引脚(如D5)
    • SDO(串行数据输出)可以连接到下一个TM3100的SDI,如果需要级联
  • 电源连接:
    • VDD连接到单片机的5V电源
    • GND连接到单片机的地
    • R-EXT连接到适当的电阻以设置恒流值(根据您的需求,如600Ω对应30mA)

示例代码

以下是一个Arduino示例代码,演示如何控制TM3100的16个LED通道。代码包括初始化、设置通道状态以及将数据发送到TM3100。

cpp
/* TM3100 16通道LED恒流驱动控制示例 使用Arduino控制TM3100,通过串行数据输入(SDI)、时钟(CLK)、锁存使能(LE)和输出使能(OE)控制16个LED通道 */ // 定义连接到TM3100的Arduino引脚 const int SDI_PIN = 2; // 串行数据输入 const int CLK_PIN = 3; // 时钟输入 const int LE_PIN = 4; // 锁存使能 const int OE_PIN = 5; // 输出使能 uint16_t ledState = 0x0000; // 16位LED状态寄存器,初始全部关闭 void setup() { // 初始化引脚模式 pinMode(SDI_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(LE_PIN, OUTPUT); pinMode(OE_PIN, OUTPUT); // 初始化引脚状态 digitalWrite(SDI_PIN, LOW); digitalWrite(CLK_PIN, LOW); digitalWrite(LE_PIN, LOW); digitalWrite(OE_PIN, HIGH); // 关闭所有输出,默认OE高电平关闭输出 // 示例:打开前4个LED setLED(0, HIGH); setLED(1, HIGH); setLED(2, HIGH); setLED(3, HIGH); updateTM3100(); delay(1000); // 示例:关闭前4个LED,打开后4个LED setLED(0, LOW); setLED(1, LOW); setLED(2, LOW); setLED(3, LOW); setLED(4, HIGH); setLED(5, HIGH); setLED(6, HIGH); setLED(7, HIGH); updateTM3100(); delay(1000); // 启用输出 digitalWrite(OE_PIN, LOW); // OE低电平启用输出 } void loop() { // 示例循环:交替点亮LED for(int i=0; i<16; i++) { setLED(i, HIGH); updateTM3100(); delay(200); setLED(i, LOW); updateTM3100(); } } // 设置单个LED的状态 void setLED(int channel, bool state) { if(channel < 0 || channel > 15) return; // 检查通道范围 if(state) { ledState |= (1 << channel); // 设置对应位 } else { ledState &= ~(1 << channel); // 清除对应位 } } // 将当前ledState发送到TM3100 void updateTM3100() { // 发送16位数据,从D15到D0 for(int i=15; i>=0; i--) { // 设置SDI if(ledState & (1 << i)) { digitalWrite(SDI_PIN, HIGH); } else { digitalWrite(SDI_PIN, LOW); } // 时钟上升沿触发数据 digitalWrite(CLK_PIN, HIGH); delayMicroseconds(1); // 保证时钟脉冲宽度 digitalWrite(CLK_PIN, LOW); delayMicroseconds(1); } // 锁存数据 digitalWrite(LE_PIN, HIGH); delayMicroseconds(1); // 保证锁存脉冲宽度 digitalWrite(LE_PIN, LOW); delayMicroseconds(1); }

代码说明

  1. 引脚定义和初始化:

    • 定义了SDI_PINCLK_PINLE_PINOE_PIN,分别连接到TM3100的相应引脚。
    • setup()函数中,将这些引脚设置为输出模式,并初始化为默认状态。
  2. LED状态管理:

    • 使用一个16位无符号整数ledState来存储每个LED的状态(开或关)。
    • setLED(int channel, bool state)函数用于设置特定通道的LED状态。
  3. 数据发送到TM3100:

    • updateTM3100()函数将当前的ledState通过SDICLK引脚串行发送到TM3100。
    • 数据发送完成后,通过LE引脚锁存数据,使TM3100更新输出状态。
  4. 示例操作:

    • setup()中,演示了如何打开前4个LED,等待1秒后关闭前4个LED并打开后4个LED。
    • loop()中,循环点亮每个LED并依次关闭,形成流水效果。

注意事项

  • 时序要求:

    • 根据TM3100的时序图,确保CLK脉冲宽度和LE脉冲宽度符合要求。上述示例中使用delayMicroseconds(1)来提供足够的时间,但根据实际情况,可能需要调整。
  • 电源和电流设置:

    • 确保R-EXT引脚连接了适当的电阻,以设置每个通道的恒流值。根据您的需求选择合适的电阻值(例如600Ω对应30mA)。
  • 输出使能(OE):

    • 初始时将OE_PIN设置为高电平以关闭所有输出。在需要输出时,将其设置为低电平。
  • 级联使用:

    • 如果需要级联多个TM3100,可以将一个TM3100的SDO连接到下一个TM3100的SDI,并相应地扩展数据发送逻辑。
  • 电磁干扰(EMI):

    • 为了减少EMI,尽量保持TM3100与单片机之间的连接线简短,并使用屏蔽线或适当的滤波措施。

扩展功能

根据您的需求,您可以扩展上述代码,例如:

  • 动态亮度控制:

    • 通过调整R-EXT或使用PWM调制控制LED亮度。
  • 复杂的显示效果:

    • 实现滚动文本、动画等复杂的LED显示效果。
  • 用户输入接口:

    • 添加按钮、传感器或其他输入设备,以动态控制LED状态。

希望以上示例代码和说明能帮助您顺利实现TM3100与单片机的接口控制。如果您有更多具体需求或问题,请随时提问!

Question

// 示例:打开前4个LED
setLED(0, HIGH);
setLED(1, HIGH);
setLED(2, HIGH);
setLED(3, HIGH);
updateTM3100();

这里没开启OE 有什么用

Thought

分析代码片段

用户指出OE引脚未启用的问题,查看代码片段,OE引脚初始为高电平,未能在设置LED之前降低OE,使输出得以激活。

解释OE工作

用户问我OE引脚的作用,初始状态为高电平,允许在更新LED状态时保持输出关闭,通过使OE低电平,输出激活,从而避免闪烁或部分更新。

思考,持续 几秒

Answer

您指出的确实是一个关键点。在提供的Arduino示例代码中,OE(输出使能)引脚在setup()函数的初始阶段被设置为高电平 (HIGH),这意味着在这段时间内,TM3100的所有输出端口 (OUT0OUT15) 都是禁用的(即不驱动LED)。以下是对这一设计的详细解释以及其目的和好处。

OE 引脚的作用

根据TM3100的说明书:

  • OE(Output Enable)引脚 控制输出端口的使能状态。
    • OE 低电平 (LOW):启用 OUT0OUT15 的输出。
    • OE 高电平 (HIGH):禁用 OUT0OUT15 的输出。

代码中的 OE 控制逻辑

在提供的代码中,setup() 函数的执行顺序如下:

  1. 引脚初始化:

    cpp
    pinMode(OE_PIN, OUTPUT); digitalWrite(OE_PIN, HIGH); // 初始时禁用输出

    这一步将 OE 引脚设置为高电平,确保在任何数据更新期间,TM3100的输出端口都是禁用状态。

  2. 设置 LED 状态:

    cpp
    setLED(0, HIGH); setLED(1, HIGH); setLED(2, HIGH); setLED(3, HIGH); updateTM3100();

    此时,尽管设置了前4个LED的状态,但由于 OE 仍然为高电平,这些改变不会立即反映在实际的LED上。

  3. 更多 LED 状态更新:

    cpp
    setLED(0, LOW); setLED(1, LOW); setLED(2, LOW); setLED(3, LOW); setLED(4, HIGH); setLED(5, HIGH); setLED(6, HIGH); setLED(7, HIGH); updateTM3100();

    继续更新LED状态,同样在 OE 禁用期间进行。

  4. 启用输出:

    cpp
    digitalWrite(OE_PIN, LOW); // 启用输出

    最终,将 OE 设置为低电平,使所有预先设置的LED状态一次性生效。

为什么在启用 OE 之前更新 LED 状态?

1. 避免显示混乱和闪烁

如果在每次更新LED状态时都启用 OE,会导致输出端口频繁切换,可能引起LED的闪烁或显示不稳定。通过在所有数据更新完成后一次性启用 OE,可以确保所有LED同时更新,提供稳定的显示效果。

2. 同步数据更新

OE 被禁用期间,您可以自由地设置和更新 ledState,这些变化不会立即反映到物理LED上。这允许您准备好完整的显示数据,然后一次性将所有数据锁存并启用输出,确保显示的同步性。

3. 减少电磁干扰(EMI)和电源噪声

频繁地切换 OE 引脚可能导致电磁干扰增加和电源噪声问题。通过减少 OE 的切换次数,可以降低这些潜在问题。

改进代码的建议

为了进一步优化代码的可读性和功能,您可以在进行任何LED状态更新之前明确禁用 OE,并在更新完成后再启用。以下是一个改进后的setup()示例:

cpp
void setup() { // 初始化引脚模式 pinMode(SDI_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(LE_PIN, OUTPUT); pinMode(OE_PIN, OUTPUT); // 初始化引脚状态 digitalWrite(SDI_PIN, LOW); digitalWrite(CLK_PIN, LOW); digitalWrite(LE_PIN, LOW); digitalWrite(OE_PIN, HIGH); // 禁用所有输出 // 准备LED状态 setLED(0, HIGH); setLED(1, HIGH); setLED(2, HIGH); setLED(3, HIGH); updateTM3100(); delay(1000); setLED(0, LOW); setLED(1, LOW); setLED(2, LOW); setLED(3, LOW); setLED(4, HIGH); setLED(5, HIGH); setLED(6, HIGH); setLED(7, HIGH); updateTM3100(); delay(1000); // 启用输出,使所有更新的LED状态同时生效 digitalWrite(OE_PIN, LOW); // 启用输出 }

loop() 中的 OE 控制

loop() 函数中,您可能希望在每次更新LED状态时临时禁用 OE,然后在更新完成后重新启用。这可以确保每次更新都是同步和无闪烁的。例如:

cpp
void loop() { // 禁用输出,准备更新LED状态 digitalWrite(OE_PIN, HIGH); for(int i=0; i<16; i++) { setLED(i, HIGH); updateTM3100(); delay(200); setLED(i, LOW); updateTM3100(); } // 启用输出,使所有更新的LED状态一次性生效 digitalWrite(OE_PIN, LOW); }

总结

  • OE 引脚用于控制TM3100的输出使能。在更新LED状态时禁用 OE,可以避免中途的闪烁和不一致显示。
  • 在所有数据准备完成后,再启用 OE,确保所有LED同时更新,提供稳定和同步的显示效果。
  • 优化代码结构,明确何时禁用和启用 OE,以确保最佳的显示性能和系统稳定性。

希望这些解释能帮助您更好地理解代码中的 OE 控制逻辑以及其在实际应用中的重要性。如果您有更多问题或需要进一步的帮助,请随时提问!

Question

这个芯片驱动的led应该共阴还是共阳呢

Thought

理解LED驱动

我正在探索TM3100驱动的LED配置。这个芯片支持共阴性和共阳性LED配置,我正在了解其应用和操作细节。

探讨电流配置

TM3100的输出OUT0~OUT15是恒定电流源,通常配置为共阴性方式,将阳极连接至OUTn,阴极接地。

思考,持续 几秒

Answer

TM3100 是一个 恒流源 类型的 LED 驱动芯片,这决定了它在驱动 LED 时的连接方式。根据 TM3100 的特性和工作原理,LED 应该采用 共阴极(Common Cathode) 配置。以下是详细解释:

共阴极 vs. 共阳极

1. 共阴极(Common Cathode)配置

  • 连接方式:

    • OUTn 引脚(TM3100 的恒流源输出)连接到 LED 的阳极(Anode)
    • LED 的阴极(Cathode) 连接到 公共地(GND)
  • 工作原理:

    • TM3100 的每个输出引脚提供恒定电流,通过 OUTn 引脚向 LED 的阳极供电。
    • 当 TM3100 的输出引脚处于高电平(启用输出)时,恒流源向 LED 提供预设的电流,LED 点亮。
    • 所有 LED 的阴极共享一个公共地,从而形成共阴极配置。

2. 共阳极(Common Anode)配置

  • 连接方式:

    • OUTn 引脚连接到 LED 的阴极(Cathode)
    • **LED 的阳极(Anode)**连接到 公共电源正极(VCC)
  • 工作原理:

    • 这种配置通常需要恒流 sink(恒流下拉)驱动,而 TM3100 是恒流源驱动,较不适合直接用于共阳极配置。

为何选择共阴极

  1. 恒流源特性:

    • TM3100 作为恒流源,适合将恒定电流源向 LED 的阳极供电,这与共阴极配置相匹配。
  2. 简单控制:

    • 在共阴极配置中,通过控制每个 OUTn 引脚的电平即可单独控制每个 LED 的开关状态,逻辑上更为直观和简单。
  3. 电路稳定性:

    • 共阴极配置能够更好地利用恒流源的优势,确保每个 LED 都获得稳定的电流,提升显示效果的一致性和稳定性。

示例连接图

以下是 TM3100 驱动 LED 的典型共阴极连接示意图:

text
单片机 | |----> SDI |----> CLK |----> LE |----> OE | |----> VDD (连接到 5V) |----> GND (连接到 地) TM3100 OUT0 -----> LED0 阳极 OUT1 -----> LED1 阳极 ... OUT15 ----> LED15 阳极 GND -----> LED0~LED15 阴极共用地

代码调整建议

在 Arduino 示例代码中,确保在启用 OE(输出使能) 引脚之前,所有 LED 的状态已经通过 OUTn 引脚正确设置。这样可以避免在更新过程中 LED 出现闪烁或不稳定的情况。

以下是优化后的代码片段,确保在设置 LED 状态后再启用输出:

cpp
void setup() { // 初始化引脚模式 pinMode(SDI_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(LE_PIN, OUTPUT); pinMode(OE_PIN, OUTPUT); // 初始化引脚状态 digitalWrite(SDI_PIN, LOW); digitalWrite(CLK_PIN, LOW); digitalWrite(LE_PIN, LOW); digitalWrite(OE_PIN, HIGH); // 禁用所有输出 // 准备LED状态 setLED(0, HIGH); setLED(1, HIGH); setLED(2, HIGH); setLED(3, HIGH); updateTM3100(); delay(1000); setLED(0, LOW); setLED(1, LOW); setLED(2, LOW); setLED(3, LOW); setLED(4, HIGH); setLED(5, HIGH); setLED(6, HIGH); setLED(7, HIGH); updateTM3100(); delay(1000); // 启用输出,使所有更新的LED状态同时生效 digitalWrite(OE_PIN, LOW); // 启用输出 }

总结

  • 推荐配置: 使用 共阴极(Common Cathode) 配置来驱动 TM3100 控制的 LED。
  • 连接方法: TM3100 的每个 OUTn 引脚连接到相应 LED 的阳极,所有 LED 的阴极连接到公共地(GND)。
  • 控制逻辑: 通过单片机控制 TM3100 的 SDICLKLEOE 引脚,确保在更新 LED 状态时先禁用输出,完成数据传输和锁存后再启用输出,以获得稳定的显示效果。

如果您有更多问题或需要进一步的帮助,请随时提问!

Share this Q&A