CAN总线分布式系统适配卡和控制单元设计

发布时间:2010-7-22 17:23    发布者:vinda
关键词: CAN总线 , 控制单元 , 适配卡
1 CAN总线分布式系统的结构

系统结构如图1所示。本系统由上位监控计算机、CAN总线适配卡和控制单元三部分构成。其中上位监控计算机采用IBM-PC兼容机,主要负责对系统数据的接收与管理、控制命令的发送以及各控制单元动态参数和设备状态实时显示。控制单元以单片机为核心,主要负责对现场环境参数和设备状态进行检测,对采集来的数据进行处理,并对SJA1000进行操作和控制。CAN总线适配卡,可使PC机方便地连接到CAN总线上。它内嵌微处理器、CAN总线控制器、CAN总线收发器和双口RAM。双口RAM作为PC机与CAN总线适配卡的数据共享区,通过设备将其映射成PC机的物理内存,实现CAN与PC机的高速数据交换。CAN总线适配卡上带有光电隔离,可增强系统在恶劣环境中的抗干扰能力。总线两端各有1个电阻R(约120Ω)起总线阻抗匹配作用。



2 CAN适配卡的设计


2.1 硬件设计



CAN适配卡的硬件组成框图如图2所示,由ISA接口、双口RAM、CPU、CAN通信控制器SJA1000、CAN总线接口82C250等组成。由于带有片上CAN控制器的单片机都含较多的I/O线、定时/计数器、A/D等功能,往往较复杂,因此微处理器使用价廉的AT89C51单片机。为了进一步提高抗干扰措施,在2个CAN器件之间使用了由高速隔离器件6N137构成的隔离电路。光耦两侧应采用DC-DC隔离电源。硬件电路中使用82C250的目的是为了增大通信距离。要实现PC机和CAN控制器之间的数据传送,必须在PC机和适配卡上的MPU之间建立起双向的数据交换通道。通过ISA总线实现单片机系统与主机之间的数据交换有多种实现方法。本适配卡采用集成双口RAM实现数据交换。由于CAN信号传输采用短帧结构(8字节数据),双口RAM的容量要求并不大,本卡选用2K×8位的带中断请求信号INT和忙信号BUSY的IDT7132。具体的连接电路如图3、图4所示。上位PC机对双口RAM的寻址方式采用I/O寻址方式,使用的控制线为IOW和IOR。为避免产生读写错误,使用双口RAM的关键是处理好争用现象。IDT7132提供了中断判优和硬件判优两种方式。当两端口争用同一地址单元时,由片内硬件电路,根据两边的地址、片选、读写信号到达先后顺序,裁决哪个端口有使用权。如左端口优先使用,则自动将右端口的BUSYR信号拉为低电平,通知右侧暂停读写操作。在本适配卡中,由于8031没有READY信号,可以将此信号接至8031的P1.0上。当8031发出读写IDT7132命令时,根据P1.0口的值就可判断对IDT7132读写是否存在冲突。当P1.0的值为0时,存在冲突,必须重发读写IDT7132的命令。由于ISA总线既没有READY信号,也没有通用的I/O引脚,因此将BUSYL信号通过三态门接至ISA数据线的最低位D0。用ISA总线的一个空闲I/O端口打开三态门,通过D0读取BUSYL的状态。



SJA1000为CAN总线微控制器,是PHILIPS公司的PCA82C200的替代产品,可完成CAN总线的物理层和数据链路层的所有功能。SJA1000内部RAM由寄存器组和报文缓冲区组成。发送缓冲区和接收缓冲区共用同一段CAN地址16H~18H,共3个单元,能存储一条将在CAN总线上发送或接收的完整的报文。具有64字节扩展接收缓冲器RXFIFO,其CAN地址为32H~95H(地址为96H~109H的区域是存放发送信息的备份),有了64字节的REFIFO,CPU可以在处理一个报文的同时继续接收其他到来的报文;具有接收滤波器,它把报文头中的标识符(ID)和验收码寄存器中的内容进行比较,以判断该报文是否被接收。如果被接收,报文存入RXFIFO。CAN信息帧格式及单滤波方式的验收滤波器流程图如图5所示。



格式信息内容如下:

FF
RTR
X
X
DLC.3
DLC.2
DLC.1
DLC.0

FF=1,本帧为标准帧;FF=0,本帧为扩展帧。RTR=1,为远程帧;RTR=0,为数据帧。DLC.3~DLC.0表示数据字节的长度,最大值为8。验收滤波原理:初始化时将标识符ID写入验收码寄存器ACR中,验收屏蔽寄存器AMR为0的位,ACR和CAN信息帧的对应位必须相等才算验收通过,AMR为1的位,CAN信息帧的对应位不验收。验收时对于标准帧;11位标识符和RTR对应ACR0的8位和ACR1的高4位。对于扩展帧:29位标识符和RTR对应4个ACR,只是ACR3和AMR3的低2位未用。MAX813组成硬件复位及看门狗电路。



2.2 软件设计

适配卡主要承担上位计算机和CAN节点之间的数据转发任务,其软件设计包括两部分。一是PC机端的应用程序接口(API)函数,采用可视化的编程工具Builder C++编写,主要包括按CAN报文格式向适配卡上双口RAM写入控制命令、请求控制单元发送数据命令。在双口RAM引起的中断服务程序中,读取双口RAM中由AT89C51转发的控制单元发送的数据并进行处理。双口RAM向PC机发出的中断请求INTL,是由单片机将接收的数据写入双口RAM后再写双口RAM片内地址为7FEH单元触发的。二适配卡上单片机端的程序设计,采用汇编发的。二是适配卡上单片机端的程序设计,采用汇编语言编写,分为主程序、INT0和INT1中断服务程序。主程序主要完成对SJA1000的初始化。SJA1000的初始化是通过在复位期间对模式寄存器MOD(CAN地址为0,滤波和复位等方式选择)、时钟分配寄存器CDR(CAN地址为31H,选择PeliCAN模式及时钟输出频率)、滤波码寄存器ACR0~ACR3(复位模式CAN地址为16H~18H,初始化时写入ID标识符)、验收屏蔽寄存器AMR0~AMR3(复位模式CAN地址为20H~23H,初始化时设置是否屏蔽ACR相应位)、总线定时寄存器BTR0(CAN地址为06H,设置波特率和同步跳转宽度)和BTR1(CAN地址为07H,定义每个位周期长度、采样位置和每个采样点的采样数目)、输出控制寄存器OCR(CAN地址为08H,选择正常输出控制模式)等写入控制字来确定其工作方式的。INT1中断请求是由PC机将数据写入双口RAM后再写双口RAM片内地址为7FFH单元触发的。在INT12中断服务程序中,首先读取双口RAM中的数据,然后再将数据转发给CAN控制器SJA1000,具体参见流程图6。INT0中断请求是由SJA1000发送或接收完1帧信息或接收数据超载或产生错误中断后产生的。INT0中断服务程序流程如图7所示。



3 控制单元设计

控制单元的任务就是对现场环境参数进行采集并从CAN总线上接收上位机的命令。根据上位机的要求,对设备进行控制或将采集的数据通过CAN总线传给上位机。现以温室控制单元为例说明控制单元设计方法。温室控制单元的结构原理如图8所示。以AT89C52为核心,采用2片8255扩展I/O端口,其中2个PA口和1个PB口用来检测天窗、遮阳伞、补光灯、通风机等21路开关量的状态。由于8255的PC口的各位通过置复位控制字可以单独置位或复位,AT89C52的P1口可以按位寻址,所以用8255的2个PC口和AP89C52的P1口来控制继电器的吸合。3片8位A/D转换器ADC0809实现对温度、湿度、pH值、CO2浓度、光照强度、液位等20路模拟量的数据采集。



控制单元的控制软件采用汇编语言编程,主要包括初始化、数据采集、数据通信、I/O接口控制等功能。初始化包括对8255和SJA1000的初始化,使8255的PA、PB口作为输入口,PC口各位通过置复位控制字可以单独置位或复位,从而开启或停止一个继电器的动作。数据采集采用查询方式工作,每一路模拟量连续采集3次,中值滤波后作为该传感器的数据存入相应的内部RAM中,全部数据采集完后再检测开关状态并存入相应RAM中。随后开CPU中断,进入数据循环采集状态,等待CAN通信中断的产生。本系统采用中断方式实现AT89C52与SJA1000之间的通信。



需要说明的是,CAN2.0A或CAN 2.0B协议只是一个低层的规范,用户还需要定制简单的应用层协议。应用层协议的任务一方面是将要发送的数据分类、拆卸、合并,确定发送对象,再根据CAN的数据链路层协议规范填写CAN的各个信息帧;另一方面是根据应用层协议解释接收数据的具体含义,并进行相应的处理。
本文地址:https://www.eechina.com/thread-16194-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表