文档库 最新最全的文档下载
当前位置:文档库 › 基于CAN总线的modbus通信设计

基于CAN总线的modbus通信设计

基于CAN总线的modbus通信设计
基于CAN总线的modbus通信设计

基于CAN总线的modbus通信设计

摘要:CAN总线是由德国BOSCH公司开发了的,其主要用于汽车计算机控制系统,而在工业控制领域较少适用,在工业领域用的最多的是RS485总线。CAN总线较RS485总线具有网络各节点之间的数据通信实时性强,开发周期短,已形成国际标准的现场总线等优点。因此CAN总线是比较有前途的现场总线之一,在工业控制领域代替RS485是有可能的。

为了能简单地应用CAN总线代替RS485总线,如果采用比如CANopen 等协议使得设备变得复杂化,那么有没有简单点的协议?很多做过工业设备的工程师都熟悉MODBUS协议,在RS485总线上跑的最多的协议就是MODBUS,如果我们在CAN总线上运行MODBUS协议,那么做过RS485的工程师就能很快地转移过来,减少了开发难度。所以本文就以CAN总线上跑MODBUS协议为目的对数据网络层协议进行设计。

概念:MODBUS 有主从概念,CAN总线支持多主,在这里我们把主机叫做客户端,从机叫做服务器。在CAN总线上采用客户端服务器的概念。

在进行协议介绍前先对CAN MODBUS进行简单的介绍。

MODBUS:阅读过MODBUS协议的人都知道modbus有ASCII和RTU 模式,其中RTU模式用的较多,一个数据包在网络上传输我们必须知道包的开始和结束,在RTU模式中数据包是以至少3.5 个字符的静默时间开始和结束的,如果信息结束前存在超过 1.5 个字符以上的间隔时间则出错。为了检测这些时间间隔,在程序上将变得很被动。ASCII虽然有专用的开始结束标志符,但是ASCII需要把一个字节数据传换为两个字符发送所以其效率低。所以还是得采用RTU模式,但得根据CAN总线的特点解决数据包开始结束标志的定义。

CAN总线:CAN总线的数据传输是以帧为单位的,一个帧包含标识符、数据段CRC等,标识符表示该帧的发送优先级,数据段包含实际的数据,数据长度从1到8字节,CRC对该帧进行校验,因为帧中包含了数据校验功能,所以在CAN上跑modbus就不需要再对数据进行CRC校验。在这里我们看到CAN总线是有优先级这个概念,但是没有出现像modbus这样有地址的概念,CAN总线上标识符段表示的是该帧的优先级,它面向的是数据,而modbus面向的是设备,每个数据包中都有地址,如果我们把地址放在CAN帧的数据段中那么所有设备都必须接收每一帧,然后对数据进行解析,如果网络负载比较大的是时候,这对设备不利。CAN控制器一般都能对特定的标识符段进行过滤,那么我们为什么不能把标识符段作为设备的地址,然后设备对特定的标识符进行过滤,这样就减少了设备的负担。但是如果标识符段作为目的地址,那么CAN总线上就不能有两个主机,应为CAN总线规定不能有两个相同标识符的帧同时发送。既然标识符符不能作为目的地址,那么就实现不了设备对数据的过滤。我的解决办法是把帧的标识符段分为两部分,一部分为发送方地址,另一部分为接收方地址,其中接收方地址在标识符的高端。这样我们就能通过表标识符段知道这帧数据是谁发给谁的,对于接收方它通过设置过滤器只接收表识符高端数据为自己地址的帧,这样就解决了CAN总线中地址的概念。这个地址还表示的

设备的优先级,地址越小优先级就越高,接收方地址和发送方地址就决定这帧的发送优先级。标识符段分为标准帧和扩展帧,标准帧的标识符为11bit,扩展帧的标识符为29bit,按照接收方地址加发送方地址的分配方法标准帧的地址范围为0~31,共计32个地址,如果用扩展帧的来分配地址范围为0~16383,共计16384个地址。

因为一帧最多能发送8字节数据,因此要发送超过8字节的数据就必须使用多帧,为了能适应多任务环境,我们在把帧的数据段的前两自己数据用作特殊用途:第一字节表示帧数据的ID,其bit7为1:表示服务器返回的数据帧,为0:表示客户端请求的数据帧;第二字节表示着一帧在这个数据包中的相对为位置,其bit7为1:表示这是最后一帧,因此我们可以根据这一帧就能计算出此次要传输的数据字节数,有这两字节的数据我们就能把一个数据包分成多个帧发送出去,然后在接收方根据这两字节的信息把数据包从新组装。由第二字节信息我们可以计算出一次能传输的数据包的大小为128*6=768字节。你也许会问,那个ID数据有什么用,为了支持多任务处理,一个客服端可能有多个任务同时把数据发送到同一个服务器,这个ID 就是区分不同任务的,客户端发送到的时候分配一个空闲的ID然后以此ID把数据发送出去。服务器接受到同一个客服端发来的不同ID的数据包,那么服务器就根据ID的不同分别处理;回复客户端时把ID的最高位置1,然后发送回去,客服端收到发回复后根据ID把数据分发给对应的任务。一个设备可以是客户端也可以是服务器,还可以包含两者,那么CAN接收服务程序就必须明确接收到的数据是自己收到的回复还是别人的请求,因此ID的最高位就是区分数据方向的。在这里规定ID为0表示无效ID,故ID的取值范围为1到127。因此能同时区分同一个设备的127个不同数据包。

在回头想想采用了这个结构后也就解决了MODBUS数据包的开始和结束的问题。那么MODBUS就可也在CAN总线上运行了。

在CAN总线上已经包含了地址和CRC数据,因此MODBUS上就不在需要地址段和CRC段。另外一个帧中包含6个数据,因此大多数MODBUS 数据包都能够通过一帧发送出去。

基于LPC2292的CAN通信程序设计

CAN驱动层:CAN驱动层主要做的工作是初始化设备,收发数据,下面是集CAN功能函数的结构体

typedef struct

{

uint8_t (*Init)(uint8_t port, uint16_t addr);

void (*Open)( uint8_t port);

void (*Close)( uint8_t port);

uint8_t (*Wirte)(uint8_t port, Message *m);

void (*SetBPS)(uint8_t port, uint32_t baud);

}can_device;

uint8_t (*Init)(uint8_t port, uint16_t addr);初始化设备,port:端口号,指示初始化哪个CAN,addr:设备在通信中的地址,地址的长度要根据标准帧或者扩展帧定义。返回1:成功0:失败

void (*Open)( uint8_t port);打开设备

void (*Close)( uint8_t port);关闭设备

uint8_t (*Wirte)(uint8_t port, Message *m);向设备写数据

void (*SetBPS)(uint8_t port, uint32_t baud);设置通信速率

消息结构体如下

typedef struct

{

uint32_t cob_id; /**< message's ID */

uint8_t rtr; /**< remote transmission request. (0 if not rtr message,

1 if rtr message) */

uint8_t len; /**< message's length (0 to 8) */

uint8_t data[8]; /**< message's datas */

} Message;

另外CAN接收中断服务程序序调用void CAN_msg_dispatch(can_uint8 port, Message *m),该函数对每一帧数据进行解析

其工作流程如下:

说明:在试验中用的操作系统为ucosII 2.86 , 把接收完成的数据包发送给接收服务任务是通过消息邮箱把数据包发送给接收服务任务的。

下面是数据包的结构体:

typedef struct

{

uint8_t port;

uint16_t addr;

uint8_t id;

uint16_t size;

uint16_t total_size;

uint8_t message[CAN_MAX_LEN];

uint8_t ttl;

void *next;

}can_pkg;

Port:设备端口

Addr:数据来源地址

Id:包ID

Size:包的当前大小

total_size:包的总大小

message:消息缓冲区

ttl:该包的生命周期

next:指向下一个包

total_size:是通过接收到最后一帧数据计算出来的,当size= total_size时表示接收完成

message是一个数组,这里为了设计简单采用了数组,这个用户可以灵活设计成动态分配

ttl:当接收一个包时,如果传输过程中丢失一个帧那么这个包就永远不能接收完成,因此设置了TTL没个周期扫描一次,TTL减一,当TTL等于0时,不管接收是否完成,都将把包移除接收链表。

Next:指向下一个包的指针,用作单向链表。

包在工作过程中分为三种状态

使用状态:包正在接收数据

游离装态:数据接收完成,等待处理

空闲状态:包处于空闲状态

发送过程:发送过程建议采用对列中断发送,发送中断产生后通过查看队列中是否还有要发送的数据来循环发送,上层应用只需向队列写数据。

数据包ID采用递增循环方式发送,没发送一个新的数据包时,将在上次分配的ID上加1然后产看该ID是否实用,如果没有使用,将采用该ID,否者ID继续加1,直到找到空闲的ID,如果所有ID都在使用那么ID将返回0表示没有可用ID分配。

static void * id_queue[CAN_MAX_ID];

ID分配队列是一个void*的数据,它指向的数据类型是用户定义的,它的作用是当接收服务任务接收到回应的数据时,通过该数据把接收的信息发送给使用该ID的任务。

来自红叶

RedLeaf

基于STC89C51的CAN总线点对点通信模块设计

基于STC89C51的CAN总线点对点通信模块设计 [导读]随着人们对总线对总线各方面要求的不断提高,总线上的系统数量越来越多,继而出现电路的复杂性提高、可靠性下降、成本增加等问题。为解决上述问题,文中阐述了基于SJAl000的CAN总线通信模块的实现方法,该方法以PCA82C250作为通信模块的总线收发器,以SITA-l000作为网络控制器。并以STCSTC89C5l单片机来完成基于STC89C5l的CAN通信硬件设计。文章还就平台的初始化、模块的发送和接收进行了设计和分析。通过测试分析证明,该系统可以达到CAN的通信要求,整个系统具有较高的实用性。 0 引言 现场总线是应用在生产最底层的一种总线型拓扑网络,是可用做现场控制系统直接与所有受控设备节点串行相连的通信网络。在工业自动化方面,其控制的现场范围可以从一台家电设备到一个车间、一个工厂。一般情况下,受控设备和网络所处的环境可能很特殊,对信号的干扰往往也是多方面的。但要求控制则必须实时性很强,这就决定了现场总线有别于一般的网络特点。此外,由于现场总线的设备通常是标准化和功能模块化,因而还具有设计简单、易于重构等特点。 1 CAN总线概述 CAN (Controller Area Network)即控制器局域网络,最初是由德国Bosch公司为汽车检测和控制系统而设计的。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。其良好的性能及独特的设计,使CAN总线越来越受到人们的重视。由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。目前,CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。它的直线通信距离最大可以达到l Mbps/30m.其它的节点数目取决于总线驱动电路,目前可以达到110个。 2 CAN系统硬件设计 图1所示是基于CAN2.0B协议的CAN系统硬件框图,该系统包括电源模块、MCU部分、CAN控制器、光电耦合器、CAN收发器和RS232接口。硬件系统MCU采用STC89C5l,CAN控制器采用SJAl000,CAN收发器采用PCA82C250,光耦隔离采用6N137。

CAN总线通信接口及程序设计毕业设计

机电工程学院 毕业设计说明书设计题目: CAN总线通信接口及程序设计 2012 年 5 月21 日

目次

1 CAN总线介绍 1.1 CAN总线的发展背景 随着汽车产业的发展,需要一种更利于信息数据传输交换的通信协议。汽车中的各种电子控制系统需要较高的技术支持,而随着汽车的发展,汽车是否安全、是否便利、成本是否低、是否舒适都已成为人们首要考虑的事情。但是传统的汽车控制技术已不足以满足人们越来越高的要求,也已不适以汽车的发展方向。20世纪80年代,德国Bosch公司着手研究用于汽车产业的新的通信协议及控制方法,并首先提出了CAN总线控制系统。这一崭新的网络协议使得汽车产业得到了飞速的发展。 CAN总线最明显的特点是最大程度地减少了汽车控制系统中的线束的数量及长度,另外还大大提高了系统控制的可靠性和稳定性。在没有CAN总线协议之前,一辆汽车中用于各种控制通信的线束的总长度达3公里之长,严重影响了汽车的通信速度和通信精度。并且还使汽车的整体结构繁冗复杂,可靠性低,成本高,难以维护。因此CAN总线的出现无疑具有重大的意义和作用。作为一种新的网络通信协议,CAN总线不仅减少了汽车中线束的长度,还提高了汽车的整体性能,极大的促进了汽车产业的发展。 CAN总线刚被提出的时候,仅仅应用于汽车产业上,但CAN总线通信协议的性能和可靠性经过多年的检验,已被应用于越来越多的产业,比如航空、船舶、机床等产业设备方面。仅仅二十多年的发展,CAN总线便已成为自动化领域技术的潮流。 CAN总线是串行通信网络。传统运用的是基于R线构建分布式控制系统,这种传统的控制系统是基于通信节点的地址编码的,因此其结构复杂,直接导致系统的通信效率不高,并且控制的可靠性能低。CAN总线通过每个网络节点进行数据通信,每个节点可以互相收发数据,CAN总线协议对通信数据编码,不对节点地址编码,使各个节点可以同时接收到相同的数据,大大增强了数据通信的实时控制及传输性能。另一方面CAN总线使用起来非常方便。CAN总线的结构十分简单,仅有2根线(CANH和CANL)和外部设备相连,但CAN总线的内部却有非常复杂和智能的通信模块,可以方便快捷准确无误的进行数据

CAN总线在多机通信中的应用

CAN总线在多机通信中的应用 随着微处理器的发展,利用微处理器对工业生产过程进行控制已成为趋势。在工业控制过程中,由于大量数据信息的共享和传输,传统的串行通信模式已不能满足要求。在工业控制领域中,需要一种抗干扰性强、可靠性高、传输速度快和传输距离长的总线结构。CAN总线技术不仅满足上述要求,而且还能实现多点间的信息传递。本文使用PCI9810-cAN适配卡上的CAN总线组成局域网络,实现多微处理器间的信息传递和PC机对多处理器的检控、通信。 1 CAN总线简介 CAN(Controller Area Networks)总线,最早是由德国Bosch公司开发用于局域网控制的总线技术。CAN总线采用传统的双线串行通信方式,具有诊断能力,抗电磁干扰,其最陕传输速率可达1 Mb·s-1,最长通信距离可达10 km(此时的传输速率大约为40 kb·s-1)。在CAN总线组成的局域网络中,通信节点之间不采用主从方式,而是具有总线访问优先权,通信方式灵活,可实现点对点,一点对多点及广播方式传输数据。 2 系统通信模块的硬件设计 CAN总线是由PCI9810-CAN适配卡提供,本文主要完成通信节点的设计。通信节点不仅可以和PC机进行信息交换,还可独立与其他各节点通信。微处理器在需要和主机或其它节点通信时,其通过P0口向SJA1000T的寄存器发送信息,再由PCA82C250把信息传递到CAN总线上。主机和其他通信节点判断接收报文的标识符,将对接收到的信息作相应的处理,从而实现通信功能,。 在设计过程中,为了满足多微处理器间通信的实时性和可靠性要求,结合CAN控制器的特点,对图1作简单介绍: (1)收发器PCA82C250的引脚8(Rs)有3种工作方式:高速,斜率控制和待机。斜率控制方式具有抗射频干扰的功能,所以采用47 kΩ的电阻连接引脚8,实现斜率控制方式。 (2)图1中应为两个高速光电耦合隔离器件6N137,由于6N137输出引脚的驱动能力不够,需要连接一个约390 Ω的上拉电阻,以增加输出引脚的驱动能力。两个光电耦合隔离器件6N137的电源信号采用5 V的DC-DC隔离模块WRA0505P,以增强系统的抗干扰能力。 (3)收发器PCA82C250的CANH和CANL引脚各自由通过一个5 Ω的电阻与CAN总线相连,电阻起到一定的限流作用,保护PCA82C250免受CAN总线上的过流冲击。 (4)收发器PCA82C250的CANH和CANL引脚与电源地之间分别反接一个保护二极管和30 pF的电容,可以起到CAN总线的过压保护作用和过流冲击。 (5)CAN控制器SJA1000T输入方式有2种:Intel输入方式和Motorola输入方式。在此采用Intel输入方式,所以SJA1000T的MODE引脚接高电平。 (6)设计仅用到TX0和RX0引脚,根据SJA1000T 通信协议所要求的输入/输出逻辑电平关系,SJA1000T的TX1脚悬空,RX1引脚的电位必须维持在0.5 Vcc以上,所以在TX1引脚接上约6.8 kΩ和3.6 kΩ分压电阻。 (7)微处理器C51的引脚P2.7接CAN控制器SJA1000T的片选信号/CS,可知CAN控制器SJA1000T 的寄存器首地址为8000H。处理器C41和CAN控制器SJA1000T共用12 MHz的晶振,以提高通信速率。通过上述分析,设计的电路原理图,。 3 系统通信模块的软件设计通信模块的软件由3部分组成:初始化程序,发送程序和接受程序。仅这3部分程序,就能完成通信节点间信息的传递。要将CAN总线应用于更复杂的通信系统中,还要考虑CAN总线的错误处理,超载处理等功能和节点间的计算方法。由于每个通信节点都有自己的MCU,所以它们之间可以自由通信。通过CAN收发器PCA82C250的引脚CANH和CANL对总线输出,使总线表现“显性”,这时可发送信息。判断总线表现为“显性”时,就要为接受信息做好准备。3.1 CAN控制器SJA1000T初始化程序该程序首先进入复位状态,设置SJAl000T的模式寄存器MR为Basic CAN模式,验收码寄存器ACR和屏蔽码寄存器AMR,再设置定时器0和定时器1,输出控制寄存器OCR,

CAN总线设计

微机应用课程设计报告 ` 题目:基于单片机的16*16点阵系统设计 专业: … 班级: 姓名: 学号: 地点: 时间: 指导老师:

~

摘要 现场总线是自动化领域的计算机网络,是当今自动化领域技术发展的热点之一。它以总线为纽带,将现场设备连接起来成为一个能够相互交换信息的控制网络,是一种双向串行多节点数字通信的系统。CAN总线也是现场总线的一种,它最初被应用于汽车的控制系统中,由于其卓越的性能,CAN总线的应用范围已不再局限于汽车工业中,而被广泛的用到自动控制、楼宇自动化、医疗设备等各个领域。 本文主要介绍一种基于CAN总线的控制系统,通过对这一系统的制作流程来说明CAN总线的简单应用,文章主要是对本控制系统的三个硬件模块进行介绍及模块中相关芯片的应用,同时本文也对软件的编写进行了说明。 关键字:现场总线; CAN总线;单片机;控制系统

目录 1 绪论 (1) CAN总线的简单介绍 (1) CAN总线的优势 (1) 网络各节点之间的数据通信实时性强 (2) 缩短了开发周期 (2) 已形成国际标准的现场总线 (2) 最有前途的现场总线之一 (2) 2 硬件电路设计 (3) 单片机模块 (3) STC89C52主要特性如下: (4) STC89C52RC单片机的工作模式 (5) CAN总线控制器模块 (6) SJA1000简介 (6) PCA82C250简介 (9) 通信模块和外围接口 (11) 通信模块 (11) 外围接口 (12) 3 CAN总线控制系统软件设计 (13) 初始化程序 (13) 数据的接收和发送功能 (15) 发送数据 (15) 接收数据 (17) 4 总结 (19) 参考文献 (20) 附录一 (21)

CAN总线通信系统上位机通信软件设计

目次 1 绪论 (1) 1.1 研究背景 (1) 1.2 研究目的和意义 (1) 1.3 国内外发展现状 (2) 1.4 论文结构安排 (2) 2 CAN总线协议分析 (3) 2.1 CAN-bus 规范V2.0 版本 (3) 2.2 CAN控制器SJA1000 (6) 2.3 本章小结 (6) 3 开发环境介绍 (6) 3.1 开发环境 (6) 3.2 CANUSB—Ⅰ/Ⅱ智能CAN接口卡 (7) 3.3 本章小结 (8) 4 CAN通信软件设计 (8) 4.1 驱动程序安装 (8) 4.2 CAN接口卡函数库说明 (8) 4.3 界面设计 (11) 4.4 软件功能实现 (16) 4.5 本章小结 (22) 5 测试及发布 (23) 5.1 软件功能测试 (23) 5.2 程序发布 (24) 5.3 本章小结 (27) 结论 (28) 致谢 (29) 参考文献 (30)

1绪论 现场总线,就是应用于工业现场,采用总线方式连接多个设备,用于传输工业现场各种数据的一类通信系统[1]。CAN(Controller Area Network)总线是现场总线的一个分支,因其具有很高的可靠性和性能价格比,已经成为国际标准,在工业过程监控设备的互连方面得到广泛应用,受到工业界的广泛重视,并已被公认为几种最有前途的现场总线之一。 1.1 研究背景 随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。分散式工业控制系统就是为适应这种需要而发展起来的。这类系统是以微型机为核心,将5C技术——Computer(计算机技术)、Control(自动控制技术)、Communication(通信技术)、CRT(显示技术)和Change(转换技术)紧密结合的产物。它在适应范围、可扩展性、可维护性以及抗故障能力等方面,较之分散型仪表控制系统和集中型计算机控制系统都具有明显的优越性。典型的分散式控制系统有现场设备、接口与计算设备以及通信设备组成,现场总线(Field bus)就是在这种背景下产生的[2]。 1.2 研究目的和意义 从19世纪发明汽车以来,人们就一直在乘坐的舒适性、安全性和操控性方面不停地对其进行改革和创新,车上的电子设备也越来越多。这些电子设备大多是需要协同工作的,这就要求各部件之间能互相通信[1]。 为了解决汽车通信问题,CAN—bus应运而生,凭借可靠、实时、经济和灵活的特点,CAN总线很快在其他行业得到广泛应用,特别是在工业控制领域更是如鱼得水。现在CAN—bus总线已经成为全球范围内最重要的现场总线之一,甚至引领着现场总线的发展。 工业控制系统涉及众多软、硬件模块,给程序的设计和调试带来一定难度。尤其作为上、下位机间联系纽带的CAN总线通信部分,一旦在整个系统运行期间发生问题,若没有良好的人机界面和测试手段,将很难及时准确地找到并排除故障。同样,在控制系统的研制过程中,为了尽可能地减少故障和缩小故障范围,也应设计相应的测试

CAN总线的编码方式

对CAN总线的常见编码格式解析 我们在进行CAN总线的通讯设计过程中,对于通讯矩阵的建立,我们常常会选择一种编码方式,最常见的编码格式是Intel格式和Motorola格式。但是往往人们都是以一种习惯去选择,究竟两种格式具体的区别在哪里呢?我们需要明白两种格式对信号是如何排布的,又是按照什么顺序进行正确解析的。本篇文章就是作者根据在整理通讯矩阵和dbc文件中遇到的一些问题,提出的自己的一些体会和见解,希望大家通过此篇文章对两种格式有更加深刻的理解。 我们在设计初期,都会首先选择一种编码格式,这种选择大多都是根据设计者自己的习惯,具体Intel格式和Motorola格式哪个更有优势的问题,在这里没有区别。但是就使用者而言,需要对接收到数据帧进行正确的解析,否则就无法得到想要的信号。下面我们就来说一下两种格式的区别。 首先我们需要明确一点,无论是Intel格式还是Motorola格式,在每个字节中,数据传输顺序都是从高位(msb)传向低位(lsb)。如下图所示。 byte x bit(8*x+7) bit(8*x) msb lsb 注:x=0,1,2,3 (7) 图1 一般主机厂设计人员在设计初期都会定义好字节的发送顺序,定义Byte0为LSB,Byte7为MSB。第一种情况:先发送Byte0,然后Byte1到Byte7;第二种情况:先发送Byte7,然后Byte6到Byte0。根据我了解到的大部分主机厂都会采取第一种发送方法,很少会采取后者。我们在用CANoe中的CANdb++编辑数据库时,肯定会用到如下图所示的编辑界面。

图2 结合工作中的出现的问题,有的网络设计者会在排布信号的时候出现误区。上图中用的是比较常规的排布方式,即位在字节中的索引是从右至左,还有一种是颠倒过来的,即从左至右。如下图所示。 图3 我们现在以第一种矩阵模式进行说明。在这种情况下,如果主机厂在初期定义先发送LSB,再发送的MSB的形式,那么数据信号可以按照从上到下,从左到右的顺序发送,非常方便,接收器解析起来也比较容易。如果主机厂定义先发送MSB再发送LSB的形式,那样数据传输比较复杂,所以一般都不建议用这种方案。至于设计者常出现的错误我们在下文中会重点说明,下面我们先了解一下Intel 格式和Motorola格式在CANdb++中的区别。

CAN总线网络设计

1 引言 can(controller area network)即控制器局域网络,最初是由德国bosch公司为解决汽车监控系统中的自动化系统集成而设计的数字信号通信协议,属于总线式串行通信网络。由于can总线自身的特点,其应用领域由汽车行业扩展到过程控制、机械制造、机器人和楼宇自动化等领域,被公认为最有发展前景的现场总线之一。 can总线系统网络拓扑结构采用总线式结构,其结构简单、成本低,并且采用无源抽头连接,系统可靠性高。本设计在保证系统可靠工作和降低成本的条件下,具有通用性、实时性和可扩展性等持点。 2 系统总体方案设计 整个can网络由上位机(上位机也是网络节点)和各网络节点组成(见图1)。上位机采用工控机或通用计算机,它不仅可以使用普通pc机的丰富软件,而且采用了许多保护措施,保证了安全可靠的运行,工控机特别适合于工业控制环境恶劣条件下的使用。上位机通过can总线适配卡与各网络节点进行信息交换,负责对整个系统进行监控和给下位机发送各种操作控制命令和设定参数。 网络节点由传感器接口、下位机、can控制器和can收发器组成,通过can收发器与总线相连,接收上位机的设置和命令。传感器接口把采集到的现场信号经过网络节点处理后,由can收发器经由can总线与上位机进行数据交换,上位机对传感器检测到的现场信号做进一步分析、处理或存储,完成系统的在线检测,计算机分析与控制。本设计can总线传输介质采用双绞线。 图 1 can总线网络系统结构 3 can总线智能网络节点硬件设计 本文给出以arm7tdmi内核philips公司的lpc2119芯片作为核心构成的智能节点电路设计。该智能节点的电路原理图如图2所示。该智能节点的设计在保证系统可靠工作和降低成本的条件下,具有通用性、实时性和可扩展性等特点,下面分别对电路的各部分做进一步

课程设计--CAN总线

课程设计 题目 CAN通信 二级学院电子信息与自动化 专业自动化 班级 107070103 学生姓名学号 指导教师熊文 考核项目 设计50分平时 成绩 20分 答辩30分 设计质量 20分 创新设计 15分 报告质量 15分 熟练程度 20分 个人素质 10分 得分 总分考核等级教师签名

摘要: CAN总线是控制器局域网总线(contr01ler AreaNetwork)的简称。属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性及独立的设计而被广泛应用于工业现场控制系统中。SJAl000是一个独立的CAN控制器,PCA82C200的硬件和软件都兼容,具有一系列先进的性能,特别在系统优化、诊断和维护方面,因此,SJAl000将会替代PCA82C200。SJAl000支持直接连接到两个著名的微型控制器系列80C51和68xx。下面以单片机AT89C52和SJAl000为例,介绍CAN总线模块的硬件设计和CAN通信软件的基本设计方法。 关键词:AT89S52 CAN通信 SJA1000

目录: (一) 背景: (二) CAN介绍 (三) SJA1000内部结构和功能简介 (四) 硬件电路图 (五) 初始化程序 (六) 测试 (七) 总结

一背景: CAN(Controller Area Network)数据总线是一种极适于汽车环境的汽车局域网。CAN总线是德国Bosch公司为解决汽车监控系统中的 复杂技术难题而设计的数字信号通信协议,它属于总线式串行通信网 络。由于采用了许多新技术和独特的设计思想,与同类车载网络相比,CAN总线在数据传输方面具有可靠、实时和灵活的优点。 1991年9月Philips半导体公司制定并发布了CAN技术规范(版本 2.0),该技术规范包括A部分和B两部分,其中2.0A给出了CAN报文的标 准格式;2.0B给出了标准和扩展两种格式。此后,1993年11月ISO正 式颁布了道路交通运输工具一数据信息交换一高速通信控制器局域 网(CAN)的国际标准IS011898,为控制器局域网的标准化和规范化铺 平了道路。 二CAN介绍 CAN通信的特点: (1) CAN是到目前为止唯一具有国际标准且成本较低的现场总线; (2) CAN废除了传统总线的站地址编码,对通信数据块进行编码,为 多主方式工作,不分主从,通信方式灵活,通过报文标识符通信,可 使不同的节点同时接收到相同的数据,无需站地址等节点信息。 (3) CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信 息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可 不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其 是在网络负载很重的情况下也不会出现网络瘫痪情况(以太网则有可

CAN总线学习心得--重要

CAN总线学习心得--重要 SJ A1 0 0 0 的常用标准波特率设置,为什么基本上都是单次采样?即使是低速的时候也是这样的,既然T SEG1 的设置周期都很大,比如都大于1 0 了,为什么不让他采样三次呢?答:是不好理解,但那是Ci A 推荐的值。用5 1 系列芯片和两个SJ A1 0 0 0 接口还要外扩一个RAM,请问5 1 的AL E 能否同时与三个芯片的AL E 管脚相连( 地址不同) 有哪位高手做过双SJ A1 0 0 0 冗余的请指教!答:能同时连接。请问CAN 总线在想传输1 0 0 0 m 的情况下, 最快的速度能到多少呢?答: 5 0 k b p s = 1 3 0 0 m。如果一个网络中只有 2 个节点, 其中一个处于监听模式,另一个节点发送报文会使处于监听模式的节点进入中断吗?答:能进入接收中断,你自己的试验也可以证明。想组建一个简单的CAN 网络, 已经有两个节点, 我想问CAN 总线如何组建, 终端电阻安装在哪里?小弟还没有入门, 大虾们指点一下。答1 :直接将节点CANH 和CANL 连到总线上,终端电阻接在总线两端,大约1 2 0 欧。答2 :推荐北航出版《现场总线CAN 原理与应用技术》,研读一下。请问各位老师:我是一名c a n 总线的新手,我正在做c a n 总线的开发,控制器用s j a 1 0 0 0 t ( 我自己两个控制板互通) , 但我在发送数据后将出现总线关闭,我看到发送错误计数器在不断增加,直到0 x f f 最后恢复到0 x 7 f , 谢谢各位老师帮我解答这个问题。或者对我给与启发答1 ;首先调通单个节点。答2 :这是单节点发送没有成功( 或者由于网络中其他节点没有收到帧并在响应场响应) 建议参考网站CAN 应用方案。我想请教各位c a n 远程贞有何作用?如何应用?在什么情况下才需要用到远程贞?谢谢了!答:远程帧的用与不用完全取决你自己的协议,c a n 有远程帧的功能,是可用可不用的!用网站提供的计算波特率的工具算出的数,1 2 k 以上的都正确,无论是自接收还是两个节点通讯都没有任何问题。但是1 2 k 以下的数据一个都不能用,两个节点通讯没有成功的,自接收有1 0 k 的几个数据成功。我们的项目要求必须在1 0 k 以下,最好是5 k ,但是不成功,自己计算的数据也没有成功的。(我们至少试验了3 0 多个,所有情况都考虑了。)我现在怀疑s j a 1 0 0 0 的波特率根本达不到5 k 和相对应的传输1 0 k m。或者可以谁能提供个经过实践检验的正确的总线定时器0 和1 的设置呢?要求低于1 0 k 。答:PCA8 2 C2 5 0 / 2 5 1 可以保证5 KBPS 的速率;比如Z L GCAN 系列接口卡。答:t j a 1 0 5 0 在低速时好像有问题。我用1 0 5 0 进行5 k 的时候不行,用8 2 c 2 5 0 很好,你可以试一试。我本想双机调试,一边收,一边发,但跑程序后,发送方会不断进入复位模式,所以现在进行自测试模式,我先进入复位模式,设置进入PEL I CAN 模式,对寄存器初始化后,设置接收,发送中断使能,最后设置进入自接收,单滤波模式,这样初始化就结束了,我的ACR0 ~ ACR3 为0 x 5 5 , 0 x 5 5 , 0 x 5 5 0 x 5 0 , AMR0 ~ AMR3 为0 x f f , 之后,我就往BUF F ER 里填数,0 x 8 8 , 0 x 5 5 , 0 x 5 5 , 0 x 5 5 , 0 x 5 0 , 0 x 3 0 , 0 x 3 1 , .0 x 3 7 , 之后,启动自接收请求命令,但是程序只进入了中断一次,是发送空中断,接收中断没有产生,我读发送错误寄存器,发现有错误产生,我读接收计数寄存器,为0 ,说明我没有收到数,但我读接收BUF F ER 时,值为0 x 5 5 , 0 x 5 5 , 0 x 5 5 , 0 x f f , 0 x f f , 0 x f f , 0 x f f , 0 x f f , 0 , 0 , 0 , 0 , 0 , 以上测试时,我在CANH 和CANL 之间加入了两个1 2 0 欧的匹配电阻并联在一起的,请各位高手指点呀,谢谢了答:在总线上加个CAN 接口卡会方便许多,或者加个捕获功能的示波器也可以检测波形。仿真环境:k e i l u v 2 编译器:k e i l c 5 1 7 . 0 仿真器:t k s - 5 9 1 s c p u : p 8 7 c 5 9 1 程序大小:8 K 左右兄弟在一片CPU 中烧写了一个,运行一个CAN 总线,I I C 总线测试程序能够正常运行。这个基础上加上应用程序后在仿真机中运行正常,但是烧写到c p u 后插入c p u 程序不能运行,请问是什么原因?另外一个问题:在另外一个项目中条件相同,程序只有4 K, 程序正常跑着,CAN 接口可以检测到输出波形但是却不能正确传输数据,在一块旧板子上就可以,比较两者之后发现电路完全相同测量也正常,只是布局不同,请教原因。答:程序已运行了吧?可能是HEX 文件有错;编制程序时注意P8 7 C5 9 1 的ERAM 设置、6 CL K 设置。位流数据采样自发送节点的8 2 c 2 5 0 的T x 管脚。测试条件:p e l i c a n ,扩展,双滤波模式,对方I D:0 x 8 8 , 0 x 1 1 , 0 x 5 5 , 0 x 1 0 ,发送的对方I D 为:0 x 8 8 , 0 x 1 1 , 0 x 0 0 , 0 x 0 0 ,发送2 字节数据为:0 x 0 5 , 0 x 0 6 采集的位流数据如下:0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 请教位流数据的含义?答:自行计算时要区分位,还需要进行“位填充”的逆运行;简单的方法是将此信号连接

CAN单节点的自通信程序

/****************************************************************************** ******** 项目:基于CAN总线的自收发通信 说明:主程序部分 功能:外部按键每按下一次,计数值加一,同时计数值在数码管1、2上显示。 在计数值加一后,会使CAN总线上重新发送数据,此时接收端的计数值也同步更新显示 在数码管3、4上(为便于观察,接收显示的值比发送值大3)。 // CAN主要参数: PeliCAN模式,扩展帧EFF模式 // 29位标示码结构: // 发送数据结构:计数结果,0x02,0x03,0x04,0x05,0x06,0x07,0x08 // 接收数据结构: 待显示数据+其它7个字节的数据 // 本节点的接收代码寄存器值: 0x11,0x22,0x33,0x44 // 本节点的屏蔽代码寄存器值:0x00,0x00,0x00,0x00;可以接收本节点的数据 // 目的节点地址:0x11,0x22,0x33,0x44;可以被本节点接收 模块:can_self.c 作者:PIAE GROUP 注释修改者:特权 修改时间:08.6.17. ******************************************************************************* *******/ /***感谢PIAE工作组提供的源码,这里特权根据自己的编程习惯做了一些修改并添加详细注释***/ #include #include #include "define.h" /////////////////////////////////////////////// //函数:inter0_key (外部中断INT0) //说明:INT0按键为计数按键 // 每按下一次键,计数值加一 //入口:按键中断 //返回:按键加一 /////////////////////////////////////////////// void inter0_key(void) interrupt 0 { EA = 0; //关闭中断 Txd_data++; //计数结果增1,即待发送的数据增1 TXD_flag = 1; //发送数据标志位置位,即重新发送数据以更新数码管的显示数值 EA = 1; //重新开启中断 } ///////////////////////////////////////////////

几种总线的总结之CAN 总线

CAN总线 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118?8)。是国际上应用最广泛的现场总线之一。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境 基本概念 CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。 编辑本段CAN总线优势 CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之目前许多RS-485基于R线构建的分布式控制系统而言, 基于CAN总线的分布式控制系统在以下方面具有明显的优越性: 网络各节点之间的数据通信实时性强 首先,CAN控制器工作于多主方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差; 缩短了开发周期 CAN总线通过CAN收发器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。而且,CAN具有的完善的通信协议可由CAN

CAN总线设计(最终版)(1)

CAN-USB适配器设计 ***** 指导老师:*** 学院名称:***** 专业班级:**** 设计提交日期:**年**月 摘要 随着现场总线技术和计算机外设接口技术的发展,现场总线与计算机快速有效的连接又有了更多的方案。USB作为一种新型的接口技术,以其简单易用、速度快等特点而备受青睐。本文介绍了一种基于新型USB接口芯片CH372的CAN总线网络适配器系统的设计,提出了一种使用USB接口实现CAN总线网络与计算机连接

的方案。利用芯片CH372可在不了解任何USB协议或固件程序甚至驱动程序的情况下,轻松地将并口或串口产品升级到USB接口。该系统在工业现场较之以往的系统,可以更加灵活,高速,高效地完成大量数据交换,并可应用于多种控制系统之中,具有很大的应用价值。 关键词:USB;CH372;CAN;SJA100;适配器 目录 1.设计思想 (3) 2.CAN总线与USB的转换概述 (4) 3. 适配器硬件接口设计 (5) 3.1 USB接口电路 (5)

3.2 CAN总线接口电路 (7) 4.USB通用设备接口芯片CH372 (8) 4.1 概述 (8) 4.2 引脚功能说明 (9) 4.3 内部结构 (9) 4.4 命令 (10) 5.软件设计 (10) 5.1 概述 (10) 5.2主监控程序设计 (12) 5.3 CAN和USB接口芯片的初始化 (13) 5.4 CAN报文的发送 (15) 5.5 CAN报文的接收 (17) 5.6.自检过程 (19) 5.7 USB下传子程序设计 (20) 5.8 USB上传子程序设计 (22) 5.9.USB—CAN转换器计算机端软件设计 (23) 6. 抗干扰措施 (25) 7. 估算成本 (26) 8. 应用实例介绍 (27) 9 总结及设计心得 (28) 10 参考文献 (28) 1 设计思想 现场总线网络技术的实现需要与计算机相结合。目前,在微机上扩展CAN总线接口设备一般采用PCI总线或者RS-232总线。PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、扩展槽地址;中断资源有限;并且插拔不方便;价格较贵;而且设计复杂、需有高质量的驱动程序保证系统的稳定;且无法用于便携式计算机的扩

CAN总线应用

设计(论文)题目:基于CAN总线的楼宇温度检测系统 前言 基于单片机实现传统温度检测技术的特点,提出了基于CAN总线的楼宇温度检测系统方案。该系统方案的硬件平台主要包括温度检测模块和主控平台,并详细介绍了其硬件实现、软件设计思想及流程。实验表明:该系统可实现对楼宇温度的实时检测,并由数码管显示检测结果,对异常情况进行处理,从而实现对楼宇房间温度的有效检测。 在传统的检测技术中,温度检测基本采用单片机系统为主,且大多数都针对工业需要,日常生活中的应用并不多;而通信多基于落后的485总线,不能进行远距离的实时数据传输,更不能与因特网相连,可靠性也不高。因此,本文提出一种基于CAN总线的温度测控技术,该技术适合远距离控制与传输,具有非常高的可靠性。 控制器局域网(Controller Area Network,CAN)是国际上应用最广泛的现场总线之一。CAN总线最早出现在20世纪80年代末的汽车工业中,由德国BOSCH公司最先提出,其主要特性为低成本,且总线利用率高。CAN采用串行通信方式工作,所提供的最高数据传输速率为1Mbit/s,最大通信距离为10km。CAN还具有可靠的错误处理和检错机制,极强的错误检测能力,发送信息遭到破坏后可自动重发;可在高噪声的干扰环境中只用,能够检测出产生的任何错误,当数据的传输距离达到10km时,CAN仍能提供5kbit/s的数据传输速率。 正是基于CAN总线的上述优点,目前CAN总线在众多领域被广泛应用,其应用范围不再局限于原先的汽车行业,而向过程工业、机械工业、纺织工业、数控机床、医疗器械及传感器等领域发展,CAN总线已经形成国际标准,并已被公认为是几种最有前途的现场总线之一。 考虑到CAN总线的高可靠性和远距离传输优点,结合目前温度检测技术的技术瓶颈,即距离短和实时性差的特点,本系统CAN总线应用于传统的温度检测中,也是一种新的尝试。

CAN 总线通信原理分析

CAN总线通信原理分析 CAN(Controller Area Network)总线,即控制器局域网总线,在工业控制、医疗电子、家用电器及传感器领域都得到了广泛的应用。目前国内外文献中针对CAN总线协议分析的文章主要是针对CAN协议的帧结构以或位时序特性进行分析,如文献鲜有从通信的角度对CAN总线协议进行分析,鲜有从工程应用的角度出发,对CAN总线的通信机制进行深入分 析的文章。 1 CAN应用特性及结构构成 CAN总线协议具有两个国际标准,分别是ISO11898和ISO11519。其中,IS011898是通信速率为125 kbps~1Mbps的高速CAN通信标准,属于闭环总线,总线最大长度为40 m/1Mbps。ISO11519定义了通信速率为10~125kbps的低速CAN通信标准,属于开环总线,最大长度为1 km/40kbps。由于电气特性限制,即总线分布电容和分布电阻对总线波形的影响,CAN总线上最大节点数目为110个。对于应用工程师,只需正确配置收发端 的波特率和位参数即可实现收发节点的数据同步。通过CAN控制器硬件对报文的标示符滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据。同时,由于CAN报文采用短帧结构,并且每帧均包含CRC校验部分,保证了数据出错率极低。CAN总线在工 程应用中结构构成如图1所示。 系统实现中的CAN应用层、操作系统(在无操作系统的应用中以后台程序实现)及驱动程序共同实现了ISO参考模型中的应用层功能。其中,CAN应用层定义ID分组、发送数据装包、接收数据处理以及应用层总线安全监测;操作系统/后台程序用于在CAN中断到达后调度CAN驱动程序对数据进行处理;驱动程序包括初始化(控制器工作状态设置、波特率设置、验收滤波器配置)、收发驱动及异常处理程序。 对于传输介质层,需要根据环境干扰噪声、总线长度等来确定。在强干扰噪声的情况下必须采用屏蔽线;由于分布电容造成的总线波形失真及分布电阻造成的总线电平的衰减,总线长度需要考虑采用的传输介质的分布电阻和分布电容特性;同时,若采用高速总线还需通过实验确定总线的匹配电阻值。 对于CAN驱动层和应用层,驱动程序包括CAN初始化(包括硬件使能、波特率设置、控制器工作模式设置及验收滤波器ID表配置)、收/发驱动并向上层提供接口函数,其中需要说明的是验收滤波器的ID表配置需要根据应用层对系统ID的分组来进行;CAN应用层 根据总线上各节点之间的数据收发关系进行数据包的ID分组、发送数据装包、接收数据处

CAN总线系统设计中的几个问题

CAN总线系统设计中的几个问题 北京航空航天大学管理学院(100083) 邬宽明 摘 要:论述了CAN总线系统设计中系统时钟和位时间的选定、CAN中断服务程序编制以及较长报文拼接等问题。 关键词:CAN总线设计 系统时钟 位时间 中断服务 报文拼接 CAN总线是德国Bo sch公司在80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信总线,它是一种多主总线系统,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率可达1M bp s。CAN总线通信控制器中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括零位的插入 删除、数据块编码、循环冗余检验、优先级判别等项工作。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点是可使网络内的节点个数在理论上不受限制,数据块的标识码可由11位(按CAN技术规范210A)或29位(按CAN 技术规范210B)二进制数组成,因此可以定义211或229个不同的数据块。这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。数据段长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8个字节不会占用总线时间过长,从而保证了通信的实时性。CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。CAN的这些卓越特性,极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界重视,并已被公认为最有前途的现场总线之一。1993年11月ISO正式颁布了道路交通运载工具—数字信息交换—高速通信控制器局部网(CAN)国际标准(ISO11898)。为控制器局部网标准化、规范化推广铺平了道路。可以预料,控制器局部网在我国迅速发展和普及是指日可待的。 本文分别论述CAN总线系统设计中经常遇到的系统时钟和位时间如何选定、CAN中断服务程序如何安排以及较长报文如何拼接等几个问题。 1 系统时钟和位时间的选定 在CAN控制器中提供两个总线定时寄存器,其中总线定时寄存器0(BR T0)可决定波特率予分频(BR P)和同步跳转宽度(SJW)的数值,其低六位(D5~D0)用来确定系统时钟,而其高二位(D7,D6)用来确定同步跳转宽度(SJW)。总线定时寄存器1(BR T1)可决定位周期宽度、采样点位置和在每个采样点进行采样的次数,其D3~D0用于T SEG1,而D6~D4用于T SEG2并按下式计算: t TSEG1=t SCL(8T SEG1.3+4T SEG1.2+2T SEG1.1 +T SEG1.0+1) t TSEG2=t SCL(4T SEG2.2+2T SEG2.1+T SEG2.0+1) 图1 每位时间和采样点位置T SEG1和T SEG2可 确定每位的时钟周期数目 和采样点位置,如图1所 示 若P8XC592复位请求 位被置为高,这两个寄存器 均可被访问(读 写)。系统时 钟t SCL可使用下列等式计算: t SCL=2t CL K(32BR P.5+16BR P.4+8BR P.3+4BR P.2 +2BR P.1+BR P.0+1) 其中:t CL K为P8XC592振荡器的时钟周期 实例:设晶体振荡器频率为16M H Z,BTR0=00H, BTR1=14H,计算系统时钟和位时间 由给定BTR0和BR T1值可知: BR P.5,BR P.4,BR P.3,BR P.2,BR P.1和BR P10均为0,另外,除T SEG112和T SEG210为1外,其余系数均为01因此有, t SCL=2t CL K(32×0+16×0+8×0+4×0+2×0 +0+1)=2t CL K t TSEG1=t SCL(8×0+4×0+2×0+1)=5t SCL t TSEG2=t SCL(4×0+2×0+1×0+1)=2t SCL t b=(1+5+2)t SCL=2×8×t CL K=1M bp s 此时同步跳转宽度(SJW)为 t SJW=t SCL(2SJW.1+SJW.01+1)=t SCL即1 8(Λs)实例2:设晶体振荡器频率为16M H z,BTR0= 7FH,BTR1=7FH,计算系统时钟和位时间 由给定BR T0和BR T1值可知: BR P15,BR P14,BR P13,BR P12,BR P11,和BR P10,均为1,另外,T SEG11X和T SEG21X亦均为 81四通电脑应用美国德州工控机6257723062577231 《电子技术应用》1998年第9期

相关文档