控制器局域网CAN(Co
ntroller Aera Network)是德国Bosch公司在80年代初为解决现代
汽车中大量的控制与测试仪器之间的数据交换而提出的一种串行数据通信协议。他是多主总线,通信介质可以是双绞线,通信速率可达1M/s,最远通信距离可达10km。CAN具有极高的可靠性,高实时性特点特别适合工业过程监控设备的互连,已被公认是最有前途的现场总线之一。CAN总线的高速采集系统具备DCS(分布式控制系统)的主要特征,可代替DCS。 Cygnal公司的51系列单片机C8051F040是集成在一块芯片上的混合信号系统级单片机,在一个芯片内集成了构成一个单片机数据采集或控制的智能节点所需要的几乎所有模拟和数字外设以及其他功能部件,代表了目前8位单片机控制系统的发展方向。芯片上有1个12位多通道ADC,2个12位DAC,2个电压比较器,1个电压基准,1个32kB的FLASH存储器,与MCS-51指令集完全兼容的高速CIP-51内核,峰值速度可达25MIPS,并且还有硬件实现的UART串行接口和完全支持CAN2.0A和CAN2.0B的CAN控制器。本文将介绍带有在片CAN的Cygnal公司的混合信号片上系统(SoC)级单片机C8051F040作为微处理器的CAN智能节点设计的硬件和软件方案。 1 典型C8051F404的CAN总线网络结构 典型C8051F404的CAN总线网络结构如图1所示。一个典型的CAN节点由带有CAN控制器的微处理器和CAN收发器构成。CAN收发器建立CAN控制器和物理总线之间的连接,控制逻辑电平信号从CAN控制器到达物理总线的物理层,反之也一样。CAN控制器执行CAN协议,用于信息缓冲和滤波。F040的CAN控制器支持完全的CAN2.0A和CAN2.0B。
上位机通过CAN适配卡与各个CAN节点通讯。在应用中,上位机可以发送命令到节点,收集数据,修改过程参数,各节点可以将采集到的数据送到上位机进行复杂的数学计算或是保存打印,实现更加优越的信息处理功能。 2 C8051F040的CAN控制器结构 F040的所有CAN协议功能都由独立的CAN控制器而不是由51处理器来完成。因此,CAN通信占用CPU带宽很小,51处理器只需要通过特殊功能寄存器(SFR)配置CAN控制器,数据过滤器就可以了。 2.1 CAN控制器各部分功能 CAN Core:CAN协议控制器和发送/接收转换寄存器; Message RAM:存储Message Objects和标志码,CAN控制器共有32个Message Object可供配置来用于发送或接收数据; Registers:用于控制和配置C_CAN模块的所有寄存器; Message Handler:控制数据在CAN Core的接收/发送转换寄存器和Message Object之间的传输,以及中断的产生。
2.2 CAN寄存器分类 CAN寄存器可分为以下4类: (1)CAN控制器协议寄存器:用于CAN控制、中断、错误控制、总线状态控制和测试模块; (2)信息目标(Message Object)接口寄存器:配置32个信息目标(Msg Obj),从目标接收和发送数据。8051处理器通过他来读写CAN Message RAM; (3)信息处理寄存器:只读寄存器。为51CPU提供信息目标的状态,如信息有效标志,发送请求状态,新数据标志和中断标志; (4)C8051处理器特殊功能寄存器(SFR):C8051处理器控制的5个寄存器,直接读写CAN协议寄存器,通过CAN数据寄存器(CAN0DATH和CAN0DATL)和CAN地址寄存器(CAN0ADR)间接读写其他CAN控制器。 3 CAN节点的硬件设计 设计采用的接口芯片使用TI公司的3.3VCAN收发器SN65HVD230,他与PCA82C250的引脚兼容。SN65HVD230有3种工作模式:高速,倾斜和低功耗模式,由Rs脚的连接方式来确定。由于F040自带了CAN控制器,外围电路极为简洁。 4 CAN通讯软件设计 为避免51 CPU读写Message RAM与CAN 信息收发之间产生冲突,CPU不直接读写Message Object,而是通过专门的寄存器(IFx Interface Registers)来配置信息目标。 一个完整的信息目标的结构如表1所示。
CAN通讯协议的最大特点之一就是废除了传统的站地址编码,而使用信息块标志码。ID28-0,Xtd和Dir用来定义信息标志码,以及定义即将发送数据帧的类型(远程帧或标准帧),并且与Mask28-0,MXtd和Mdir一起用来作为将要接收数据帧的过滤器。一个已接收到的信息被放在有效的(MsgVal=1)、具有匹配标志码的Message Object里。只有当Xtd=1时,远程帧才被放入Message Object,Xtd=0时,标准帧被放入Message Object。当多于一个的有效Message object与收到的信息匹配,则该条信息被放入号码最小的Message object里。Data0-Data7是8个数据字节。CAN通讯初始化和法数据帧的软件流程如图4所示。
CAN通讯软件设计主要包括3个模块:CAN通讯初始化、接收数据和发送数据模块。信息目标的初始化程序代码(C语言)如下:
当微处理器接收数据采用中断方式,接收Message Object初始化时将RxIE位置1。当程序进入到CAN中断服务子程序时,先判断CAN状态寄存器的RxOK位是否已置位,若已置位,则说明CAN控制器已经成功接收到一个数据帧(因为CAN通讯有多个中断源,而中断向量只有一个),这时再调用相应的函数,取出数据帧中有用的字节进行处理或执行相应的操作。源程序代码如下:
5 结语 C8051F040是完全集成的混合信号系统级单片机,具有与8051指令集完全兼容的CIP-51内核,代表了8位单片机的发展方向。他不但集成了构成
监控系统的常用外设,而且还集成了高可靠性、高性能的CAN总线控制模块。本文使用该芯片设计的CAN节点模块集成度高、性能稳定,实时性好、软件设计简洁,在工业生产和仪器开发领域具有广泛的应用前景。本文给出的硬件和软件设计方案均已通过实际测试,并成功运用于大洋协会“十五”攻关项目:小型底栖生物标本自动分离系统的通讯模式中。