当前位置:文档之家› CAN波特率设置及寄存器设置

CAN波特率设置及寄存器设置

CAN波特率设置及寄存器设置
CAN波特率设置及寄存器设置

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

相关主题
文本预览
相关文档 最新文档