三、CAN总线通信系统的原理和方案
1.系统原理
CAN总线和总线上的各个CAN节点在具备完整的通信协
议下,一起构成了CAN网络。本系统设计两个CAN节点进行互相通信,其中采用瑞典Kvaser公司的KvaserLeafProfessional———CAN总线分析仪作为总线的一个节点,负责与上位机通信,同时检测总线状况,包括总线负载、信号帧的收发数量以及错误帧情况;另一个是基于52单片机自主开发的CAN节点,可以实现对模拟信号的采集并转化为CAN信号。该CAN节点能够处理CAN总线上的数据,能够对CAN2.0(A/B)协议进行解析,并由硬件完成一些CAN基本功能,比如为接收到的CAN报
文提供一定大小的接收缓冲区、按照一定规则对接收到的数据完成ID滤波以及执行CRC校验等等。每个CAN节点包括以下三个部分[3]:①微控制器负责完成CAN控制器的初始化,进行与CAN控制器的数据传递,并按照预定的程序进行处理;②CAN控制器主要负责将数据以CAN报文的形式传递,并进行系统的诊断、测试以及处理CAN总线上的错误等;③CAN收发器是CAN控制器和CAN总线之间的接口,完成物理电平的转换。
2.总体方案
较常见的CAN节点组成框图如图1所示。
图1中方案1的一种经典配置就是“51系列微控制器+独立的CAN控制器SJA1000+高速CAN收发器TJA1050”[4]。此方案的优点在于灵活性,设计者可以选用性价比最高、最适合实际用途的51系列微控制器。缺点就是硬件电路相对复杂,同下面的方案2相比,需要设计微控制器和CAN控制器之间的连接电路。
方案2采用的是“内嵌CAN控制器的微控制器+高速CAN收发器TJA1050”[4]。其中,STM8A是ST公司一款性能出众的带片内CAN控制器的微控制器。此方案的优点在于电路设计简单,由于将CAN控制器集成在微控制器片内,这样就减少了部分连接电路。此方案的缺点就是目前可供选择的带片内CAN控制器的微控制器相对较少,用户选择余地不大。
由于STM8A芯片有128个引脚,其内部的构造比51系列单片机复杂,同时也需要专用的编译器和调试工具,而且价格昂贵,给编程者的开发增加了难度,因此本系统的一个节点采用第一种方案。
另外一个节点采用瑞典Kvaser公司的KvaserLeafProfession-al,它是超高性能的USB接口单通道CAN总线分析仪,支持CAN协议,其MagiSync技术是Kvaser的国际核心专利技术之一。它能够把多个CAN总线分析仪连接到同一台PC机上,并通过Kva-serMagiSync技术同步各个CAN总线分析仪的时间标签,其灵活性特别适合多通道的应用项目。每个CAN消息均标有1μs精度的时间标签(timestamp),每秒可以处理高达20000个帧。
系统软件选择了虚拟仪器软件LabVIEW。通过设计,软件实现的功能为:(1)能够全程实时监控每个节点在总线上的通信情况,并能完整记录、历史回放。可设置总线波特率和发送各种数据帧,包括远程帧、标准帧、扩展帧和错误帧。(2)具有判定、报警及统计功能,可根据检测错误计数器来界定“错误激活”、“错误认可”和“总线关闭”等三种故障。
四、硬件设计
本系统自主设计的CAN节点,采用89C52作为节点的微控制器。在CAN总线通信接口中,CAN通信的控制器采用SJA1000,CAN的收发器采用TJA1050。
图2 CAN节点电路原理图
图2为CAN节点的硬件电路原理图。从图中可以看出,电路主要由五个部分所构成:微控制器89C52、独立CAN通信控
制器SJA1000、CAN总线收发器TJA1050、显示电路和控制电路。微控制器89C52负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。SJA1000的AD0~AD7连接到89C52的P0口,CS连接到89C52的P2.0。P2.0为0时,CPU片外存储器地址可选中SJA1000,CPU通过这些地址可对SJA1000执行相应的读/写操作。SJA1000的RD、WR、分别与89C52的对应引脚相连接,INT接89C52的INT0,89C52也可通过中断方式访问SJA1000。
TJA1050与CAN总线的接口部分采用了一定的安全和抗干扰措施。TJA1050的CAN-H和CAN-L引脚各自通过一个5Ψ的电阻与CAN总线相连,电阻可起到一定的限流作用,保护TJA1050免受过流的冲击。CANH和CANL与地之间并联了两个30P的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的能力。
显示电路通过使用四个七段管,并使用74LS138和74LS373进行控制。控制电路主要由四个按钮组成,分别对输入信号、总线波特率、模式转换和数据发送进行控制。
硬件电路设计的时候,需注意的地方有:
(1)SJA1000与AT89C52的复位电路是不同的,单片机的RST是高电平有效的,而SJA1000的RST是低电平有效的,而且不是用一个非门把单片机的RST反相就可以的[5]。有两种解决方式:第一种是使用单片机的IO引脚来控制SJA的复位引脚,优点是单片机完全控制SJA的复位过程;第二种是使用微处理器电源监控芯片MAX708,它可以提供两种复位信号,可以满足需要。
(2)SJA1000的CLKOUT引脚可以提供时钟输出信号,但是如果该信号作为AT89C52的时钟信号,则容易出现问题,建议分别使用晶振。
(3)CAN-H与CAN-L之间需接120欧姆电阻。
(4)电路板中使用两个9针串口,为的是方便于构建一个CAN小网络,并方便于接不同串口的CAN检测仪。
五、 软件设计
1. CAN节点的软件部分设计
本节点的软件编程主要包括单片机初始化、CAN控制器的初始化、CAN总线数据的发送和接收等几个部分。初始化设置主要包括通信的波特率的设置、报文滤波器的设置和输出模式的设置。主程序的流程图如图3所示
图3 主程序流程图
(1)数据发送 将待发送的数据打包成符合CAN协议的帧格式后,便可写入SJA1000发送缓冲区,并自动发送。图4为发送子程序流程图。在写发送缓冲区前必须查询其状态,数据只能写入空闲的发送缓冲区。发送大量数据时,这一步显得尤其重要,否则发送可靠性将不能保证启动发送命令后,只能通过查询或配置发送成功中断判断数据是否发送成功。发送程序分发送远程帧和数据帧两种,远程帧无数据场。
图4 发送子程序流程图
(2)数据接收 接收数据可采用查询方式或中断方式。在某一段时间内,CAN总线并不是总是在活动,为了提高效率,可采用中断方式在初始化程序中必须打开接收中断。在中断服务子程序中,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序则通过查询该队列来获得总线数据。
2. 上位机程序设计
本系统的PC机端的软件采用美国NI公司的图形化编程语言LabVIEW平台,该平台是测控领域优秀软件,被誉为工程师的语言,可以加快产品开发速度。在该套测试系统中,采用顺序结构,并使用瑞典Kvaser公司提供的仅适用于Kvaser硬件的多个子VI,利用这些子VI建立控制模块,并通过一定的逻辑关系联系起来,完成对硬件的驱动、测量参数设定以及数据的采集和保存。
前面板一共有三部分:第一部分是CAN总线系统的相关参数配置,如图5所示,其中包括连接在PC机上的通道选择;总线通道的类型(单一、扩展和虚拟通道)还包括总线的波特率以及总线状态。第二部分为数据发送窗口,主要用于对所要发送的数据进行定义以及显示总线是否有错误,如图6所示,其中包括CAN数据帧的ID、数据长度控制字DLC、八个字节的数据以及帧类型的选择:远程帧、标准帧、扩展帧和错误帧。另外还可以显示总线错误和错误源。该窗口负责总线上数据的传输,是整个程序中的核心部分。最后一部分是数据接收窗口,主要负责接收整个总线上的数据,当点击“GoBuson”之后,就可以自动接收数据,同时可以检测接收错误。如图7所示,其中包括了对数据的接收时间(以系统初始化为0时开始计时)、数据帧的ID、数据长度控制字以及8个字节的数据,用户可以通过此窗口检测总线状况。
图5 总线参数配置窗口 图6数据发送窗口
图7 数据接收窗口
后面板的程序流程图主要是由瑞典Kvaser公司提供的大约四十二个针对本公司产品的CAN子VI程序,其中包括四类:
(1)CAN总线参数设置子VI:这些VI主要用于对CAN通道进行参数设置,其中包括CAN总线的初始化、CAN协议版本的选择、波特率以及总线的帧类型选择等等,还包括了Kvaser分析仪在LabVIEW下运行的驱动程序。
(2)CAN总线数据写入子VI:这些VI主要用于将CAN通道需要送出的数据打包成符合CAN协议的信息并发送到SJA1000的输入缓存器。
(3)CAN总线数据读出子VI:这些VI可以读出CAN口缓存中的数据。其中还包括错误计数器、同步读数据和定时器等。
(4)CAN总线关闭子VI:这些VI用于将打开的CAN口关闭。调用CAN子程序并按照CAN2.0的通信标准,利用G语言,完成通过LabVIEW软件平台进行收发数据,图8为程序流程图。
六、总结
本系统实现了将传感器输出的电压信号转化为CAN总线信号,并使用其中的一个字节表示其变化过程。将先进的现场总线技术(CANBUS)应用于智能的测量与通信系统,可以大大提高系统的可靠性。自主开发了符合国际标准的基于单片机的智能CAN节点,不仅大量节约了资金,而且可以根据不同的需要连接不同的传感器,实现基于CAN总线的智能测量节点。基于LabVIEW的上位机提供了良好的人机界面,使操作更加方便、直观。
评论
查看更多