精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于S32K144實現TPS929120的基本控制功能

冬至子 ? 來源:Auto FAE進階之路 ? 作者:Yingming ? 2023-05-30 10:49 ? 次閱讀

1.TPS92910簡介

TPS929120是TI公司在2019年4月份發布的具有FlexWire接口的12通道汽車級40V高邊LED驅動芯片,其主要特點如下:

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

2.硬件調試平臺

筆者用來調試TPS929120所制作的DEMO板,整體框圖如下:

圖片

DEMO板分為驅動板和燈板兩部分,接近客戶的實際使用情況。其中,

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

另外,該Demo板也預留了MCUUART引腳作為測試點,方便查看S32K144和TPS929120的通信數據,從而在調試時更快地鎖定問題。

2.1 燈板原理圖

燈板原理圖參考如下官方demo板進行設計:

圖片

2.2 參考電流

參考電流計算公式如下,其中Vref為1.235V(數據手冊典型值),Kref默認值為512(可以通過修改寄存器CONF_MISC1中的CONF_REFRANGE進行調整)。

圖片

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

圖片

2.3 器件地址

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

圖片

3.TPS929120通信協議

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

3.1 物理層

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

圖片

3.2 數據鏈路層

FlexWire的數據鏈路層使用的是UART通信,因為TPS929120內部的時鐘最高為1MHz,為了通信穩定,所以MCU內部的UART配置的波特率為500K;其它配置為8bit數據位,無奇偶校驗,1bit停止位。

3.3 傳輸層

2.3.1 讀寫時序

  • 主機向TPS929120寫數據:
    圖片
  • 主機從TPS929120讀數據:

圖片

需要注意的是,如果加了CAN收發器,由于CAN收發器自帶的回環功能,實際上主機也會收到他自身發的數據,所以實際主機收到的數據應該是 自身發的數據 + TPS929120響應的數據 。

當一次性寫8個寄存器數據時,MCU的UART_RX收到的數據最多,為MCU發出的12字節+2字節

2.3.2 幀格式說明

  • 總體格式如下:

圖片

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

圖片

2.3.3 寄存器lock與unlock

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

圖片

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

圖片

2.3.4 輸出通道控制

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

圖片

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

圖片

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

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

4.使用S32K144驅動TPS92910

接下來,將基于S32K144介紹如何使用MCU驅動TPS929120,實現一些基本的燈光控制功能。

4.1 實現命令幀格式

4.1.1 寫寄存器的幀格式

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

整體實現代碼如下:

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 實現Uart串口收發

硬件上使用LPUART1模塊,引腳選擇PTC8和PTC9,軟件配置為波特率500K,8N1。同時,因為使用了CAN收發器,所以串口實際接收到的數據是發送的數據加上TPS929120響應的數據。

整體實現代碼如下:

/*********************************************************************************************************
** 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 實現基本的控制功能

4.3.1 操作TPS92910的基本函數

實現寫寄存器的函數之后,就可以基于該函數實現一些基本的操作TPS929120函數了,主要是如下幾個:

如下代碼中包含了很多寄存器的宏定義,沒有進行展開,讀者可以借助數據手冊進行對比。

1.unlock與lock寄存器的函數實現如下:

圖片

3.清除錯誤狀態和標志的函數實現如下:

圖片

  1. 配置通道電流的函數實現如下:

圖片

  1. 打開通道的函數實現如下:

圖片

  1. 關閉通道的函數實現如下:

圖片

  1. 配置通道的PWM占空比的函數實現如下:

圖片

4.3.1 TPS929120控制流程

實現了上述基本控制函數之后,接下來就是控制TPS929120實現基本的燈效了。

首先需要對TPS92910進行初始化,主要流程參考如下代碼:

圖片

然后就是在主循環中實現燈效,這里以呼吸效果為例,代碼如下:

下面代碼在測試TPS92910競品更改過,PWM占空比為0時仍有漏電流的問題被修復了。如果驅動TPS929120,建議在PWM占空比到0時,增加關閉通道的操作。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5322

    瀏覽量

    120020
  • EEPROM
    +關注

    關注

    9

    文章

    1010

    瀏覽量

    81411
  • LED驅動芯片
    +關注

    關注

    8

    文章

    170

    瀏覽量

    25711
  • CAN收發器
    +關注

    關注

    2

    文章

    165

    瀏覽量

    25606
  • PWM調光
    +關注

    關注

    2

    文章

    206

    瀏覽量

    33839
收藏 人收藏

    評論

    相關推薦

    S32k144底層程序

    S32k144底層程序
    發表于 01-23 14:13

    S32k144底層程序

    S32k144底層程序
    發表于 02-26 10:19

    如何實現S32K144的中斷接收?

    如何實現S32K144的中斷接收?
    發表于 02-07 07:16

    如何通過s32k144定時器從VLPS喚醒?

    我想實現 VLPS 模式,然后在 s32K144 上通過定時器喚醒。我可以將 s32k144 設置為 VLPS 模式,并通過中斷 GPIO 喚醒。但是不知道如何通過定時器喚醒。你能為我的目的與我分享一些經驗嗎?
    發表于 03-20 06:29

    如何在S32DS3.5上使用Jlink對S32K144片上FLASH進行所有操作?

    我用的是S32DS3.5,想用Jlink擦除S32K144的所有片上FLASH,但是在S32DS3.5的界面上找不到實現這個功能的選項。我應
    發表于 03-22 06:56

    啟用S32K144上的Csec功能時問題求解

    我在嘗試啟用 S32K144 上的 Csec 功能時遇到了問題,為此,我嘗試的第一步是將 flexNVM 分區為 32K/32K,我發現當 FCCOB1 設置為非零時,其余的FCCOB
    發表于 03-23 06:49

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

    我如何知道 S32K144 中使用了多少 RAM?RAM = Data + Bss,如何知道軟件運行時S32K144使用了多少RAM?S32K144 現在在不固定的點重新啟動。
    發表于 03-23 07:04

    無法將S32k144更改為48 針怎么解決?

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

    S32K144解鎖問題

    S32K144芯片用Jlink的commander操作解鎖成功后,仍然無法進行擦除和連接,有沒有大佬知道原因
    發表于 04-01 14:08

    求分享S32k144 Modbus示例

    我們正在使用 S32K144 板開發 Modbus RTU。我已經購買了評估板,但是S32DS V3.4 SDK 4.0.3 中沒有Modbus RTU 示例。只有 Uart 存在,但我想獲得有關 modbus RTU 的支持,有沒有合適的例子?
    發表于 04-04 07:28

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

    我在配置S32K144的can郵箱的時候,是不是應該配置這個寄存器來配置S32K144的最大郵箱數?CAN0->MCR = 0x0000000F | CAN_MCR_SRXDIS(1
    發表于 04-18 07:37

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

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

    S32K144三相如何預充?

    S32K144三相如何預充。有軟件案例 無
    發表于 05-18 06:32

    s32k144有哪些可用的診斷?

    我們在設計中使用 S32k144 uC。能告訴我 uC (S32K144) 有哪些可用的診斷嗎?
    發表于 05-25 07:29

    TPS929120的CRC校驗的三種實現方法

    最近在幫客戶編寫基于S32K144編寫TPS929120的軟件驅動時,需要在發送數據的末端增加8bit的CRC校驗碼。
    的頭像 發表于 05-30 10:39 ?1020次閱讀
    <b class='flag-5'>TPS929120</b>的CRC校驗的三種<b class='flag-5'>實現</b>方法