新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > CAN總線波特率計(jì)算及設(shè)置方法(STM32,SJA1000,LPC2292)

CAN總線波特率計(jì)算及設(shè)置方法(STM32,SJA1000,LPC2292)

作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
SJA1000 內(nèi)部頻率基準(zhǔn)源F_BASE = Fclk/2,即外部晶振頻率Fclk的2分頻。注意任何應(yīng)用中,當(dāng)利用外部晶振作為基準(zhǔn)源的時(shí)候,都是先經(jīng)過2分頻整形的。

1.1 位周期的組成

本文引用地址:http://m.butianyuan.cn/article/201611/319141.htm

  波特率(fbit)是指單位時(shí)間內(nèi)所傳輸?shù)臄?shù)據(jù)位的數(shù)量,一般取單位時(shí)間為1s。波特率由通信線上傳輸?shù)囊粋€(gè)數(shù)據(jù)位周期的長度(Tbit)決定,如下式所示。

  Fbit=1/Tbit ?。?)

  根據(jù)Philips公司的獨(dú)立通信控制器,一個(gè)位周期由3個(gè)部分組成:同步段(tSYNC_SEG)、相位緩沖段1(tTSEG1)和相位緩沖段2(tTSEG2)。

  Tbit=tSYNC_SEG+tTSEG1+tTSEG2   (2)

  所有這些時(shí)間段,都有一個(gè)共同的時(shí)間單元——系統(tǒng)時(shí)鐘周期(TSCL)。具體到SJA1000,TSCL由總線時(shí)序寄存器的值來確定。 SJA1000有2個(gè)總線時(shí)序寄存器,即總線時(shí)序寄存器0(BTR0)和總線時(shí)序寄存器1(BTR1)。這2個(gè)寄存器有自己不同的功能定義,共同作用決定總線的通信波特率。

  總線時(shí)序寄存器0 定義波特率預(yù)設(shè)值BRP(共6位,取值區(qū)間[1,64]和同步跳轉(zhuǎn)寬度SJW(共2位,取值區(qū)間[1,4])的值。位功能說明如表1所列。

  表1

bit7bit6bit5bit4bit3bit2bit1bit0
SJW.1SJW.0BRP.5BRP.4BRP.3BRP.2BRP.1BRP.0

  CAN的系統(tǒng)時(shí)鐘周期TSCL,可以由BRP的數(shù)值為決定,計(jì)算公式如下:

  TSCL=2TCLK×BRP=2TCLK×(32BRP.5+16BRP.4+

  8BRP.3+4BRP.2+2BRP.1+1BRP.0+1) ?。?)

  其中TCLK為參考時(shí)間的周期。

  TCLK=1/fCLK ?。?)

  為了補(bǔ)償不同總線控制器的時(shí)鐘振蕩器之間的相位偏移,任何總線控制器必須在當(dāng)前傳送的相關(guān)信號(hào)邊沿重新同步。同步跳轉(zhuǎn)寬度定義了每一位周期可以被重新同步縮短或延長的時(shí)鐘周期的最大數(shù)目。

  tSJW=TSCL×(2×SJW.1+1×SJW.0+1) (5)

  總線時(shí)序寄存器1 定義每個(gè)位周期長度采樣點(diǎn)的位置和在每個(gè)采樣點(diǎn)的采樣數(shù)目。位功能說明如表2所列,其中SAM意義見表3。

  表2

bitbitbitbitbitbitbitbit
SAMTSEG2.2TSEG2.1TSEG2.0TSEG1.3TSEG1.2TSEG1.1TSEG1.0

  表3

功能
SAM0三倍:總線采樣三次:建議在中/低速總線(A和B級(jí))使用,有處于過濾總線上毛刺
1單倍:總線采樣一次;建議使用在高速總線上(SAEC級(jí))

  TSEG1(共4位,取值區(qū)間[1,16])和TSEG2(共3位,取值區(qū)間[1,8])決定了每一位時(shí)鐘數(shù)目和采樣點(diǎn)的位置。這里

  tSYNC_SEG=1×TSCL(此時(shí)間段固定) (6)

  tTSEG1=TSCL×(8×TSEG1.3+4×TSEG1.2+2×TSEG1.1+1×TESG1.0+1)  (7)

  tTSEG2=TSCL×(4×TSEG2.2+2×TSEG2.1+1×TESG2.0+1)  (8)

  位周期的標(biāo)量值(NBT)定義為,SYNC_SEG(同步段系統(tǒng)時(shí)鐘周期數(shù))、TSEG1(相位緩沖段1系統(tǒng)時(shí)鐘周期數(shù))、TSEG2(相位緩沖段2系統(tǒng)時(shí)鐘周期數(shù))之和。這決定了它的取值區(qū)間為[3,25],在1個(gè)取樣點(diǎn)時(shí),最小值一般取4;在3個(gè)取樣點(diǎn)時(shí),最小值一般取5。

  NBT=Tbit/TSCL=SYNC_SEG+TSEG1+TSEG2  (9)

  位周期的一般結(jié)構(gòu)如圖1所示。

  

  其實(shí)CAN的波特率計(jì)算特簡單,只是我們無意識(shí)地把簡單的問題復(fù)雜化了。
    
    假設(shè)我們先不考慮BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2個(gè)分頻系數(shù)寄存器;它們的乘積是一個(gè)擴(kuò)展的分頻系數(shù)。即:
    
     BTR0×BTR1=F_BASE/Fbps (1)
     其中:
     內(nèi)部頻率基準(zhǔn)源F_BASE = Fclk/2,即外部晶振頻率Fclk的2分頻。注意任何應(yīng)用中,當(dāng)利用外部晶振作為基準(zhǔn)源的時(shí)候,都是先經(jīng)過2分頻整形的。
    (1)式中,當(dāng)晶振為16M時(shí),F(xiàn)_BASE=8000K
     當(dāng)晶振為12M時(shí),F(xiàn)_BASE=6000K
     Fbps就是我們所希望得到的CAN總線頻率。單位為K。
     設(shè)(1)式中BTR0=m,BTR1=n,外部晶振16M,則有:
     m • n =8000/ Fbps (2)
     這樣,當(dāng)Fbps取我們希望的值時(shí),就會(huì)得到一個(gè)m * n的組合值。當(dāng)n選定,m值也唯一。
     n值CAN規(guī)范中規(guī)定8~25。(也就是BTR1的值)基本原則為:Fbps值越高時(shí),選取n(通過設(shè)置BTR1)值越大。其原因不難理解。
     我假定一般應(yīng)用中選取n=10,也就是:
     同步段+相位緩沖段1+相位緩沖段2 =1+5+4
     則(2)式簡化為
     m=800/Fbps
    
     m的最大設(shè)置值為64,SJA1000最大分頻系數(shù)m*n=64x25=1600。因此標(biāo)準(zhǔn)算法中通常以16M晶振為例。其實(shí)有了公式(1),任何晶振值(6M~24M)都很容易計(jì)算。
     SAM的確定:低頻時(shí),選SAM=1,即采樣3次。高頻100K以上時(shí),取SAM=0,即采樣1次。
     SJA重同步跳寬選取: 與數(shù)字鎖相環(huán)技術(shù)有關(guān)。n值選得大時(shí),SJA可以選得大,即一次可以修正多個(gè)脈沖份額Tscl。n值小或頻率低時(shí),選SJA=1。即BTR0.7和BTR0.6都設(shè)為0。
    
  問題: 1、SJA1000中,BTR1中相位緩沖段1為什么設(shè)計(jì)的比相位緩沖段2大8個(gè)Tscl ?按道理應(yīng)該一樣才對(duì)。
     2、下例BTR0和BTR1的設(shè)置有什么問題?
     BTR0=0x40, BTR1=0x1C。

參數(shù)說明: CAN_ByteRate 波特率(Kbit/s) BTR0BTR1 *
:* 0 50XBFH 0XFFH *
;* 1 100X67H 0X2FH *
;* 2 200X53H 0X2FH *
;* 3 400X87H 0XFFH *
;* 4 500X47H 0X2FH *
;* 5 800X83H 0XFFH *
;* 6 1000X43H 0X2FH *
;* 7 125 0X03H 0X1CH *
;* 8 200 0X81H 0XFAH *
;*9 250 0X01H 0X1CH *
;* 10 400 0X80H 0XFAH *
;* 11 500 0X00H 0X1CH *
;* 12 666 0X80H 0XB6H *
;* 13800 0X00H 0X16H *
;* 14 1000 0X00H 0X14H *



評(píng)論


技術(shù)專區(qū)

關(guān)閉