📄 基于can总线分布控制系统智能节点的设计.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.bol-system.com/APPLICATION/can-node.htm -->
<HTML><HEAD><TITLE>基于CAN总线分布控制系统智能节点的设计</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JavaScript type=text/JavaScript>
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</SCRIPT>
<META content="MSHTML 6.00.2900.2668" name=GENERATOR></HEAD>
<BODY background=基于CAN总线分布控制系统智能节点的设计.files/bg.gif>
<DIV id=Layer1
style="Z-INDEX: 1; LEFT: 8px; WIDTH: 772px; POSITION: absolute; TOP: 130px; HEIGHT: 1846px">
<TABLE height=560 width=764 border=0>
<TBODY>
<TR>
<TD vAlign=top borderColor=#ffffff align=left width=70 bgColor=#99ccff
height=1827> </TD>
<TD vAlign=top align=left width=684 height=1827>
<TABLE height=308 width=668 border=0>
<TBODY>
<TR>
<TD height=27>
<DIV align=right><FONT color=#ff0000 size=2>...::<A
href="http://www.bol-system.com/Application.HTM"><FONT
color=#666699><B>进入更多文章</B></FONT></A>:..</FONT></DIV></TD></TR>
<TR>
<TD height=22>
<DIV align=center><B><FONT color=#0000ff
size=4>基于CAN总线分布式控制系统智能节点的设计</FONT></B></DIV></TD></TR>
<TR>
<TD height=16>
<DIV align=center><FONT color=#0000ff
size=2>北方交通大学电气工程学院 欧德翔 汪至中</FONT>
</DIV></TD></TR>
<TR>
<TD vAlign=top height=472><FONT color=#0000ff size=2> </FONT>
<P><B><FONT color=#0000ff size=3>前言</FONT></B>
</P>
<P><FONT color=#0000ff
size=2>现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。CAN(Controller
Area
Network)属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之目前许多RS-485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性:</FONT></P>
<P><FONT color=#0000ff
size=2>首先,CAN控制器工作于多主方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差;</FONT></P>
<P><FONT color=#0000ff
size=2>其次,CAN总线通过CAN控制器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会出现象在RS-485网络中,当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。</FONT></P>
<P><FONT color=#0000ff
size=2>而且,CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周</FONT><FONT
color=#0000ff
size=2>期,这些是只仅仅有电气协议的RS-485所无法比拟的。另外,与其它现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高</FONT><FONT
color=#0000ff size=2>等诸多特点的一种已形成国际标准的现场总线。这些也是目前
CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。</FONT> </P>
<P> <B><FONT color=#0000ff
size=3>硬件电路设计</FONT></B> </P>
<P><FONT color=#0000ff
size=2>CAN遵循ISO的标准模型,分为数据链路层和物理层。在工程上,这两层通常由CAN控制器和收发器实现的。当前,市面上有两种CAN总线器件可供选择:一种是带有片上CAN的微控制器,如P8XC591/2、87C196CA/CB、MC68376、PowerPC555等,使用这种集成器件方便用户制作印制板,电路图也更紧凑;另外一种是独立的CAN控制器,如Philips
SJA1000、Intel公司82526以及MCP2510(具有SPI接口,方便MCU连接)等,
使用独立的CAN控制器的潜在优势是,系统开发人员可以根据所需从众多种类的单片机中选择最理想的系统设计方案。
</FONT> </P>
<P><FONT color=#0000ff
size=2>作者设计的智能节点硬件电路图略(详见《电子产品世界》2002.10)。</FONT></P>
<P><FONT color=#0000ff
size=2>节点微控制器选用单片机80C196KC,CAN接口由独立控制器SJA1000和CAN控制器接口芯片82C250组成。SJA1000在软件上和引脚上都是与它的前款PCA82C200独立控制器兼容的,并增加了许多新功能:标准帧数据结构和扩展帧数据结构,并且这两种帧格作为式都具有单/双接收过滤器;64字节的接收FIFO;可读写访问的错误计数器和错误限制报警以及只听方式等等。<BR></FONT></P>
<P><FONT color=#0000ff size=2>SJA1000有两种工作模式:Basic
CAN模式和PeliCAN模式,其中PeliCAN模式全面支持CAN2.0B协议。SJA1000作为微控制器的片外扩展芯片,其片选引脚CS接在微控制器的地址译码器上,从而决定了CAN控制器各寄存器的地址。SJA1000通过CAN控制器接口芯片82C250连接在物理总线上。82C250器件提供对总线的差动发送能力和对CAN控制器的差动接受能力,完全和“ISO11898”标准兼容。其引脚8允许选择三种不同的工作方式:高速、斜率控制和待机。在低速和总线长度较短时,一般采用斜率控制方式,限制上升和下降斜率,降低射频干扰,斜率可通过由引脚8至地连接的电阻进行控制。斜率正比于引脚8上的电流输出。为进一步提高系统抗干扰能力,在CAN控制器SJA1000和CAN控制器接口82C250之间加接6N137光电隔离芯片,并采用DC-DC变换器隔离电源。通信信号传输到导线的端点时会发生反射,反射信号会干扰正常信号的传输,因而总线两端接有终端电阻R1、R2,以消除反射信号,其阻值约等于传输电缆的特性阻抗。
</FONT></P>
<P> <B><FONT color=#0000ff size=3>软件设计</FONT></B>
</P>
<P><FONT color=#0000ff
size=2>CAN总线节点要有效、实时地完成通信任务,软件的设计是关键,也是难点。它主要包括节点初始化程序、报文发送程序、报文接收程序
以及CAN总线出错处理程序等等。CAN控制器芯片SJA1000的内部寄存器是以作为微控制器的片外寄存器存在并作用的。微控制器和SJA1000之
间状态、控制和命令的交换都是通过在复位模式或工作模式下对这些寄存器的读写来完成的。在初始化CAN内部寄存器时注意使得各节点的位
速率必须一致,而且接、发双方必须同步。报文的接收主要有两种方式:中断和查询接收方式。为提高通信的实时性,文中采用中断接收方式,而且这样也可保证接收缓存器不会出现数据溢出现象。SJA1000的Basic
CAN工作模式是与其前一款PCA82C200独立控制器相兼容的模式,
而PeliCAN工作模式支持CAN协议中的更多功能,它的程序设计也与之有所不同。下面给出SJA1000工作在模PeliCAN式下的节点初始化、报文发送、报文接收的196汇编源程序。
</FONT><BR></P>
<TABLE height=370 width="100%" border=1>
<TBODY>
<TR>
<TD width="47%" height=378><FONT color=#0000ff
size=2>INITIALIZE: 初始化子程序 <BR>LDB AL,
#09H; 初始化模式寄存器进入复位模式 <BR>STB AL, MODE; 选择单滤波方式
<BR>LDB AL, #88H; 时钟分频器 <BR>STB AL,
CDR; 选Peli CAN模式 <BR>LDB AL, #00H <BR>STB AL,
ACR0; 初始化接收代码寄存器 <BR>LDB AL, #60H <BR>STB AL, ACR1
<BR>LDB AL, #00H <BR>STB AL, AMR0; 初始化接屏蔽寄存器 <BR>LDB AL,
#3FH; 只接收标识符为2,3的报文 <BR>STB AL, AMR1 <BR>LDB AL, #8FH
<BR>STB AL, IER; 中断使能寄存器 <BR>LDB AL, #01H;
总线定时寄存器0、1的设置 <BR>STB AL, BTR0; <BR>LDB AL, #1CH;
在16MHz晶振情况下 <BR>STB AL, BTR1; 波特率设置为250 <BR>LDB AL,
#0AAH <BR>STB AL, OCR; 输出控制器寄存器设置 <BR>LDB AL,
#0H; 接收缓存器起始地址设为0 <BR>STB AL, RBSA; <BR>LDB AL,
#01H; <BR>ORB AL, MODE; <BR>STB AL, MODE; 返回工作模式
<BR>RET</FONT></TD>
<TD width="53%" height=378><FONT color=#0000ff
size=2>TRANSMIT:;
发送子程序 <BR>LDB AL, SR <BR>SRCVE: JBS AL,4, SRCVE;正接收?
<BR>STRSV: JBC AL,3, STRSV;发送成功? <BR>STBF: JBC AL, 2, STBF;
发送缓存器锁定否 <BR>WID: LDB AL, #08H <BR>LD BX,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -