CAN波特率设置时的参数计算

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CAN波特率设置时的参数计算

CAN(Controller Area Network)总线最早由德国 BOSCH公司提出,主要用于汽车内部测量与控制中心之间的数据通信。由于其良好的性能,在世界范围内广泛应用于其他领域当中,如工业自动化、汽车电子、楼宇建筑、电梯网络、电力通讯和安防消防等诸多领域,并取逐渐成为这些行业的主要通讯手段。 Can

控制器器只需要进行少量的设置就可以进行通信,其中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。

CAN波特率设置时需要计算几个参数,这些参数共同决定波特率大小,由于计算比较复杂,希望有一个简易步骤,本人经过研究,找到一个简易办法,现贴出来分享,不对的地方请留言指正。需要说明的是,本人使用的can控制器是AT89C51CC03单片机中的can

首先,确定一下各项参数的取值范围:

参数范围编程值说明

BRP [1..64] 0-63 定义时间量子(时间份额)的长度tq

Sync_Seg 1 tq 固定长度,总线输入与系统时钟同步

Prog_Seg [1..8]tq 0-7 补偿物理延时时间

Phase_Seg1 [1..8]tq 0-7 可通过同步暂时延长

Phase_Seg2 [1..8]tq 0-7 可通过同步暂时缩短

TSJW [1..4]tq 0-3 不能比任何一相位缓冲段长

以上是参数的取值范围,编程值是实际往寄存器里写的值,为实际取值减1。下面说一下步骤:

1、首先计算CAN时钟和波特率的比值;

2、根据比值确定预分频器的分频值BRP,计算时间量子的数目,这个数值范围是8-25;

3、将时间量子数减1(去掉Sync_Seg)后在Prog_Seg Phase_Seg1 Phase_Seg2三个参数中分配;

4、Prog_Seg和整个线路的时延有关,一般不太好确定,可以按下面的原则进行分配:

Prog_Seg<=Phase_Seg1<=Phase_Seg2 ;

Phase_Seg1=Phase_Seg2 或者 Phase_Seg1+1=Phase_Seg2;

5、SJW取Phase_Seg1和4中小的那个。

估计上面叙说不太好理解,下面举例说明:

假定晶振是12M,CAN时钟为6M(不同单面机,CAN时钟和晶振的关系不一样,BRP的取值范围不同单单片机也不一定相同,参看单片机说明)

1、500K波特率

FCAN/CAN baudrate = 6 MHz/500 kHz = 12,在8-25范围,所以BRP=1,TQ数目=12/1=12

Prog_Seg Phase_Seg1 Phase_Seg2分别等于3、4、4

寄存器编程值为(上述值减1):

BRP=0,SJW=3,PRS=2,PHS1=3,PHS2=3

2、100K波特率

FCAN/CAN baudrate = 6 MHz/100 kHz = 60,取BRP=6,TQ数目=60/6=10

Prog_Seg Phase_Seg1 Phase_Seg2分别等于2、3、4

寄存器编程值为(上述值减1):

BRP=5,SJW=2,PRS=1,PHS1=2,PHS2=2

3、10K波特率

FCAN/CAN baudrate = 6 MHz/100 kHz = 600,取BRP=60,TQ数目=600/60=10

Prog_Seg Phase_Seg1 Phase_Seg2分别等于2、3、4

寄存器编程值为(上述值减1):

BRP=59,SJW=2,PRS=1,PHS1=2,PHS2=2

4、5K波特率

FCAN/CAN baudrate = 6 MHz/5 kHz = 1200,取BRP=60,TQ数目=1200/60=20 Prog_Seg Phase_Seg1 Phase_Seg2分别等于6、6、7

寄存器编程值为(上述值减1):

BRP=59,SJW=3,PRS=5,PHS1=5,PHS2=6

相关文档
最新文档