SJA1000型CAN控制器在深海测控中的应用
1 引言
为了开发海洋资源,人类必须首先了解海底环境。然而,海底环境十分复杂,对海底探测的要求很高,深海环境下需要采集的参数比较多,包括深度、温度、盐度、ph值、溶解氧及各种化学元素等。
深海测控系统工作时需要接收来自甲板控制中心的命令,同时要将采集到的数据反送到甲板控制中心,二者之间的最大通信距离大于5km,因此,它们之间的通信要求很高。can总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实时性和灵活性。can的直接通信距离最远可达10km(速率在5kb/s以下),报文采用短帧结构,传输时间短,受干扰概率低,保证了数据出错率极低。为此,笔者采用can总线作为通信方式。
2 深海测控系统的基本组成
深海测控模块由二大部分组成:测控子模块和通信子模块。测控子模块的主要功能是根据甲板控制中心的命令启动系统并完成参数提取、转换、数据处理、存储及发送等操作。通信子模块的功能是完成甲板与水下测控系统的通信。
测控子模块以cygnal公司的c8051f020型单片机为核心,扩展信号调理电路及与can总线的接口。通信子模块是philips公司的sja1000型can控制器。
2.1 测控子模块
深海测控子模块由微控制器系统和i/o系统组成。
微控制器是cygnal公司的c8051f020型单片机。c8051f020采用cip-51型微控制器内核及流水线指令结构,70%的指令执行时间为1个或2个系统时钟周期,峰值速度达到25mi/s,能满足深海环境下多路数据的快速采集与分析。
c8051f020型单片机内部集成1个12位8通道带可编程增益放大器的a/d转换器和1个8位8通道a/d转换器,能满足深海多路环境参数采集;2路12位电压输出d/a转换器;16位可编程定时/计数器阵列pca可用于输出pwm以控制步进电机的运转;64个耐5v电压的通用i/o口可控制开关器件的启动和停止。
微控制器系统还包括了单片机的一些基本外围电路。系统还开展了1片容量达64mbyte的串行flash存储器,用以保存采集到的数据,以避免can通信不畅时造成数据丢失。使用时只要微控制器外接相应的传感器、继电器、电机等就可以完成各种环境下参数的采集及相应的控制
2.2 通信子模块
sja1000是philips公司推出的一款独立的can控制器,主要用于移动目标和一般工业环境中的区域网络控制。它是pca82c200型can控制器(basiccan)的替代产品,而且增加了一种新的操作模式--pelican,这种模式支持具有很多新特征的can2.0b协议。
sja1000的基本特征如下:
引脚与pca2c200型can控制器兼容。
有扩展的接收缓冲器(64字节,先进先出fifo)。
支持can2.0a和can2.0b协议。
支持11位和29位标识码。
通信位速率可达1mb/s。
可与不同的微处理器接口。
可编程的can输出驱动器配置。
sja1000的引脚排列如图1所示,主要引脚的功能如下所述。

ad7-ad0:地址数据复用线。
ale/as:ale输入信号(intel模式)或as输入信号(motorola模式)。
cs:片选信号,低电平允许访问sja1000。
rd/e:来自微控制器的rd信号(intel模式)或e使能信号(motorola模式)。
wr:来自微控制器的wr信号(intel模式)或rd/wr使能信号(motorola模式)。
clkout:sja1000产生用于微控制器的时钟输出信号;时钟信号由内置晶体振荡器通过可编程除法器产生;时钟除法寄存器中的时钟停止位能使该引脚无效。
vdd1和vss1:逻辑电路5v电源和逻辑电路地。
xtal:晶体振荡器放大器输入,外部晶体振荡器信号由该脚输入。
xtal2:晶体振荡器放大器输出,当使用外部晶体振荡器信号时,该输出引脚必须开路。
vdd3和vss3:输出驱动5v电源和输出驱动地。
tx0和tx1:can输出驱动器0和1输出到物理总线。
int:中断输出,用于触发微控制器中断;内部中断寄存器的任何位置位,int将低电平输出;int为开环输出;该引脚为低电平将电路从睡眠状态激活。
rst:复位输入,用于复位can接口(低电平有效)。
vdd2和vss2:输入比较器5v电源和输入比较器地。
rx0和rx1:从物理can总线输入到sja1000的输入比较器。
sja1000与微处理器的接口非常简单,微处理器以访问外部存储器的方式来访问sja1000。由于sja1000的内部寄存器分布在连续的地址内,所以完全可以把sja1000当作外部ram。在设计接口电路时,sja1000的片选地址应与其他外部存储器的片选在逻辑上无冲突。
3 系统设计
sja1000型can控制器兼容can2.0a和can2.0b二种规范。can2.0b具有二种不同的帧格式:标准帧和扩展帧,前者为11位标识符,后者为29位标识符。前者的标识符比后者的标识符少2个字节。深海测控系统的can节点数量少,只有上位机节点和水下测控中心节点,所以即使距离比较远,对传输数据速度和可靠性的影响也不是很大。
3.1 单片机与can控制器的硬件设计
图2为c8051f020型单片机与sja1000型控制器的硬件连接电路原理。sja1000占用了0x8000-0x80ff的外部ram空间。当单片机访问以上空间时片选信号会选中sja1000。

c8051f020有高低2个外部存储器接口。因此,sja1000的ad0-ad7连接到c8051f020的高端口p7口,cs连接到基址为0x8000的外部存储器片选信号。当c8051f020访问地址0x8000-0x80ff时,cpu可对sja1000执行相应的读/写操作。sja1000的rd、wr和ale分别与c8051f020的对应引脚相连,int接c8051f020的int0引脚,于是c8051f020可通过中断方式访问sja1000。sja1000的复位信号rst为低电平有效。c8051f020的ad0-ad7口用于地址/数据的输入/输出,将其配置为漏极开路方式,利用4.7kω上拉电阻器拉至5v。通过设置数字交叉开关,将c8051f020的外部中断引脚配置到p2.7口。
can能够使用多种物理介质,例如双绞线和光纤等。该设计方案采用双绞线。信号以差分电压传送,2条信号线为can_h和can_l,静态时为2.5v,此时状态表示逻辑"1",也叫做"隐性"。can_h比can_l高,表示逻辑"0",称为"显性",此时can_h=3.5v,can_l=1.5v。tja1050型can总线收发器是can协议控制器和物理总线之间的接口,can总线上二端节点须加60ω电阻器和47nf电容器将信号吸收,以避免信号反射。为了增强can总线节点的抗干扰能力,sja1000的tx1与rx1通过6n137型高速光耦后与tja1050相连。这样就很好地实现了总线上各can节点间的电气隔离。其中,光耦部分电路的2个电源vcc和v_can必须完全隔离,否则采用光耦就是失去了意义。电源的完全隔离可采用小功率电源隔离模块和通过带多个5v隔离输出的开关电源模块实现。
3.2 软件设计
通信协议采用"id+命令+数据+校验"的形式,其中id为网络设备的标识符,采用id.18-id.20。标识符id.21-id.28作为固定命令,不参与验收滤波。数据表示通信的具体内容。校验为1个字节,采用校验和的形式,由于can总线本身具有15位crc校验,并且该系统节点数少,竞争不会很激烈,通信可靠性比较高。
软件设计思想为系统上电后c8051f020先对自身和sja1000进行初始化以确定工作主频、波特率和输出特性等,然后接收来自甲板上位机的控制命令,同时将获取的采样参数通过sja1000传送到can总线上或备份到flash存储器中;对sja1000的初始化设计是重点,也是难点,必须对写入每个寄存器的内容进行仔细和全面考虑,否则系统将无法正常运行。可设上位机sja1000适配卡的acr为xx20,amr为ff00。水下测控中心sja1000的acr为xx40,amr为ff00。
遵循上述思路,笔者采用c51编写了应用软件,下面是部分程序清单。
由于深海测控系统对通信的实时性要求很高,一旦接收到甲板上传来的控制命令就必须及时响应,为此从can总线上接收信息采用中断方式。即sja1000无错地接收到消息后使int变为低电平,下降沿触发c8051f020的外部中断0,使其进入中断服务程序。其流程如图3所所示。

如果要向can总线发送数据,则必须将符合peilcan帧格式的一组数据写入sja1000的发送缓冲区,然后调用发送子函数。这里笔者采用查询方式来实现发送。流程如图4所示。

4 结束语
基于sja1000型can控制器的深海测控系统基本上满足了功耗低、体积小、重量轻、易扩展的要求,同时与甲板上位机之间的通信可靠,完全能满足深海探测的需要,并能广泛应用于海洋油、气田作业,海洋污染监控和防治,海上渔业生产等,前景广阔。
评论