基于CAN总线的现场设备控制管理系统
时间:12-04
来源:互联网
点击:
一. CAN总线的特点
CAN(Controller Area Network)总线协议最初是以研发和生产汽车电子产品著称的德国BOSCH公司开发的,它是一种支持分布式实时控制系统的串行通信局域网。目前,CAN总线以其高性能、高可靠性、实时性等优点,而被广泛应用于控制系统中的检测和执行机构之间的数据通信中。CAN总线具有以下一些技术特性:
1.多主方式工作,采用非破坏性的基于优先权的总线仲裁技术;
2.借助接收滤波可实现多地址的帧传送;
3.数据采用短帧结构,抗干扰性强,数据帧的信息CRC校验及其它错误检测措施完善;
4.发送期间丢失仲裁或由于出错而遭破获的帧可以自动重发;
5.严重错误时可自动关闭总线功能,以使总线其它操作不受影响。
CAN总线符合ISO11898标准,最大传输速率为1MB/s时传输距离最大为40m;传输速率为5kB/s时的最大传输距离为10km。CAN总线的传输介质可为双绞线、同轴电缆等。由于CAN总线是一种很有发展前景的现场总线,因此得到了国际上很多大公司的支持,加之基于CAN总线的硬件接口简单,编程方便,系统容易集成。因此它特别适用于系统分布比较分散、实时性要求高、现场环境干扰大的场合。
二. 本项目概述及系统总体结构
笔者所在公司的技术中心有各种各样汽车零部件试验设备100余台,且分布在相隔较远的不同试验区域,许多试验设备(如高低温环境模拟试验箱,振动试验台,各种零部件疲劳耐久试验台等)需要24小时连续不间断地运行,为了更好地设计开发汽车零部件,需要对试验过程中试验台架运行情况进行记录,因此如何集中地监控,管理这些试验设备的运行显得颇为重要。
本课题以每台试验设备为网络节点,用双绞线架构CAN总线设备网,对每个节点实时地采集数据,输出控制。设备网的固定节点(地址为00号)同时作为网关,通过这台通用PC服务器终端将CAN-bus网络连至以太网,由以太网架构信息网,在PC服务器终端平台上用VB或VC++ 开发用户层的应用程序,用来监控各个试验台架的运行情况,并创建网络数据库记录下各个CAN节点设备的数据。使得每个零部件设计工程师通过连至以太网上的各自的办公电脑在办公室里就可以访问PC服务器终端,获取所需的零部件试验设备运行情况数据,从而更好地对零部件试验结果进行分析。
![](../img/eep/emb/emb-33948aj2z4jpbdfb.gif)
三. CAN总线设备网与以太信息网的网关
连接CAN总线设备网与以太信息网的网关是一台通用PC终端。在通用PC终端中安装1个标准以太网接口卡和1个USBCAN-I接口卡,这样就能方便地实现一个连接CAN总线设备网与以太信息网的网关。
应用程序开发可以使用VB或VC++等高级语言在PC平台上实现,应用程序是一个WIN 32监控程序及网络数据库(记录CAN节点设备数据)的软件。所有的CAN总线节点组成一个虚拟网段,CAN设备管理服务器是公司以太网中的任一节点。连在以太网上的WinNT服务器安装专用网络管理软件,就可让合法的工程技术人员远程管理CAN总线节点设备;通过以太网,可同CAN总线节点设备进行数据通信。这样,服务器就可以使用WEB发布方式,向网络客户提供动态交互式浏览网页等功能。
四. CAN 节点的设计
1.CAN节点的硬件设计
本CAN节点的电路原理简图如图2所示。该电路的三个核心器件是单片机ADμC812、CAN总线控制器SJA1000和CAN总线驱动器PCA82C250。
![](../img/eep/emb/emb-33949taxofq3gyub.gif)
ADμC812是高度集成、高精度12位数据采集系统,该产品在其内核中集成了带有片内可重编程非易失性闪速/电擦除程序存储器的高性能8位(与8051兼容)MCU和多通道(8个输入通道)12位ADC。由于ADμC812只需要通过其串口模块和计算机的串口进行连接,而不需要额外的仿真器,因而可利用ADI公司的QUICKSTART软件来实现程序的在线下载、在线调试和在线仿真,从而极大地提高了工作效率。这也是本设计使用MAX232的原因。
SJA1000作为微控制器的片外扩展芯片,其片选引脚CS应接在微控制器的P2.0 上,以用于决定CAN控制器各寄存器的地址。SJA1000通过CAN总线驱动器PCA82C250连接在物理总线上。PCA82C250器件可提供对总线的差动发送能力和对CAN控制器的差动接受能力,它同时完全和“ISO11898”标准兼容。由于通信信号传输到导线的端点时会发生反射,而且反射信号会干扰正常信号的传输,因此,总线两端应接有终端电阻R1、R2,以消除反射信号,其阻值应当与传输电缆的特性阻抗大致相当。
2.CAN节点的软件设计
本节点的软件编程主要包括A/D转换(ADC)、CAN控制器的初始化、CAN总线数据的发送和接收等几个部分。主程序的流程图如图3所示。
![](../img/eep/emb/emb-33950dw0xf11turx.gif)
下面分别对这几个主要部分的程序设计做一介绍。
2.1 A/D转换部分
笔者在本设计中采用的是单步A/D转换模式,并将A/D转换结果存入指定的数据存储区。具体步骤如下:
(1)通过设置ADC控制寄存器(ADCCON1和ADCCON(2)的值来确定A/D转换的工作状态和采样通道号;
(2)使能ADC中断,置位SCONV位以启动单步A/D转换;
(3)等待响应ADC中断,并进入中断服务程序;
(4)把采样所得的数据从ADCDATAL和ADC-DATAH两个特殊寄存器中取出,并存入预设的片内数据存储器中,然后退出中断服务程序;
(5)判断所需通道是否采样完毕,如果未完成,则设置采样通道号并返回步骤(2),若完成则退出A/D转换子程序。
通过该程序可随时根据实际需要更改采样通道数,并将采样结果直接存入指定数据存储区,以为今后向CAN总线发送所得数据提供便利。
2.2 SJA1000的初始化
CAN的通信协议主要是由CAN控制器完成的,因此,要想实现CAN节点的数据传送,对CAN控制器的初始化是十分关键的。这个步骤直接决定着该CAN网络系统各节点所共同遵守的协议。对SJA1000进行初始化实际上就是通过单片机向其片内的各个寄存器写入控制字的过程,其寄存器包括以下几个:
REG CONTROL―内部控制寄存器地址;
REG COMMAND―内部命令寄存器地址;
REG STATUS ―内部状态寄存器地址;
REG INTERRUPT―内部中断寄存器地址;
REG ACR―内部验收代码寄存器地址;
REG AMR―内部验收屏蔽寄存器地址;
REG BTR0―总线定时寄存器0;
REG BTR1―总线定时寄存器1;
REG OCR―输出控制寄存器。
其中:BTR0、BTR1寄存器的内容可用于决定系统通信的波特率和CAN协议物理层中的同步跳转宽度,因此,对于一个系统中的所有节点,这两个寄存器的内容必须相同(包括上位机),否则将无法进行通信;OCR寄存器的内容用于决定CAN控制器的输出方式;而写入ACR、AMR寄存器的内容则要根据实际的网络系统和报文标志符来决定。本设计中笔者采用的是BasicCAN模式。
完成初始化后,CAN控制器就能正常运行了,但是要实现具体的数据收发任务,还必须编制特定的收、发程序。
2.3 CAN总线数据的发送和接收
(1)发送部分的程序设计
用CAN总线发送数据的流程图如图4所示。实际上,在程序运行过程中,常常会在发送某一帧数据时发现上一帧的数据还没有完全发送完毕(可以通过查询状态寄存器REG STATUS的第4位BIT TCS的显、隐状态可了解上次数据的发送情况)。因此,笔者采用的处理方法是:通过指令启动本次发送之后,就不停地查询状态寄存器,以判断本次发送是否完成,直到确定完成为止。这样可以为下次发送提供便利,同时也有利于程序的顺利执行,从而避免出现错误。
![](../img/eep/emb/emb-33951ahk554z4bo4.gif)
![](../img/eep/emb/emb-33952hzrpes024ei.gif)
(2)接收部分的程序设计
图5所示是该系统接收部分的软件流程图。实际上,在对响应速度要求不太高的场合,以查询方式来设计接收子程序是最简单、最可靠的方式。如果总线上有数据发往本节点,则通过查询状态寄存器的第1位BIT_RBS的位状态,便可得知接收缓冲区(RXFIFO)中的可用信息,然后通过软件将RXFIFO中的数据逐个“移入”到指定的片内存储空间即可。对于这样一个主要以数据采集功能为主的CAN节点,这些数据多半是由CAN网络中的“控制中心”发来的控制信号,设计时把它们留给ADμC812进一步处理就可以了。
参考文献
1 Bosch 公司 CAN 协议规范 V2.0版本
2 肖海荣 周风余.基于SJA1000的CAN总线系统智能节点设计 计算机自动测量与控制 2001、9(2)
3 邬宽明.CAN总线原理和应用系统设计,北京航空航天大学出版社
4 SJA1000独立CAN控制器介绍,广州周立功单片机发展有限公司.
5 独立CAN器件SJA1000的应用,东南大学学报,2002年3月.
CAN(Controller Area Network)总线协议最初是以研发和生产汽车电子产品著称的德国BOSCH公司开发的,它是一种支持分布式实时控制系统的串行通信局域网。目前,CAN总线以其高性能、高可靠性、实时性等优点,而被广泛应用于控制系统中的检测和执行机构之间的数据通信中。CAN总线具有以下一些技术特性:
1.多主方式工作,采用非破坏性的基于优先权的总线仲裁技术;
2.借助接收滤波可实现多地址的帧传送;
3.数据采用短帧结构,抗干扰性强,数据帧的信息CRC校验及其它错误检测措施完善;
4.发送期间丢失仲裁或由于出错而遭破获的帧可以自动重发;
5.严重错误时可自动关闭总线功能,以使总线其它操作不受影响。
CAN总线符合ISO11898标准,最大传输速率为1MB/s时传输距离最大为40m;传输速率为5kB/s时的最大传输距离为10km。CAN总线的传输介质可为双绞线、同轴电缆等。由于CAN总线是一种很有发展前景的现场总线,因此得到了国际上很多大公司的支持,加之基于CAN总线的硬件接口简单,编程方便,系统容易集成。因此它特别适用于系统分布比较分散、实时性要求高、现场环境干扰大的场合。
二. 本项目概述及系统总体结构
笔者所在公司的技术中心有各种各样汽车零部件试验设备100余台,且分布在相隔较远的不同试验区域,许多试验设备(如高低温环境模拟试验箱,振动试验台,各种零部件疲劳耐久试验台等)需要24小时连续不间断地运行,为了更好地设计开发汽车零部件,需要对试验过程中试验台架运行情况进行记录,因此如何集中地监控,管理这些试验设备的运行显得颇为重要。
本课题以每台试验设备为网络节点,用双绞线架构CAN总线设备网,对每个节点实时地采集数据,输出控制。设备网的固定节点(地址为00号)同时作为网关,通过这台通用PC服务器终端将CAN-bus网络连至以太网,由以太网架构信息网,在PC服务器终端平台上用VB或VC++ 开发用户层的应用程序,用来监控各个试验台架的运行情况,并创建网络数据库记录下各个CAN节点设备的数据。使得每个零部件设计工程师通过连至以太网上的各自的办公电脑在办公室里就可以访问PC服务器终端,获取所需的零部件试验设备运行情况数据,从而更好地对零部件试验结果进行分析。
![](../img/eep/emb/emb-33948aj2z4jpbdfb.gif)
三. CAN总线设备网与以太信息网的网关
连接CAN总线设备网与以太信息网的网关是一台通用PC终端。在通用PC终端中安装1个标准以太网接口卡和1个USBCAN-I接口卡,这样就能方便地实现一个连接CAN总线设备网与以太信息网的网关。
应用程序开发可以使用VB或VC++等高级语言在PC平台上实现,应用程序是一个WIN 32监控程序及网络数据库(记录CAN节点设备数据)的软件。所有的CAN总线节点组成一个虚拟网段,CAN设备管理服务器是公司以太网中的任一节点。连在以太网上的WinNT服务器安装专用网络管理软件,就可让合法的工程技术人员远程管理CAN总线节点设备;通过以太网,可同CAN总线节点设备进行数据通信。这样,服务器就可以使用WEB发布方式,向网络客户提供动态交互式浏览网页等功能。
四. CAN 节点的设计
1.CAN节点的硬件设计
本CAN节点的电路原理简图如图2所示。该电路的三个核心器件是单片机ADμC812、CAN总线控制器SJA1000和CAN总线驱动器PCA82C250。
![](../img/eep/emb/emb-33949taxofq3gyub.gif)
ADμC812是高度集成、高精度12位数据采集系统,该产品在其内核中集成了带有片内可重编程非易失性闪速/电擦除程序存储器的高性能8位(与8051兼容)MCU和多通道(8个输入通道)12位ADC。由于ADμC812只需要通过其串口模块和计算机的串口进行连接,而不需要额外的仿真器,因而可利用ADI公司的QUICKSTART软件来实现程序的在线下载、在线调试和在线仿真,从而极大地提高了工作效率。这也是本设计使用MAX232的原因。
SJA1000作为微控制器的片外扩展芯片,其片选引脚CS应接在微控制器的P2.0 上,以用于决定CAN控制器各寄存器的地址。SJA1000通过CAN总线驱动器PCA82C250连接在物理总线上。PCA82C250器件可提供对总线的差动发送能力和对CAN控制器的差动接受能力,它同时完全和“ISO11898”标准兼容。由于通信信号传输到导线的端点时会发生反射,而且反射信号会干扰正常信号的传输,因此,总线两端应接有终端电阻R1、R2,以消除反射信号,其阻值应当与传输电缆的特性阻抗大致相当。
2.CAN节点的软件设计
本节点的软件编程主要包括A/D转换(ADC)、CAN控制器的初始化、CAN总线数据的发送和接收等几个部分。主程序的流程图如图3所示。
![](../img/eep/emb/emb-33950dw0xf11turx.gif)
下面分别对这几个主要部分的程序设计做一介绍。
2.1 A/D转换部分
笔者在本设计中采用的是单步A/D转换模式,并将A/D转换结果存入指定的数据存储区。具体步骤如下:
(1)通过设置ADC控制寄存器(ADCCON1和ADCCON(2)的值来确定A/D转换的工作状态和采样通道号;
(2)使能ADC中断,置位SCONV位以启动单步A/D转换;
(3)等待响应ADC中断,并进入中断服务程序;
(4)把采样所得的数据从ADCDATAL和ADC-DATAH两个特殊寄存器中取出,并存入预设的片内数据存储器中,然后退出中断服务程序;
(5)判断所需通道是否采样完毕,如果未完成,则设置采样通道号并返回步骤(2),若完成则退出A/D转换子程序。
通过该程序可随时根据实际需要更改采样通道数,并将采样结果直接存入指定数据存储区,以为今后向CAN总线发送所得数据提供便利。
2.2 SJA1000的初始化
CAN的通信协议主要是由CAN控制器完成的,因此,要想实现CAN节点的数据传送,对CAN控制器的初始化是十分关键的。这个步骤直接决定着该CAN网络系统各节点所共同遵守的协议。对SJA1000进行初始化实际上就是通过单片机向其片内的各个寄存器写入控制字的过程,其寄存器包括以下几个:
REG CONTROL―内部控制寄存器地址;
REG COMMAND―内部命令寄存器地址;
REG STATUS ―内部状态寄存器地址;
REG INTERRUPT―内部中断寄存器地址;
REG ACR―内部验收代码寄存器地址;
REG AMR―内部验收屏蔽寄存器地址;
REG BTR0―总线定时寄存器0;
REG BTR1―总线定时寄存器1;
REG OCR―输出控制寄存器。
其中:BTR0、BTR1寄存器的内容可用于决定系统通信的波特率和CAN协议物理层中的同步跳转宽度,因此,对于一个系统中的所有节点,这两个寄存器的内容必须相同(包括上位机),否则将无法进行通信;OCR寄存器的内容用于决定CAN控制器的输出方式;而写入ACR、AMR寄存器的内容则要根据实际的网络系统和报文标志符来决定。本设计中笔者采用的是BasicCAN模式。
完成初始化后,CAN控制器就能正常运行了,但是要实现具体的数据收发任务,还必须编制特定的收、发程序。
2.3 CAN总线数据的发送和接收
(1)发送部分的程序设计
用CAN总线发送数据的流程图如图4所示。实际上,在程序运行过程中,常常会在发送某一帧数据时发现上一帧的数据还没有完全发送完毕(可以通过查询状态寄存器REG STATUS的第4位BIT TCS的显、隐状态可了解上次数据的发送情况)。因此,笔者采用的处理方法是:通过指令启动本次发送之后,就不停地查询状态寄存器,以判断本次发送是否完成,直到确定完成为止。这样可以为下次发送提供便利,同时也有利于程序的顺利执行,从而避免出现错误。
![](../img/eep/emb/emb-33951ahk554z4bo4.gif)
![](../img/eep/emb/emb-33952hzrpes024ei.gif)
(2)接收部分的程序设计
图5所示是该系统接收部分的软件流程图。实际上,在对响应速度要求不太高的场合,以查询方式来设计接收子程序是最简单、最可靠的方式。如果总线上有数据发往本节点,则通过查询状态寄存器的第1位BIT_RBS的位状态,便可得知接收缓冲区(RXFIFO)中的可用信息,然后通过软件将RXFIFO中的数据逐个“移入”到指定的片内存储空间即可。对于这样一个主要以数据采集功能为主的CAN节点,这些数据多半是由CAN网络中的“控制中心”发来的控制信号,设计时把它们留给ADμC812进一步处理就可以了。
参考文献
1 Bosch 公司 CAN 协议规范 V2.0版本
2 肖海荣 周风余.基于SJA1000的CAN总线系统智能节点设计 计算机自动测量与控制 2001、9(2)
3 邬宽明.CAN总线原理和应用系统设计,北京航空航天大学出版社
4 SJA1000独立CAN控制器介绍,广州周立功单片机发展有限公司.
5 独立CAN器件SJA1000的应用,东南大学学报,2002年3月.
- 对TTCAN的分析(05-26)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)
- μC/OS-II的多任务信息流与CAN总线驱动(07-11)
- 采用CAN总线实现DSP芯片程序的受控加载(11-08)
- 基于DSP的电动汽车CAN总线通讯技术设计(10-08)
- 基于DSP的CANopen通讯协议的实现(01-18)