基于TLD2331完成动态LED显示驱动

举报
tsinghuazhuoqing 发表于 2021/12/26 01:07:20 2021/12/26
【摘要】 简 介: 对于具有三个LED控制通道的TLD2331,可以通过IN_SET1,2,3对于三个通道进行独立控制。控制IO口设置成OPEN_DRAIN模式,通过输出电流设置电阻来连接IN_SETn端...

简 介: 对于具有三个LED控制通道的TLD2331,可以通过IN_SET1,2,3对于三个通道进行独立控制。控制IO口设置成OPEN_DRAIN模式,通过输出电流设置电阻来连接IN_SETn端口。在输出为了高阻时,LED熄灭,输出低电平时,LED点亮。使用PUSH_PULL的输出模式也可以达到相同的控制效果。

关键词 TLD2331LED智能车竞赛

LED动态显示
文章目录
设计相关资料
测试TLD2331
测试两个TLD2331
是否可以使用PushPull方式?
测试总结

 

§01 LED动态显示


   第十七届智能车竞赛 中要求无线充电组使用LED显示法拉电容充电电压。在 利用TLD2131组成LED矩阵显示实验电路板 测试了使用三颗TLD2131组成三列三行的LED显示电路。现在收到了来自于Infineon公司寄送的TLD2331样品,现在测试利用两片TLD2331组成六列LED的驱动方案。

一、设计相关资料

1、TLD2331

  TLD2331-3EP数据手册 可以查找到对应的管脚定义。

▲ 图1.1.1 TLD2331-3EP管脚定义

▲ 图1.1.1 TLD2331-3EP管脚定义

  根据数据手册上给出的参考电路,可以使用IN_SET1,2,3分别控制三路LED是否点亮。

▲ 图1.1.2 应用IN_SET1,2,3控制三路LED的是否点亮

▲ 图1.1.2 应用IN_SET1,2,3控制三路LED的是否点亮

▲ 图1.1.3 利用Open_Drain控制LED输出电流

▲ 图1.1.3 利用Open_Drain控制LED输出电流

(1)建立AD元器件

  建立 AltumDesign中的元器件 TLD2331元器件。

▲ 图1.1.4 建立TLD2331-3EP元器件

▲ 图1.1.4 建立TLD2331-3EP元器件

  器件的封装建立 PG-TSDS0-14 的器件封装。

▲ 图1.1.5 PG-TSDSO-14 封装形式

▲ 图1.1.5 PG-TSDSO-14 封装形式

2、实验小板

(1)原理图

▲ 图1.1.6 测试小板原理图

▲ 图1.1.6 测试小板原理图

(2)PCB图

▲ 图1.1.7 快速制版PCB图

▲ 图1.1.7 快速制版PCB图

二、测试TLD2331

1、控制MCU测试版

  使用 **基于MM32F3273的MicroPython实验电路板 ** 控制TLD2331的测试版。使用其中的PA0,PA1,PA2,PA3控制测试电路。

▲ 图1.2.1  MM32F3273的输出控制管脚

▲ 图1.2.1 MM32F3273的输出控制管脚

2、面包板上搭建测试电路

  连接PA0,PA1,PA2到TLD2331的IN_SET1, IN_SET2,IN_SET3。

▲ 图1.2.2  在面包板上搭建的测试电路

▲ 图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);
        
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

(2)测试结果

  可以看到三个LED在GPIO的开关控制下闪烁。验证使用OPEN_DRAIN可以通过IN_SET1,2,3控制三路LED的关闭和显示。

三、测试两个TLD2331

1、测试电路

  在面包板上搭建两个TLD2331的驱动板。

▲ 图1.3.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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

▲ 图1.3.2  两个LED都在闪烁

▲ 图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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

▲ 图1.3.3  六个LED形成流水灯

▲ 图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的输出模式也可以达到相同的控制效果。


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/121493062

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。