这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 英飞凌TLD4020-3STDKIT评估板驱动LED

共2条 1/1 1 跳转至

英飞凌TLD4020-3STDKIT评估板驱动LED

高工
2025-11-28 19:55:15   被打赏 50 分(兑奖)     打赏

英飞凌TLD4020-3STD_KIT评估板专为汽车内部RGB LED照明打造,以TLD4020-3ET驱动芯片为核心,集成32位ARM Cortex-M23内核与三路独立低侧电流源,每通道支持0-51.5mA输出,可精准调控红、绿、蓝三色LED亮度,实现丰富色彩效果。

评估板采用子母板结构,主板TLD4020-3STD_EVAL与扩展板TLD4020-3DB通过接插件稳固连接,便于灵活扩展。


开发环境搭建便捷,基于Keil MDK,搭配Infineon MCU配置工具与LITIX MCU SDK,提供如“BLINKY_SIMPLE_EXAMPLE”等示例代码,用户可直接编译下载至板卡,快速实现RGB灯色彩转换。安装时,先下载并安装Keil软件,过程简单,按提示操作即可。随后安装PACK头文件,为编译做准备。最后,在软件中设置Select Software Packs,勾选3.00-plus版本,即可顺利编译,就可以进行下开测试了。

飞书文档 - 图片

在进行编译前要先安装好PACK。

下图是安装好的界面。

f5769497-9379-43ec-a334-002aebe6acf3.png

程序代码编写完成后,仅通过USB线(MICRO-USB)连接到电脑,但KEIL MDK的调试器无法识别到MCU的核心ID,导致无法进行烧录或调试。

正确操作步骤:

连接调试器USB线, 使用MICRO-USB线将开发板的调试/烧录接口与电脑连接。为板载的调试器芯片供电,并建立电脑与调试器之间的通信通道。

电脑可能识别到新的USB设备,但KEIL中仍无法看到MCU ID。这是因为调试器有了电,但MCU主芯片还没有电。

为MCU主系统供电,将12V直流电源适配器连接到开发板的DC供电接口。为板上的MCU(微控制器单元)、外设传感器、接口等主要电路供电。开发板上的电源指示灯应被点亮。此时,调试器才能通过SWD/JTAG接口与MCU建立通信。

在KEIL中识别与操作, 完成以上两步后,再次点击KEIL MDK中的LOAD或DEBUG按钮。

这个时候就可以看到调试器能够成功识别到MCU的ID,并开始擦除、编程、验证Flash存储器。

24717aa5-9ab7-43f0-844e-df2d7c5ece0d.png


连接电脑,与供电

41a9692a-2a8a-4025-a992-2b37983155e7.png


原理图

186b83ff-3f7b-4aa0-9d6a-1e0159fd52a5.png


LED在开发板的位置

be3a2894-b063-4fa5-8eb8-6674a3f4f158.png


代码

/* 包含设备头文件 */
#include "device.h"

/**
  * @brief  主函数
  * @retval sint32 程序执行状态码
  */
sint32 main(void)
{
    uint8_t u8_return_code;  // 函数返回值
    sint32 s32_counter;      // 循环计数器
    sint8 s8_ledIndex;       // LED索引(当前代码未使用)
    sint8 s8_onState;        // LED状态标志:0=熄灭,1=点亮

    /* 看门狗服务:复位看门狗计数器,防止系统复位 */
    (void)PMU_serviceWatchdog();

    /* 基于Config Wizard配置初始化硬件模块(如GPIO、PWM等) */
    u8_return_code = Device_init();

    /* 检查设备初始化是否成功 */
    if (u8_return_code != ERR_LOG_SUCCESS)
    {
        /* 初始化失败处理:程序挂起 */
        for (;;)
            ;  // 死循环,系统停止运行
    }

    /*****************************************************************************
    ** 用户应用代码区域 **
    ****************************************************************************/
    
    /* 定义PWM亮度参数 */
    #define MAX_BRIGHTNESS 0x0FFF  // 最大亮度值(12位PWM,4095)
    #define MIN_BRIGHTNESS 0x0000  // 最小亮度值(熄灭)
    #define MAX_COUNTER 100000      // 最大计数值(未使用)
    
    /* 定义LED通道映射 */
    #define RED_LED 0    // 红色LED连接到PWM通道0
    #define BLUE_LED 1   // 蓝色LED连接到PWM通道1
    #define GREEN_LED 2  // 绿色LED连接到PWM通道2
    
    /* 定义时间参数:1秒的计时滴答数(基于主循环执行速度) */
    #define ONE_SECOND_TICK 100000

    /* 变量初始化 */
    s32_counter = 0;   // 循环计数器清零
    s8_ledIndex = 0;   // LED索引(未使用)
    s8_onState = 0;    // LED状态初始为熄灭

    /*****************************************************************************
    ** 主程序无限循环 **
    ****************************************************************************/
    for (;;)
    {
        /* 每次循环都服务看门狗,防止复位 */
        (void)PMU_serviceWatchdog();
        
        /* 循环计数器递增,并检查是否达到1秒延时 */
        if (++s32_counter >= ONE_SECOND_TICK)
        {
            /* 根据当前LED状态执行切换操作 */
            if (s8_onState == 0)
            {
                /* 点亮所有LED:设置PWM占空比为最大值 */
                LDRV->PWM_DC_CFG0.reg = MAX_BRIGHTNESS;  // 红色LED全亮
                LDRV->PWM_DC_CFG1.reg = MAX_BRIGHTNESS;  // 蓝色LED全亮
                LDRV->PWM_DC_CFG2.reg = MAX_BRIGHTNESS;  // 绿色LED全亮
                s8_onState = 1;  // 更新状态为"点亮"
            }
            else
            {
                /* 熄灭所有LED:设置PWM占空比为最小值 */
                LDRV->PWM_DC_CFG0.reg = MIN_BRIGHTNESS;  // 红色LED熄灭
                LDRV->PWM_DC_CFG1.reg = MIN_BRIGHTNESS;  // 蓝色LED熄灭
                LDRV->PWM_DC_CFG2.reg = MIN_BRIGHTNESS;  // 绿色LED熄灭
                s8_onState = 0;  // 更新状态为"熄灭"
            }
            
            s32_counter = 0;  // 重置循环计数器,开始新的计时周期
        }
    }
}


实际驱动效果


11月28日 00_00_00-00_00_30.gif







院士
2025-11-28 22:42:59     打赏
2楼

PCB预留这么大的空间,是不是上面要盖一个凸透镜啊


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]