0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于S32K144實(shí)現(xiàn)TPS929120的基本控制功能

冬至子 ? 來(lái)源:Auto FAE進(jìn)階之路 ? 作者:Yingming ? 2023-05-30 10:49 ? 次閱讀

1.TPS92910簡(jiǎn)介

TPS929120是TI公司在2019年4月份發(fā)布的具有FlexWire接口的12通道汽車級(jí)40V高邊LED驅(qū)動(dòng)芯片,其主要特點(diǎn)如下:

  • 12路高邊精確電流輸出通道
    • 供電電壓4.5V到40V
    • 電阻預(yù)設(shè)電流最高到75mA
    • 2bit全局的,6bit獨(dú)立的電流設(shè)置
    • 輸出電流在5mA到75mA時(shí),精度可達(dá)±5%
    • 輸出電流在1mA時(shí),精度為±10%
    • 輸出電流50mA時(shí)的壓降為0.5V
    • 12bit獨(dú)立PWM調(diào)光
    • 編程的PWM頻率最高可達(dá)20kHz
    • 支持線性和指數(shù)兩種調(diào)光方式
  • FlexWire控制接口
    • 最高1MHz的時(shí)鐘頻率
    • FlexWire總線最多可掛16個(gè)器件
    • 一幀命令最多可以傳輸8字節(jié)的寄存器數(shù)據(jù)
    • 內(nèi)部集成5V LDO可以給CAN收發(fā)器供電
  • 診斷和保護(hù)功能
    • 可編程的fail-safe狀態(tài)
    • LED開路檢測(cè)
    • LED短路檢測(cè)
    • 單顆LED短路診斷
    • 可編程的欠壓檢測(cè)
    • 開漏模式的ERR引腳,可以通知主機(jī)是否發(fā)生故障
    • 用于判斷FlexWire通信是否正常的看門狗和CRC校驗(yàn)
    • 用于引腳電壓測(cè)量的8bit的ADC
    • 過(guò)溫保護(hù)

2.硬件調(diào)試平臺(tái)

筆者用來(lái)調(diào)試TPS929120所制作的DEMO板,整體框圖如下:

圖片

DEMO板分為驅(qū)動(dòng)板和燈板兩部分,接近客戶的實(shí)際使用情況。其中,

  • 驅(qū)動(dòng)板上面主要是給燈板供電的DCDC,給S32K和TJA1044供電的LDO;
  • 燈板上面主要是燈驅(qū)TPS929120和LED燈驅(qū);
  • 驅(qū)動(dòng)板和燈板之間通過(guò)差分總線進(jìn)行通信,抗干擾能力相比傳統(tǒng)的I2C,SPI提高很多;
  • 由于給燈板供電只有6.5V,所以TPS929120的整體功耗相比正常的12V供電系統(tǒng)能降低不少。

另外,該Demo板也預(yù)留了MCUUART引腳作為測(cè)試點(diǎn),方便查看S32K144和TPS929120的通信數(shù)據(jù),從而在調(diào)試時(shí)更快地鎖定問(wèn)題。

2.1 燈板原理圖

燈板原理圖參考如下官方demo板進(jìn)行設(shè)計(jì):

圖片

2.2 參考電流

參考電流計(jì)算公式如下,其中Vref為1.235V(數(shù)據(jù)手冊(cè)典型值),Kref默認(rèn)值為512(可以通過(guò)修改寄存器CONF_MISC1中的CONF_REFRANGE進(jìn)行調(diào)整)。

圖片

根據(jù)查表,此電路中TPS929120默認(rèn)的參考電流為50mA(燈板上TPS929120貼的REF電阻為12.4K,計(jì)算值為51mA)。

圖片

2.3 器件地址

TPS929120可以使用外部地址,也可以使用內(nèi)部EEPROM預(yù)燒寫的地址,此次DEMO使用外部地址。兩片TPS929120的ADDR0,ADDR1,ADDR2引腳電壓分別為000,100;根據(jù)下面的器件地址設(shè)置表格可以知道(EEP_DEVADDR[3:0]的默認(rèn)值為0000b),兩片TPS929120的地址分別為0和1。

圖片

3.TPS929120通信協(xié)議

TPS929120使用的通信方式,TI稱之為FlexWire,其實(shí)就是UART(數(shù)據(jù)鏈路層)+CAN物理層,然后在傳輸層增加一些自定義的幀格式,目前其他廠家新出的多通道LED Driver基本都是采用這種通信方式。

3.1 物理層

FlexWire的物理層使用CAN收發(fā)器,主要的作用就是將普通的串行信號(hào)轉(zhuǎn)換成差分信號(hào)(時(shí)序圖如下),比較常用的有TJA1044,TCAN1042等。

圖片

3.2 數(shù)據(jù)鏈路層

FlexWire的數(shù)據(jù)鏈路層使用的是UART通信,因?yàn)門PS929120內(nèi)部的時(shí)鐘最高為1MHz,為了通信穩(wěn)定,所以MCU內(nèi)部的UART配置的波特率為500K;其它配置為8bit數(shù)據(jù)位,無(wú)奇偶校驗(yàn),1bit停止位。

3.3 傳輸層

2.3.1 讀寫時(shí)序

  • 主機(jī)向TPS929120寫數(shù)據(jù):
    圖片
  • 主機(jī)從TPS929120讀數(shù)據(jù):

圖片

需要注意的是,如果加了CAN收發(fā)器,由于CAN收發(fā)器自帶的回環(huán)功能,實(shí)際上主機(jī)也會(huì)收到他自身發(fā)的數(shù)據(jù),所以實(shí)際主機(jī)收到的數(shù)據(jù)應(yīng)該是 自身發(fā)的數(shù)據(jù) + TPS929120響應(yīng)的數(shù)據(jù)

當(dāng)一次性寫8個(gè)寄存器數(shù)據(jù)時(shí),MCU的UART_RX收到的數(shù)據(jù)最多,為MCU發(fā)出的12字節(jié)+2字節(jié)

2.3.2 幀格式說(shuō)明

  • 總體格式如下:

圖片

  • 其中DEV_ADDR的組成元素較多,如下所示,其他都是單一元素組成。

圖片

2.3.3 寄存器lock與unlock

配置其他寄存器之前需要先配置CONF_LOCK Register(61h)進(jìn)行解鎖,主要是如下四個(gè)4bit,這4個(gè)bit上電之后默認(rèn)為1,處于lock狀態(tài),需要清0進(jìn)行unlock。

圖片

這4個(gè)bit分別能夠lock與unlock的寄存器如下圖:

圖片

2.3.4 輸出通道控制

  • CONF_EN0(50h),CONF_EN1(51h)分別控制通道0-7,8-11的使能;默認(rèn)值為0h。
  • IOUT0(00h)到IOUT11(0Bh)分別通道0到11的電流,一共64-step,實(shí)際的通道輸出電流的計(jì)算公式如下,其中此電路板的I(FULL_RANGE)為50mA;這些寄存器在reset之后加載對(duì)應(yīng)的EEPROM中EEPIx寄存器的值,EEPIx默認(rèn)為3Fh。

圖片

  • PWM0(20h)到PWM11(2Bh),PMWL0(40h)到PWML11(4Bh)都是控制通道0到11的PWM占空比,前者用于粗調(diào),后者用于微調(diào),計(jì)算公式如下;前者在reset之后加載對(duì)應(yīng)的EEPROM中EEPPx寄存器的值,為FFh,后者的默認(rèn)值為Fh。

圖片

根據(jù)上面的分析,如果只配置通道使能,其他寄存器不設(shè)置,使能的通道會(huì)輸出50mA的電流。

TPS929120在配置通道使能的情況下,即使配置PWM占空比為0,也會(huì)有微亮的情況。

4.使用S32K144驅(qū)動(dòng)TPS92910

接下來(lái),將基于S32K144介紹如何使用MCU驅(qū)動(dòng)TPS929120,實(shí)現(xiàn)一些基本的燈光控制功能。

4.1 實(shí)現(xiàn)命令幀格式

4.1.1 寫寄存器的幀格式

寫寄存器的幀格式如2.3.2章節(jié)所述,先發(fā)SYNC(0x55),然后是DEV_ADDR(由4種元素組成),然后是REG_ADDR(數(shù)據(jù)手冊(cè)中寄存器的地址),然后是DATA(要寫入寄存器的數(shù)據(jù)),最后是CRC

整體實(shí)現(xiàn)代碼如下:

void FlexWrite(uint8_t DEV_ADDR_x, uint8_t registerAddr, uint8_t DATA_BYTES[], uint8_t DATA_LENGTH_x, uint16_t checkResponse)
{
    uint8_t DEV_ADDR=0x00, REG_ADDR;
    uint8_t commandFrame[12] = {0};// one longest command frame length is 12
    uint8_t dataLength=0, frameLength=0, responseLength = 0;
    uint16_t i;

    DEV_ADDR = (FLEX_Write | DATA_LENGTH_x | DEV_ADDR_x);
    REG_ADDR = registerAddr;

    commandFrame[0] = 0x55; //SYNC byte
    commandFrame[1] = DEV_ADDR;
    commandFrame[2] = REG_ADDR;

    switch (DATA_LENGTH_x)
    {
    case 0:
        {
            dataLength = 1;
            break;
        }
    case 16:
        {
            dataLength = 2;
            break;
        }
    case 32:
        {
            dataLength = 4;
            break;
        }
    case 48:
        {
            dataLength = 8;
            break;
        }
    default : break;
    }

    for(i=0;i

4.1.1 讀寄存器的幀格式

讀寄存器的幀格式和寫寄存器的幀格式相近,這里就不贅述了。

4.2 實(shí)現(xiàn)Uart串口收發(fā)

硬件上使用LPUART1模塊,引腳選擇PTC8和PTC9,軟件配置為波特率500K,8N1。同時(shí),因?yàn)槭褂昧薈AN收發(fā)器,所以串口實(shí)際接收到的數(shù)據(jù)是發(fā)送的數(shù)據(jù)加上TPS929120響應(yīng)的數(shù)據(jù)。

整體實(shí)現(xiàn)代碼如下:

/*********************************************************************************************************
** Function name:       uartWrite
** Descriptions:        N/A
** input parameters:    N/A
** output parameters:   N/A
** Returned value:      N/A
*********************************************************************************************************/
void uartWrite(uint8_t commandFrame[], uint16_t frameLength, uint16_t checkResponse, uint16_t responseLength)
{
    uint8_t i =0;

    /* Enable  the receiver and receive data full interrupt of LPUART1*/
    LPUART_DRV_ReceiveData(INST_LPUART1, responseData, 1u);
    /* The function does not return until the transmit is complete or timeout(2ms) occured*/
    LPUART_DRV_SendDataBlocking(INST_LPUART1, commandFrame, frameLength, 2);
    if(checkResponse == TRUE)
    {
        /* launch timer and set wait time = 2000us
        * This time should be larger than the time to receive all the response bytes,
        * And the response receiving time depends on the buard rate and the number of response byte,
        * For example, baurd rate = 500000, 2 response byte, so the wait time should be larger than 2*10*1/500000 = 40us
        * Why 2*10 because for each byte there are additional 1 start bit and 1 stop bit
        */
        timeOut(2000);
 
        /* received all response byte or the wait time exceeds the specified time */
        while(!((timeOutFlag == 1) || (receiveByteNum == responseLength)));

        /*Take some action when successfully received response*/
        if(receiveByteNum == responseLength)
        {
            /* Turn off Red LED and turn on Green LED*/
            PINS_DRV_WritePin(LED_PORT, RED_LED, 1);
            PINS_DRV_TogglePins(LED_PORT, 1<

4.3 實(shí)現(xiàn)基本的控制功能

4.3.1 操作TPS92910的基本函數(shù)

實(shí)現(xiàn)寫寄存器的函數(shù)之后,就可以基于該函數(shù)實(shí)現(xiàn)一些基本的操作TPS929120函數(shù)了,主要是如下幾個(gè):

如下代碼中包含了很多寄存器的宏定義,沒(méi)有進(jìn)行展開,讀者可以借助數(shù)據(jù)手冊(cè)進(jìn)行對(duì)比。

1.unlock與lock寄存器的函數(shù)實(shí)現(xiàn)如下:

圖片

3.清除錯(cuò)誤狀態(tài)和標(biāo)志的函數(shù)實(shí)現(xiàn)如下:

圖片

  1. 配置通道電流的函數(shù)實(shí)現(xiàn)如下:

圖片

  1. 打開通道的函數(shù)實(shí)現(xiàn)如下:

圖片

  1. 關(guān)閉通道的函數(shù)實(shí)現(xiàn)如下:

圖片

  1. 配置通道的PWM占空比的函數(shù)實(shí)現(xiàn)如下:

圖片

4.3.1 TPS929120控制流程

實(shí)現(xiàn)了上述基本控制函數(shù)之后,接下來(lái)就是控制TPS929120實(shí)現(xiàn)基本的燈效了。

首先需要對(duì)TPS92910進(jìn)行初始化,主要流程參考如下代碼:

圖片

然后就是在主循環(huán)中實(shí)現(xiàn)燈效,這里以呼吸效果為例,代碼如下:

下面代碼在測(cè)試TPS92910競(jìng)品更改過(guò),PWM占空比為0時(shí)仍有漏電流的問(wèn)題被修復(fù)了。如果驅(qū)動(dòng)TPS929120,建議在PWM占空比到0時(shí),增加關(guān)閉通道的操作。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5274

    瀏覽量

    119661
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1007

    瀏覽量

    81231
  • LED驅(qū)動(dòng)芯片

    關(guān)注

    8

    文章

    167

    瀏覽量

    25662
  • CAN收發(fā)器
    +關(guān)注

    關(guān)注

    2

    文章

    162

    瀏覽量

    25573
  • PWM調(diào)光
    +關(guān)注

    關(guān)注

    2

    文章

    206

    瀏覽量

    33773
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    S32k144底層程序

    S32k144底層程序
    發(fā)表于 01-23 14:13

    S32k144底層程序

    S32k144底層程序
    發(fā)表于 02-26 10:19

    如何實(shí)現(xiàn)S32K144的中斷接收?

    如何實(shí)現(xiàn)S32K144的中斷接收?
    發(fā)表于 02-07 07:16

    如何通過(guò)s32k144定時(shí)器從VLPS喚醒?

    我想實(shí)現(xiàn) VLPS 模式,然后在 s32K144 上通過(guò)定時(shí)器喚醒。我可以將 s32k144 設(shè)置為 VLPS 模式,并通過(guò)中斷 GPIO 喚醒。但是不知道如何通過(guò)定時(shí)器喚醒。你能為我的目的與我分享一些經(jīng)驗(yàn)嗎?
    發(fā)表于 03-20 06:29

    如何在S32DS3.5上使用Jlink對(duì)S32K144片上FLASH進(jìn)行所有操作?

    我用的是S32DS3.5,想用Jlink擦除S32K144的所有片上FLASH,但是在S32DS3.5的界面上找不到實(shí)現(xiàn)這個(gè)功能的選項(xiàng)。我應(yīng)
    發(fā)表于 03-22 06:56

    啟用S32K144上的Csec功能時(shí)問(wèn)題求解

    我在嘗試啟用 S32K144 上的 Csec 功能時(shí)遇到了問(wèn)題,為此,我嘗試的第一步是將 flexNVM 分區(qū)為 32K/32K,我發(fā)現(xiàn)當(dāng) FCCOB1 設(shè)置為非零時(shí),其余的FCCOB
    發(fā)表于 03-23 06:49

    如何知道S32K144中使用了多少RAM?

    我如何知道 S32K144 中使用了多少 RAM?RAM = Data + Bss,如何知道軟件運(yùn)行時(shí)S32K144使用了多少RAM?S32K144 現(xiàn)在在不固定的點(diǎn)重新啟動(dòng)。
    發(fā)表于 03-23 07:04

    無(wú)法將S32k144更改為48 針怎么解決?

    我的IDE版本是ARMv2.2,SDK:RTM3.0.0。我想為我的 48-LQFP S32K144 板使用 SPI 程序。當(dāng)我選擇示例項(xiàng)目或創(chuàng)建新項(xiàng)目時(shí),我無(wú)法將 S32k144 更改為 48 針。.S32 CPU
    發(fā)表于 03-31 07:27

    S32K144解鎖問(wèn)題

    S32K144芯片用Jlink的commander操作解鎖成功后,仍然無(wú)法進(jìn)行擦除和連接,有沒(méi)有大佬知道原因
    發(fā)表于 04-01 14:08

    求分享S32k144 Modbus示例

    我們正在使用 S32K144 板開發(fā) Modbus RTU。我已經(jīng)購(gòu)買了評(píng)估板,但是S32DS V3.4 SDK 4.0.3 中沒(méi)有Modbus RTU 示例。只有 Uart 存在,但我想獲得有關(guān) modbus RTU 的支持,有沒(méi)有合適的例子?
    發(fā)表于 04-04 07:28

    可以為S32K144配置電子郵件嗎?

    我在配置S32K144的can郵箱的時(shí)候,是不是應(yīng)該配置這個(gè)寄存器來(lái)配置S32K144的最大郵箱數(shù)?CAN0->MCR = 0x0000000F | CAN_MCR_SRXDIS(1
    發(fā)表于 04-18 07:37

    S32K144 CAN失敗的原因?如何解決?

    現(xiàn)在我的設(shè)計(jì)是TI MCU+ S32K144。TI為主,S32K144為從。一開始,The can 工作正常。大約十五小時(shí)后,CAN 出現(xiàn)故障。S32K144 TX實(shí)測(cè)波形如下圖:另外,在向S
    發(fā)表于 04-19 08:19

    S32K144三相如何預(yù)充?

    S32K144三相如何預(yù)充。有軟件案例 無(wú)
    發(fā)表于 05-18 06:32

    s32k144有哪些可用的診斷?

    我們?cè)谠O(shè)計(jì)中使用 S32k144 uC。能告訴我 uC (S32K144) 有哪些可用的診斷嗎?
    發(fā)表于 05-25 07:29

    TPS929120的CRC校驗(yàn)的三種實(shí)現(xiàn)方法

    最近在幫客戶編寫基于S32K144編寫TPS929120的軟件驅(qū)動(dòng)時(shí),需要在發(fā)送數(shù)據(jù)的末端增加8bit的CRC校驗(yàn)碼。
    的頭像 發(fā)表于 05-30 10:39 ?963次閱讀
    <b class='flag-5'>TPS929120</b>的CRC校驗(yàn)的三種<b class='flag-5'>實(shí)現(xiàn)</b>方法