基于TLD2331完成动态LED显示驱动
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于TLD2331完成动态LED显示驱动相关的知识,希望对你有一定的参考价值。
简 介: 对于具有三个LED控制通道的TLD2331,可以通过IN_SET1,2,3对于三个通道进行独立控制。控制IO口设置成OPEN_DRAIN模式,通过输出电流设置电阻来连接IN_SETn端口。在输出为了高阻时,LED熄灭,输出低电平时,LED点亮。使用PUSH_PULL的输出模式也可以达到相同的控制效果。
关键词
: TLD2331,LED,智能车竞赛
§01 LED动态显示
在 第十七届智能车竞赛 中要求无线充电组使用LED显示法拉电容充电电压。在 利用TLD2131组成LED矩阵显示实验电路板 测试了使用三颗TLD2131组成三列三行的LED显示电路。现在收到了来自于Infineon公司寄送的TLD2331样品,现在测试利用两片TLD2331组成六列LED的驱动方案。
一、设计相关资料
1、TLD2331
TLD2331-3EP 的 数据手册 可以查找到对应的管脚定义。
▲ 图1.1.1 TLD2331-3EP管脚定义
根据数据手册上给出的参考电路,可以使用IN_SET1,2,3分别控制三路LED是否点亮。
▲ 图1.1.2 应用IN_SET1,2,3控制三路LED的是否点亮
▲ 图1.1.3 利用Open_Drain控制LED输出电流
(1)建立AD元器件
建立 AltumDesign中的元器件 TLD2331元器件。
▲ 图1.1.4 建立TLD2331-3EP元器件
器件的封装建立 PG-TSDS0-14 的器件封装。
▲ 图1.1.5 PG-TSDSO-14 封装形式
2、实验小板
(1)原理图
▲ 图1.1.6 测试小板原理图
(2)PCB图
▲ 图1.1.7 快速制版PCB图
二、测试TLD2331
1、控制MCU测试版
使用 **基于MM32F3273的MicroPython实验电路板 ** 控制TLD2331的测试版。使用其中的PA0,PA1,PA2,PA3控制测试电路。
▲ 图1.2.1 MM32F3273的输出控制管脚
2、面包板上搭建测试电路
连接PA0,PA1,PA2到TLD2331的IN_SET1, IN_SET2,IN_SET3。
▲ 图1.2.2 在面包板上搭建的测试电路
3、测试结果
(1)测试代码
//------------------------------------------------------------------------------
int main(void)
unsigned int nCount;
//--------------------------------------------------------------------------
board_init(true); // Initialize UART1
MM32F3273Init();
printf("MM32F3273 -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n",
__DATE__, __TIME__, SystemCoreClock);
//--------------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleDebugInit();
uart_rx_irq(UART_1, ENABLE);
#endif // CONSOLE_DEBUG
//--------------------------------------------------------------------------
OUT(LED1);
OUTO(A0);
OUTO(A1);
OUTO(A2);
OUTO(A3);
//--------------------------------------------------------------------------
nCount = 1;
while(1)
if(++nCount & 0x20) ON(LED1);
else OFF(LED1);
//----------------------------------------------------------------------
if(nCount & 0x100)
ON(A0);
ON(A1);
ON(A2);
else
OFF(A0);
OFF(A1);
OFF(A2);
//----------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleCmdProc();
#endif // CONSOLE_DEBUG
//----------------------------------------------------------------------
WaitMS(1);
(2)测试结果
可以看到三个LED在GPIO的开关控制下闪烁。验证使用OPEN_DRAIN可以通过IN_SET1,2,3控制三路LED的关闭和显示。
三、测试两个TLD2331
1、测试电路
在面包板上搭建两个TLD2331的驱动板。
▲ 图1.3.1 将两个TLD2331驱动板搭建面包板上
2、测试结果
PIN_enum LEDDIM[] =
A0, A1, A2, B12, B13, B14
;
//------------------------------------------------------------------------------
int main(void)
unsigned int nCount, i;
//--------------------------------------------------------------------------
board_init(true); // Initialize UART1
MM32F3273Init();
printf("MM32F3273 -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n",
__DATE__, __TIME__, SystemCoreClock);
//--------------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleDebugInit();
uart_rx_irq(UART_1, ENABLE);
#endif // CONSOLE_DEBUG
//--------------------------------------------------------------------------
OUT(LED1);
for(i = 0; i < 6; i ++)
OUTO(LEDDIM[i]);
//--------------------------------------------------------------------------
nCount = 1;
while(1)
if(++nCount & 0x20) ON(LED1);
else OFF(LED1);
//----------------------------------------------------------------------
if(nCount & 0x100)
for(i = 0; i < 6; i++)
ON(LEDDIM[i]);
else
for(i = 0; i < 6; i ++)
OFF(LEDDIM[i]);
//----------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleCmdProc();
#endif // CONSOLE_DEBUG
//----------------------------------------------------------------------
WaitMS(1);
▲ 图1.3.2 两个LED都在闪烁
3、流水灯
PIN_enum LEDDIM[] =
A0, A1, A2, B12, B13, B14
;
void Show6LED(int nLED)
int i;
for(i = 0; i < 6; i++)
ON(LEDDIM[i]);
OFF(LEDDIM[nLED]);
//------------------------------------------------------------------------------
int main(void)
unsigned int nCount, i;
int nLEDCount, nLEDPeriod;
//--------------------------------------------------------------------------
board_init(true); // Initialize UART1
MM32F3273Init();
printf("MM32F3273 -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n",
__DATE__, __TIME__, SystemCoreClock);
//--------------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleDebugInit();
uart_rx_irq(UART_1, ENABLE);
#endif // CONSOLE_DEBUG
//--------------------------------------------------------------------------
OUT(LED1);
for(i = 0; i < 6; i ++)
OUTO(LEDDIM[i]);
//--------------------------------------------------------------------------
nCount = 1;
nLEDCount = 0;
nLEDPeriod = 0;
while(1)
if(++nCount & 0x20) ON(LED1);
else OFF(LED1);
//----------------------------------------------------------------------
if(++nLEDPeriod >= 100)
nLEDPeriod = 0;
nLEDCount ++;
if(nLEDCount >= 6)
nLEDCount = 0;
Show6LED(nLEDCount);
//----------------------------------------------------------------------
#if CONSOLE_DEBUG
ConsoleCmdProc();
#endif // CONSOLE_DEBUG
//----------------------------------------------------------------------
WaitMS(1);
▲ 图1.3.3 六个LED形成流水灯
四、是否可以使用PushPull方式?
将MM32F3273的IO口设置成PUSH_PULL的输出模式,通过实验可以验证对于TLD2331的控制效果是一样的。
※ 测试总结 ※
对于具有三个LED控制通道的TLD2331,可以通过IN_SET1,2,3对于三个通道进行独立控制。控制IO口设置成OPEN_DRAIN模式,通过输出电流设置电阻来连接IN_SETn端口。在输出为了高阻时,LED熄灭,输出低电平时,LED点亮。使用PUSH_PULL的输出模式也可以达到相同的控制效果。
■ 相关文献链接:
- 第十七届全国大学智能汽车竞赛竞速比赛规则
- 利用TLD2131组成LED矩阵显示实验电路板
- TLD2331-3EP
- 数据手册
- 基于MM32F3273的MicroPython实验电路板 - 工作并不是正常
● 相关图表链接:
以上是关于基于TLD2331完成动态LED显示驱动的主要内容,如果未能解决你的问题,请参考以下文章