CAN总线技术在船舶监控系统的应用

AN(Controller Area Network),即控制局域网,是一种具有很高可靠性、支持分布式和实时控制的串行通信网络。CAN为多主方式工作,网络上任意节点均可在任意时刻主动地向网络上其它节点发送信息,而不分主从,且无需站地址等节点信息,通讯灵活。CAN协议模型结构只有3层,即只取OSI底层的物理层、数据链路层和应用层。CAN的最大特点是可靠性高,其节点在错误严重的情况下具有自动关闭输出功能,以使总线上其它操作不受影响。CAN的直接通信距离最远可达10km(速率在5kbps以下),通信速率最高可达1Mbps(此时通信距离最长为40m)。其通信介质可为双绞线、同轴电缆或光纤,选择灵活。CAN上的节点数主要取决于总线驱动电路,目前可达110个。在标准帧报文标识符有11位,而在扩展帧的报文标识符(29位)的个数几乎不受限制。 
   
  1 CAN总线在船舶的应用 
   
  CAN在船舶中的应用始于20世纪90年代初。1994年德国MTU公司成功地研制了基于CAN的MCS-51监控系统,开创了CAN网络船舶系统应用的新纪元。此后,CAN网络被广泛地用于船舶的远程控制、巡回检测、电站监控以及火灾报警系统中。CAN网络在船舶控制系统中的成功应用为解决船舶设备级(传感器、执行器、控制模块)的互联网络通信问题提供了新的数据传输协议,并由CAN控制器硬件完成协议的功能和服务。在CAN网络中,通过一根可同时传输电源和数据信号的总线可将所有满足CAN协议的设备挂接,并提供点对点、一点对多点和广播式三种通信方式。针对CAN在船舶中的日益广泛应用,美国国家海洋电子协会(NMEA,national marine electrons assciation)扩展了原有的NMEA0813协议,形成了新的NMEA2000协议,为CAN网络在船舶中应用制定了统一的标准和接口协议。 
   
  2 监控系统的基本结构 
   
  在一个监控系统中,测量、控制和执行单元是必不可少的。同时,在一个基本的通信网络中,网络硬件和协议控制器也是必需的。典型的基于CAN的监控系统结构设计如图1所示。 
  

  在图1中,基于CAN的监控系统包括以下几个部分: 
  (1)上位PC机收集总线上传输的所有信息,对系统的运行状态进行监控,检测所有设备的运行参数的调整及越限时的声光报警等功能。并通过CAN接口卡接入网络之中。 
  (2)智能测控单元(下位机系统)包括智能传感器、智能执行器和智能控制器等,它们被安装在测控现场,用于直接获取现场设备的参数或者执行相应操作和功能。智能测控单元和传统设备相比,区别在于它们本身带有支持CAN总线通信协议的CAN控制器模块。因而,单元3不仅可与上位机系统通信,同时也可根据系统设计需要从单元1接收数据或者向单元;2发送数据,实现现场底层设备之间的通信,这点对于某些系统来说是非常重要的。 
  2.1智能测控单元CAN通讯接口设计 
  智能测控单元主要以Cygnal公司出品的C8051F040单片机为核心构成。该单片机是完全集成的混合信号系统级芯片(SOC),具有与MCS-51完全兼容的指令内核。内部采用流水线结构,机器周期由标准的12个系统周期将为1个系统周期,峰值性能达到25MIPS。此外,C8051F040的内能还集成有CAN控制器、高速A/D转换器等,可以简化系统设计。C8051F040集成的是CAN控制器,要使CAN总线得以运行,还需在单片机上接CAN收发器,进行电气转换,将逻辑信号转换为平衡差分码。常用的CAN收发器为PHILIPS公司出品的PCA82C250、高速TJA1050等。这里选用的是PCA82C250,它可以提供对总线的差动发送和接收功能,与ISO11898标准完全兼容,有三种不同的工作方式,即高速(最高可达1Mbps)、斜率控制和待机,可根据实际情况选择。 
  C8051F040中的CAN的工作位速率可达1Mbps,实际速率可能受CAN总线上所选择的传输数据的物理层的限制。CAN处理器有32个消息对象,可以被配置为发送或接收数据。输入数据、消息对象及其标识掩码存储在CAN消息RAM中。所有数据发送和接收过滤的协议处理全部由CAN控制器完成,不需要CIP-51干预,这就使得用于CAN通信对CPU干涉最小。 
  该CAN控制器是可实现的Bosch全功能CAN模块,完全符合CAN规范2.0A和2.0B。CAN控制器的原理框图如图2所示。CAN核提供移位输出和输入(CANTX和CANRX)、消息的串/并转换及其它协议相关的任务(如数据发送和接收过滤)。消息RAM可存储32个可以在CAN网络上接收发送的消息对象。CAN寄存器和消息处理器为CAN寄存器和消息处理器为CAN控制器和CIP-51之间的数据传送和状态通知提供接口。 
  CIP-51可以通过特殊寄存器直接或间接访问CAN控制器中的CAN控制器寄存器(CAN0CN)、CAN测试寄存器(CAN0TST)和CAN状态寄存器(CAN0STA)。其它寄存器必须通过间接索引法访问。 
  



  2.1.1CAN控制器外围硬件电路实现 
  为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器PCA82C250之间并不是直接相连,而是通过高速光耦6N173构成的隔离电路后再与PCA82C250相连,这样就可以很好的实现总线上各节点的电气隔离。此通信物理层电路图如图3所示。 
  在PCA82C250与CAN总线接口部分也采用了一些安全和抗干扰措施。PCA82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线连接,电阻可以起到一定的限流作用,从而保护PCA82C250免受过流的冲击。在CANH和CANL与地之间各自接一个30pF的小电容,可以起到滤除总线上的高频干扰和防电磁辐射的能力。另外,在CANH和CANL之间并联一个15V的瞬态电压抑制二极管(TVS),可以保护PCA82C250在瞬间高电压情况下而不受损坏。PCA82C250的RS引脚上接有一个下拉电阻,电阻的大小可根据总线速率适当的调整,其值一般在16kΩ-140KΩ之间,图3中选用47KΩ。 
  C8051F040工作电压为2.7V~3.6V,其所有I/O口允许5V(极限值5.8V)输入,但是I/O口输出电平为VDD,而PCA82C250为5V系统,为了能够驱动其工作,在CANTX引脚上接一上拉电阻,其值为4.7KΩ。 



  2.1.2CAN通信软件实现 
  下位机CAN通信部分主要完成的任务是:将检测到的数据传送给上位机或其它下位机节点。同时,上位机可以对下位机的相关参数进行设置。 
  由以上可知,CAN节点通信主要包括系统初始化、发送程序、接收程序等。在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性。 
  2.1.3系统初始化 
  初始化程序主要完成对所有报文对象的初始化(一般将所有值置零),对CAN控制器寄存器(CAN0CN)、位定时寄存器(BITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里使用外部晶振为11.0592MHz,CAN通信速率为1Mbps。 
  (1)初始化CAN控制器的一般步骤为:将SFRPAGE寄存器设置为CAN0_PAGE;将CAN0CN寄存器中的INIT和CCE位设置为1;设置位定时寄存器和BRP扩展寄存器中的时序参数;初始化每个消息对象或将其MsgVal为设置为0(无效);将INIT清零。 
  (2)初始化发送对象的过程包括设置发送消息对象的命令屏蔽寄存器;设置仲裁寄存器;消息发送方向;指明消息长度和帧类型;选择发送消息号。部分代码如下: 
  void init_msg_object_TX (char MsgNum) 
  { 
  SFRPAGE=CAN0_PAGE; 
  CAN0ADR=IF1CMDMSK; // 指向命令掩码寄存器1 
  CAN0DAT=0x00B2;// 设为写,除了标识掩码和数据位 
  CAN0ADR=IF1ARB1; // 指向仲裁寄存器 
  CAN0DAT=0x0000;// 将仲裁ID设为最高优先级 
  CAN0DAT=0xA000;// 设置消息有效位,没有扩展ID,方向为写 
  CAN0DAT=0x0088; // 数据长度为8,数据帧 
  CAN0ADR=IF1CMDRQST;// 指向命令请求寄存器 
  CAN0DAT=MsgNum;// 写消息对象号,即对哪个消息对象进行操作 
  // 3~6个CAN时钟周期后,IF寄存器中的内容将被移到CAN存储器的消息对象中 
   } 
  初始化接收对象与发送对象类似,只需要将消息发送方向改为接收即可。 
  (3)CAN启动主要包括设置位定时寄存器;设置消息对象的命令屏蔽寄存器;设置CAN允许Init位;开中断即可。代码如下: 
  void start_CAN (void) 
  { 
  SFRPAGE=CAN0_PAGE; 
  CAN0CN |=0x41; // 使能CCE和INIT位 
  CAN0ADR=BITREG; // 指向位定时寄存器 
  CAN0DAT=0x2640; // 指向命令掩码寄存器1 
  CAN0ADR=IF1CMDMSK; 
  //设置CAN RAM为写,写数据字节,置位TXrqst/NewDat,Clr IntPnd 
  CAN0DAT=0x0087; 
  CAN0ADR=IF2CMDMSK;// 指向命令掩码寄存器2 
  CAN0DATL=0x1F;//设置接收:读CAN RAM,读数据字节 
  CAN0CN |=0x06; // 全局初始化IE和SIE 
  CAN0CN &=~0x41; // 清除CCE和INIT位 
  } 
  (4)数据发送和接收。配置好以上信息,C8051F040就可以接收到CAN总线上的数据帧,执行相应命令或进行相应的数据处理,将反馈信息送入CAN数据寄存器,告知CAN发送消息号就可以将反馈数据传送到上位机处理。发送程序的部分代码如下: 
  void CAN_transmit (char MsgNum) 
  { 
  SFRPAGE=CAN0_PAGE; 
  CAN0ADR=IF1DATA1; 
  CAN0DAT=Txbuffer; 
  CAN0ADR=IF1CMDRQST; 
  CAN0DATL=MsgNum; 
  } 
   
  3 结束语 
   

  随着科学技术的不断进步,船舶自动化进一步向数字化方面发展,以开放性、分散性和数字通信为特征的现场总线体系结构,能充分适应船舶控制系统的要求。基于CAN总线的船舶监控系统具有很好的实时性,CAN现场总线技术的控制系统必将在更多的船舶上得到广泛的应用。 

参考文献: 
  [1]饶运涛,邹继军等.现场总线CAN原理与应用技术.第二版.北京航空航天大学出版社,2007. 
  [2]张培仁,孙力.基于C语言C8051F系列微控制器原理与应用.北京:清华大学出版社,2006. 
  [3]李巍等.现场总线技术在机舱自动化系统中的应用.船舶工程,2002,(2). 
  [4]蔡华锋等.C8051F040中CAN控制器的应用.应用天地,2005,(1). 
  [5]何燕平等.基于C8051F040的CAN总线智能节点设计.嵌入式网络应用. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS Engine Runtime 10 Setup步骤

首先安装ArcGIS License Manager 10 Setup 其次安装ArcGIS Engine Runtime 10 Setup 再次,拷贝service.txt文件到ArcGIS\License10.0\bin文件夹下,替换原有文件。 运行ArcGIS 许可服务管理器 - 10.0,启动服务。 最后,运行ArcGIS管…

Some Notes About Design Pattern

针对接口编程而不是实现 优先使用对象组合,而不是类继承 封装变化点 使用重构到模式,而不是直接使用设计模式 设计模式是好的面向对象设计,所以只有掌握面向对象才能更好的理解和应用设计模式 单一职责原则:一个类应该只有一个引起…

M16C

R8C/M16C提供一系列预处理指令,能够很好的优化C代码。 本文以nc30编译器为例,谈谈#pragma的用法。 1)。与内存有关的命令 #pragma ROM 将一个变量放入ROM里面,比如: #pragma ROM aa int aa; #pragma BIT 位变量申明。表…

ASP+AJAX制作无刷新新闻评论系统01

传统:上半部分评论列表直接通过数据库查询语句读取并显示,每当提交新的评论时,先传递给处理页面,处理页面处理完毕后再返回index.asp这个页面,当然index.asp是重新加载获得新的评论。  Ajax::首先列表页面…

修改Fiddler实用插件JsonViewer

在Web开发中,Fiddler是我们常用的工具,JSON是我们常用的数据格式。本文所要说的JsonViewer就是一款在Fiddler中查看JSON对象的小插件(当然它不仅仅是作为Fiddler的插件,还有独立运行版和Visual Studio的插件)。关于它的…

百度的算法面试题

第一题: 某个公司举行一场羽毛球赛,有1001个人参加,现在为了评比出“最厉害的那个人”,进行淘汰赛,请问至少需要进行多少次比赛。 淘汰赛,一场淘汰一个人,自然就需要1000场,根本不…

matlab用regress方法求ln函数_数学篇|高中数学48条秒杀型公式与方法,一定要掌握!...

「 致于学教育 」高中数学48条秒杀型公式1.适用条件:[直线过焦点],必有ecosA(x-1)/(x1),其中A为直线与焦点所在轴夹角,是锐角。x为分离比,必须大于1。注上述公式适合一切圆锥曲线。如果焦点内分(指的是焦点在所截线段上…

LSGO软件技术团队对外技术交流

LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

国外好的软件测试网站

慢慢补充 http://www.sqaforums.com/ubbthreads.php转载于:https://www.cnblogs.com/slaughter/archive/2010/10/12/1849020.html

大型项目使用Automake/Autoconf完成编译配置

使用过开源C/C项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修…

java中数组的返回值是什么类型_Java数组也是一种数据类型

Java 的数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。因为 Java 语言是面向对象的语言,而类与类之间…

LSGO软件技术团队内部技术交流

LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

Makefile.am

一般格式 文件类型 书写格式 可执行文件 bin_PROGRAMES foo foo_SOURCES xxxx.c foo_LDADD foo_LDFLAGS foo_DEPENDENCIES 静态库 lib_LIBRARIES libfoo.a foo_a_SOURCES foo_a_LDADD foo_a_LIBADD foo_a_LDFALGS 头文件 include_HEADERS foo.h 数据文件 data_DATA …

LSGO软件技术团队2015~2016学年第七周(1012~1018)总结

LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

Oralce 9.2.0.6 到 9.2.0.8 升级 小结

13号,晚上加班,将2台数据库从9.2.0.6 升级到9.2.0.8. 因为之前有个小bug,9.2.0.6 的DataGuard中会经常不能识别备库的监听,造成Data Guard不能同步。 Oracle 的升级包,path什么的,需要从metalink上下载&…

idea查询类_Spring Security入门(三): 基于自定义数据库查询的认证实战

0 引言在笔者的上一篇文章中Spring Security入门(二):基于内存的认证一文中有提到过Spring Security实现自定义数据库查询需要你实现UserDetailsService接口,并实现loadUserByUsername(String username)抽象方法。我们可以在UserDetailsService接口的实现…

vxworks点滴记录

MPC852---大端模式 对于vxWork5.5来说: vxWorks操作系统是一个进程,其间的所有任务是该进程内的线程,因为他们有统一的地址空间。没有main函数。。 对于vxWorks6来说: 你可选支持多个进程,每个进程由独立的地址空间&…

第4章操作系统基础第五版Aimin.rar

第4章操作系统基础第五版Aimin.rar转载于:https://www.cnblogs.com/emanlee/archive/2010/10/14/1851101.html

python计算小数点后有几位_python的数字类型

python的数字类型分为三种,分别是整数int、 浮点数float 和 复数complex。数字是由数字字面值或内置函数与运算符的结果来创建的, 不带修饰的整数字面值会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上 j 或 J 会生成虚…

c# 判断点是否在区域内 点在区域内 在多边形内 判断

方法一 算法 : public int isLeft(Point P0, Point P1,Point P2) { int abc ((P1.X - P0.X) * (P2.Y - P0.Y) - (P2.X - P0.X) * (P1.Y - P0.Y)); return abc; } private bool PointInFences(Point pnt1, Point[] fencePnts) { int wn 0,j…