首页 理论教育现场总线及其应用技术程序设计成果

现场总线及其应用技术程序设计成果

【摘要】:表4-20 通信距离与通信波特率关系表(续)CAN接收子程序1)程序流程图。图4-35 CAN接收子程序流程图2)程序清单。图4-36 CAN发送子程序流程图2.PeliCAN程序设计初始化子程序程序清单如下:入口条件:波特率控制字存入NBTR0和NBTR1中。

1.BasicCAN程序设计

CAN应用节点的程序设计主要分为三部分:初始化子程序、发送子程序和接收子程序。

(1)CAN初始化程序

1)程序流程图。CAN初始化子程序流程图如图4-34所示。

2)程序清单。CAN初始化子程序清单如下:

978-7-111-55649-7-Chapter04-76.jpg

978-7-111-55649-7-Chapter04-77.jpg

978-7-111-55649-7-Chapter04-78.jpg

图4-34 CAN初始化子程序流程图

入口条件:将本节点号存入NODE单元

波特率控制字存入NBTR0和NBTR1单元。

出口:无。

978-7-111-55649-7-Chapter04-79.jpg

978-7-111-55649-7-Chapter04-80.jpg

3)通信波特率的计算。假设BTR0=43H,BTR1=2FH,计算通信波特率。通信波特率由BTR0和BTR1决定。

①BTR0各位功能如下:

978-7-111-55649-7-Chapter04-81.jpg

系统时钟tSCL的计算:

tSCL=2tCLK(32BRP.5+16BRP.4+8BRP.3+4BRP.2+2BRP.1+BRP.0+1)

BTR0=43H=01000011B

本例中,

978-7-111-55649-7-Chapter04-82.jpg

同步跳转宽度的计算:

为补偿不同总线控制器时钟振荡器之间的相移,任何总线控制器必须同步于当前进行发送的相关信号沿。

TSJWtSCL×(2SJW.1+SJW.0+1)=tSCL×(0+1+1)=2tSCL

②BTR1各位功能如下:

978-7-111-55649-7-Chapter04-83.jpg

根据BTR1计算tTSEG1tTSEG2

978-7-111-55649-7-Chapter04-84.jpg

③位周期:

978-7-111-55649-7-Chapter04-85.jpg

在CAN总线系统的实际应用中,经常会遇到要估算一个网络的最大总线长度和节点数的情况。下面分析当采用PCA82C250作为总线驱动器时,影响网络的最大总线长度和节点数的相关因素以及估算的方法。若采用其他驱动器,也可以参照该方法进行估算。

由CAN总线所构成的网络,其最大总线长度主要由以下三个方面的因素所决定:

1)互连总线节点间的回路延时(由CAN总线控制器和驱动器等引入)和总线线路延时。

2)由于各节点振荡器频率的相对误差而导致的位时钟周期的偏差。

3)由于总线电缆串联等效电阻和总线节点的输入电阻而导致的信号幅度的下降。

传输延迟时间对总线长度的影响主要是由于CAN总线的特点(非破坏性总线仲裁和帧内应答)所决定的。比如,在每帧报文的应答场(ACK场),要求接收报文正确的节点在应答间隙将发送节点的隐性电平拉为显性电平,作为对发送节点的应答。由于这些过程必须在一个位时间内完成,所以总线线路延时以及其他延时之和必须小于1/2个位时钟周期。非破坏性总线仲裁和帧内应答本来是CAN总线区别于其他现场总线最显著的优点之一,在这里却成了一个缺点。缺点主要表现在其限制了CAN总线速度进一步提高的可能性,当需要更高的速度时则无法满足要求。

CAN任意两个节点之间的传输距离与其通信波特率有关,当采用Philips公司的SJA1000 CAN通信控制器时,并假设晶振频率为16 MHz,通信距离与通信波特率关系见表4-20。

表4-20 通信距离与通信波特率关系表

978-7-111-55649-7-Chapter04-86.jpg

(续)

978-7-111-55649-7-Chapter04-87.jpg

(2)CAN接收子程序(www.chuimin.cn)

1)程序流程图。CAN接收子程序流程图如图4-35所示。

978-7-111-55649-7-Chapter04-88.jpg

图4-35 CAN接收子程序流程图

2)程序清单。CAN接收子程序清单如下:

入口条件:无。

出口:接收的描述符、数据长度及数据放在RXBF开始的缓冲区中。

978-7-111-55649-7-Chapter04-89.jpg

(3)CAN发送子程序

1)程序流程图。CAN发送子程序流程图如图4-36所示。

2)程序清单。CAN发送子程序清单如下:

入口条件:将要发送的描述符存入TXBF;

将要发送的数据长度存入TXBF+1;

将要发送的数据存入TXBF+2开始的单元。

出口:无。

978-7-111-55649-7-Chapter04-90.jpg

978-7-111-55649-7-Chapter04-91.jpg

图4-36 CAN发送子程序流程图

2.PeliCAN程序设计

(1)初始化子程序

程序清单如下:

978-7-111-55649-7-Chapter04-92.jpg

入口条件:波特率控制字存入NBTR0和NBTR1中。

验收代码寄存器内容在ACRBF开始的4个单元。

验收屏蔽寄存器内容在AMRBF开始的4个单元。

出口:无

978-7-111-55649-7-Chapter04-93.jpg

978-7-111-55649-7-Chapter04-94.jpg

(2)CAN接收子程序

接收子程序负责节点报文的接收以及其他情况处理。接收子程序比发送子程序要复杂一些,因为在处理接收报文的过程中,同时要对诸如总线关闭、错误报警、接收溢出等情况进行处理。SJA1000报文的接收主要有两种方式:中断接收方式和查询接收方式。如果对通信的实时性要求不是很强,建议采用查询接收方式。两种接收方式的编程思路基本相同,下面给出以查询方式接收报文的接收子程序清单。

入口条件:无。

出口:接收的报文放在RXBF开始的缓冲区中。

978-7-111-55649-7-Chapter04-95.jpg

978-7-111-55649-7-Chapter04-96.jpg

(3)CAN发送子程序

发送子程序负责节点报文的发送。发送时用户只需将待发送的数据按特定格式组合成一帧报文,送入SJA1000发送缓存区中,然后启动SJA1000发送即可。当然在往SJA1000发送缓存区送报文之前,必须先进行判断。发送程序分发送远程帧和数据帧两种,远程帧无数据场。

入口条件:将要发送的报文存入TXBF开始的单元。

出口:无。

1)发送数据帧子程序。

978-7-111-55649-7-Chapter04-97.jpg

978-7-111-55649-7-Chapter04-98.jpg

2)发送远程帧。

978-7-111-55649-7-Chapter04-99.jpg