1、can 总线资料汇总学习资料基础 2008-10-24 22:58:00 阅读 45 评论 0 字号:大中小 工业设备通信通常涉及到很多硬件和软件产品以及用于连通标准计算机平台(个人计算机或工作站)和工业自动化应用设备的协议,而且所使用设备和协议的种类繁多。因此,大部分自动化应用设备都希望执行简单的串行命令,并希望这些命令同个人计算机或者附加的串行端口板上的标准串行端口兼容。RS-232 是目前 PC 机与通信工业中应用最广泛的一种串行接口。RS-232 被定义为一种在低速率串行通讯中增加通讯距离的单端标准。由于 RS-232 的发送端与接收端之间有公共信号地,所以它不能使用双端信号,否则,共
2、模噪声会耦合到信号系统中。RS-232 标准规定,其最大距离仅为 15m,信号传输速率最高为20kbit/s。CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一,一个由 CAN 总线构成的单一网络受到网络硬件电气特性的限制。 CAN 作为一种多主方式的串行通讯总线,其基本设计规范要求高位速率和较高的抗电磁干扰性能,而且要能够检测出通讯总线上产生的任何错误。当信号传输距离达 10km 时,CAN 仍可提供高达 50kbit/s 的数据传输速率。表 1 为 CAN 总线上任意两个节点之间最大传输距离与其位速率之间的对应关系。表 1 C
3、AN 总线系统任意两节鼎足之势之间的最大距离 位速率/kbps 1000 500 250 125 100最大距离 /m 40 130 270 530 620位速率/kbps 50 20 10 5 最大距离 /m 1300 3300 6700 10000 由此可见,无论从实时性、适应性、灵活性,还是可靠性上来看,CAN 总线都是一种比 RS-232 更为优秀的串行总线。当两台串口设备的相距较远,不能直接用 RS-232 把它们连接起来时,就可以把 RS-232 转换为 CAN,通过 CAN 总线来实现串口设备的网络互连。但是,RS-232 和 CAN 在电平和帧格式上都是很大的不同。具体表现如下
4、:RS-232 标准电平采用负逻辑,规定+3V+15V 之间的任意电平为逻辑“0”电平,-3V-15V 之间的任意电平为逻辑 “1”电平。而 CAN 信号则使用差分电压传送,两条信号线称为“CAN_H” 和“CAM_L” ,静态时均为 2.5V 左右,此时的状态表示为逻辑“1”,也可以叫做“隐性”;用 CAN_H 比 CAN_L 高表示逻辑“0”,称为“显性” 。显性时,通常电压值为:CAN_H=3.5V,CAN_L=1.5V;RS-232 串口的帧格式为:一位起始位,八位数据位,一位可编程的第九位(此位为发送和接收的地址/数据位),一位停止位。而 CAN 的数据帧格式为:帧信息+ID+ 数据
5、(可分为标准帧和扩展帧两种格式)。因此,设计时就需要有一个微控制器来实现电平和帧格式等的转换。其转换方式如图 1 所示。2 RS-232 到 CAN 转换的硬件设计在设计 RS-232 到 CAN 的转换装置时,用单片机 AT89C52 作为微处理器;用 SJA1000 作为 CAN微控制器, SJA1000 中集成了 CAN 协议的物理层和数据链路层功能,可被动局面对通信数据的帧处理;AT82C250 作为 CAN 控制器和物理总线之间的接口,用于提供总线的差动发送能力和 CAN 控制器的差动接收能力,通过 AT82C250 的引脚 3 可选择三种不同的工作方式(高速、斜率控制和待机)。其中
6、引脚 3 接地时为高速方式;高速光隔用 6N137 实现,其作用是防止串入信号干扰; MAX232 用来完成 232电平到微控制器接口芯片 TTL 电平的转换。具体的硬件接口电路参见 SJA1000 的有关资源,这里不再多做说明。但有以下几点需要注意。(1)CAN 总线两端接有一个 120的电阻,其作用是匹配总线阻抗,提高数据通信的抗干扰性及可靠行。但实际上只需保证 CAN 网络中“CAN_H” 和“CAN_L”之间的跨接电阻为 60即可。(2) SJA1000 的 20 引脚 RX1 在不使用时可接地(具体原因见软件设计),配合 CDR.6 的置位可使总线长度大大增加。(3)引脚 TX0、T
7、X1 的接法决定了串行输出的电平。具体关系可参考输出控制寄存器 OCR 的设置。(4 )AT82C250 的 RS 引脚与地间接有一个斜率电阻。电阻大小可根据总线通信速度作适当调整,一般在 16k140k 之间。(5)MAX232 外围需要四个电解电容 C1、C2、C3、C4 ,这些电容也是内部电源转换所需电容,其取值均为 1F/25V,宜选用钽电容并且位置应用量靠近芯片,电源 VCC 和地之间要接一个 0.1F的去耦电容。3 RS-232 到 CAN 转换的软件设计在微处理控制下,RS-232 和 CAN 进行数据交换时,采用串口接收和 CAN 中断方式可提高工作效率。其主程序流程图如图 2
8、 所示。 SJA1000 的初始化在复位模式下才可以进行,主要包括工作方式的设置、时钟分频和验收滤波寄存器的设置、波特率参数的设置以及中断允许寄存器的设置等。数据能否准确传递还取决于波特率和流量控制,这也是软件设计时不可忽略的地方。因此接下来主要介绍 CAN 波特率的设置、串口波特率的自动检测、串口数据流量控制。31 CAN 滤波率的设置CAN 协议中的要素之一是波特率。用户可以设置位周期中的位采样点位置和采样次数,以使用户可以自由地优化应用网络性能,但在优化过程中,要注意位定时参数基准参考振荡器的容差和系统中不同信号传播延迟之间的关系。系统的位速率 fBil 表示每单位时间传输数据位的量,即
9、波特率 fBit=1/tBit。额定的位定时由 3 个互不重叠的段 SYNC_SEG、TSEG1 和 TSEG2 组成,这 3 个时间段分别是 TSYNC_SEG、TSEG1 和TSEG2 组成,这 3 个时间段分别是 tSYNC_SEG、tTSEG1 和 tTSEG2。所以,额定位周期 tBit 是 3 个时间段的和。tBit=tSYNC_SEG+tTSEG1+tTSEG2位周期中这些段都用整数个基本时间单位来表示。该时间单位叫时间份额 TQ,时间份额的持续时间是 CAN 系统时钟的一个周期 tSCL,可从振荡器时钟周期 tCLK 取得。通过编程预分频因数(波特率预设值 BRP)可以调整 C
10、AN 系统时钟。具体如下:tSCL=BRP2tCLK=2BPR/fCLK对 CAN 位定时计算的另一个很重要的时间段是同步跳转宽度( SJW),持续时间是 tSJW。SJW段并不是位周期的一段,只是定义了在重同步事件中被增长或缩短的位周期的最大 TQ 数量。此外,CAN协议还允许用户指定位采样模式( SAM),分别是单次采样和三次采样模式(在 3 个采样结果中选出 1个)。在单次采样模式中,采样点在 TESG1 段的末端。而三次采样模式比单次采样多取两个采样点,它们在 TSEG1 段末端的前面,之间相差一个 TQ。上面所提到的 BPR、SJW、SAM、TESG1 、TESG2 都可由用户通过
11、CAN 控制器的内装中寄存器BTR0 和 BTR1 来定义。具体如图 3 所示。设置好 BTR0 和 BTR1 后,实际传输的波特率范围为:最大=1/(tBit-tSJW),最小=1/ (tBit+tSJW)3.2 串口波特率检测当串口设备是主机时,如需检测此时转换装置的串口波特率,首先可对主机的接收波特率(以 9600波特为例)进行设定,并在终端发送一个特定的字符(以回车符为例),这样,主机根据接收到的字符信息就可以确定转换装置的通信波特率。回车符的 ASCII 值是 0DH,在不同波特率下接收到的值如表 2 所列。表 2 不同波特率下接收的字节 波特率(bit/s) 接收字节(十六进制)
12、波特率(bit/s) 接收字节(十六进制)1200 80 4800 E61800 F0 9600 0D2400 78 19200 F*33 串口流控制此处讲到的“流“ 指的是数据流。数据在两个串口之间的传输时,常常会出现丢失数据的现象。由于单片机缓冲区有限,如接收数据时缓冲区已满,那么此时继续发送来的数据就会丢失。而流控制能有效地解决该问题,当接收端数据处理不过来时,流控制系统就会发出“不再接收” 的信号,而使发送端停止发送,直到收到“ 可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据丢失。常用的两种流控制是硬件流控制(包括 RTS/CTS、DTR/CTS 等)和软件
13、流控制 XON/XOFF(继续/停止),下面仅就硬件流控制 RTS/CTS 加以说明。采用硬件进行流控制时,串口终端 RTS、CTS 接到单片机的 I/O 口,通过置 I/O 口为 1 或 0 来接收和发出起停信号。数据终端设备(如计算机)使用 RTS 来起始单片机发出的数据流,而单片机则用 CTS来起动和暂停来自计算机的数据流。实现这种硬件握手方式时,在编程时根据接收端缓冲区的大小设置一个高位标志和一个低位标志,当缓冲区内数据量达到高位时,就在接收端将 CTS 线置低(送逻辑 0),而当发送端的程序检测到 CTS 为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将 CTS置高为止。
14、 RTS 则用来标明接收设备有没有准确好接收数据。34 CAN 接收子程序PeliCAN 格式既可以发送标准帧也可以送扩展帧,利用时钟分频寄存器中的 CDR.7 可以调协 CAN模式(0-BasicCAN,1-PeliCAN),接收 CAN 数据时,可根据帧信息中的 FF 位来判断是标准帧还是扩展帧,并且 RTR 位来判断是远程帧还是数据帧。以下是 CAN 接收子程序:;/;/CAN 数据接收/统一成 2 个字节 ID 的帧格式/;/RECAN:MOV R0,#C_RE ;单片机内缓冲区起始地址MOV DPTR,#RXBUF ;读取并保存接收缓冲区的内容MOVX A,DPTR ;读取 CAN
15、缓冲区的 2 号字节MOV R0,A ;保存JB ACC.7,EFF_RE ;FF 位,0-SFF,1-EFFMOV R2,#0SJMP SFF_RE ;ID 数目不同,截取“ 数据字节”的位置不同EFF_RE:MOV R2,#2SFF_RE:MOV R2,#2SFF_RE:JB ACC.6,EXIT_RECAN ;RTR 位判断,1-远程帧,则跳出ANL A,#0FHMOV R3,A ;这时截取中间 4 位是数据长度MOV C_NUM,A ;R3,R5 中存放接收帧的长度RDATA0:INC DPTR ;2 个字节 IDINC R0MOVX A,DPTRMOV R0,AINC DPTRMOV
16、X A,R0,AINC DPTRMOVX A,DPTRMOV R0,AMOV A,R2 ;如果是 EFF 则跳过两个字节 IDJZ DRATA1INC DPTRINC DPTRDATA1: ;数据字节INC DPTRINC R0MOVX A,DPTRMOV R0,ADJNZ R3,RDATA1EXIT_RECAN:RET4 结束语引 言CAN 总线(Controller AreaNetwork,控制器局域网)具有高性能、高可靠性、高性价比、连接方便、实时性好及其独特的设计等突出优点应用于许多工业部门,目前已成为比较流行的一种现场总线,广泛应用于控制系统中的各检测和执行机构之间的数据通信。而实际
17、应用中 PC 机与 CAN 总线的人机交互设计尤为重要,它直接影响系统的运行和结果,其连接方法也成为系统设计的重点,通常采取 3 种连接方式:RS-232 串行口通信、PCI卡、USB 口通信,由于串行通信端口在系统控制领域中一直扮演着极为重要的角色,以其开发简单,资源丰富,成本低,无需驱动程序等诸多优点,不仅没有被淘汰,反而在规格上更先进,故应用广泛。结合设计中 AT89C51 单片机有串行通信口且接口简单的特点,选用 RS-232 作为 CAN 总线与 PC 机之间的连接方式。将就这一基于 CAN 控制器SJA1000 与 AT89C51 的具有通用性的工业测控系统设计的软硬件设计方案作详
18、细介绍。CAN 总线及 CAN 控制器 SJA1000 简介CAN 总线最初是德国 Bosch 公司在 1986 年为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种支持分布式实时控制系统的串行数据通讯总线。CAN总线与其它通信网的显著不同之处在于:(1)报文传送中不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,该收的收下,不收的弃用。其好处是可线上网下网、即插即用和多站接收。(2)特别强化了对数据安全性的关注,满足控制系统及其它较高数据要求的系统需求。另外 CAN 总线采用短帧结构,借助接收滤波的多地址帧传送,受干扰概率低,每帧信息都有 CR
19、C 校验及其它检错措施。响应远程数据请求,配置灵活,具有全系统的数据相容性。节点数主要取决于总线驱动电路,目前最多可达 110 个节点。CAN 总线符合ISO11898 标准,通信速率高,最大传输速率可达 1Mbit/S,最大传输距离为 10km,传输介质可为双绞线。基于 CAN 总线以上的特点,把它应用于系统分布比较分散且需要在同一总线上挂接多个节点的场合是非常适合的。目前广泛流行的 CAN 总线器件有两大类:一类是独立的 CAN 控制器,如PhilipS 公司的 PCA82C200,SJA1000 及 Intel82256/82257 等;另一类是带有在片 CAN的微控制器,如 P8XC5
20、82 等。其中 Philips 公司的 PCA82C200 是符合 CAN2. 0A 协议的总线控制器,SJA1000 是它的替代产品,它是应用于汽车和一般工业环境的独立 CAN 总线控制器。具有完成 CAN 通信协议所要求的全部特性。经过简单总线连接的 SJA1000 可完成 CAN 总线的物理层和数据链路层的所有功能。其硬件与软件设计和 PCA82C200 的基本 CAN 模式(BasicCAN)兼容。同时,新增加的增强 CAN 模式( PeliCAN)还可支持CAN2. 0B 协议。根据当前市场开发工具和课题的实际需要,选用 SJA1000 作为 CAN 控制器,同时使用了 CAN 控制
21、器接口芯片 PCA82C250。SJA1000 有两种工作模式:基本模式和增强模式。在基本模式下,SJA1000 只可收发标准数据帧(标准数据帧的标识符为 11 位) ,且错误报警的极限值不能修改;在增强模式下,SJA1000 既可接收标准数据帧,也可接收扩展数据帧(扩展数据帧的标识符为 29位),可修改错误报警的极限值,并且 SJA1000 具有更加灵活的滤波方式,能够根据数据帧的标识符有选择地接收一些数据帧。另外,增强模式下的 SJA1000 能够进行自检,即可通过自发自收一组报文来判断该控制节点是否正常地挂在 CAN 总线上。使用者所要做的主要工作是 SJA1000 的初始化,收发报文的
22、处理以及对节点脱离总线的检测量与处理。RS-232 标准串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用,1969 年,美国电子工业协会( EIA)公布了 RS-232C 作为串行通信接口的电气标准,该标准定义了数据终端设备(DTE)和数据通信设备(DCE)间按位串行传输的接口信息,合理安排了接口的电气信号和机械要求,在世界范围内得到了广泛的应用。系统总体结构原理及设计该适配器利用 RS-232 串行通信口及 CAN 总线进行数据通信,实现上位机与各智能节点间的通信任务,包括控制台(上位机) 向下传输命令和下位机数据的返回,以完成对下层设备的监控。图 1 为系统结构框图。PC
23、 机通过 RS-232 与 CAN 控制器 SJA1000通信,实现信息在 CAN 总线上的发送与接收。底层各智能节点根据应用的不同具有不同功能,但都具有与 CAN 总线通信能力可以上传数据和接收数据。CAN 总线接口硬件设计图 2 为 CAN 总线通信接口适配器硬件设计简图。PCA82C250 提供对总线的差动发送和对 CAN 控制器的差动接收功能,也增大了通信距离,提高了系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI),实现了热防护等功能。系统软件设计软件设计分 PC 机 Visual BasiC 编程和 AT89C51 单片机 C 语言编程 2 部分。PC 机部分采用 VB6. 0
24、 编程,这样界面非常直观,人机交互效果好。VB 提供了具有通讯功能的 MSComm. OCX 控件,该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。MSComm 控件提供 2 种处理通讯的方式:(1) 事件驱动通讯,即发送或接收数据过程中触发 ONCOMM 事件,通过编程访问 CommEvent 属性了解通信事件的类型,分别进行各自的处理;(2) 查询方式,通过检查 CommEvent 属性的值来查询事件和错误。采取查询方式。控件 MSComm 是将 RS-232 的初级操作予以封装,用户以高级的 BasiC 语法即可利用 RS-232 与外界通信并不需要了
25、解其他有关的初级操作,因此使用方便。MSComm 控件初始化:MSComm1. CommPort= 2 设置串口 2MSComm1. SettingS=“9600,N ,8,1” 设定工作方式MSComm1. InBufferSize = 10 根据 1 次传 1 个 CAN 帧,设置输入缓冲区大小MSComm1. InputMode = 1 二进制形式接收MSComm1. InputLeN= 0 一次读出输入缓冲区中的所有数据MSComm1. utBufferSize = 10 输出缓冲区大小的设置MSComm1. utBufferCount= 0 清空输出缓冲区MSComm1. PortO
26、peN= True 打开串口PC 机与单片机 MSC51 之间的通信约定如下:一般情况下 PC 与多个 MSC51 单片机系统进行主从式通信,其方案是 MSC51 采用串口工作方式 3,即 11 位异步接收/发送方式,有效数据为 9 位,其中第 9 位为地址/数据信息的标志位,以此区分各从机。但现在PC 机采用 VB 编程,其 MSComm 控件为标准的 10 位串口通信,包括 8 位标准数据和数据的起始位和停止位。将单片机串口设为工作方式 1,即改为 10 位异步接收/发送方式,通讯流程如下:通讯时首先发通信开始标志,接着发送各下位机单片机的地址信号和芯片的片选信号,然后发送单片机的工作命令
27、字。再往下即进行数据处理,转入相应的处理功能模块,最后对数据进行效验。这个通讯流程非常简便,实现了 PC 机与单片机之间的主从式通讯。以下为 VB 的发送接收程序:Private SuBcmdSendClick() 使用按钮控件MSComm1. utput= txtSend. Text 将传送区内的字符串以 Output 属性送出End SubPrivate SuBFormLoad() 窗体的加载事件MSComm1. PortOpeN= True 将通讯断口开启,通讯参数也可以在开启前先设定MSComm1. RThreshold = Val (txtThreshold. Text) 设定引发接
28、收事件的接收阈值,使程序一执行便开启通讯端口,将接收的阈值设定为阈值,设定文本框内的值。End SubPrivate SuBMSComm1. OnComm() 通讯控件的 OnComm 事件。引发接收事件后,将字符收进来并放在接收的文本框中SelectCase MSComm1. CommEvent 根据下面每一个 case 语句处理每个事件和错误事件Case comEvCD CD 线的状态发生变化Case commEvReceive 收到 Rthreshold # oftxtReceive. Text= txtReceive. Text+ Trim(MSComm1. Input)EA= 1;
29、/开中断ES= 1; /允许串口中断TR1= 1; /启动定时器 T1SPECHAR = 0xff ; / 设定通讯开始标志程序采用中断接收,查询发送的方式。串口中断服务程序流程图如图 3 所示。SJA1000 控制器部分初始化子程序 CANINIT()选用 CAN2. 0 协议构建 CAN 总线控制网络,对 SJA1000 的初始化主要包括工作方式的设置、验收代码寄存器 ACR、验收屏蔽寄存器 AMR、波特率的参数设置等。void caninit(void) /*SJA1000 的初始化子函数*/control = 1; /*禁止超载、出错及接收中断,并置复位请求位使其进入复位状态*/whi
30、le (controlacceptancecode = 0x01; /* 验收码寄存器( 存机号 1 号)*/acceptancemask= 0xfe ; /*验收屏蔽码寄存器*/bustiming0= 0x03; /* 总线定时寄存器 0,同步跳转宽度T0= T,BPS= 125 k*/bustiming1= 0x18; /* 总线定时寄存器 1,T1= 9T,T2=2T,波特率为500kbit/S*/outputcontrol = 0x1A; /* 正常输出方式,TX1 引脚悬浮*/clockdivider = 0x40; /*BASICCAN 模式,RX1 接固定电平*/control
31、= 0x1A; /*清复位请求,使其进入工作状态*/发送 cansend()发送子程序负责节点报文的发送,由 CAN 控制器 SJA1000 独立完成,将命令寄存器里的发送请求标志置位,即可发送 SJA1000 发送缓冲区中的报文。void cansend(unsigned char ID ,char*xdata) /*该子函数完成一帧数据的发送*/while ( (statusTransmitbuffer1= ID;Transmitbuffer2= 0x08;Transmitbuffer3= txdata0 ;Transmitbuffer10= txdata7 ;Command = 0x05
32、 ; /* 发送请求*/while ( (status接收子程序 canreceive ()接收子程序负责节点报文的接收。SJA1000 自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。SJA1000 的报文接收主要有 2 种方式:中断接收方式和查询接收方式。系统采用的是中断接收方式。unsigned char ir ;ir = interrupt; /*获得 SJA1000 的中断状态*/EA= 0;If ( (irRxID0 = Receivebuffer1;RxID0 = Receivebuffer2;If ( ( (Receivebuffer2.Rxdata7 = Rece
33、ivebuffer10;Command = 0x04 ; /*SJA1000 的接收缓存器被释放*/else if ( ( (Receivebuffer2结束语介绍了一种低成本、高可靠性、快捷的通用型 CAN 总线与 PC 机通过 RS-232串口互连方案。该互连方案很好地保证了管理监控层和现场生产测控层之间的连接,方便了上下层信息交流,满足工厂、变电站等工业场合的应用要求。基于 CAN 总线的家庭控制器的设计与实现信息来源 : 维库开发网 发布时间:2009 年 12 月 10 日引言CAN(Controller Area Network)总线是德国 BOSCH 公司为解决现代汽车中众多的控
34、制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维, 通信速率可达 1Mbps,通信距离可达10km,CAN 协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码, 使网络内的节点个数在理论上不受限制。由于 CAN 总线具有较强的纠错能力,支持差分收发,因而适合高干扰环境 ,并具有较远的传输距离。因此 ,CAN 协议对于许多领域的分布式测控是很有吸引力的。目前 CAN 已成为 ISO11898 标准 ,其特性如下:(1)CAN 是一种有效支持分布式控制和实时控制的串行通信网络。(2)CAN 协议遵循 ISO/O
35、SI 模型, 采用了其中的物理层、数据链路层与应用层。(3)CAN 可以多主方式工作, 本质上也是一种 CSMA/CD 方式,网络上任意一个节点均可以在任意时刻主动地向网络上的其它节点发送信息,而不分主从,节点之间有优先级之分,因而通信方式灵活 ;CAN 采用非破坏性位仲裁技术,优先级发送,可以大大节省总线冲突促裁时间,在重负荷下表现出良好的性能;CAN 可以点对点、一点对多点(成组)及全局广播等几种方式传送和接收数据。(4)CAN 的直接通信距离最远可达 10km(传输速度为 5 Kbps);最高通信速率可达 1Mbps(传输距离为 40m)。(5)CAN 上的节点数据实际可达 110 个。
36、(6)CAN 数据链路层采用短帧结构, 每一帧为 8 个字节,易于纠错;CAN 每帧信息都有 CRC 校验及其它检错措施, 有效地降低了数据的错误率;CAN 节点在错误严重的情况下, 具有自动关闭的功能,使总线上其它节点不受影响。(7)信号调制解调方式采用 NRZ 编码/解码方式, 并且采用插入填充位(位填充)技术。(8)数据位具有支配“0”(Dominant bit)和退让“1”(Recessive bit)两种逻辑值,采用时钟同步技术,具有硬件自同步和定时时间自动跟踪功能。基于 CAN 总线的家庭控制器总线设计方案在进入信息化时代的今天,人们对于居住环境中的安全性、舒适性要求已越来越高,建
37、立住宅小区计算机管理局域网, 实现小区综合管理的网络化势在必行。通过遍布于整个住宅区的家庭控制器和中央计算机系统,实现对住宅的智能化管理。图 1 是基于 CAN 总线的总体结构示意图, 系统采用支持 CAN 标准的总线型网络。中央计算机系统(上位机 PC)通过 CAN 接口适配卡与 CAN 总线相连,进行数据交换。通过双绞线把中央计算机系统和家庭控制器(下位智能节点)挂接在一条总线上,构成低层通信网络。由于采用了 CSMA/CD 的信息传输控制技术,允许总线上各节点平等争用总线 ,从而可构成具有多主节点的冗余网络结构。在低层通信网络中,中央计算机系统和家庭控制器分别有自己的 ID 标志。由于采
38、用 CAN 标准作为网络通信协议, 各节点在网络中的地位相同 ,于是我们可以将中央计算机系统虚拟成主机,而家庭控制器则虚拟成从机, 响应主机的要求。中央计算机系统负责对整个CAN 总线系统进行监视管理, 具有系统参数(如传输速率、节点地址等)设置、数据发送、数据请求、本机状态查询、节点状态查询、中断状态查询等功能。系统工作过程为上位机向下位节点(家庭控制器)发送命令,下位节点识别并执行相应命令。同时各下位节点也可按要求进行信息交换。在数据链路层中,规定了支持 CAN 协议的两种帧类型:数据帧和远程帧。数据帧用来发送数据,用于一个节点传送信息到其它任一或所有节点;远程帧用来“远程发送请求”,用于
39、一个节点主动要求其它节点发送信息,两种帧的具体格式如图 2 所示。硬件电路设计家庭控制器硬件设计本系统是由许多智能家庭控制器通过 CAN 总线相连而组成的一个控制器局部网,因此,CAN 总线的设计就显得极为重要。其中,CAN 控制器的选取、CAN 收发器以及抗干扰措施将成为设计的关键。CAN 控制器的选取为了系统进一步扩展的需要,可选取支持 CAN2.0B 通信协议的SJA1000。SJA1000 是 PHILIPS 公司最新生产的既支持 CAN2.0B 又支持 CAN2.0A的 CAN 控制器,它与仅支持 CAN2.0A 的 CAN 控制器 PCA82C200 在硬件上和软件上完全兼容。CA
40、N 收发器PCA82C250 是 PHILIPS 公司的 CAN 控制器和物理总线间的接口,提供对总线的差动发送和接收能力。它与 ISO11898 标准完全兼容,有三种不同的工作方式即高速、斜率控制和待机,可根据实际情况选择。光电隔离为了进一步提高系统的抗干扰能力,在控制器 SJA1000 和收发器 PCA82C250之间增加了由高速隔离器件 6N137 构成的隔离电路,电源采用 DC-DC 变换器。硬件电路中使用 PCA82C250 是为了增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI), 实现热防护等。CAN 器件与微处理器的硬件结构图如图 3 所示。CAN 接口适
41、配卡和 CAN 总线中继器CAN 接口适配卡完成 CAN-PC 总线的通信。适配卡由单片机 89C51、CAN 控制器 SJA100、CAN 收发器 89C250 及其控制电路组成。由于 CAN 收发器的限制,在一个 CAN 总线网络中, 最多只能有 110 个 CAN 节点,最多只能有 110 个 CAN 节点。利用中继器可对 CAN 总线进行扩展,不但可使 CAN 节点总数达到 2032 个 ,而且可使 CAN 通信距离成倍增加,同时也可以把两个不同速率的 CAN 网连接在一起,组成更复杂的 CAN 网络。中继器采用特定的控制逻辑控制一对 CAN 收发器 82C250.CAN 收发器背-背
42、相接,连接两个物理上独立的 CAN 网, 双向传输数据。从物理层上看,中继器实现 CAN 总线信号的透时中继。软件设计上位机软件采用 Visual Basic 6.0 开发软件。分两大功能模块:高层系统管理模块和低层通信模块。程序流程图如图 4 所示。家庭控制器(节点)软件实现与上位机及其它节点的信息交换。在软件设计中, 遵循模块化设计思想, 采用结构化程序设计方案, 使之具有良好的模块性、可修改性和可移值性。CAN 总线系统的初始化设计是软件设计的关键,这一部分设计不好 ,系统将不可能正常工作。因此初始化设计是一个难点,又是一个重点。在初始化之前,应设置输出控制寄存器(OCR )的复位请求位
43、为高 ,再设置其它寄存器。控制寄存器(CR)设定中断; 命令寄存器(CMR)控制缓存器的接收状态 ;中断寄存器(IR )、状态寄存器(SR)查询 SJA1000 的工作状态 ;接收码寄存器(ACR)设定工作地址; 接收屏蔽寄存器( AMR)设定工作形式,总线定时寄存器( BTR0、BTR1)设定工作频率、采样频率;输出控制寄存器(OCR )一般为正常输出方式 ,最后应使复位请求位从高变低,使 CAN 控制器进入正常工作状态。因此 ,对 CAN 控制器进行初始化, 实际上就是对 ACR,AMR,BTR0,BTR1 和 OCR 这些寄存器进行访问。成功地初始化 SJA1000 后, 系统就可以应用
44、它来传输报文。结语CAN 总线以其高性能、高可靠性及其独特的设计越来越受到人们的重视, 并被公认为最有前途的总线之一。我们在家庭控制器系统中应用了这种总线技术,设计了硬件电路和软件,并得到实际应用。基于 CAN 总线的嵌入式测温系统设计信息来源: 维库开发网 发布时间:2009 年 11 月 3 日1.引言温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度:如大气及空调房中温度的高低,直接影响着人们的身体健康;在大规模集成电路生产线上,环境温度不适当,会严重影响产品的质量。由此作者提出设计一种基于工业通
45、用的 CAN 总线标准的嵌入式测温系统,该系统能自动监测被测对象的温度,并且能通过 CAN 总线对温度进行远程监视和网络控制的智能测温系统。2.整体系统设计根据所给的设计要求,即具有数字显示、键盘输入、温度自动采样、能通过CAN( Controller Area Network)总线与上位机进行通信、异常情况自动报警等功能。我们可以构架出此智能温度仪表的整体设计框图如下图 1 所示。从图中可以看出整体硬件电路设计主要包括:微处理器 8051 部分、电源电路部分、温度信号输入部分、键盘输入部分、CAN 总线通信部分、LED 显示部分1。限于篇幅原因,作者在本文将重点介绍温度信号输入和 CAN 总
46、线通信部分的具体电路设计。3.温度输入电路设计MAX6675 是 MAXIM 公司生产的基于 SPI(Serial Peripheral Interface) 串行外设接口总线的专用芯片,它不仅能对 K 型热电偶进行冷端温度补偿,还能对热电势信号进行数字化处理。可广泛用于工业、仪器仪表、自动化等领域2 。3.1 MAX6675 的结构及工作原理MAX6675 的具体内部结构框图如图 2 所示。GND 为地。UCC 接电源的正极,该端需经外部 0.1F电容接地。T-接 K 型热电偶的冷端,并从外部接地。 T+接热电偶的热端。SCK 为串行输入端,SO 为串行输出端。 为片选端,当 =0(低电平)
47、时,串行接口有效。NC 为空脚。主要包括 8 个部分:低噪声电压放大器 A1;电压跟随器 A2;冷端温度补偿二极管;基准电压源;数字控制器;12 位 ADC;SPI 串行接口(SCK、SO、 );模拟开关(S1S5)。其工作原理如下: K 型热电偶产生的热电势(e)经过 A1、A2 得到放大后的热电势信号 U1,再经过 S4 送给 ADC。有公式:U1=TT=T(T-T0)其中:T 为 K 型热电偶的电压温度系数。T=41V/。T 和 T0 分别为被测温度、冷端的环境温度。与此同时,冷端温度补偿二极管将 T0 转换成补偿电压 U2,有公式:U2=TT0,U2 通过 S5 送给 ADC。在数字控
48、制器的控制下,ADC 首先将 U1、U2 转换成数字量,再将 U1、和 U2 相加并除以 T,即获得输出电压 UO 的数据,该数据就代表测量点的实际温度值 T。需要指出,U2 为毫伏级信号,e 为微伏级信号,因此 e 必须首先放大成 U1,二者才能相加。图 2 MAX6675 的内部框图3.2 由 MAX6675 构成的测温系统由 MAX6675 构成的测温系统电路如图 3 所示。将 K 型热电偶 KH1 的 T+和 T-分别接到 MAX6675 芯片的 T+和 T-的引脚上。MAX6675 的 为片选端口接到 CPU 的 P1.2引脚、SO 输出端口接到 CPU 的 P1.0 引脚、SCK
49、输入端口接到 CPU 的 P1.1 引脚3 。4.CAN 总线通信电路及程序设计4.1 CAN 硬件电路设计采用 AT89C51 单片机微控制器、独立 CAN 通信控制器 SJA1000、CAN 总线驱动器 PCA82C250 及复位电路 IMP708 组成的 CAN 应用节点具体电路如下图 4 所示4。为了提高系统的抗干扰能力,本设计在 SJA1000 和 CAN 总线驱动器 PCA82C250 之间增加了光电隔离器 6N137。4.2 CAN 通信程序设计CAN 应用节点的通信程序设计主要包括三部分:初始化子程序、发送子程序、接收子程序,各个部分的具体程序如下5:(1)CAN 总线初始化子程序NODE EQU 30H ;节点号缓冲区NBTR0 EQU 31H ;总线定时寄存器 0 缓冲区NBTR1 EQU 32H