CAN BAUD设置详解

来源:互联网 发布:淘宝开店装修流程 编辑:程序博客网 时间:2024/06/14 22:55
CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。
实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。
在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:
A. 位同步时间(Tsync)
B. 时间段1(Tseg1)
C. 时间段2(Tseg2)
其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是:
TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl
CAN的波特率 (CANbps)就是1/TBit。Tsync=1Tscl
但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。
这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:
1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw)
CAN有波特率的值四以下几个元素决定:
A. 最小时间段Tscl;
B. 时间段1 TSEG1;
C. 时间段2 TSEG2;
D. 同步跳转宽度 SJW   
SJW(重同步跳转宽度)决定了一次重同步期间一个位时间被延长或缩短的时间量子
Tscl是通过总线时序寄存器设置计算的。
Tscl=(BRP+1)/FVBP。FVBP为微处理器的外设时钟。
而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。
TSEG1与TSEG2的是分大体遵循以下规则: 
Tseg1≥Tseg2≥2TSJW; Tseg2≥2Tscl
总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为: 
BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1))
对于AT90CAN128的波特率:
BRP(0~63);SEG1(0~7); SEG2(0~7); SYNC(0~7);SJW(0~3)

Tbit(1) = Tsyns + Tprs + Tphs1 + Tphs2
1.Tsyns = 1 x Tscl = (BRP[5..0]+ 1)/clkIO (= 1TQ)
2.Tprs = (1 to 8) x Tscl = (PRS[2..0]+ 1) x Tscl
3.Tphs1 = (1 to 8) x Tscl = (PHS1[2..0]+ 1) x Tscl
4.Tphs2 = (1 to 8) x Tscl = (PHS2[2..0](2)+ 1) x Tscl
5.Tsjw = (1 to 4) x Tscl = (SJW[1..0]+ 1) x Tscl

Notes: 1. The total number of Tscl (Time Quanta) in a bit time must be between 8 to 25.
在一个BIT时间内Tscl的总数必须在8到25之间;
2. PHS2[2..0] 2 is programmable to be maximum of PHS1[2..0] and 1.
第二时间段是可控制在第一时间段的最大值和一个BIT时间之间。

AT90CAN128设置 
CAN时序寄存器1   CANBT1
BRP5:0   :波特率预定标器
          CAN控制器系统时钟Tscl周期可传播和确定单个位定时。
          Tscl=(BRP[5:0]+1)/clk frequency   这里是频率的形式,也可化为周期
CAN时序寄存器2   CANBT2
SJW1:0    :重复同步跳转宽度
    为了比较不同总线控制器时钟振荡器间的移相,控制器必须重复同步跳转宽度来定义时钟周期的最大数。一个位周期可由一个重复同步来缩短或者延长。
    Tsjw=Tscl  x (SJW[1:0]+1)
PRS2:0    :传播时间段
    这部分位时间用于补偿网络中的物理延时。它是总线上单个传播时间总和的两倍,输入比较器延时或者输出驱动器延时。
    Tprs=Tscl  x (PRS[2:0]+1)
CAN时序寄存器3   CANBT3
    位6:4——PHS22:0    :段2
    该段用于补偿段界限错误。该段可由重复同步跳转宽度来缩短。
    Tphs2=Tscl  x  (PHS2[2:0]+1)
    位3:1——PHS12:0    :段1
    该段用于补偿段界限错误。该段可由重复同步跳转宽度来延长。
    Tphs1=Tscl  x  (PHS1[2:0]+1)
    SMP:采样点
    0:一次,在采样点
    1:三次,总线的“三次采样”是采样点和“两次超过Tscl周期1/2的长度”。该结果为三个值的主要判定的响应。

晶振:4M  PRS=4,PHS1=PHS2=3,BRP=59,SJW=0
CANBT1=0X76;CANBT2=0X04;CANBT3=0X36

CANGCON|=(1〈〈SWRES〉;//设置为复位模式
CANBT1=0X7E; //设置波特率5k, 8MHz,25TQ, BRP=63
CANBT2=0X2E; //SJW=1,PRS=7
CANBT3=0X7F; //PH2=7,PH1=7
原创粉丝点击