利用TLD2131组成LED显示矩阵
扫描二维码
随时随地手机看文章
关键词:
TLD2131,TLD2331,LED,智能车竞赛,Infineon01 TLD2131
一、LED矩阵
在 测试Infineon车载LED驱动芯片TLD2131[1] 中对于1入3出的TLD2131的LED驱动芯片进行了初步测试。为了能够使用更少的MCU的IO口控制更多的LED,需要使用LED矩阵模式。这一点正好可以利用到TLD2132的高边驱动LED的特性,因此只要在辅助几个NPN三极管在底边进行选择,可以很方便组织LED的矩阵显示。 对于N个上边输出端口,M个下边输出端口,可以形成N×MLED点阵控制。通过循环控制,可以动态形成对于单个LED的控制特性。▲ 图1.1.1 LED 显示矩阵二、基于TLD2331的LED矩阵
Infineon公司的高边LED驱动芯片系列中,有三入三出的TLD2331-3EP,它的内部结构如下图所示。利用一个TLD2331-3EP便可以驱动三列LED,利用两个TLD2331便可以控制六列LED输出。因此在使用三个NPN三极管,便可以组成6×3=18个LED矩阵。 为了验证TLD2331驱动特性,本文利用手边刚刚到手的TLD2131组成电路进行测试。▲ 图1.2.1 TLD2131(左)TLD2331(右)内部功能图02 电路测试
一、电路设计
基于 三个 TLD2131[2] 模拟一颗TLSD2331的高边控制,测试电路的特性。1、电路原理图[](AD\Test\2021\TLD2131\TestTLD2131Mul.PcbDoc * "测试电路板AD工程文件")
利用三颗TLD2131组成3×3LED显示矩阵的电路原理图如下:▲ 图2.1.1 利用三颗TLD2131组成3×3LED显示矩阵2、快速制版实验PCB
设计单面PCB实现上述原理图,可以适合使用 一分钟制版[3] 制作实验电路。下面是设计的相应的PCB。▲ 图2.1.2 利用快速制版工艺制作的单面PCB设计3、焊接PCB
一分钟之后,通过快速制版获得PCB,进行焊接之后,形式调试电路。▲ 图2.1.3 焊接实验电路板二、搭建电路
1、在面包板上搭建电路
在面包板上搭建测试电路。控制器使用 设计带有SD卡的 MM32F3277 MicroPython 实验板[4] 来控制。控制管脚分布使用 PC0,1,2,3, PA0,1来控制。其中下载了 来自MindMotion在2021-11的版本MicroPython[5] 。可以使用MicroPython来测试相应功能。▲ 图2.2.1 在面包板上搭建的测试电路2、连接关系
MM32F3277测试电路板与LED矩阵测试控制端口之间的连接关系如下: ● 测试连接关系:EN123:PC0,PC1,PC2
CN123:PC3,PA0,PA1
三、测试LED矩阵
1、整体闪烁
(1) 测试代码
from machine import Pin
import utime
row = [Pin('PC%d'%i, Pin.OUT_PUSHPULL) for i in range(3)]
col = [Pin('PC3', Pin.OUT_PUSHPULL),
Pin('PA0', Pin.OUT_PUSHPULL),
Pin('PA1', Pin.OUT_PUSHPULL)]
print("Light all LED.\r\n")
while True:
for r,c in zip(row, col):
r(1)
c(1)
utime.sleep_ms(250)
for r,c in zip(row, col):
r(0)
c(0)
utime.sleep_ms(250)
(2)测试结果
软件运行后,可以看到所有(9颗)LED同时闪烁。▲ 图2.3.1 所有LED闪烁2、流水灯测试
(1)测试代码
from machine import Pin
import utime
row = [Pin('PC%d'%i, Pin.OUT_PUSHPULL) for i in range(3)]
col = [Pin('PC3', Pin.OUT_PUSHPULL),
Pin('PA0', Pin.OUT_PUSHPULL),
Pin('PA1', Pin.OUT_PUSHPULL)]
print("Light all LED.\r\n")
ledrow = 0
rowbyte = [7]*3
def LED1ms():
global ledrow, rowbyte, row, col
for r,c in zip(row, col):
r(0)
c(0)
rb = 0
if ledrow * 0:
ledrow = 1
elif ledrow * 1:
ledrow = 1
else:
ledrow = 0
row[ledrow](1)
rb = rowbyte[ledrow]
if rb