CAN控制器芯片MCP2510在远程监测系统中的应用
2008-09-11
作者:王继国 孙新亚
摘 要: 介绍了CAN控制器芯片" title="控制器芯片">控制器芯片MCP2510的功能、结构和工作原理,提出了一种利用MCP2510芯片和MSP430单片机组成远程监测系统" title="远程监测系统">远程监测系统的方案,并通过硬件电路和软件的实现证明了其可行性和正确性,同时列举了MCP2510在使用中的一些注意事项。
关键词: CAN MCP2510 SPI 远程监测
随着各种复杂的机电一体化设备的不断发展,需要有一种智能化程度更高、容错性和可靠性更强的设计,使各种子系统通过网络连接起来,以达到信息共享、减少布线、降低成本和提高总体可靠性的目的。CAN控制器局域网就是为了满足这种需要而产生的。由于CAN控制器芯片具有卓越的性能,现已广泛应用于工业自动化、监控系统、医疗仪器、纺织机械、船舶运输、铁路信号传输、自动贩卖机等众多设备以及建筑、环境控制等领域中。
目前,我国工业上应用最广泛的独立CAN控制器芯片当属Philips公司的SJA1000。虽然它具有低成本、高可靠性、支持远距离通信等特点,但它在应用中也具有一些缺点,比如地址总线和数据总线的分时复用,常导致接口效率低下;接收和发送缓冲器的个数太少,导致数据吞吐率低下;帧屏蔽器和过滤器的设置不够灵活,不能满足同时需要更多屏蔽和过滤条件的要求等。
为了简化CAN总线接口应用设计,同时提高CAN总线通信的稳定性和效率,采用新型的独立CAN控制器芯片MCP2510设计一个变电站的CAN总线远程监测系统,有效地解决了以上问题。本文主要介绍MCP2510的结构、原理及其在CAN总线远程监测系统中的应用。
1 MCP2510简介
MCP2510是Microchip公司推出的采用独立CAN控制器的CAN总线控制器芯片,它完全符合CAN总线的2.0B技术规范,并带有符合工业标准的SPI串行接口。MCP2510在目前市场上是体积最小、最易于使用也是最节约成本的独立CAN控制器。将MCP2510和高性能的PIC单片机或MSP430单片机结合使用即可支持基于CAN总线的应用。它能应用于一些需实时控制的局域网场合,如汽车电器控制、楼宇防盗监控系统、楼宇自动化系统、智能住宅小区、安防系统、门禁系统等。使用独立的CAN控制器的潜在优势,系统设计人员可以大大扩大单片机的选择范围而不必强求单片机必须内含CAN总线控制模块,对软件稍作修改后就可以通过SPI接口和MCP2510交换数据。这样,不需要更换单片机就可以在现有的系统上增加CAN总线的通信功能,使得几乎任何单片机接入CAN总线都成为可能,系统开发人员可以从更多种类的单片机中选择最合理、最理想的方案,从而达到了产品的快速更新、缩短上市时间、提高产品质量的目的。MCP2510能够发送和接收标准数据帧以及扩展数据帧,并具有接收过滤功能和信息管理的功能。MCP2510通过其SI引脚同单片机进行数据传输,最高数据传输速率" title="传输速率">传输速率可达1Mbps。单片机可以通过MCP2510与CAN总线上的其它单片机进行通信。MCP2510内含3个发送缓冲器,2个接收缓冲器,并且具有灵活的中断能力、帧屏蔽和过滤、帧优先级设定等特性。这些特点使得单片机对于CAN总线的操作变得非常简单。
MCP2510的主要功能如下:
·支持CAN协议2.0A/2.0B
·最大可编程波特率为1Mbps
·有标准帧和扩展帧两种数据帧可供选择,每个帧中的数据段长为0-8字节
·支持远程帧
·内含3个发送缓冲器和2个接收缓冲器,并且其优先级可编程设定
·内含6个接收过滤器和2个接收过滤屏蔽器
·具有Loop-Back(自环检测)模式
MCP2510的主要电气特性如下:
·工作电压:2.7V-5.5V
·具有低功耗睡眠状态
·工作电流:5mA(待机电流在5.5V下为10μA/5.5V)
·工作温度:I(-40℃-+85℃)、E(-40℃-+125℃)
·具有高速SPI接口(5MHz/4.5V)
·支持SPI 0.0和SPI 1.1两种模式
·具有6个中断接口
·具有可编程分频系数的时钟脉冲输出引脚
·具有可选择使能的中断输出引脚
·Buffer Full(接收缓冲器满)输出引脚可配置为中断输出端或普通数字输出端
·Request To Send(请求发送输入)引脚可配置为立即发送数据命令输入端或普通数字输入端
2 MCP2510内部结构和工作原理
图1为MCP2510的内部结构与工作原理图,CAN协议机主要负责与CAN总线的接口,SPI接口逻辑负责实现与单片机的接口,而缓冲器、过滤器和控制逻辑则负责实现各种工作模式的设定和操作控制。
MCP2510在CAN总线上的数据接收是通过两个接收缓冲器、两个接收屏蔽器、六个接收过滤器的组合来实现的。CAN总线上的帧只有同时满足至少任意一个接收屏蔽器和一个接收过滤器的条件才可以进入接收缓冲器。单片机通过SPI接口可以读取接收缓存器数据。MCP2510对CAN总线的数据发送则没有限制,只要用单片机通过SPI接口将待发送的数据写入MCP2510的发送缓存器,然后再调用RTS(发送请求)命令即可将数据发送到CAN总线上。
MCP2510具有灵活的中断管理功能,它有8个中断源,包括发送、接收中断,各种错误中断以及总线唤醒中断等。单片机通过设置MCP2510的中断允许控制字" title="控制字">控制字CANINTE设定和屏蔽各种中断发生的条件,并通过读取MCP2510的中断标志位控制字CANINTF判断当前中断的中断源。另外,判断当前中断的中断源也可以通过MCP2510的Read Status(读状态字)命令读取CANSTAT控制字中的ICOD部分来完成。
3 远程监测系统的硬件实现
本文提出的远程监测系统方案包括一个主系统控制器(控制台工作站)和多个节点控制器(CAN远程监测节点),其中面向测控对象的节点控制器由带有标准SPI接口的MSP430单片机和MCP2510以及CAN总线接口器件82C250构成,如图2所示。MSP430单片机通过SPI接口与MCP2510进行交互,将采样并计算后的数据通过MCP2510发送到CAN总线上,以便被控制台工作站监控。各个节点控制器分布在不同的地理位置上,独立地执行一个完整的任务。在本系统中,节点控制器可对电动机的电流、电压和周围温度进行监测。利用CAN通信技术将所监测的对象联网,使管理人员在控制台的主监控工作站上就可以观察各个部分的情况,将远程和本地系统构成一个整体,便于管理和监测。另外,由于CAN总线是基于发送报文的,它不会对CAN控制节点进行编码,因而系统的可扩展性比较好;并且,增删CAN总线上的任何一个节点控制器,不会对其它的节点控制器造成任何影响。如果需要进一步提高系统的稳定性和抗干扰能力,可以在MCP2510和82C250之间再加一个光电隔离器来实现。
图3是此方案的节点控制器的硬件接口电路图。
4 远程监测系统的软件实现
由于本方案的数据传输是在PC机与单片机之间进行的,并且在PC机上安装了三兴达公司的CAN适配卡,CAN适配卡通过双绞线与CAN控制器接口器件82C250相连,所以PC机上的通信软件是用CAN适配卡提供的驱动程序在Visual Basic下编写的,并且CAN通信的帧封装和解帧都严格遵循CAN通信最常用的Hilon A协议。编程中要注意在PC机的收发状态转换时,需要一定的延时。CAN总线节点要有效、实时地完成通信任务,节点控制器的软件设计是关键,也是难点。它主要包括节点初始化程序、报文发送程序、报文接收程序以及CAN总线出错处理程序等。考虑到本方案硬件电路的实现,在MSP 430和MCP2510的SPI接口数据通信方面,将MSP430设置为主模式,而将MCP2510设置为从模式。为了最大程度地保证CAN总线通信的稳定性和快速性,将MCP2510的数据传输速率选为80kbps,而将MSP430的UART模块的波特率选为2Mbps,并结合MCP2510和MSP430的SPI接口完全实现了Hilon A协议栈,用于CAN通信帧的封装和解包。
MCP2510正常工作之前,需要进行正确地初始化,包括设置SPI接口的数据传输速率、CAN通信的波特率、MCP2510的接收过滤器和屏蔽器以及发送和接收中断允许标志位等。与SJA1000不同的是,单片机对MCP2510的接收缓冲器和发送缓存器的操作必须通过SPI接口用MCP2510内置的读写命令来完成。
图4是MCP2510的SPI接口读命令的时序图。操作时,单片机在向MCP2510提供时钟脉冲SCK的同时,先把读命令和要读的首地址发送到MCP2510的SI引脚,每个数据位在SCK的上升沿被锁存。MCP2510在接收到读命令和首地址后,在SCK的下降沿将读取到的数据输出到SO引脚。在数据从SO引脚输出的过程中,SCK至少要持续到此数据输出过程完成为止。若单片机只向MCP2510提供可以输出一个字节数据的SCK,就是MCP2510的单字节读操作。若单片机连续向MCP2510提供SCK,则在MCP2510的SO引脚上将连续输出从首地址开始的连续地址空间的数据,直到单片机停止向MCP2510提供SCK为止,这就是MCP2510的连续地址序列读操作。而单片机供给MCP2510连续SCK的实现方法也很简单,就是一直向MCP2510的SI引脚输出“0”字节即可,而每输出一个“0”字节,SO引脚上便会输出一个字节的数据。
图5是MCP2510的SPI接口写命令的时序图。操作时,单片机在向MCP2510提供时钟脉冲SCK的同时,把写命令发送到MCP2510的SI引脚,每个数据位在SCK的上升沿被锁存。然后再发送首地址和数据。和读命令相似,如果单片机只提供可以写入单字节的SCK,就是MCP2510的单字节写操作。如果单片机提供连续的SCK,那么跟在首地址后面的数据将被连续写入从首地址开始的连续地址空间,这就是MCP2510的连续地址序列写操作。
在程序设计中,对发送和接收缓存器的读写主要使用了连续地址序列读写操作" title="读写操作">读写操作,因为这样可以避免反复地发送读写命令和地址,大大提高了程序运行效率。
除读写操作外,MCP2510还具有BitModify(位修改)、RESET(复位)和Request To Send(请求发送)等操作,其时序与读写操作差别不大。
另外,在节点控制器的软件实现中需要注意以下几点:
(1)MCP2510的Bit Timming(位定时)要按照以下原则设定,否则将会造成MCP2510无法与MSP430进行正常通信。
·TQ= 2* (Baud Rate + 1)*TOSC
·Nominal Bit Time = TQ * (Sync Seg + Prop Seg + Phase Seg1 + Phase Seg2)
·Prop Seg + Phase Seg1 >= Phase Seg2
·Prop Seg + Phase Seg1 >= TDELAY
·Phase Seg2 > Sync Jump Width
在此程序中,TOSC为0.125μs,将Baud Rate取值为4,则Normal Bit Time为10 TQ。按照以上几条原则取Sync Seg为TQ、Prop Seg为2TQ、Phase Seg1为3TQ、Phase Seg2为4TQ、Sync Jump Width为3TQ、SAM为3。经实际测试,以上参数可以保证正常的CAN总线通信。
(2)因为MCP2510在初始化完成后默认处于Configuration(配置)模式下,所以就需要在MCP2510的初始化完成后将其置为Normal(正常)模式,否则MCP2510将一直停留在Configuration模式下,不能进行正常工作。将MCP2510置为Normal模式可通过使用MCP2510内置的BitModify(位修改)指令向CANCTRL控制字写入一个“0”字节来实现。
(3)在进行MCP2510的“读”操作时,发送完“读”指令及其地址码之后,仍然需要向MCP2510提供时钟,以接收“读”到的数据。这可以通过向MCP2510发送一个“0”字节来实现。
(4)在对MCP2510做完任意操作后,都要延时一段时间,使其有足够的时间来准备接收下次操作的命令,防止出现MCP2510“忙”的情况。
(5)在对MCP2510做任何操作之前,都要由单片机向MCP2510的片选端CS输出一个低电平,使MCP2510被选通。
(6)MSP430的UART模块要选用同步SPI通信模式,以保证和MCP2510的通信是通过SPI接口进行的。这可以通过将MSP430的控制字UCTL中的SYNC位置位来实现。
(7)在第一次向MSP430的TXBUF控制字写入待发送的数据之前,MSP430的发送中断允许标志位(IE2中的UTXIE1)应该处于复位状态,这样可以防止还没有发送任何数据就直接进入发送中断服务程序,造成通信无法正常进行的情况。
(8)在MSP430的接收中断服务程序中,要先处理完接收到的帧,再清除接收中断标志位。因为如果在还没有把当前的帧数据处理完的情况下就清除了接收中断标志位,会造成立即开始接收新的帧数据,这样就很可能会造成当前的帧数据在尚未被处理完毕时被新的帧覆盖。
以上介绍了CAN控制器芯片MCP2510,提出了一个利用MCP2510和MSP430单片机组成远程监测系统的方案,并结合硬件电路和软件的实现对其可行性和正确性进行了证明。随着CAN总线技术的进一步推广应用,基于CAN总线的控制系统将会有广阔的应用前景,而MCP2510芯片也将在越来越多的领域中得到广泛应用。
参考文献
1 邬宽明.CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996
2 胡大可. MSP430系列Flash型超低功耗16位单片机.北京:北京航空航天大学出版社,2001
3 Stand-Alone CAN Controller with SPI Interface.Microchip公司,2002 http://www.microchip.com/download/lit/pline/analog/interfce/can/21291e.pdf
4 Controller Area Network (CAN) Basics.Microchip公司,1999http://www.microchip.com/download/appnote/analog/can/00713a.pdf