摘要:介绍CAN总线分布式系统中适配卡和控制单元的硬件组成及软件的设计方法,给出硬件原理图;详细分析SJA1000的初始化方法、验收滤波器的原理和使用方法、通信程序的设计,并给出CAN通信中断服务程序和初始化程序流程图。
关键词:CAN总线 适配卡 控制单元 SJA1000 双口RAM
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 硬件设计
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组成硬件复位及看门狗电路。
适配卡主要承担上位计算机和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路模拟量的数据采集。
需要说明的是,CAN2.0A或CAN 2.0B协议只是一个低层的规范,用户还需要定制简单的应用层协议。应用层协议的任务一方面是将要发送的数据分类、拆卸、合并,确定发送对象,再根据CAN的数据链路层协议规范填写CAN的各个信息帧;另一方面是根据应用层协议解释接收数据的具体含义,并进行相应的处理。
上一篇:基于CompactPCI的通信公共平台
下一篇:感应通信的应用研究
- 热门资源推荐
- 热门放大器推荐
- NXP 2.5亿美元收购Aviva,但车载SerDes领域依然处于战国时期
- 应对 AI 时代的云工作负载,开发者正加速向 Arm 架构迁移
- 沉浸式体验漫威宇宙,英特尔锐炫显卡为《漫威争锋》提供Day 0支持
- 艾迈斯欧司朗与法雷奥携手革新车辆内饰,打造动态舱内环境
- 《嵌入式-STM32开发指南》第二部分 基础篇 - 第7章DMA(HAL库)
- 【“源”察秋毫系列】DC-DC电源效率测试,确保高效能与可靠性的关键步骤
- NVIDIA 推出高性价比的生成式 AI 超级计算机
- Mapbox与Arm合作推出虚拟主机 加速软件定义汽车导航
- 移植tslib和Qt5.6到三星s5pv210开发板
- 智能座舱新赛点在哪? 看这四款重磅新车