新聞中心

        EEPW首頁 > 設計應用 > LPC11Cx系列CAN總線位定時參數計算方法校正

        LPC11Cx系列CAN總線位定時參數計算方法校正

        作者: 時間:2016-10-10 來源:網絡 收藏

        引言
        LPC11Cx系列是NXP公司的高性價比Cortex—M0構架產品,內嵌CAN總線控制器。CAN總線位定時參數決定CAN總線能否按給定速率正常及其穩定性,但在實踐中發現,原版用戶手冊及國內譯本在CAN總線位定時參數配置寄存器的表述上有誤,導致用戶CAN總線無法正常。下面將校正錯誤,并給出CAN總線位定時參數具體計算實例。

        1 位定時時序及參數
        依據CAN總線規范,LPC11Cx系列的位時間被分成4個段:同步段、時間傳播段、相位緩沖區段1和相位緩沖區段2,位時序如圖1所示。

        本文引用地址:http://www.104case.com/article/201610/306490.htm

        a.JPG


        圖1中,每一個段包含有一個指定的、可編程的時間量子數,如表1所列。

        b.JPG


        表1中,時間量子tq是位時間長度的基本時間單元,tq與CAN總線控制器的系統時鐘fsys可確定參數BRP,即tq=BRP/fsys。同步段SYNC_SEG是位時間的第一部分,CAN總線的邊沿電平會在這里發生。傳播時間段PROP_SEG用于對CAN總線網絡內的物理延遲時間進行補償。
        相位緩沖區段TSEG1和TSEG2包圍著采樣點。(重新)同步跳轉寬度SJW實現對邊沿相位誤差作出補償。

        2 位定時寄存器描述校正
        LPC11Cx系列CAN總線的位時間參數通過其內部的32位控制寄存器CANBT來定義及編程。CANBT寄存器的詳細描述如表2所列。

        c.JPG


        請注意,表2中上標注*表示硬件把寫入這些位的值理解為位值+1。NXP公司原版用戶手冊及國內譯本還同時標注了SJW、TSEG2,說明這兩項也需進行位值+1處理,但這么做得出的位定時參數無法使CAN總線正常

        3 位定時參數計算
        根據表1各定時位段定義,設目標系統晶振頻率為12 MHz,經過LPC11Cx內部PLL鎖相環電路倍頻后,系統時鐘頻率fsys為48 MHz。現要求CAN總線速率fc為500 kHz,則CAN總線時鐘周期tc=1/fc=1/500 kHz=2μs,位定時參數計算如下。
        首先,將系統時鐘頻率fsys進行6分頻,即fsys/(BRP+1)=fsys/6=48 MHz/6=8 MHz,由此確定參數BRP=0x000101,而時間量子tq=1/8 MHz=0.125μs,CAN總線時鐘周期tc包含的時間量子tq的個數為:tc/tq=2 μs/0.125 μs=16。
        然后,根據CAN總線傳輸介質及應用場合的電磁干擾狀況,適當確定CAN總線位定時寄存器CANBT的SJW、TSEG1、TSEG2的值,使這3項位值之和等于16。這里對3項位值取值為:SJW=0x11,TSEG1=0x0110,TSEG2=0x111,并滿足:SJW+(TSEG1+1)+TSEG2=16。
        最后,將上述位值組合,確定位定時參數值為0x76C5,這個值將被配置寫入到位定時寄存器CANBT中。在Cortex—M0的CMSIS軟件開發標準框架下,可很方便地調用LPC11Cx片上CAN API函數集來編程,如下語句即可實現寄存器CANBT的位定時參數配置:
        /*CAN總線波特率與時鐘初始化*/
        INT32U CanApiClkInitTable[2]={
        0x00000000UL,
        /*CAN時鐘分頻寄存器CANCLKDIV分頻值為1*/
        0x000076C5UL/*配置定時寄存器CANBTR值為0x76C5*/
        };

        結語
        實踐表明,在改變系統時鐘頻率、CAN總線通信速率及CANBT寄存器的各項位值的情況下,校正之后的位定時參數計算方法所獲得的參數值均能滿足CAN總線正常通信的要求,消除了用戶手冊誤導。如何提高CAN總線通信的可靠性,在位定時方面還需要根據CAN總線的具體工作狀況不斷進行實驗,并對CANBT寄存器的各項位值仔細調整而得到最佳值。



        關鍵詞: ARM 微控制器 通信

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 棋牌| 宁武县| 临夏市| 章丘市| 株洲县| 正定县| 邹城市| 朝阳市| 仲巴县| 青河县| 灌南县| 镇平县| 宣恩县| 色达县| 青铜峡市| 四会市| 平舆县| 威海市| 宁化县| 永兴县| 阳谷县| 乌兰察布市| 射阳县| 和田县| 合山市| 龙江县| 工布江达县| 贵港市| 衡南县| 诸暨市| 黄大仙区| 红原县| 高平市| 永寿县| 兴国县| 凌云县| 镇康县| 承德县| 铜陵市| 当阳市| 大方县|