基于C8051的CAN多点实时数据通信系统
现场总线是用于过程自动化和制造自动化最底层的现场设备或现场仪表互连的通信网络,是现场通信、计算机技术和控制系统的集成。它在生产现场的测量控制设备之间实现双向串行多节点数字通信、完成测量控制任务;是一种开放型的网络,使测控装置随现场设备分散化,被誉为自控领域的局域网。它在制造业、流程工业、交通、楼宇等处的自动化系统中具有广泛的应用前景。 CAN是Controller Area Net的缩写,即控制网络局部网,是一种有效支持分布式控制或实时控制的串行通信网路。CAN是德国Bosh公司为汽车的检测、控制系统而设计的。由于CAN具有卓越的特性和较高的可靠性,因而非常适合工业过程监控设备互连。CAN已经成为一种国际标准(ISO-11898),是最具前途的现场总线之一。
1 控制器局域网(CAN) 1.1 CAN总线的特点 (1)CAN总线以多主方式工作,网络上任意节点均可在任意时刻主动地向网络上其他节点发送信息,而不分主从,通信方式灵活,且无需考虑接收者地址的优先级。 (2)CAN网络上的节点信息分不同的优先级,可满足不同的实时要求,高优先级的数据最多可在134μs内得到传输。 (3)CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级比较低的节点会主动退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。 (4)CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”。 (5)CAN的直接通信距离最远可达10 km,此时速率5 kbit·s-1;通信速率最高可达1 Mbit·s-1,此时通信距离最长为40 m. (6)CAN的节点数主要取决于总线驱动电路,目前可达110个;报文标识符可达2 032种(CAN2.0A);而扩展标准(CAN2.0B)的报文标识符几乎不受限制。 (7)采用短帧结构,传输时间短,受干扰概率低,具有良好的检错效果。 (8)CAN的每帧信息都有CRC校验及其他检错措施,保证了数据出错率极低。 (9)CAN的通信介质可为双绞线,同轴电缆或光纤,选择灵活。 (10)CAN节点在错误严重的情况下具有自动关闭输出的功能,这是总线上其他节点的操作不受影响。 正因为CAN总线具有以上这些特点,所以能较好地满足多点实时数据通信平台的要求。 1.2 CAN总线协议 CAN的协议结构划分为两层:数据链路层和物理层。数据链路层又划分为逻辑链路控制子层和介质访问控制子层。物理层可分为物理信号层PLS、物理介质连接PMA和介质相关接口MDI.CAN的ISO/OSI参考分层结构如图1所示。 图1 CAN的ISO/OSI参考分层结构 数据链路层的LLC和MAC子层的服务和功能被描述为“目标层”和“传送层”.LLC子层的主要功能是:为数据转送和远程数据请求提供服务,确认由LLC子层接收的报文是否已被接收,并为恢复管理和通知超载提供信息。MAC子层的功能主要是传送规则,亦即控制帧结构、执行仲裁、错误检测、出错标定和故障界定。MAC子层也要确定何时开始一次新的发送,总线是否开放或者是否马上开始接收。定位时特性也是MAC子层的一部分。 物理层定义了信号怎样进行发送,因而涉及位定时、位编码和同步的描述。详细层的功能参阅文献。 1.3 CAN多点实时通信 CAN是有效支持分布式(多点)实时控制的串行通信网络,在实际的系统设计中,用户可以根据振荡器时钟频率、总线波特率以及总线的最大传输距离等因素,对CAN控制器的位定时参数进行优化设置,协调影响位定时设置的两个主要因素:振荡器容差和最大总线长度,合理安排位周期中采样点的位置和采样次数,保证总线上位流的有效同步的同时,优化系统的通信性能,进一步推进CAN总线的应用。
2 C8051 F040单片机 C8051F040是集成在一块芯片上的混合信号系统级单片机,在一个芯片内集成了构成一个单片机数据采集或控制的智能节点所需要的几乎所有模拟、数字外设以及其他功能部件,代表了目前8位单片机控制系统的发展方向。芯片上有1个12位多通道ADC,2个12位DAC,2个电压比较器,1个电压基准,1个32 kB的Flash存储器,与MCS-51指令集完全兼容的高速CIP-51内核,峰值速度可达25 MI·s-1,并且还有硬件实现的UART串行接口、完全支持CAN2.0A和CAN2.0B的CAN控制器。
3 CAN多点实时数据通信系统设计 3.1 CAN多点实时数据通信系统硬件结构 设计的CAN多点实时数据通信系统由一台电脑,两块基于C8051F040单片机开发板组成。结构框图如图2所示。 图2 CAN通信结构框图 在这个系统中,电脑作为主机,通过USB/CAN转换器与CAN总线相连,使用软件工具CANTools-V6.2进行数据地发送、接收以及显示。系统中两个CAN节点分别为开发板1和开发板2,通过编译相应的程序,使得CAN节点能实时把数据发送到主机,主机可根据接收到的数据向CAN节点发出控制信号来改变CAN节点回发的数据,以此达到实时通信控制的目的。同时两个CAN节点之间也能互相进行数据通信,并把所接收到的数据显示在开发板的LCD屏上。 3.2 软件设计 软件设计分为两大部分:(1)主程序的设计。(2)CAN通信库函数程序的编写。 主程序主要涉及的是程序流程,包括调用初始化函数,打开中断,根据与主机通信还是与其他节点通信调用CAN通信库函数编写出相应的通信流程,流程图如图3所示。 图3 主程序流程图 CAN通信库函数主要包括:系统初始化函数、CAN初始化函数、CAN中断服务函数、CAN接收数据函数和CAN发送数据函数。 这里详细讲述CAN通信库函数中,CAN接收数据函数、CAN发送数据函数和CAN中断服务函数。 CAN接收数据函数和发送数据函数的流程图,如图4所示。 图4 CAN接收数据函数和发送数据函数的流程图 CAN中断服务函数程序流程图,如图5所示。 图5 CAN中断服务函数程序流程图
4 结束语 系统可以完成各个节点之间以及节点与主机之间的实时数据收发,基本完成了多点实时数据通信任务,能做到速度快、延迟低、错误率低、稳定性高,并且能够在电脑上直观地看到实验结果。通过示波器测得该系统完成一次通信需要10.8μs,能满足工业上实时监控的要求,这说明基于C8051F040的CAN多点实时数据通信的可能性,且因为其多节点设备接入简易,使其在远程工业实时监控上有较好的前景。缺点在于节点的数量不够多,节点之间的距离不够远,没有测试出多点通信的节点数量上限和实时通信距离上限。 图6 示波器测得CAN通信波形
|