LED控制器 TPS929120驱动

内容分享1周前发布
0 0 0

       

目录

一.芯片基本介绍(不过多展开,网上也有相应文章了)

二.功能及接口

1.芯片寄存器操作(读和写接口)

2.芯片初始化配置(用于工作参数配置及初始化PWM输出)

3.芯片错误管脚获取

4.芯片12路通道状态返回(返回输出状态、开路、短路、过温、通讯失败、控制器初始化状态、欠压等)

5.芯片12路通道PWM频率输出(12路频率统一配置,并非单独可设)

6.芯片12路通道PWM占空比输出(12路占空比单独可设, 占空比范围0~100%)

三.接口实现及关键寄存器说明

1.读/写寄存器

1)SYNC为同步字节,为0x55

2)DEV_ADDR读写数据控制字节,也是协议重要参数所在,其定义如下:

3)REG_ADDR寄存器地址(参见芯片手册)

4)DATA_1…DATA_N读/写入寄存器数据

5)CRC协议校验字节,从DEVICE_ADDR到DATA_N的CRC值

6)STATUS状态字节

7)从上图可以看出,执行写操作命令后,LED控制器会返回控制器的FLAG0寄存器值作为对写指令的响应其中也包含控制工作状态;执行读操作后,LED控制器会返回相应请求寄存器的值。

2.芯片初始化配置

3.芯片错误管脚获取

4.芯片12路通道状态返回(返回输出状态、开路、短路、过温、通讯失败、控制器初始化状态、欠压等)

5.芯片12路通道PWM频率输出(12路频率统一配置,并非单独可设)

6.芯片12路通道PWM占空比输出(12路占空比单独可设, 占空比范围0~100%)

四.故障检测

1.开路故障

2.短路故障(LED主要是对地故障为主)


近期开发一个项目用到了TPS929120 LED控制器芯片,开发过程中有了些许体会,下面将其整理成文,以帮助使用该芯片的科技开发人。如有描述不当还请包含指正。

一.芯片基本介绍(不过多展开,网上也有相应文章了)

        先简单描述下此芯片的功能:12路LED PWM输出控制,掉电重启恢复(EEPROM配置加载,目前项目中未使用,所以不需要配置EEPROM),具备故障诊断功能,通讯方式采用类似串口的Flexwire方式。

LED控制器 TPS929120驱动

        默认情况下控制器通讯地址由外部ADDR0~ADDR2(0~15)决定。对于MCU驱动开发主要关心其中TX,RX,ERR,REF,OUT0~OUT11这几个管脚基本就可以。

TX,RX:Flexwire通讯管脚

ERR:错误通知管脚

REF:参考电阻,与通道输出限流相关,之后会讲到

OUT0~OUT11:LED PWM输出通道。

二.功能及接口

      废话不多说,直接上干货,通过对该芯片手册的理解,开发LED控制器驱动主要完成如下这些主要功能及接口(使用伪代码),基本可以覆盖其他功能的拓展,此处先简单罗列稍后展开:

1.芯片寄存器操作(读和写接口)

LedChip_TPS929120_Read_Register(StartRegisterAddr, *Rxbuf, ByteSize)

LedChip_TPS929120_Write_Register(StartRegisterAddr, *Txbuf, ByteSize)

2.芯片初始化配置(用于工作参数配置及初始化PWM输出)

LedChip_TPS929120_Init()

3.芯片错误管脚获取

LedChip_TPS929120_Err_Pin_Get_Status()

4.芯片12路通道状态返回(返回输出状态、开路、短路、过温、通讯失败、控制器初始化状态、欠压等)

LedChip_TPS929120_Outx_Get_Status(OutPin, *Status)

5.芯片12路通道PWM频率输出(12路频率统一配置,并非单独可设)

LedChip_TPS929120_Set_Frequency(PwmFrequency)

6.芯片12路通道PWM占空比输出(12路占空比单独可设, 占空比范围0~100%)

LedChip_TPS929120_Outx_Set_Duty(OutPin, Duty)

三.接口实现及关键寄存器说明

1.读/写寄存器

在实现读写寄存器接口前我们必须先了解控制器的通讯协议,其有两种协议格式,一种为单字节模式,一种是多字节模式(顾名思义,连续读/写入多个连续寄存器),我们这里主要针对多字节模式进行展开讨论,协议格式如下:

LED控制器 TPS929120驱动

图中RX为控制器接受管脚,即MCU发送管脚;TX为控制器发送管脚,即MCU接受管脚

1)SYNC为同步字节,为0x55

2)DEV_ADDR读写数据控制字节,也是协议重要参数所在,其定义如下:

LED控制器 TPS929120驱动

DEVICE_ADDR:

LED控制器在flexwire上的地址,可以认为是设备的ID范围0~15,即上文提到的ADDR0~ADDR2决定,也可以通过EEPROM进行配置。

DATA_LENGTH:

写入数据的长度(单位:字节),需要注意这个长度并非任意,而是特定长度,同时也是区分单字节工作模式,还是多字节工作模式关键,只能选择1(单字节模式),2,4,8(多字节模式)

BROADCAST:

广播模式还是单设备模式

READ/WRITE:

读/写选择位

3)REG_ADDR寄存器地址(参见芯片手册)

4)DATA_1…DATA_N读/写入寄存器数据

5)CRC协议校验字节,从DEVICE_ADDR到DATA_N的CRC值

6)STATUS状态字节

即控制器的FLAG0寄存器值

7)从上图可以看出,执行写操作命令后,LED控制器会返回控制器的FLAG0寄存器值作为对写指令的响应其中也包含控制工作状态;执行读操作后,LED控制器会返回相应请求寄存器的值。

       通过这样的分析是否这个芯片的驱动变得简单明了不少,无非就是固定的协议字节+读/写寄存器值。哈哈!

        下面我将提供这两个接口的伪代码逻辑:

LedChip_TPS929120_Read_Register(StartRegisterAddr, *Rxbuf, ByteSize)

{

/* 定义一个足够长的缓冲区buf */

/* 根据StartRegisterAddr和ByteSize值,组读指令:

同步+设备地址(读写位R,读长度)+读寄存器地址+CRC,将其放入buf中。*/

/* 调用MCU串口驱动发送buf数据 */

/* 调用MCU串口驱动接受控制器回复数据 */

/* 判断接受数据有效性,赋值RxBuf */

}

LedChip_TPS929120_Write_Register(StartRegisterAddr, *Txbuf, ByteSize)

{

/* 定义一个足够长的缓冲区buf */

/* 根据StartRegisterAddr和ByteSize值,组写指令:

同步+设备地址(读写位W,写长度)+写寄存器地址+DATA1~N+CRC,将其放入buf中。*/

/* 调用MCU串口驱动发送buf数据 */

/* 调用MCU串口驱动接受控制器回复状态字节 */

/* 检查状态字节有效性,返回发送是否成功 */

}

2.芯片初始化配置

初始化配置大体流程,其中会调用读写寄存器接口,同时需要注意Led控制器寄存器有写防护锁,配置部分寄存器需要打开防护锁,如下:

LED控制器 TPS929120驱动

LedChip_TPS929120_Init()

{

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全0,配置关闭防护锁 */

/* 调用上文的写寄存器接口,写CONF_EN0~1寄存器,使能通道 */

/* 调用上文的写寄存器接口,写CONF_MISC0~1寄存器, 配置输出总频率,K(ref) */

/* 调用上文的写寄存器接口,写IOUT0~11寄存器, 配置各路限流参数 */

/* 调用上文的写寄存器接口,写CONF_DIAGEN0~1寄存器, 配置各路故障诊断开启 */

/* 调用上文的写寄存器接口,写PWM0~11及PWML0~11寄存器, 配置各路占空比为0 */

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全1,配置开启防护锁 */

}

3.芯片错误管脚获取

通过系统GPIO读取接口获取Err Pin状态

LedChip_TPS929120_Err_Pin_Get_Status()

{

/* 通过读GPIO管脚接口获取Err PIN 状态 */

/* 返回Err PIN 状态 */

}

4.芯片12路通道状态返回(返回输出状态、开路、短路、过温、通讯失败、控制器初始化状态、欠压等)

LedChip_TPS929120_Outx_Get_Status(OutPin, *Status)

{

/* 调用上文的读寄存器接口,获取FLAG0~1,CONF_EN0~1,FLAG11~14等的寄存器值状态 */

/* 将对应值状态整合到Status中 */

}

5.芯片12路通道PWM频率输出(12路频率统一配置,并非单独可设)

其芯片总频率有几个档位可以选择

LED控制器 TPS929120驱动

LedChip_TPS929120_Set_Frequency(PwmFrequency)

{

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全0,配置关闭防护锁 */

/* 调用上文的写寄存器接口,根据PwmFrequency写CONF_MISC1 */

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全1,配置开启防护锁 */

}

6.芯片12路通道PWM占空比输出(12路占空比单独可设, 占空比范围0~100%)

       设置每路通道占空比主要依据手册中的占空比转换公式,如下:

LED控制器 TPS929120驱动

       其中CONF_PWMOUTx和CONF_PWMLOWOUTx分别为配置PWMx和PWMLx寄存器位,即占空比的高位和低位。

LedChip_TPS929120_Outx_Set_Duty(OutPin, Duty)

{

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全0,配置关闭防护锁 */

/* 调用上文的写寄存器接口,根据OutPin, Duty选择对应通道寄存器PWMx和PWMLx */

/* 调用上文的写寄存器接口,写CONF_LOCK寄存器为全1,配置开启防护锁 */

}

四.故障检测

       故障检测功能是此LED控制芯片中比较重要的点,是为防止线路短路、开路。我们在项目中开始也遇到了开路误报的情况,通过一番研究才理解其工作的大致原理,解决了开路误报的问题。所以单独列一个章节进行描述。

        我这里尽量用通俗易懂的方式进行描述,便于大家更好的理解。先贴上判断短路开路的依据,这里需要仔细阅读芯片手册,芯片对两种状态下短路开路等诊断类型进行详细定义描述,如下:

LED控制器 TPS929120驱动

LED控制器 TPS929120驱动

我们主要讨论正常模式时的短路和开路,这两个比较常用。

1.开路故障

LED控制器 TPS929120驱动

从上图中可以看出其开路判断条件主要是根据压差检测得到的,在讨论这个条件之前,我们先仔细看下芯片手册,其中有这样的描述,这也充分说明了Led控制器每路的最大电流限制,如下:

LED控制器 TPS929120驱动(1)

LED控制器 TPS929120驱动(2)

这两个公式是Led控制器上每路通道最大输出电流,为了便于理解,公式(1)可以认为是LED控制器电流最大值,公式(2)为单路分流电压限制。其中部分参数是硬件设计决定,我们假设将其固定:

V(REF)  = 1.235 V

K(Ref)这个参数在前文有所提及,是重要参数之一

LED控制器 TPS929120驱动

当我们选择R(ref)=12.7kΩ(硬件决定),K(ref)=512时,带入公式(1)则I(full_range)= 1.235V/12.7kΩ*512 = 0.0497A,即50mA。也就意味led控制器电流被限定在了50mA(类似于粗调电流档位)。而每路输出根据公式(2),CONF_IOUTx 在分子位置,所以其类似于单路限流器,可以将电流分为64档,0~63。

好了,让我们回过来看这个开路条件,假设V(supply)= 12V,V(open_th_rising)=?,再仔细阅读手册,你会发现

LED控制器 TPS929120驱动

选取中值V(open_th_rising)= 400mV,好了,我们发现开路判定条件变为了12V-V(OUTx)<400mV,即V(OUTx)> 11.6V,就会满足开路故障上报条件,然后再看V(supply)> V(ADCLOWSUPTH) ,其中5V<V(ADCLOWSUPTH) < 20V,可配置,默认值8V,所以V(supply)> V(ADCLOWSUPTH)成立。那么当CONF_IOUTx选为63时,11.6V/50mA=232Ω。这样我们可以得出当外接负载电阻<232Ω,不会上报开路,>232欧姆,会上报故障。

2.短路故障(LED主要是对地故障为主)

短路相对简单,当接地时电阻接近0,输出V(OUTx)接近0,满足对地短路条件,会上报短路故障

LED控制器 TPS929120驱动

LED控制器 TPS929120驱动

至此本次驱动开发历程结束,谢谢大家耐心看完,你的支持就是我最大的创作动力!

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...