详细讲解如何使用STM32驱动LT3746(32路带降压控制的LED驱动)


  整个详细讲解过程分为介绍LT3746,LT3746的详细硬件配置和软件配置,以及外围电路分析和软件驱动流程,后面还介绍一下LT3746官方评测板DC1406A的调试使用过程,分析的数据,抓取的波形,以及最后自己项目中使用LT3746遇到的困难和问题,以及怎么实现STM32代码去驱采LT3746,并附上自己写的代码和讲解。( 其中大多来自官方英文数据手册,作者通过自我了解学习,再介绍给大家,不足之处,多多指点


介绍LT3746

1. LT3746的特点

  • 宽电压输入范围6V~55V
  • 32路独立的LED驱动通道,每通道输出可达30mA/13V
  • 每个通道具有单独的6位点校正电流调节和12位灰度等级PWM调光能力
  • 0.5µs 的最小 LED 导通时间
  • 级联30MHz串行数据接口(可用SPI接口进行通信
  • 可提供针对32路的LED开路/短路及过热故障的全面诊断和保护功能,并通过串行数据接口回送故障状态
    LT3746的官网中文简介1
    LT3746的官网中文简介2
    详细的官方英文文档见下方链接
    ADI官网-LT3746资料链接
    在这里插入图片描述

2. LT3746的封装和引脚定义

- 封装

在这里插入图片描述
  如上图所示为LT3746的顶视图,以及各引脚的电压参数(这里注意有两个电压输入引脚Vin和Vcc,Vin主要是通过芯片降压稳压给后级驱动LED主回路供电,所以电压范围较广;Vcc才是给芯片本身供电的,所以最大电压只能到6V),另外可以看出LT3746是采用56引脚(外加57接地引脚)的 QFN 塑料封装,5mmX9mm的超小体积,集成化较高,工作温度在 -40℃~125℃

-引脚定义

  • EN/UVLO (Pin 1):使能和欠压锁定保护引脚。(该引脚可接入数字信号控制芯片使能,引脚电压低于0.35V关断芯片,高于1.34V并低于Vcc使能芯片。另外该引脚也可通过分压电阻连接到Vin来设置电源欠压锁定的阈值,或者直接默认配置将该引脚接到Vcc)。
  • LED00 to LED31 (Pins 2-17, 30-45): LED驱动器输出引脚。(将每个通道LED的负极连接到这些引脚上)。
  • GND (Pin 18, 20, 27, 29): 接地引脚。
  • SCKI (Pin 19): 串行接口TTL/CMOS逻辑时钟输入引脚(可当SPI的SCK信号使用)。
  • SDI (Pin 21): 串行接口TTL/CMOS逻辑数据输入引脚(可当SPI的MOSI信号使用)。
  • LDI (Pin 22): 串行接口TTL/CMOS逻辑数据装载引脚(可当SPI的CS信号使用)。
  • Vcc (Pin 23): 逻辑和控制电源引脚。(该引脚为串行数据接口和内部控制电路供电。 必须 通过旁路电容接地)。
  • PWMCK (Pin 24): 灰度PWM调光TTL/CMOS逻辑脉冲波形引脚。(该引脚为PWM调光信号的基准波形输入,32路通道PWM调光信号是通过配置12位PWM寄存器(GS FRAME)来产生的,详细见后续内容)。
  • LDO (Pin 25): 串行接口TTL/CMOS逻辑同步数据装载输出引脚。
  • SDO (Pin 26): 串行接口TTL/CMOS逻辑数据输出引脚(可当SPI的MISO信号使用)。
  • SCKO (Pin 28): 串行接口TTL/CMOS逻辑同步时钟输出引脚。
  • SYNC (Pin 46): 开关频率同步引脚。(使用外部时钟设置开关频率。如果不使用,请与地或Vcc连接)。
  • RT (Pin 47): 内部开关频率设置引脚(可通过外接电阻配置开关频率从200kHz到1MHz,常见开关频率对应的阻值见后续表格)。
  • SS (Pin 48): 软启动引脚。(通过外置电容设定软启动时间,以限制启动时的涌流。直到所有的Vcc, EN/UVLO和(Vin - Vcap)电压高于各自的UVLO阈值,软启动周期才开始)。
  • FB (Pin 49): 反馈引脚。(通过连接到输出端的电阻分压反馈,来设定最大LED正极总电压,既输出电压Vout)。
  • ISN (Pin 50): 电感电流反馈引脚负端。
  • ISP (Pin 51): 电感电流反馈引脚正端。
  • CAP (Pin 52): Vin输入参考,偏置电容引脚(该引脚与Vin内部通过一个6.8V的偏置电压连到比较器上,只有Vin大于6.8V,芯片才工作,所以该引脚必须外接偏置电容)。
  • GATE (Pin 53): 门驱动引脚。(该引脚驱动一个典型峰值电流为1A的P通道功率MOSFET。将此引脚连接到P-MOSFET的栅极上,并使用短而宽的PCB走线,以最小化走线电感)。
  • Vin (Pin 54): 电源输入引脚。(必须通过旁路电容接地)。
  • Tset (Pin 55): 温度阈值设置引脚。通过对地电阻设置过热阈值。
  • Iset(Pin 56): 标称LED电流设置引脚。通过接地电阻设定所有通道的标称LED电流(可通过6位校正电流寄存器(DC FRAME)配置各个通道的相对于标称电流的倍率,0.5X~1.5X,详细见后续内容)。
  • Exposed Pad (Pin 57): 接地焊盘。(必须 焊接到一片裸漏的接地铜皮上,以降低模具温度,提高设备的功率能力)。

3. LT3746内部电路结构分析

在这里插入图片描述
  如上图所示,红框所标的为驱动 LED 主要回路,其中①号电路为典型的开关电源降压稳压电路6~55V 电压 Vin 输入,通过外部配置 GATE 引脚的开关频率,对电压进行斩波降压。这里的外部配置主要有 RT 引脚的接地电阻,来配置内部开关频率,或者通过 SYNC 引脚连接外部频率。
  其次输出电压 Vout 的大小,由 FB 引脚的反馈电阻 RFB1RFB2 配置所得。电感 L 和电容 COUT 组成滤波电路,D1肖特基二极管,起续流作用。RS 为输出电流的采样电阻,为了实时监测输出电流,起到保护 P-MOSFET ,肖特基二极管和电感的作用, 在输出电流为1ARS 一般选择 0.033Ω
  而②号电路主要是芯片内部的寄存器控制着每个通道的内部电路,由图中②号从左到右分别是 STATUS INFO(状态信息寄存器),SHIFT REGISTER(移位寄存器),FS(寄存器选择开关),GS REGISTER(移位寄存器),DC REGISTER(移位寄存器),EN(控制器使能开关),12-BIT PWM DIMMING(12位PWM灰度控制器),6-BIT DOT CORRECTION(6位电流校正控制器), OPEN/SHORT LED(LED断路/短路故障标志位)和CONSTANT CURRENT SINK(恒流源)。这部分主要通过串行接口逻辑往寄存器读写数据进行控制,主要控制的是恒流源处的开关频率和恒流源的电流大小。作者本人通过 STM32SPI 接口与之连接控制,后面将详细介绍它的控制流程读写时序

详细说明如下:

1. RT接地电阻的选择:
  • 默认选择133KΩ,精度 1% 的电阻即可(更多电阻选择见下表Table 2)。如果选择通过 SYNC 外接频率,可选择TTL电平(低电平<0.6V,高电平>2.4V),频率范围为 200kHz~1MHz,但这时要保证 RT 引脚配置的频率要小于 SYNC 频率的 20%,如果 SYNC 外接的是最小频率 200kHz,则 RT 接地电阻要为 348KΩ。另外外接频率也不要比 RT 设置的内部频率高太多,所以建议只需配置 RT 对地电阻,SYNC 引脚不用,接地或接 Vcc

在这里插入图片描述

2. 输出电压 Vout 的配置:
  • Vout 是LED正极总线上的电压,所以在配置 Vout 之前,需要知道你要驱动的LED正向导通压降,并且要清楚每个通道上要串联几个LED,所以有以下公式可参考:
    在这里插入图片描述

其中 0.5V 是每个通道恒流源处的电压, n 是单个通道上串联的最大LED数量,VF(MAX) 是保证LED正常工作的最大正向压降。
在这里插入图片描述
如上图,一个通道上串联三颗LED,假设每颗LED的正向压降为1.8V,则可以通过上述公式计算出 Vout =0.5 + 3 x 1.8 = 5.9 V

  • 明确了自己所需的 Vout 后,就可以通过反馈电阻 RFB1RFB2 来配置。
    在这里插入图片描述
    在这里插入图片描述

其中 RFB1 一般选择 10KΩ,再由上面你明确的 VOUT(MAX) 便可计算出 RFB2 的值。
假设之前算得的 VOUT(MAX)5.9 V, 则由上述公式可知 RFB2 = 10 x ( 5.9/1.205 -1) KΩ=38.96

3. 标称电流的设定
  • 设定好输出电压,接下来通过 ISET 引脚设置每个通道的标称电流。
      标称电流定义为: 当所有 电流校正控制器(6-BIT DOT CORRECTION) 的值设置为 0x20(这里的0X20是因为电流校正寄存器是6位有效位,最大配置到0X3F,也就是电流倍数为标称电流的1.5倍,最小配置成0X00,电流倍数为标称电流的0.5倍,而配置成0X20,刚好电流倍数为标称电流的1.0倍),32路通道上的平均LED电流。标称电流由 ISET 引脚的接地电阻 RISET 设定。 ISET 管脚上的电压 VISET 被精确地调整到1.205V,因此接入电阻后的电流 ILED(NOM),可以计算为:
       在这里插入图片描述

其中 ILED(NOM) 必须设置在 4mA ~ 20mA 之间,常用的 RISETILED(NOM) 关系表格如下:


在这里插入图片描述

4. 电流校正控制器的设定
  • LT3746 可以独立调节每个通道的LED电流。这种微调电流,也称为 DOT CORRECTION,主要用于校准LED通道之间的亮度偏差。可通过 6 位(64级)点校正控制器(6-BIT DOT CORRECTION)设置(后面简称DC寄存器),将每个通道LED电流,调整为标称电流的 0.5X 到 1.5X,根据:
    在这里插入图片描述

其中 ILEDn 为第 n 通道的LED电流,DCn 为第 n 个点校正控制器设置的值(DCn = 0~63( 0x00~0x3F )),ILED(NOM) 为上一小节配置的标称电流
假设之前的 ILED(NOM) 通过 RISET 电阻配置为 20 mA,而第 n 个 DC 控制器中的值通过串行接口写入的数据为 32 (0X20), 则该通道的实际电流值 ILEDn = 20 x [(32+32)/64] mA = 20 mA 。

5. PWM光照灰度的设定
  • 虽然调节LED电流会改变其发光强度或亮度,但调节亮度的最佳方法是通过脉宽调制(PWM)控制LED的开/关时间。LT3746 可以独立调节每个通道的亮度。可通过配置 12 位(4096级)PWM灰度控制器(12-BIT PWM DIMMING)(后面简称GS寄存器)把亮度从 0%99.98% 进行线性变化。通道n的亮度级 GSn% 可计算为:
    在这里插入图片描述

其中GSn 为第 n 个PWM灰度控制器设置的值(GSn = 0 to 4095 (0x0000~0x0FFF))。

6. LED开路/短路故障检测
  • LT3746 具有独立的 LED 故障诊断电路,可以检测每个通道 LED 开路和短路故障。LED 开路故障定义为任何一路 LED 断开或未连接; LED 短路故障定义为任意一颗 LED 自身短路。在开灯状态下,如果检测到 LED 引脚电压低于0.1V(典型值),则LED开路标志置位。如果检测到 LED 引脚电压高于LED总线电压 Vout 输出的 75%,则LED短路标志置位。如果一个LED通道本身短路,该通道将被关闭,以消除不必要的功耗。如果禁用某个 LED 通道可以直接将 LED 引脚连接到输出 Vout 。开路和短路标志是组合在一起,反应在状态帧中的 LED 故障位(S0到S31)。

在这里插入图片描述
LT3746 中有一组 386 位的状态寄存器,S0~S32反应的是LED的故障状态。

4. LT3746典型应用电路

在这里插入图片描述


上述是关于LT3746硬件配置关键点,更多详细设置请参考官方英文技术手册。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
驱动STM32上的LED,你需要进行以下步骤: 1. 首先,确保已经连接好LEDSTM32的GPIO引脚。通常,你可以选择一个GPIO引脚作为输出来连接LED。 2. 在代码中,包含适当的头文件。对于STM32F系列微控制器,你需要包含stm32fxxx.h(xxx代表特定系列,例如stm32f103.h)。 3. 初始化GPIO引脚作为输出。找到对应的GPIO端口和引脚号,并设置为输出模式。例如,如果你将LED连接到GPIOA的引脚5上,则需要将GPIOA的引脚5设置为输出模式。 4. 在代码中使用函数来控制LED的状态。例如,使用GPIO_WriteBit()函数将引脚设置为高电平或低电平来点亮或关闭LED。 以下是一个基本的示例代码: ```c #include "stm32fxxx.h" // 包含适当的头文件 int main(void) { // 初始化GPIO引脚 GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; // LED连接到GPIOA的引脚5 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 输出模式 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA // 控制LED状态 GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); // 点亮LED // 或者使用 GPIO_ResetBits(GPIOA, GPIO_Pin_5); 来关闭LED while (1) { // 可以添加其他代码或逻辑在这里 } } ``` 请注意,以上代码只是一个简单示例,实际应用中可能需要根据具体情况进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值