基子CAN_BUS的控制器调试系统的设计
摘要:调节多点控制器的控制参数是一项复杂的工作,以CAN_BUS通信协议为基础,设计了一种连接多个CAN端点的调试系统,通过创建通信协议,实现了上位机与控制器的CAN端点的实时数据交流。阐述了控制器与上位机的通信流程。
关键词:CAN_BUS 调试系统 通信协议
磁悬浮转向架的悬浮由四组电磁铁实现,每组电磁铁都有独立的悬浮控制器,控制该点的悬浮与下落。为了获得最优的控制参数,需要在整个转向架的悬浮过程中通过上位机监视轨道与电磁铁之间的间隙、电磁铁工作电流等状态参数以及悬浮控制器的控制参数,动态地修改控制参数以观察控制效果。
悬浮控制器之间是相互独立的,上位机无法同时监控多个悬浮控制器,因此需要找到合理的通信方式使上位机同时与所有的控制器连接,使它们之间能够实时传递数据。CAN总线是一种有效支持分布式控制和实时控制的多主的异步串行通信网络。由于CAN总线具有较强的纠错能力,支持差分收发,适合高噪声环境,具有较远的传输距离,在各个领域中得到了广泛应用。CAN通信协议规定通信波特率、每个位周期的取样位置和个数都可以自行设定,这保证了用户在使用过程中的灵活性。选用CAN总线,无论是在抗电磁干扰方面还是在实时性方面都能够满足实验要求。
图1
1 调试系统硬件端口的设计
悬浮控制器使用SJA1000作为CAN总线协议转换芯片。SJA1000是一种独立控制器,用于移动目标和一般工业环境中的区域网络控制。它内建BASIC CAN协议,并提供对CAN2.0B协议的支持。通过对片内寄存器的读、写操作,悬浮控制器的核心处理器能够设置CAN总线通信模式,实现数据的发送与接收。它的传输速度很快,位速率可达1Mbit/s,可满足高速大流量实时传输要求。
SJA1000在逻辑上实现了传输数据的编码和解码,若要与物理线路连接,必须借助总线驱动器。PCA82C250是协议控制器与物理链路之间的接口,可以用高达1Mbit/s的位速率在两条有差动电压的总线电缆上传输数据,它与SJA1000结合才能实现CAN总线通信。javascript:window.open(this.src);" style="cursor:pointer;"/>
图1为CAN总线接口电路原理图。图中,SJA1000用16MHz的晶振作为基准时钟,数据线AD0~AD7与核心控制器的低八位数据线相连,在CS、RD、WR的控制下可实现芯片寄存器的读写。RX0和TX0与PCA82C250数据输入引脚相连,作为串行数据线。RX1与PCA82C250的参考电压引脚5相连,向PCA82C250输出参考电压。PCA82C250的两根输出数据线之间加上120Ω的终端电阻,用以匹配线路。
上位机通过专用的USBTOCAN转换器实现PC机与CAN总线的连接,市场上有很多这类产品,这里不再详细说明。上位机主要提供人机交互界面,显示状态和控制器参数,并完成参数与程序的下载。
2 通信协议构建
DSP控制器上的CAN总线端口要完成两项工作:(1)上传控制器的控制常量和电流、间隙等状态参数,送给检测系统;(2)读取上位机下传的待修改的控制参数,实现参数的在线修改,接收下传的程序文件,实现DSP主程序的在线写入。
在调试过程中,实现多DSP系统的在线联调是很有效的调试手段。这样,上位PC机不但能够采集各控制器的状态参数,还能够对采集的数据进行整理与显示,并能实时调整不同控制器的控制参数,最终实现控制器运行程序的远程下载。
为实现CAN总线的数据传送,需要定义参数包、程序包、命令包三种传送数据包,并分别由0x11、0x22、0x33标示出来。根据数据传送方向的不同,数据包的格式略有差异。考虑到CAN总线上的节点较多,为避免数据传送过程中出现混乱的情况,定义数据发送的基本数据包大小为8个字节,即CAN总线一次传送的最大字节数为8。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.1 下传数据协议
下传数据包括程序、参数、命令三种数据类型。
2.1.1 参数数据包格式
上位机需要下传的数据包括控制参数C1、C2、C3及给定间隙与电流,根据修改需要,每个参数都是单独下传的。下传数据包的大小与CAN的最大有效传送字节数一致,为8个字节。第一个字节指出数据包的类型(用Oxll标示),第二个字节指出参数类型(用0xx7标示),第三字节至第八字节指出传送的有效数据,对应上面给定参数的参数标示依次为0x17、0x27、0x37、0x47、0x57。图2所示为数据包的一般格式。
2.1.2 程序数据包格式
FLASH写入文件较大,一般有几十K字节。控制系统采用的FLASH芯片AT29C010以128字节为基本操作单位。为了适应芯片,可将文件分成128字节的数据段,并为每个数据段标定次序。发送时,标出数据段号及该片数据所处段中的位置即可。控制器接收到128字节后,做一次写入FLASH操作,数据包格式及说明见图3。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.1.3 命令数据包格式
命令数据指出对下传参数的操作,Oxx7+0x44表示对某一参数的修改生效,如:0x17+0x44使能C1,0x27+0x44使能C2,0x37+0x44使能C3。如果修改的参数不能满足控制要求,调试员希望能恢复原来的运行参数,因此定义0x55为修改参数恢复命令,如:0x17+0x55恢复C1,0x27+0x55恢复C2,0x37+0x55恢复C3。0x66+0x66表示将下传数据写入最后的FLASH参数存储区。命令数据包格式如图4所示。
2.2 上传数据协议
上传数据包的大小也为8个字节,数据包类型分为参数反馈、命令反馈两种,参数反馈用于上传DSP的实际运行控制参数及间隙、电流等状态信息,命令反馈用于对PC机使能、写入、参数恢复等命令的应答。
上传数据依次为控制参数C1、C2、C3、CURRENTl、CURRENT2、CLEARANCE。数据类型标示依次为0x17、0x27、0x37、0x47、0x57、0x67。由于上位机要同时接收多个控制器上传的数据,所以为了正确区分这些参数,需要给上传的数据包加入端口标示,指出数据包来自哪个总线端口。上传的数据包在前面格式的基础上还要加入对应于各控制器的CAN总线端口号。
上传命令是对总线通信出现异常情况的应答,因为控制器随时将控制参数上传,且参数字节数较少,出错的可能性较低,不需配备应答命令;而上传程序的数据量较大,容易出现错误,必须配备应答命令,指示程序写入过程。
因为控制器是周期性地扫描SJAl000的接收缓冲区,当总线连接的节点较多时,数据量较大,难免会发生数据漏收的情况;而且控制器对外部中断的响应也会影响扫描周期,使接收缓冲区中未来得及读取的数据被新数据冲掉。当控制器发现应接收的数据位置与已接收到的数据位置不符时,控制器发差错命令给上位机,指出应接收的数据段号及位置,上位机接收到这一信息后重发相关数据。发送数据包包含CAN端口字节、命令标示、段号、位置号等信息。通信过程中也可能出现发送数据与接收数据不符的情况,因此有必要引入数据校验算法。控制器将接收到的128字节校验后得到的校验值与接收到的校验值作比较,一致后才将数据写入FLASH;否则反馈回校验值错误信息,上位机重发该段数据。发送数据包包含CAN端口字节、命令标示、段号、重发标示(0x88)等信息。
图5
3 通信程序设计流程
3.1 控制器通信流程
控制器的通信部分主要在主程序循环中完成。每次主程序循环中,控制器都向调试系统发送当前C1、C2、C3、CURRENTl、CURRENT2、CLEARANCE等信息;一旦接收到调试系统下传的信息,控制器便分析下传信息的性质,对它们分别进行判别与应答。
图5是控制器的通信流程。控制器上电后,程序从FLASH的参数存储区(最后256个字节)读取控制参数值,存人控制参数缓存中,作为参数初值。同时,控制器通过CAN总线接收上位机下传的控制参数,校验后存入控制参数缓存中。一旦接收到参数使能命令,则将缓存中的数据复制给C1、C2、C3等变量,作为实际的工作参数;调试完毕后,javascript:window.open(this.src);" style="cursor:pointer;"/>在接收到参数写入命令后,将参数写入FLASH的参数存储区,作为永久工作参数。接收到程序数据包后,控制器首先检验数据的次序,保证接收到的数据按次序排列;接着代入校验算法,将计算得到的校验值和接收的校验值作比较,不一致则给上位机反馈校验值错误命令,要求上位机重发该段程序,否则将数据写入FLASH。图中监控信息的发送周期可根据情况确定。
3.2 上位机通信流程
上位机是调试员与控制系统的接口,它显示控制器的上传参数,将调试员需要修改的控制参数下传。为完成上述功能,调试界面应包括参数显示窗口、参数输入窗口、命令工具条等,必要的话,还应将状态参数以曲线的形式显示出来。调试人员根据状态曲线调整控制参数。
图6是上位机的调试流程,单控制器的总线最短发送周期为5ms,随着总线通信量的增加,监控界面的扫描周期也应相应延长。参数显示界面显示的是上位机最新收到的参数,其值总是实时刷新的。发送修改参数时,每次只发送一个参数,上位机需将参数变成不大于4字节的字符型数组才能发送。控制器在收到参数数据包后,也要将数据字节逆序重组,才能得到需要的修改参数。上位机在下载程序的过程中,若在对某段程序多次重复发送后依然收到错误反馈,则显示错误状态,停止数据发送,由调试人员检查线路,重新给出下载命令。
多个控制器控制参数的调试是一个相当繁杂的过程,本文给出了基于CAN总线的调试系统,其设计目的就是简化调试过程,缩短调试时间。应用这套系统,调试人员可以同时动态地调整多个控制器的控制参数,通过反馈的控制器状态判断参数优劣,达到快速寻找最优控制参数的目的,是调试过程中的一条有效辅助手段。