现场总线是当今自动化领域技术发展热点之一,被誉为自动化领域计算机局域网。它出现为分布式控制系统实现各节点之间实时、可靠数据通信提供了强有力技术支持。CAN(Controller Area Network)属于现场总线范畴,它是一种有效支持分布式控制或实时控制串行通信网络。较之许多RS-485基于R线构建分布式控制系统而言,基于CAN总线分布式控制系统在以下方面具有明显优越性:
首先,CAN控制器工作于多主方式,网络中各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构逐位仲裁方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同节点同时接收到相同数据,这些特点使得CAN总线构成网络各节点之间数据通信实时性强,并且容易构成冗余结构,提高系统可靠性和系统灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询方式进行,系统实时性、可靠性较差;
其次,CAN总线通过CAN控制器接口芯片82C250两个输出端CANH和CANL与物理总线相连,而CANH端状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会出现象在RS-485网络中,当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点现象。而且CAN节点在错误严重情况下具有自动关闭输出功能,以使总线上其他节点操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。
而且,CAN具有完善通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是只仅仅有电气协议RS-485所无法比拟。另外,与其它现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点一种已形成国际标准现场总线。这些也是CAN总线应用于众多领域,具有强劲市场竞争力重要原因。硬件电路设计CAN遵循ISO标准模型,分为数据链路层和物理层。在工程上,这两层通常由CAN控制器和收发器实现。当前,市面上有两种CAN总线器件可供选择:一种是带有片上CAN微控制器,如P8XC591/2、87C196CA/CB、MC68376、PowerPC555等,使用这种集成器件方便用户制作印制板,电路图也更紧凑;另外一种是独立CAN控制器,如Philips
SJA1000、Intel公司82526以及MCP2510(具有SPI接口,方便MCU连接)等,
使用独立CAN控制器潜在优势是,系统开发人员可以根据所需从众多种类单片机中选择最理想系统设计方案。
节点微控制器选用单片机80C196KC,CAN接口由独立控制器SJA1000和CAN控制器接口芯片82C250组成。SJA1000在软件上和引脚上都是与它前款PCA82C200独立控制器兼容,并增加了许多新功能:标准帧数据结构和扩展帧数据结构,并且这两种帧格作为式都具有单/双接收过滤器;64字节接收FIFO;可读写访问错误计数器和错误限制报警以及只听方式等等。
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,以消除反射信号,其阻值约等于传输电缆特性阻抗。
软件设计
CAN总线节点要有效、实时地完成通信任务,软件的设计是关键,也是难点。它主要包括节点初始化程序、报文发送程序、报文接收程序
以及CAN总线出错处理程序等等。CAN控制器芯片SJA1000的内部寄存器是以作为微控制器的片外寄存器存在并作用的。微控制器和SJA1000之
间状态、控制和命令的交换都是通过在复位模式或工作模式下对这些寄存器的读写来完成的。在初始化CAN内部寄存器时注意使得各节点的位
速率必须一致,而且接、发双方必须同步。报文的接收主要有两种方式:中断和查询接收方式。为提高通信的实时性,文中采用中断接收方式,而且这样也可保证接收缓存器不会出现数据溢出现象。SJA1000的Basic
CAN工作模式是与其前一款PCA82C200独立控制器相兼容的模式,
而PeliCAN工作模式支持CAN协议中的更多功能,它的程序设计也与之有所不同。下面给出SJA1000工作在模PeliCAN式下的节点初始化、报文发送、报文接收的196汇编源程序。
INITIALIZE: 初始化子程序
LDB AL, #09H; 初始化模式寄存器进入复位模式
STB AL, MODE; 选择单滤波方式
LDB AL, #88H; 时钟分频器
STB AL, CDR; 选Peli CAN模式
LDB AL, #00H
STB AL, ACR0; 初始化接收代码寄存器
LDB AL, #60H
STB AL, ACR1
LDB AL, #00H
STB AL, AMR0; 初始化接屏蔽寄存器
LDB AL, #3FH; 只接收标识符为2,3的报文
STB AL, AMR1
LDB AL, #8FH
STB AL, IER; 中断使能寄存器
LDB AL, #01H; 总线定时寄存器0、1的设置
STB AL, BTR0;
LDB AL, #1CH; 在16MHz晶振情况下
STB AL, BTR1; 波特率设置为250
LDB AL, #0AAH
STB AL, OCR; 输出控制器寄存器设置
LDB AL, #0H; 接收缓存器起始地址设为0
STB AL, RBSA;
LDB AL, #01H;
ORB AL, MODE;
STB AL, MODE; 返回工作模式
RET TRANSMIT:; 发送子
程序
LDB AL, SR