關(guān)鍵詞:
TLD2131,TLD2331,LED,智能車競賽,Infineon01 TLD2131
一、LED矩陣
??在 測試Infineon車載LED驅(qū)動芯片TLD2131[1] 中對于1入3出的TLD2131的LED驅(qū)動芯片進(jìn)行了初步測試。為了能夠使用更少的MCU的IO口控制更多的LED,需要使用LED矩陣模式。這一點(diǎn)正好可以利用到TLD2132的高邊驅(qū)動LED的特性,因此只要在輔助幾個NPN三極管在底邊進(jìn)行選擇,可以很方便組織LED的矩陣顯示。??對于N個上邊輸出端口,M個下邊輸出端口,可以形成N×MLED點(diǎn)陣控制。通過循環(huán)控制,可以動態(tài)形成對于單個LED的控制特性。▲ 圖1.1.1 LED 顯示矩陣二、基于TLD2331的LED矩陣
??Infineon公司的高邊LED驅(qū)動芯片系列中,有三入三出的TLD2331-3EP,它的內(nèi)部結(jié)構(gòu)如下圖所示。利用一個TLD2331-3EP便可以驅(qū)動三列LED,利用兩個TLD2331便可以控制六列LED輸出。因此在使用三個NPN三極管,便可以組成6×3=18個LED矩陣。??為了驗(yàn)證TLD2331驅(qū)動特性,本文利用手邊剛剛到手的TLD2131組成電路進(jìn)行測試。▲ 圖1.2.1 TLD2131(左)TLD2331(右)內(nèi)部功能圖02 電路測試
一、電路設(shè)計(jì)
??基于 三個 ? TLD2131[2] 模擬一顆TLSD2331的高邊控制,測試電路的特性。1、電路原理圖[](AD\Test\2021\TLD2131\TestTLD2131Mul.PcbDoc * "測試電路板AD工程文件")
??利用三顆TLD2131組成3×3LED顯示矩陣的電路原理圖如下:▲ 圖2.1.1 利用三顆TLD2131組成3×3LED顯示矩陣2、快速制版實(shí)驗(yàn)PCB
??設(shè)計(jì)單面PCB實(shí)現(xiàn)上述原理圖,可以適合使用 一分鐘制版[3] 制作實(shí)驗(yàn)電路。下面是設(shè)計(jì)的相應(yīng)的PCB。▲ 圖2.1.2 利用快速制版工藝制作的單面PCB設(shè)計(jì)3、焊接PCB
??一分鐘之后,通過快速制版獲得PCB,進(jìn)行焊接之后,形式調(diào)試電路。▲ 圖2.1.3 焊接實(shí)驗(yàn)電路板二、搭建電路
1、在面包板上搭建電路
??在面包板上搭建測試電路??刂破魇褂?設(shè)計(jì)帶有SD卡的 MM32F3277 MicroPython 實(shí)驗(yàn)板[4] 來控制??刂乒苣_分布使用 PC0,1,2,3, PA0,1來控制。其中下載了 來自MindMotion在2021-11的版本MicroPython[5] 。可以使用MicroPython來測試相應(yīng)功能。▲ 圖2.2.1 在面包板上搭建的測試電路2、連接關(guān)系
??MM32F3277測試電路板與LED矩陣測試控制端口之間的連接關(guān)系如下:? ● ?測試連接關(guān)系:???
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)測試結(jié)果
??軟件運(yùn)行后,可以看到所有(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?