chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

CAN收發(fā)器故障檢測(cè)電路及算法

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-02-22 09:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本應(yīng)用筆記討論了MAX33011E的控制局域網(wǎng)(CAN)總線故障檢測(cè)特性,并通過示例代碼演示了如何在固件中實(shí)現(xiàn)故障檢測(cè)算法

介紹

在數(shù)據(jù)未傳輸或接收時(shí)對(duì)控制區(qū)域網(wǎng)絡(luò) (CAN) 進(jìn)行故障排除可能會(huì)令人沮喪。Maxim在CAN收發(fā)器中開發(fā)了內(nèi)置故障檢測(cè)機(jī)制,可幫助用戶快速確定根本原因。本應(yīng)用筆記介紹了故障檢測(cè)機(jī)制的功能,解釋了其工作原理,并通過示例代碼演示了如何在固件中實(shí)現(xiàn)故障檢測(cè)算法。

使能故障檢測(cè)電路

MAX33011E CAN收發(fā)器需要100 TXD上升沿(通常為幾個(gè)CAN協(xié)議消息)來啟用故障檢測(cè)電路。故障檢測(cè)電路使能后,收發(fā)器仍可正常傳輸消息。

讀取和清除故障代碼

當(dāng)檢測(cè)到故障情況時(shí),發(fā)射器將被禁用,F(xiàn)AULT引腳將通過外部上拉電阻器拉高。當(dāng)系統(tǒng)控制器接收到FAULT引腳信號(hào)時(shí),TXD上需要16次從低到高的轉(zhuǎn)換來移出故障代碼,如表1所示。另外 10 個(gè)從低到高的 TXD 轉(zhuǎn)換可清除故障并禁用故障檢測(cè)電路。例如,過流故障代碼為101010,其時(shí)序圖如圖1所示。

pYYBAGP1c9eAJVtEAABFqWv1yqs488.jpg

圖1.過流故障報(bào)告時(shí)序圖

故障條件

MAX33011E是首款內(nèi)置故障檢測(cè)電路的CAN收發(fā)器。當(dāng)故障檢測(cè)電路使能時(shí),它可以檢測(cè)CAN總線上的三種常見故障條件(過壓、過流和傳輸故障),如表1所示。

故障 條件(啟用故障檢測(cè)) 故障代碼 可能的原因
電流 CANH 輸出電流和 CANL 輸入電流均> 85mA 101010 CANH 縮短為 CANL
CANH 連接到 GND 和 CANL 連接到 VDD
電壓 CANH > +29V 或 CANL < -29V 101100 CMR 故障
傳輸故障 RXD 在 10 個(gè)連續(xù) TXD 脈沖內(nèi)保持不變,建議最低頻率 = 200kHz 110010 CANH 和 CANL 上的開路負(fù)載(兩個(gè)終端電阻器均缺失)
超出驅(qū)動(dòng)器的共模范圍
連接到固定電壓源的 CANH 和/或 CANL

過流故障

當(dāng)CANH的源電流和CANL的灌電流均高于85mA(典型值)時(shí),檢測(cè)到過流故障。故障的更可能原因是總線上的CANH和CANL短路。但是,如果短路遠(yuǎn)離CAN節(jié)點(diǎn),則由于電纜阻抗高,可能無法檢測(cè)到。減慢CAN信號(hào)頻率可以降低電纜阻抗,并有助于從更遠(yuǎn)的距離檢測(cè)短路。但是,如果電纜的總電阻變得明顯高,即使CAN信號(hào)始終處于主導(dǎo)模式,也無法檢測(cè)到短路。圖2顯示了過流檢測(cè)的最大工作頻率與作為參考的電纜長(zhǎng)度的關(guān)系。使用 Cat5E 銅包鋁電纜。最大頻率因電纜類型而異。

poYBAGP1c9iAZ7qRAACOqI0D5I4121.jpg

圖2.過流檢測(cè)的最大工作頻率與電纜長(zhǎng)度的關(guān)系

過壓故障

MAX33011E共模輸入范圍(CMR)為±25V。當(dāng)CANH高于29V或CANH低于-29V時(shí),檢測(cè)到過壓故障。這是由于 CMR 超出規(guī)范造成的。

傳輸故障故障

故障檢測(cè)電路使能后,收發(fā)器仍可傳輸消息。在正常工作條件下,RXD 會(huì)回顯 TXD 信號(hào)。如果RXD連續(xù)10個(gè)脈沖沒有回顯TXD信號(hào),則檢測(cè)電路會(huì)產(chǎn)生傳輸故障。有幾個(gè)常見的可能原因使 RXD 無法回顯 TXD:

如果CANH和CANL短路至電源,并且收發(fā)器無法過驅(qū)電源,則接收器將始終在CAN總線上看到固定信號(hào)。

當(dāng)共模電壓超過驅(qū)動(dòng)器的共模范圍(-5V至+10V)時(shí),驅(qū)動(dòng)器關(guān)斷。當(dāng)驅(qū)動(dòng)器關(guān)閉時(shí),CANH/CANL輸出不會(huì)在TXD上反射信號(hào),接收器將在CAN總線上看到固定信號(hào)。

如果終端電阻未連接到CAN節(jié)點(diǎn),則可能導(dǎo)致傳輸故障。終端電阻在隱性模式下使CANH和CANL達(dá)到相同的電壓電平方面起著非常重要的作用。如果沒有端接電阻,收發(fā)器的內(nèi)部共模電壓緩沖器仍然可以將CANH和CANL連接在一起,但速度要慢得多??偩€上的容性負(fù)載也會(huì)減慢CANH和CANL電壓的合并速度。當(dāng)控制器向TXD發(fā)送脈沖時(shí),如果隱性間隔不夠長(zhǎng),差分電壓(CANH – CANL)連續(xù)10個(gè)脈沖周期低于輸入低閾值(RXD在10個(gè)TXD脈沖中保持低電平),則將報(bào)告?zhèn)鬏敼收瞎收?。這也意味著如果TXD高電平時(shí)間過長(zhǎng),CAN總線信號(hào)可能進(jìn)入隱性模式,RXD將變?yōu)楦唠娖剑粫?huì)報(bào)告?zhèn)鬏敼收瞎收?。檢測(cè)傳輸故障故障的推薦最小TXD脈沖頻率為200kHz。

故障檢測(cè)算法

Maxim開發(fā)了一種算法,能夠利用MAX33011E可靠地檢測(cè)CAN總線上的故障條件,而不會(huì)中斷正常的CAN通信。以下所有示例 Mbed 代碼都是為 NUCLEO-F303K8 平臺(tái)開發(fā)的。?

通常,CAN網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)都使用帶有CAN外設(shè)的微控制器。要執(zhí)行故障檢測(cè),微控制器的 TXD 和 RXD 引腳必須配置為 GPIO,以對(duì) TXD 信號(hào)進(jìn)行位沖擊并從 RXD 讀取故障代碼。需要中斷引腳連接到MAX33011E的故障信號(hào)。

為避免中斷正常通信,該算法在進(jìn)入故障檢測(cè)模式前需要對(duì)通信故障進(jìn)行強(qiáng)指示。如果發(fā)生以下情況之一,算法將進(jìn)入故障檢測(cè)模式:

故障很高。

發(fā)射器生成誤碼幀。

發(fā)射器錯(cuò)誤計(jì)數(shù)器升至255以上,節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài)。

以下示例代碼在上述任何條件變?yōu)?GP 時(shí)將微控制器引腳配置為 GPIO。

我們使用STM32F303K8 MCU作為CAN控制器。此參考代碼是在 Mbed-OS 上開發(fā)的,Mbed-OS 是一個(gè)免費(fèi)的開源嵌入式操作系統(tǒng)。有關(guān)更多詳細(xì)信息,請(qǐng)?jiān)L問:https://os.mbed.com/mbed-os/

Mbed 提供 API 將微控制器的 IO 配置為數(shù)字輸入/輸出引腳。也可以使用任何其他類似的低級(jí) API。

DigitalOut txd (PA_12); // Configures PA_12 of MCU (TXD of CAN controller) as digital o/p pin   
DigitalIn rxd (PA_11); // Configures PA_11 of MCU (RXD of CAN controller) as digital i/p pin   

在故障檢測(cè)模式下,應(yīng)使用2μs TXD正脈沖。在正脈沖之后,只要需要處理算法,TXD 就可以保持低電平。這使得故障檢測(cè)電路能夠可靠地檢測(cè)過流和傳輸故障故障。為確保TXD脈沖寬度準(zhǔn)確,應(yīng)使用定時(shí)器。下面是設(shè)置計(jì)時(shí)器的示例代碼。

首選低級(jí) API 來配置分辨率為 2μs 的定時(shí)器。Mbed 定時(shí)器提供最低 8μs 分辨率。在本例中,使用了STM2F32K303控制器中的TIM8定時(shí)器。有關(guān)寄存器設(shè)置說明的更多詳細(xì)信息,請(qǐng)參閱STM32F303K8編程手冊(cè)。

static TIM_HandleTypeDef s_TimerInstance = {                                  //Creates a timer instance (TIM2)
    . Instance = TIM2
};
__HAL_RCC_TIM2_CLK_ENABLE ();                                                 //Enable TIM2 APB clock (72MHz)
s_TimerInstance.Init.Period.Prescalar = 16;                                        //Set the counter prescalar value
s_TimerInstance.Init.CounterMode = TIM_COUNTERMODE_UP;     // Set the counter in "UP" mode
s_TimerInstance.Init.Period = 500;                                                      //Set the counter period
s_TimerInstance.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;  // Set the clock divisor value to none
s_TimerInstance.Init.RepetitionCounter = 0;                                       //Disable the auto-reload 
HAL_TIM_Base_Init(&s_TimerInstance);                        // Initializes TIM base unit according to specified parameters
HAL_TIM_Base_Start(&s_TimerInstance);                                         //Start the timer in time-base mode

如果故障變?yōu)楦唠娖?,則在CAN報(bào)文傳輸中,它隨時(shí)可能變?yōu)楦唠娖?。這意味著消息最有可能在 FAULT 為高電平后結(jié)束,因此從下一個(gè)故障檢測(cè)周期讀取錯(cuò)誤代碼更可靠。故障變?yōu)楦唠娖胶?,CAN外設(shè)引腳配置為GPIO。故障檢測(cè)算法將重復(fù)產(chǎn)生2μs TXD正脈沖,直到FAULT引腳上升沿后RXD變?yōu)楦唠娖健=ㄗh在TXD的下降沿之后對(duì)RXD進(jìn)行采樣。RXD變?yōu)楦唠娖胶?,還需要五個(gè)TXD脈沖來移出故障代碼。另外<>個(gè)TXD脈沖用于禁用故障檢測(cè)。下面是 FAULT 變高時(shí)的算法示例代碼:

InterruptIn fault (PA_0);                                 //Configure Fault pin as interrupt pin
fault.rise(&fault_init);                                            // Attach an interrupt callback function when fault pin goes high 
int state=0;                                                          // This is the state of state machine for fault detection
void fault_init()
{
     fault.rise (NULL);                                                  //Detach an interrupt till state machine gets completed
     toggle_txd_i_ticker.attach_us(&toggle_txd_i,6); // Initiate a state machine to detect a fault, each cycle is 6us
}
void toggle_txd_i()
{
      DigitalOut txd(PA_12);                                    //Configure CAN TXD pin as digital o/p
      DigitalIn rxd(PA_11);                                    // Configure CAN RXD pin as digital i/p
      DigitalIn fault_pin(PA_0);                            //Configure fault pin as digital i/p
      int status = fault_pin.read();                    //Fault pin status is stored in status variable
      static int count,N;
     

       do {                                                                  //This code toggles TXD for 2us duration using TIM2 timer
               txd = 1;
            } while (__HAL_TIM_GET_COUNTER(&s_TimerInstance) < 9);
                txd=0;
              count++;
 switch (state ){                                                   //State machine for fault detection
           case 0:     // Ignore the first high fault, giving txd pulses to clear the fault without reading fault code
             if (count >= 26 && status == 0 ) {                
                count = 0;
                state = 1;
                }                
              break;
                
           case 1:      // Fault pin is low and giving 100 fault pulses/waiting for fault pin to go High for second time
            if (count>=100 && status == 1 ) {                
                count = 0;
                state = 2;
             } 
                break;
                
            case 2:         // Second time fault activated, need to read the fault code(10 pulses + 6 pulses to read the rxd + 
                                  +10 pulses to clear the fault
               if (status == 1){        
                    if( (rxd.read() == 1 || rxd_read == 1) && i<6) {   
                        arr[k] = rxd.read();                      //Read RXD (fault code bit) and store in array
                        k++;
                        rxd_read = 1;                          //Flag to indicate that fault has been read
                     i++;   
                    }
                    }       
            else if ( status == 0  ) {    // Once fault pin becomes 0, move to state 3              
                fault_read = 1;
                rxd_read = 1;
                count = 0;
                state = 3;    
               } 
               break;
             case 3:
             if (status == 0) {
               InterruptIn fault (PA_0);          //Configure fault pin as interrupt pin
                Fault.rise(&fautl_init);             //Enable fault interrupt
                toggle_txd_i_ticker.detach();  //Disable state machine 
              }
               break;
            }                     
}    
    

對(duì)于其他兩種情況(誤碼幀和發(fā)射器錯(cuò)誤計(jì)數(shù)>255),F(xiàn)AULT不一定會(huì)變高。該算法將CAN外設(shè)引腳配置為GPIO,并將重復(fù)產(chǎn)生2μs TXD正脈沖,直到RXD在故障上升沿后變?yōu)楦唠娖?。建議在TXD的下降沿之后對(duì)RXD進(jìn)行采樣。RXD變?yōu)楦唠娖胶?,還需要五個(gè)TXD脈沖來移出故障代碼。另外 110 個(gè) TXD 脈沖禁用故障檢測(cè)。如果 FAULT 在 <> TXD 脈沖后沒有變?yōu)楦唠娖剑瑒t表示未檢測(cè)到故障,故障檢測(cè)模式將退出。下面是該算法的示例代碼:

在STM32F303K8 CAN控制器中,ESR(錯(cuò)誤狀態(tài)寄存器)具有7:0的發(fā)送器錯(cuò)誤計(jì)數(shù)器[TEC]位。如果此計(jì)數(shù)器超過 255,則啟動(dòng)用于檢測(cè)故障的狀態(tài)機(jī)。此外,ESR 具有 2 位 LEC[2:0](最后一個(gè)錯(cuò)誤代碼)來指示錯(cuò)誤條件,例如誤碼幀。

Int tec_count= ((CAN1->ESR) && (0x00FF0000))>>16;          //Get the transmit error counter value from ESR register
Int error_code= ((CAN1->ESR) && (0X00000070)>>4;         //Get the error code value from ESR register
if((tec_count >255) || (error_code !=0 ))
       {
            fault_init();                                              //Run the fault detection algorithm as implemented in above section
       }

審核編輯:郭婷

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

    關(guān)注

    31

    文章

    5433

    瀏覽量

    124324
  • 發(fā)射器
    +關(guān)注

    關(guān)注

    6

    文章

    878

    瀏覽量

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

    關(guān)注

    3

    文章

    175

    瀏覽量

    26315
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CAN收發(fā)器有什么特點(diǎn)?

    CAN通信中,收發(fā)器起到了十分相當(dāng)特別的作用。目前市面的收發(fā)器型號(hào)也是不計(jì)其數(shù),本文則是根據(jù)收發(fā)器的發(fā)展,簡(jiǎn)單介紹幾款收發(fā)器的特點(diǎn)。很多年
    發(fā)表于 09-03 06:04

    過壓故障保護(hù)CAN收發(fā)器LT1796相關(guān)資料下載

    過壓故障保護(hù)CAN收發(fā)器LT1796資料下載內(nèi)容主要介紹了:LT1796引腳功能LT1796內(nèi)部方框圖LT1796典型應(yīng)用電路
    發(fā)表于 03-31 06:27

    CAN收發(fā)器驅(qū)動(dòng)程序模塊的功能描述

    微控制器識(shí)別的邏輯(數(shù)字)信號(hào)電平。此外,收發(fā)器還能夠檢測(cè)電氣故障,例如布線問題,接地偏移或長(zhǎng)主導(dǎo)信號(hào)的傳輸。根據(jù)與微控制的接口,它們會(huì)標(biāo)記檢測(cè)
    發(fā)表于 01-10 06:55

    RS-485收發(fā)器CAN收發(fā)器有什么區(qū)別

    協(xié)議。兩人利用靜電放電(ESD)和電壓故障干擾MAX13054A CAN收發(fā)器背板,演示IC可靠的操作性能。
    的頭像 發(fā)表于 10-11 10:26 ?8906次閱讀

    深入探析CAN收發(fā)器各項(xiàng)參數(shù)

    CAN收發(fā)器是連接CAN控制系統(tǒng)與CAN總線網(wǎng)絡(luò)的橋梁,當(dāng)選型CAN收發(fā)器時(shí)應(yīng)該注意哪些參數(shù)?本
    的頭像 發(fā)表于 12-15 09:34 ?1.6w次閱讀
    深入探析<b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>各項(xiàng)參數(shù)

    ±60V故障保護(hù)3.3V/5V CAN收發(fā)器

    ±60V故障保護(hù)3.3V/5V CAN收發(fā)器
    發(fā)表于 05-16 11:30 ?3次下載
    ±60V<b class='flag-5'>故障</b>保護(hù)3.3V/5V <b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>

    LT1796:過壓故障保護(hù)CAN收發(fā)器數(shù)據(jù)表

    LT1796:過壓故障保護(hù)CAN收發(fā)器數(shù)據(jù)表
    發(fā)表于 05-20 15:19 ?0次下載
    LT1796:過壓<b class='flag-5'>故障</b>保護(hù)<b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>數(shù)據(jù)表

    光纖收發(fā)器的常見故障檢測(cè)方法

    光纖收發(fā)器在工業(yè)傳輸系統(tǒng)組網(wǎng)起到重要作用,隨著工業(yè)通信領(lǐng)域的高速發(fā)展,對(duì)光纖收發(fā)器的供求也增多。下面,我們來和大家說說光纖收發(fā)器的常見故障檢測(cè)
    發(fā)表于 04-29 15:09 ?9160次閱讀

    CAN 收發(fā)器的時(shí)序考慮

    CAN 收發(fā)器的時(shí)序考慮
    發(fā)表于 11-15 19:45 ?6次下載
    雙 <b class='flag-5'>CAN</b> <b class='flag-5'>收發(fā)器</b>的時(shí)序考慮

    光纖收發(fā)器故障檢測(cè)方法

    光纖收發(fā)器在工業(yè)傳輸系統(tǒng)組網(wǎng)起到重要作用,隨著工業(yè)通信領(lǐng)域的高速發(fā)展,對(duì)光纖收發(fā)器的供求也增多。下面,我們來和大家說說光纖收發(fā)器的常見故障檢測(cè)
    的頭像 發(fā)表于 04-07 10:18 ?2664次閱讀

    光纖收發(fā)器故障檢測(cè)方法-科蘭

    光纖收發(fā)器在工業(yè)傳輸系統(tǒng)組網(wǎng)起到重要作用,隨著工業(yè)通信領(lǐng)域的高速發(fā)展,對(duì)光纖收發(fā)器的供求也增多。下面,我們來和大家說說光纖收發(fā)器的常見故障檢測(cè)
    的頭像 發(fā)表于 04-17 10:07 ?2107次閱讀

    NXP CAN收發(fā)器的特點(diǎn)及應(yīng)用

    面對(duì)各種不同種類的CAN通信收發(fā)器,你是否知道該如何選型?NXP推出了多種類型的CAN收發(fā)器,它們除了能滿足基本的CAN通信需求外,每種系列
    的頭像 發(fā)表于 09-05 14:05 ?4552次閱讀
    NXP <b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>的特點(diǎn)及應(yīng)用

    TCAN1042具有CAN FD和故障保護(hù)功能的CAN收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TCAN1042具有CAN FD和故障保護(hù)功能的CAN收發(fā)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-19 12:30 ?1次下載
    TCAN1042具有<b class='flag-5'>CAN</b> FD和<b class='flag-5'>故障</b>保護(hù)功能的<b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>數(shù)據(jù)表

    TCAN1051具有CAN FD和故障保護(hù)功能的CAN收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TCAN1051具有CAN FD和故障保護(hù)功能的CAN收發(fā)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-01 10:25 ?1次下載
    TCAN1051具有<b class='flag-5'>CAN</b> FD和<b class='flag-5'>故障</b>保護(hù)功能的<b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>數(shù)據(jù)表

    TCAN1044V故障保護(hù)CAN FD收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TCAN1044V故障保護(hù)CAN FD收發(fā)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-04 10:47 ?0次下載
    TCAN1044V<b class='flag-5'>故障</b>保護(hù)<b class='flag-5'>CAN</b> FD<b class='flag-5'>收發(fā)器</b>數(shù)據(jù)表