关键词:现场控制网络 CAN总线 SJA1000 MCP2510
1 引言
工业现场控制存在大量传感器、电子控制单元、执行机构等,它们通常分布广,且实时性、快速性的要求较高,如何将它们连接起来组成分布式控制网络系统是现代控制系统的一个重要发展方向。现场总线控制系统(FCS)就是其中的一种典型的控制网络结构的实现。控制器局域网CAN(Controller Area Network)属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的多主串行总线,以其短报文帧及优异的CSMA/BA逐位仲裁协议而被受现场设备互连的青睐。
2 分布式控制网络系统
图 1 分布式控制网络系统
基于CAN总线的分布式控制网络系统如图1所示,采用现场总线式集散系统FDCS(Field Distributed Control System)结构,由操作站、智能节点以及CAN现场控制网络组成。操作站主要完成在线系统监控,多个智能节点各自独立完成数据采集、系统设定、运行显示控制等,通过CAN现场总线,在操作站和智能节点之间交换各种数据和管理控制信息。
3 智能节点硬件电路设计
本文介绍应用Intel 80C196KC+SJA1000及PIC16F877+MCP2510设计两种典型的CAN总线系统智能节点。
80C196KC+SJA1000智能节点硬件电路如图2所示。电路主要由四部分构成:微控制器80C196KC、独立CAN通信控制器SJA1000、CAN总线收发器82C250和高速光电耦合器6N137。微处理器80C196KC负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。
SJA1000是PHILIP公司的PCA82C200独立CAN控制器的替代产品,具有Basic CAN和Peli CAN两种工作方式。SJA1000的AD0~AD7连接到80C196的P3口,即数据总线。80C196地址总线的高三位通过译码器连到SJA1000的/CS引脚,CPU通过这些地址可对SJA1000执行相应的读写操作。SJA1000的/RD、/WR、ALE分别与80C196的对应引脚相连,/INT接80C196的外部中断引脚INT,80C196也可通过中断方式访问SJA1000。该节点中SJA1000通过并行口与80C196相连,因此,数据读写速度快,且软件编程简单,但占用I/O口多,硬件比较复杂。
图 2 80C196+SJA1000智能节点硬件电路
为了增强CAN总线节点的抗干扰能力,SJA1000的TX0和RX0通过高速光耦6N137与82C250相连,这样就很好地实现了总线上各CAN节点间的电气隔离。电源的完全隔离可采用小功率电源隔离模块或带多5V隔离输出的开关电源模块实现,这些部分虽然增加了节点的复杂程序,但却提高了节点的稳定性和安全性。
图 3 16F877+MCP2510智能节点硬件电路
以PIC16F877单片机为核心的智能节点硬件电路如图3所示,若需增加光耦隔离可采用图2的方法。MCP2510是一种带有串行外围接口SPI的独立CAN控制器,它支持CAN技术规范V2.0A/B;并能够发送的接收标准的和扩展的信息帧,同时具有接收滤波和信息管理的功能。MCP2510通过SPI接口与MCU进行数据传输,最高数据传输速率可达5Mb/s,且占用I/O口少,硬件接口简单。MCU可通过MCP2510与CAN总线上的其它MCU单元通讯。MCP2510有配置、正常、睡眠、监听、反馈等五种工作模式,内含三个发送缓冲器、二个接收缓冲器,同时还具有灵活的中断管理能力,这些特点使得MCU对CAN总线的操作变得非常简便。
4 智能节点软件初始化
CAN总线节点的软件设计主要包括三大部分:CAN节点初始化、报文发送和报文接收。初始化程序设计对于CAN总线节点的正常工作相当重要。它主要包括工作方式的设置、时钟输出寄存器的设置、接收屏蔽寄存器和接收代码寄存器的设置、总线定时器的设置、输出控制寄存器的设置和中断允许寄存器的设置。本文介绍的硬件、软件设计已在相关课题中得到应用。
4.1 SJA1000初始化子程序
80C196KC微控制器通过并行数据总线对SJA1000进行初始化,下面提供了SJA1000初始化的MCS-196汇编源程序。程序中寄存器符号表示的是SJA1000相应寄存器占用的片外存储器的地址,这些符号可在程序的头部用伪指令EQU进行定义。后文对这一点不再作特别说明。
init_SJA1000:
LDB AL,#00000001B ;进入复位模式,进行初始化
STB AL,CR
LDB AL,#00001000B ;选择Basic CAN,
STB AL,CDR ;关闭时钟输出(CLKOUT)
LDB AL,#00011011B ;开放溢出、
STB AL,CR ;错误,接收中断
LDB AL,#00000000B ;接收代码寄存器,ID为0
STB AL,RXCODE
LDB AL,#11111111B ;接收屏蔽寄存器
STB AL,RXMASK
LDB AL,#00110001B ;总线时序0
STB AL,BUS_T0
LDB AL,#11011000B ;总线时序1,16MHz下,
STB AL,BUS_T1 ;波特率为10kbps
LDB AL,#0AAH ;输出控制寄存器
STB AL,OUTCON
LDB AL,#00001100B ;清除数据溢出,
STB AL,CMR ;释放接收缓冲区
LDB AL,#00011010B ;返回工作模式
STB AL,CR
RET
4.2 MCP2510初始化子程序
图 4 MCP2510读、写时序图
PIC16F877单片机通过SPI接口与MCP2510相连。MCP2510的SPI读写时序如图4所示。图a为SPI写时序图,写指令首先被发送到MCP2510的SI引脚,并在SCK的上升沿锁存每个数据位,然后发送地址和数据,执行完毕指令后,数据被写进指定的地址单元中。图b为SPI读时序图,首先将读指令和地址发送到MCP2510的SI引脚,并在SCK的上升沿锁存每个数据位,然后把存储在这个地址单元中的数据在SCK的下降沿输出到SO引脚。当执行读写操作时,CS引脚应始终保持在低电平。
PIC16F877微控制器通过SPI口对MCP2510进行初始化,下面提供了MCP2510初始化的PIC汇编源程序。其中WRITE2510子程序就是根据图4的SPI写时序图将数据写进指定的地址单元中。
MCP2510_init
CALL RESET ;系统复位,配置模式
MOVLW CNF1 ;总线定时
MOVWF ADDR
MOVLW B‘00110001‘
MOVWF DATA1
CALL WRITE2510 ;写入数据
MOVLW CNF2
MOVWF ADDR
MOVLW B‘11110001‘
MOVWF DATA1
CALL WRITE2510
MOVLW CNF3
MOVWF ADDR
MOVLW B‘00000101‘
MOVWF DATA1
CALL WRITE2510
MOVLW RXM0SIDH ; 初始化接收屏蔽寄存器0
MOVWF ADDR
MOVLW B‘11111111‘
MOVWF DATA1
CALL WRITE2510
MOVLW RXM0SIDL
MOVWF ADDR
MOVLW B‘00000000‘
MOVWF DATA1
CALL WRITE2510
MOVLW RXM0EID8
MOVWF ADDR
MOVLW B‘00000000‘
MOVWF DATA1
CALL WRITE2510
MOVLW RXM0EID0
MOVWF ADDR
MOVLW B‘00000000‘
MOVWF DATA1
CALL WRITE2510
∶ ; 初始化接收屏蔽寄存器1
∶ ; 和接收过滤寄存器0~5
∶ ;
MOVLW CANINTE ;开放ERR,RX0中断
MOVWF ADDR
MOVLW B‘00100001‘
MOVWF DATA1
CALL WRITE2510
MOVLW CANINTF ;清中断标志
MOVWF ADDR
MOVLW B‘00000000‘
MOVWF DATA1
CALL WRITE2510
MOVLW CANCTRL ;正常工作模式
MOVWF ADDR
MOVLW B‘11100000‘
MOVWF MARK
MOVLW B‘00000000‘
MOVWF DATA1
CALL Bit_Modify2510
RETURN
参考文献
1 PHILIPS SJA1000 stand-alone CAN controller product specification.2000 Jan 04
2 MICROCHIP MCP2510 Stand-Alone CAN Controller with SPITM Interface.
3 邬宽明. CAN总线原理和应用系统设计. 北京航空航天大学出版社,1996.