文档库 最新最全的文档下载
当前位置:文档库 › CAN总线的双机通信.doc

CAN总线的双机通信.doc

CAN总线的双机通信.doc
CAN总线的双机通信.doc

实验3 CAN总线的双机通信

一、实验目的:

学习并完成CAN总线的双机通信

二、实验设备:

EL-8051-III型单片机实验箱

三、实验内容:

初始化CAN节点,使SJA1000处在准备工作状态。编写发送和接收程序,一台发送,一台接收,并验证实验程序。

四、实验步骤:

1.给试验箱换上CAN控制器;

2.编写并编译初始化和发送、接收程序;

3.下载程序并调试。

五、实验程序:

;本程序适用于带ALE发生器的新板,是两块板的收发程序

;将模块1上CS0用跳线帽短接,模块2上CS1用跳线帽短接.

;两块模块上的JUMP-4的两个跳线短接在Single侧

;用导线分别对应短接两模块上的CANL和CANH.

;(也可用带水晶头的专用CAN连接线的两头分别插在两模块的插座中而不用导线连接) ;有且只能有一块模块上的A短接到CANL,B短接到CANH.

;接通电源,运行本测试程序,在断点处查看内存单元20H~27H中的值是否与30H~37H 中的值完全对应相等

;如果相等表示模块正常,否则用自检程序分别检测收发模块

MODE EQU 0DE00H ;模式寄存器

CMR EQU 0DE01H ;命令寄存器

SR EQU 0DE02H ;状态寄存器

IR EQU 0DE03H ;中断寄存器

IER EQU 0DE04H ;中断使能寄存器

BTR0 EQU 0DE06H ;总线定时寄存器一

BTR1 EQU 0DE07H ;总线定时寄存器二

OCR EQU 0DE08H ;输出控制寄存器

ALC EQU 0DE0BH ;仲裁丢失捕捉寄存器

ECC EQU 0DE0CH ;错误代码捕捉寄存器

TXERR EQU 0DE0FH ;发送错误计数器

ACR0 EQU 0DE10H ;验收代码寄存器0

ACR1 EQU 0DE11H ; 1

ACR2 EQU 0DE12H ; 2

ACR3 EQU 0DE13H ; 3

AMR0 EQU 0DE14H ;验收屏蔽寄存器0

AMR1 EQU 0DE15H ; 1

AMR2 EQU 0DE16H ; 2

AMR3 EQU 0DE17H ; 3

CANTRXB EQU 0DE10H ;发送/接收帧信息

ID1 EQU 0DE11H ;发送/接收缓冲区之标示符一

ID2 EQU 0DE12H ;发送/接收缓冲区之标示符二

DATA1 EQU 0DE13H ;发送/接收数据首址

RBSA EQU 0DE1EH ;接收缓冲器起始地址寄存器

CDR EQU 0DE1FH ;时钟分频寄存器

ORG4000H

JMP CANINI

ORG4080H

;----------------------------------------------------------------

;初始化

CANINI:

MOV DPTR,#MODE ;方式寄存器

MOV A,#09H ;进入复位状态

MOVX @DPTR,A ;

MOV DPTR,#CDR ;时钟分频寄存器

MOV A,#88H ;选择PLICAN模式,关闭时钟输出

MOVX @DPTR,A ;

MOV DPTR,#IER ;中断允许寄存器

MOV A,#0DH ;开放发送中断,溢出中断和错误警告中断

MOVX @DPTR,A ;

MOV DPTR,#AMR0 ;接收屏蔽寄存器

MOV A,#00H ;

MOVX @DPTR,A ;

MOV DPTR,#AMR1 ;

MOV A,#00H ;

MOVX @DPTR,A ;

MOV DPTR,#AMR2 ;

MOV A,#00H ;

MOVX @DPTR,A ;

MOV DPTR,#AMR3 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#ACR0 ;验收代码寄存器

MOV A,#11H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR1 ;

MOV A,#22H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR2 ;

MOV A,#33H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR3 ;

MOV A,#43H ;

MOVX @DPTR,A ;

MOV DPTR,#BTR0 ;总线定时寄存器

MOV A,#03H ;

MOVX @DPTR,A ;

MOV DPTR,#BTR1 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#OCR ;输出控制寄存器

MOV A,#0AAH ;

MOVX @DPTR,A ;

MOV DPTR,#RBSA ;复位时候改成00h

MOV A,#00H ;

MOVX @DPTR,A ;

MOV DPTR,#TXERR ;发送错误计数寄存器

MOV A,#0 ;

MOVX @DPTR,A ;

MOV DPTR,#ECC ;错误代码捕捉寄存器????????????

MOVX A,@DPTR ;

MOV DPTR,#MODE ;

MOV A,#08H ;单向验收滤波器(32位长)起作用,成功发送时必须应答信号

MOVX @DPTR,A ;

NOP;

NOP;

;*************************************************

;发送

MOV DPTR,#TRDATA ;把所要发送的数据送入单片机RAM中的20H

MOV R2,#00H ;

MOV R1,#08H ;

MOV R0,#20H ;

DD: MOV A,R2 ;

MOVC A,@A+DPTR

MOV @R0,A ;

INC R2 ;

INC R0

DJNZ R1,DD ;

MOV R0,#00H ;

MOV R1,#00H ;

MOV R2,#00H ;

TDAT A:

MOV DPTR,#SR ;状态寄存器

MOVX A,@DPTR ;从SJA1000读入状态寄存器值

JB ACC.4,TDAT A ;判断是否在等待接收,正在接收则等待

TS0:

MOVX A,@DPTR ;判断上次发送是否完成,为完成则等待

JNB ACC.3,TS0

TS1:

MOVX A,@DPTR ;判断发送缓冲区是否锁定,锁定则等待

JNB ACC.2,TS1

TS2:

MOV DPTR,#CANTRXB ;发送缓冲区首地址

MOV A,#88H ;帧信息:扩展格式数据帧,数据长度8字节

MOVX @DPTR,A

INC DPTR

MOV A,#11H

MOVX @DPTR,A

INC DPTR

MOV A,#22H

MOVX @DPTR,A

INC DPTR

MOV A,#33H

MOVX @DPTR,A

INC DPTR

MOV A,#43H

MOVX @DPTR,A

MOV R0,#20H ;单片机内RAM发送数据首地址,发送的数据为TRDAT A中的数据MTBF: MOV A,@R0

INC DPTR

MOVX @DPTR,A

INC R0

CJNE R0,#48H,MTBF ;最后一个数据字节地址的下一个地址

MOV DPTR,#CMR

MOV A,#01H ;当前报文被发送

MOVX @DPTR,A

TRDAT A: DB 11H,22H,33H,44H,55H,66H,77H,88H

;**************************************************************

END

;本程序适用于带ALE发生器的新板,是两块板的收发程序

;将模块1上CS0用跳线帽短接,模块2上CS1用跳线帽短接.

;两块模块上的JUMP-4的两个跳线短接在Single侧

;用导线分别对应短接两模块上的CANL和CANH.

;(也可用带水晶头的专用CAN连接线的两头分别插在两模块的插座中而不用导线连接)

;有且只能有一块模块上的A短接到CANL,B短接到CANH.

;接通电源,运行本测试程序,在断点处查看内存单元20H~27H中的值是否与30H~37H中的值完全对应相等

;如果相等表示模块正常,否则用自检程序分别检测收发模块

MODE EQU 0DE00H ;模式寄存器

CMR EQU 0DE01H ;命令寄存器

SR EQU 0DE02H ;状态寄存器

IR EQU 0DE03H ;中断寄存器

IER EQU 0DE04H ;中断使能寄存器

BTR0 EQU 0DE06H ;总线定时寄存器一

BTR1 EQU 0DE07H ;总线定时寄存器二

OCR EQU 0DE08H ;输出控制寄存器

ALC EQU 0DE0BH ;仲裁丢失捕捉寄存器

ECC EQU 0DE0CH ;错误代码捕捉寄存器

TXERR EQU 0DE0FH ;发送错误计数器

ACR0 EQU 0DE10H ;验收代码寄存器0

ACR1 EQU 0DE11H ; 1

ACR2 EQU 0DE12H ; 2

ACR3 EQU 0DE13H ; 3

AMR0 EQU 0DE14H ;验收屏蔽寄存器0

AMR1 EQU 0DE15H ; 1

AMR2 EQU 0DE16H ; 2

AMR3 EQU 0DE17H ; 3

CANTRXB EQU 0DE10H ;发送/接收帧信息

ID1 EQU 0DE11H ;发送/接收缓冲区之标示符一

ID2 EQU 0DE12H ;发送/接收缓冲区之标示符二

DATA1 EQU 0DE13H ;发送/接收数据首址

RBSA EQU 0DE1EH ;接收缓冲器起始地址寄存器

CDR EQU 0DE1FH ;时钟分频寄存器

ORG4000H

JMP CANINI

ORG4080H

;----------------------------------------------------------------

;初始化

CANINI:

MOV DPTR,#MODE ;方式寄存器

MOV A,#09H ;

MOVX @DPTR,A ;

MOV DPTR,#CDR ;时钟分频寄存器

MOV A,#88H ;选择PLICAN模式,关闭时钟输出

MOVX @DPTR,A ;

MOV DPTR,#IER ;中断允许寄存器

MOV A,#0DH ;开放发送中断,溢出中断和错误警告中断

MOVX @DPTR,A ;

MOV DPTR,#AMR0 ;接收屏蔽寄存器

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#AMR1 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#AMR2 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#AMR3 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#ACR0 ;验收代码寄存器已被屏蔽

MOV A,#11H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR1 ;

MOV A,#22H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR2 ;

MOV A,#33H ;

MOVX @DPTR,A ;

MOV DPTR,#ACR3 ;

MOV A,#43H ;

MOVX @DPTR,A ;

MOV DPTR,#BTR0 ;总线定时寄存器

MOV A,#03H ;

MOVX @DPTR,A ;

MOV DPTR,#BTR1 ;

MOV A,#0FFH ;

MOVX @DPTR,A ;

MOV DPTR,#OCR ;输出控制寄存器

MOV A,#0AAH ;

MOVX @DPTR,A ;

MOV DPTR,#RBSA ;复位时候改成00h

MOV A,#00H ;

MOVX @DPTR,A ;

MOV DPTR,#TXERR ;发送错误计数寄存器

MOV A,#0 ;

MOVX @DPTR,A ;

MOV DPTR,#ECC ;错误代码捕捉寄存器????????????

MOVX A,@DPTR ;

MOV DPTR,#MODE ;

MOV A,#08H ;单向验收滤波器(32位长)起作用,成功发送时必须应答信号MOVX @DPTR,A ;

NOP;

NOP;

;**************************************************************

;接收程序

SEARCH:

MOV DPTR,#SR ;状态寄存器地址

MOVX A,@DPTR

ANL A,#0C3H ;读取总线关闭位、错误状态位、接收溢出位、有数据等状态位、

JNZ PROC

JMP SEARCH ;否则的话继续监测

PROC:

JNB ACC.7,PROCI ;总线不正常

BUSERR:

MOV DPTR,#IR ;中断寄存器;出现总线关闭

MOVX A,@DPTR ;读中断寄存器,清除中断位?????????

MOV DPTR,#MODE ;模式寄存器

MOV A,#08H ;进入复位模式

MOVX @DPTR,A ;将方式寄存器复位请求位清零

LCALL ALARM ;调用报警子程序??????????????

RET

NOP

PROCI: MOV DPTR,#IR ;总线正常

MOVX A,@DPTR ;读取中断寄存器,清除中断位

JNB ACC.3,OTHER

OVER:

MOV DPTR,#CMR ;数据溢出

MOV A,#0CH

MOVX @DPTR,A ;在命令寄存器中清除数据溢出和释放接收缓冲区RET

NOP

OTHER:

JB ACC.0,RECE ;IR0=1,接收缓冲区有数据

LJMP RECOUT ;否则,退出接收

NOP

RECE:

MOV DPTR,#CANTRXB ;接收缓冲区首地址

MOVX A,@DPTR ;读取数据帧信息

JNB ACC.6,RDAT A ;RTR=1时为远程请求帧

MOV DPTR,#CMR

MOV A,#04H ;CMR.2=1,释放接收缓冲区

MOVX @DPTR,A ;只有接收了数据才能释放接收缓冲区

LCALL TRDAT A ;发送对方请求的数据

LJMP RECOUT ;退出接收

NOP

RDAT A:

MOV DPTR,#CANTRXB ;读取并保存接收缓冲区的数据

MOV R1,#30H ;数据存储RAM,接收到的数据存储在此

MOVX A,@DPTR ;读取数据帧格式字

MOV @R1,A ;保存

ANL A,#0FH ;截取低四位是数据长度

ADD A,#4

MOV R6,A

RDAT A0: INC DPTR

INC R1

MOVX A,@DPTR

MOV @R1,A

DJNZ R6,RDAT A0 ;循环读取与保存

MOV DPTR,#CMR

MOV A,#04H ;释放接收缓冲区

MOVX @DPTR,A

RECOUT:

MOV DPTR,#ALC ;释放仲裁丢失捕捉寄存器和错误捕捉寄存器

MOVX A,@DPTR

MOV DPTR,#ECC

MOVX A,@DPTR

RET

ALARM:

MOV P1,00H ;点灯

RET

;********************************************************************* END

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总线通信系统上位机通信软件设计

目次 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++中的区别。

基于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总线学习心得--重要 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总线应用

设计(论文)题目:基于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总线通信程序 // CAN <==> UART的协议转换器 // 说明: // 1,单片机使用P89C61X2BA // --晶振11.0592MH Z // --CAN总线中断使用单片机的中断0,外部有上拉电阻,波特率可以设定 // 2,CAN总线发送采用查询方式,接收采用中断方式 // 3,看门狗复位时间1.2S // 4,SJA1000晶振8MHZ,Peil模式 // 5,串口中断接收,查询发送,波特率可设置 // 6,×××当串口收到数据后,每8个数一组打包,通过CAN总线发送出去 // // -----10.16日,重新修改程序完成以下功能----- // ----此功能已经改为,每收到一帧数据,启动一次CAN传输,传输字节数等于串口收到的数据 // ----串行帧的帧间界定通过当前波特率下传输5个字节为时间间隔,具体为当顺序接收到的任意两个数据,它们之间的时间间隔大于5个字节传送时间,认为这两个数据分属于两个不同的帧 // 7,当CAN总线每接收一帧信息后,通过串口发送出去 // 改为可以识别CAN的报文字节长度,即串口只发送CAN报文长度个字节 // 8,看门狗芯片MAX1232CPA,硬件溢出时间1.2S // //------------------------------------------------------- #include #include #include #include "CANCOM.h" unsigned char UART_TX_Data[8] = {0,1,2,3,4,5,6,7}; unsigned char CAN_TX_Data[8] = {0,1,2,3,4,5,6,7};

CAN总线学习笔记二:CAN自收发程序解读

CAN总线学习笔记二:CAN自收发程序解读 花了一整个下午的时间,彻头彻尾的把 PIAE小组提供的CAN自收发源程序解读了一遍。解读别人的程序是一件挺费时费力的一件事,但是在 对某项技术或者说某个芯片的入门阶段参考别人的程序又是一项必不可少的任务。 对于这个程序,头一个任务当然是把头文件先浏览一遍,能弄明白 的还是先弄明白,对后面程序的解读有好处。C文件里给出了三个头文 件: #include #include #include 第一个reg52.h我就不废话了,下一个intrins.h我在上一篇日志里也详细的作了说明,这里也不提了。can_selfdef.h是程序员自己定义的一个头文件,在这个头文件里除了一些宏定义和管脚的一些 说明外,最重要的就是要弄明白“CAN总线SJA1000寄存器地址定义”。这个我开始也没弄明白,后来反复琢磨,才发现作者在这个 程序里吧SJA1000的寄存器作为单片机的外 部扩展RAM寻址了,从而省去了编写一些底层的驱动程序,这就让大家连SJA1000的datasheet的时序图都不用看了 (不过下一步我想用驱动程序来控制SJA1000)。 看完头文件,可不能从第一个程序依次往下看。应该直接找到主程 序main()解读: void main(void) {

//MCU初始化(主要是各中断寄存器的初始化) SJA_RST = 1; //CAN总线复位管脚复位无效 SJA_CS = 0; //CAN总线片选有效 EX1 = 1; //开MCU外部中断INT1 IT1 = 0;//MCU外部中断INT1为电平触发,也是CAN总线接收中断口 IT0 = 1;//MCU外部中断INT0为下降沿触发 EX0 = 1; //开MCU外部中断INT0 EA = 1; //开MCU总中断 SJA_CS = 1; //CAN总线片选无效,使得对数据总线的操作不会影响SJA1000。 //SJA1000初始化 CAN_init(); //对SJA1000寄存器的读写是采用外部寄存器寻址方式, //所以不需要程序单独控制 片选有效无效 _nop_(); _nop_(); //主循环

CAN总线传输用什么线缆

C A N总线传输用什么线 缆 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

1、周立功关于CAN传输距离 2、CAN芯片选型 CAN总线传输用什么线缆 用特性阻抗为120Ω的总线电缆! 200米以内的距离,建议采用电缆型号规格——STP-120Ω(forRS485&CAN)onepair20AWG. ---------------------------------------------------------------------- 通用型现场总线系列电缆 特性阻抗为120Ω的双绞屏蔽电缆广泛用于RS485/422、CANBUS等总线,该系列电缆规格很多,请提供电缆的敷设环境、通信速率、最大无中继传输距离等参数,我们将依照具体情况推荐最适当的产品。一般推荐如下: 普通双绞屏蔽型电缆STP-120Ω(forRS485&CAN)onepair20AWG,电缆外径7.7mm左右,蓝色护套。适用于室内、管道及一般工业环境。使用时,屏蔽层一端接地! 普通双绞屏蔽型电缆STP-120Ω(forRS485&CAN)onepair18AWG,电缆外径8.2mm左右,灰色护套。适用于室内、管道及一般工业环境。使用时,屏蔽层一端接地! 铠装双绞屏蔽型电缆ASTP-120Ω(forRS485&CAN)onepair18AWG,电缆外径12.3mm左右,黑色护套。可用于干扰严重、鼠害频繁以及有防雷、防爆要求的场所。使用时,建议铠装层两端接地,最内层屏蔽一端接地! CC-Link的总线电缆是特性阻抗为110±10Ω的3芯绞合屏蔽电缆,国产型号规格:STP-110Ω(forCANopen&CC-Link)3C×20AWG,使用时,屏蔽层应只在一端接地! 变频器、动力电缆、变压器、大功率电机等往往伴随着低频干扰,而这种干扰是用高导电率材料做屏蔽层的电缆无法解决的,包括原装的进口电缆。只有用高导磁率材料(如钢带、钢丝)做的屏蔽层才能有效抑制低频干扰。 最常用的方法就是给电缆套上钢管或直接采用高导磁率材料制成的铠装型电缆——ASTP-120Ω(forRS485&CAN)onepair18AWG,电缆外径12.3mm左右。可用于干扰严重、鼠害频繁以及有防雷、防爆要求的场所。使用时,建议铠装层两端接地,最内层屏蔽一端接地! 雷电的等效干扰频率在100k左右,属于低频干扰。 《GB50057-94建筑物防雷设计规范》第6.3.1条:......在需要保护的空间内,当采用屏蔽电缆时其屏蔽层应至少在两端并宜在防雷区交界处做等电位连接,当系统要求只在一端做等电位连接时,应采用两层屏蔽,外层屏蔽按前述要求处理。

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总线通信部分,一旦在整个系统运行期间发生问题,若没有良好的人机界面和测试手段,将很难及时准确地找到并排除故障。同样,在控制系统的研制过程中,为了尽可能地减少故障和缩小故障围,也应设计相应的测试软

mcp2510的can总线收发器程序

mcp2510的can总线收发器程序 pcbomb 发表于 2008-6-30 14:47:00 阅读全文(769) | 回复(1) | 引用通告(0) | 编辑 #i nclude #i nclude "mcp2510.h" void mcp_reset(void) { SPI_init_hw(); //设置成SPI方式 init_can_io(); // SPI_mcp_reset(); // } void mcp_read( unsigned char MCPaddr, unsigned char* readdata, unsigned char length ) { unsigned char loopCnt; SPI_mcp_select(); // Select the MCP device at the SPI bus // Start reading and set first address SPI_mcp_RD_address(MCPaddr); for (loopCnt=0; loopCnt < length; loopCnt++) { // Get a byte and store at pointer *readdata = SPI_putch(MCPaddr); // Increment the pointers to next location // Test++; MCPaddr++; readdata++; } SPI_mcp_unselect(); } void mcp_write( unsigned char MCPaddr, unsigned char* writedata, unsigned char length ) { unsigned char loopCnt; SPI_mcp_select(); // Start write and set first address SPI_mcp_WR_address( MCPaddr ); for (loopCnt=0; loopCnt < length; loopCnt++) { // Write a byte SPI_putch( *writedata ); // Increment the pointer to next location writedata++; }

相关文档
相关文档 最新文档