基于CAN总线的工业通讯网络系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于CAN 总线的工业通讯网络系统的设计与实现
杨智伟1,孙明2
北京邮电大学自动化系 北京 北京青云航空仪表有限公司 北京 E-mail :yang.zhiwei@
摘 要:CAN(Controller Area Network )总线是一种使用CAN 协议的串行通信网络。
Silicon Laboratories 公司的单片机C8051F040是完全集成的混合信号系统级芯片,而且内部集成了CAN 控制器。
文中采用CAN 总线,设计并实现了一种稳定可靠的工业通讯网络系统。
关键词:工业控制;CAN 总线;RS232
1. 引 言
随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。
由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。
典型的分散式控制系统由现场设备、接口与计算设备以及通信设备组成。
现场总线(FIELDBUS )能同时满足过程控制和制造业自动化的需要,因而现场总线已成为工业数据总线领域中最为活跃的一个领域。
现场总线的研究与应用已成为工业数据总线领域的热点。
尽管目前对现场总线的研究尚未能提出一个完善的标准,但现场总线的高性能价格比将吸引众多工业控制系统采用。
同时,正由于现场总线的标准尚未统一,也使得现场总线的应用得以不拘一格地发挥,并将为现场总线的完善提供更加丰富的依据。
控制器局部网 CAN (Controller Area Network )正是在这种背景下应运而生的。
CAN 具有十分优越的特点,使人们乐于选择,这些特性包括:低成本、极高的总线利用率、很远的数据传输距离(10Km )、高速的数据传输效率(1Mbit/s )、可根据报文的ID 决定接收或屏蔽该报文、可靠的错误处理和检错机制、发送的信息遭到破坏以后,可自动重发、节点在错误严重的情况下具有自动退出总线的功能、报文不含源地址和目标地址,仅用标识符来指示功能信息和优先级信息。
2. CAN 总线概述
控制器局部网(CAN -Controller Area Network )是BOSCH 公司为现代汽车应用领先推出的一种多主机局部网,由于其卓越性能现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。
控制器局部网将在我国迅速普及推广。
2.1 CAN 总线特点
CAN 总线是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。
通信速率可达1MBPS 。
CAN 总线通信接口中集成了CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
CAN 协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。
采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识码可由11位或29位二进制数组成,因此可以定义211或229个不同的数据块,这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。
(100086)
(100876) 1 2
另外,CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。
CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。
CAN总线协议已被国际标准化组织认证,技术比较成熟,控制的芯片已经商品化,性价比高,特别适用于分布式测控系统之间的数通讯。
CAN总线插卡可以任意插在PC AT XT兼容机上,方便地构成分布式监控系统。
[2]
2.2 C8051F040 CAN控制器构成
C8051F040 内部集成CAN控制器是Bosch全功能CAN模块的完全实现,完全符合CAN 规范2.0B。
此CAN控制器由以下几部分构成:CAN内核、报文RAM(与C8051 RAM相互独立)、报文处理状态机制和CAN控制寄存器。
CIP-51可以通过特殊功能寄存器直接或间接访问CAN控制器中的CAN控制寄存器(CAN0CN)、CAN测试寄存器(CAN0TST)和CAN状态寄存器(CAN0STA),所有其它的寄存器只能通过CAN0ADR、CAN0DATH和CAN0DATL 寄存器以地址索引的方式间接访问。
2.3 CAN 控制器应用时寄存器配置
报文对象初始化处理是在控制器复位后,CPU对Init清0以前,需要将各个不使用的消息对象MsgVal清0,再对程序中使用的消息对象初始化。
这些操作均在Init清0以前完成。
报文对象的配置是通过相应的接口寄存器来设置其屏蔽码、仲裁场、控制场和数据场值,而这一设置过程由相应的IFX命令请求寄存器来完成。
当CAN控制寄存器中的Init位清零,CAN 内核中的CAN协议控制器状态机制和报文处理状态机制将控制C_CAN的内部数据流。
接收到的报文通过接收滤波后都存放在报文RAM中。
发送对象的配置是当报文对象作为发送对象时,仲裁寄存器(ID28-0和Xtd位)将被应用,它们定义了即将发送的报文识别符和类型,如果使用11位识别符(标准帧),那么使用的是ID28~ID18,而ID17~ID0将被忽视。
如果TxIE 位被置位,则IntPnd 位在此报文对象被成功发送后被置位;如果RmtEn位被置位,在接收到匹配的远程帧将引起TxRqst 位被置位,也就是说该消息对象能够响应其它节点的远程桢请求。
3.通讯网络系统的硬件电路实现
通讯网络系统的主要功能是完成各个控制器间以及站点和上位机之间的信息传递。
控制器有主站和子站两种,主站和子站通过网络通讯卡联接成环形网络。
子站的信息可以通过网络通讯卡传递给主站,上位机通过主站上的网络通讯卡接收全部网络的信息。
CAN 总线一般用在工业检测和控制现场,它将各功能模块连接在一起组成一个现场级通信网络。
在本应用中,网络通讯卡通过双绞线联接成环状网络,网络通讯卡之间采用CAN2.0B进行通讯。
设计应考虑到工业现场环境因素比较复杂且各个控制器之间距离较为遥远,为了防止现场CAN总线短路后烧组件,必须进行短路保护设计。
为保证控制器系统的可靠性,网络通讯卡的CAN通讯与控制器24V电源之间必须是隔离的。
网络通讯卡与
图1 网络通讯卡原理框图
网络通讯卡的CPU选用C8051F040。
C8051F040单片机具有与8051指令集完全兼容的CIP-51内核。
它在一块芯片上集成了构成一个单片机数据采样或控制系统所需要的几乎所有模拟和数字外设及其它功能部件。
它具有64KB Flash、4352B RAM、CAN控制器2.0、2个串行接口、5个16位定时器、12位A/D转换器、8位A/D转换器及12位D/A转换器等,它内部还带有JTAG接口,使调试变得非常方便。
C8051F040内部集成的CAN控制器为Bosch CAN控制器。
此CAN控制器有以下几部分构成:CAN内核、报文RAM(与C8051 RAM相互独立)、报文处理状态机制和CAN控制寄存器[3]。
由于Silicon Laboratories内部的CAN控制器只是个协议控制器,不能提供物理层驱动,所以在使用时还需外加CAN总线驱动器,本应用中使用的是P82C250T。
为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器P82C250T之间并不是直接相连,而是通过由高速光耦6N137构成的隔离电路后再与P82C250T相连,同时采用TVS管和压敏电阻和磁性元件等对干扰进行抑制,这样就可以很好的实现总线上各节点的电气隔离。
与上位机的COM2之间采用MAX202E进行电平转换,并且与COM2之间也是全隔离设计。
这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。
系统的电源采用电源模块WRB240505S,该模块是DC/DC、宽输入电压(18V-36V)、双路输出的隔离电源模块。
采用可恢复保险丝R030对总线进行短路保护。
网络通讯卡的原理图如图2所示。
图2 网络通讯卡的原理图
CAN通信部分主要完成的任务是:将现场检测到的数据传送给上位机或其它的下位机节点;同时,上位机可以对下位机的相关参考进行设置,即下位机还须接收一定量的数据。
由此可知,此节点的CAN通信主要包括系统初始化程序、发送程序、接收程序等[4]。
在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。
软件流程图入下图所示。
初始化程序主要完成对所有的报文对象进行初始化(一般将所有值置零),对CAN控制寄存器(CAN0CN)、位定时寄存器(BITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。
其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为8MHz,CAN通信速率为500k/s,得到BITREG的初始值为0x2301。
主程序中规定对象初始化、发送和接收初始化,最后才启动CAN处理机制(对BITREG和CAN0CN初始化),下面为CAN启动程序:
void start_CAN(void)
{
SFPRAGE=CAN0_PAGE; /*指向CAN0页面*/
CAN0CN|=0x41; /*将CCE和Init置“1”开始初始化*/
CAN0ADR=BITREG;/*指向位定时寄存器进行配置*/
CAN0DAT=0x2301; /*位率为500k/s*/
CAN0CN|=0x06; /*允许全局中断,IE和Sie置位*/
CAN0CN &=~0x41; /*清楚CCE和INIT位,启动CAN状态机制*/
}
CAN报文发送是由CAN控制器自动完成的,用户只需根据接收到的远程帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件来完成。
这里,我们使用定时更新发送报文对象中的数据,数据的发送有控制器自动完成,当其收到一个远程帧时,就将具有相同识别符的数据帧发送出去。
其发送程序结构如下:
Void transmit_message(char MsgNum)
{
SFRPAGE=CAN0_PAGE; /*指向CAN0页面*/
CAN0ADR=IF1CMDMSK;/*向IF1命令屏蔽寄存器写入命令*/
CAN0DAT=0X0083;
CAN0ADR=IF1ARB2; /*指向IF1仲裁寄存器2*/
CAN0DATH|=0x80;
CAN0ADR=IF1DATA1; /*指向数据场的第一个字节*/
for(i=0;i<4;i++){
CAN0DAT=can_temp[i]; /*将4字节数据写入发送缓冲器*/
}
CAN0ADR=IF1CMDRQST;
/*将报文对象编号写入*/
CAN0DATL=MsgNum;
}
CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存
void receive_data(void) {
SFRPAGE=CAN0_PAGE; /*指向CAN0页面*/ CAN0ADR=IF1CMDMSK ;/*向IF1命令屏蔽寄存器写入命令*/
CAN0DAT=0X0083;
CAN0ADR=IF1ARB2; /*指向IF1仲裁寄存器2*/ CAN0DATH|=0x80;
CAN0ADR=IF1DATA1; /*指向数据场的第一个字节*/ for(i=0;i<4;i++) {
CAN0DAT=can_temp[i]; /*将4字节数据写入发送缓冲器*/ }
CAN0ADR=IF1CMDRQST ;
CAN0DATL=MsgNum; /*将报文对象编号写入*/ }
5. 结论
文中基于CAN 总线的工业网络通讯系统物理层电路完全能够使用,而且抗干扰能力较强,已成功应用于某大型电站的工业安全系统中。
CAN 总线以其稳定的特性、低廉的价格将会被更多用户所使用,而集成于微控制器内部的CAN 控制器更是在设计过程中的首选。
参考文献
[1] 邬宽明.CAN 总线原理和应用系统设[M ].北京:北京航空航天大学出版社. [2] C_CAN User ’s Manual Revision 1.2 Bosch [Z ].
[3] 潘琢金.C8051F040/1/2/3/4/5/6/7 混合信号ISP FLASH 微控制器数据手册[M ]:新华龙电子有限公
司.
[4] 童长飞.C8051F 系列单片机开发与C 语言编程[M ].北京:北京航空航天大学出版社,2005. [5] 徐爱钧,彭秀华.单片机高级语言C51 Windows 环境编程与应用[M ].北京:电子工业出版社.
Design and Implementation of Industry Communication
Network System Based on CAN Bus
Yang Zhiwei SunMing
CAN (Controller Area Network) bus is a kind of serial communication network using CAN
protocol. Single Chip Processor C8051F040 belonged to Silicon Laboratories company are fully integrated mixed-signal System-on-a-Chip, and an integrated CAN2.0 controller. The design in this paper is to use the CAN bus to complete the task of a stable and reliable industry communication network system.
Keywords: Industry Control, CAN Bus, RS232
Beijing University of Post and Telecommunication ,Beijing (100876)
Beijing Keeven Aviation Instrumeng co.,Ltd.,Beijing (100086)
Abstract。