在光电伺服控制软件调试过程中为了开发一种连续、实时、直观的调试工具,需要将DSP环境中的数据实时传输到PC环境,利用PC丰富的图形环境进行数据显示和图形绘制。如何实现DSP环境与PC环境之间的实时数据交换成为该调试工具开发中的一个关键问题。针对该问题,利用T1公司实时数据交换(RTDX)技术,实现了MATLAB和CCS集成开发环境之间的实时数据交换。
0、引言
目前,在光电伺服控制软件调试过程中,为了实现程序中各种寄存器、控制参数等变量的观察,需要在目标程序中设置断点,中断目标程序运行。然而对实时性要求较高的光电伺服控制程序,这种插入断点的调试方法不能实时反映所关心数据的变化,同时还有可能造成数据错误,影响控制算法设计和错误分析,给程序调试带来不便。同样,在其调试阶段,需要在线修改程序中的控制参数,实现外部数据实时导人目标程序,而用传统调试手段难以实现。针对以上问题,需要设计一个连续、实时、直观的调试工具来进行光电伺服软件调试,用以提高调试效率和缩短开发周期。本文针对该调试工具设计过程中PC环境与DSP环境数据实时交换的关键问题,通过应用实例说明了采用RTDX技术实现MATLAB和CCS的编程环境之间数据交换的方法。
1、实时数据交换技术RTDX
TI公司的Real Time Data Exchange(RTDX)技术利用DSP的内部仿真逻辑和JTAG接口实现主机与目标机之间的数据交换。它几乎不占用DSP的系统资源,数据传送可以在目标程序后台运行,对目标程序影响很小。它可以在不中断目标程序运行的前提下向主机实时发送目标DSP上各个寄存器或内存变量的值。而Pc主机也可通过 TI公司提供的RTDX相关API函数获取这些数据,并可对这些数据进行实时分析和可视化显示。RTDX数据交换原理如图1所示。
目标DSP为了向主机发送数据必须设定一个输出通道,通过用户接口可将数据送到输出通道以使这些数据立即保存到RTDX目标机的缓存(由 RTDX目标函数库定义)中,然后再将这些数据通过JTAG接口发送到主机。目标机要从主机中获得数据,首先必须设定输入通道接收主机发出的命令,从而实现数据传输的同步。同时可利用输出通道完成目标程序向RTDX主机函数库发送数据,向RTDX主机函数库发送数据请求及在目标机上提供数据缓存等功能。
2、RTDX应用过程
使用RTDX进行DSP环境和PC环境之间的数据交换时,需要在DSP目标程序和PC主机程序中分别实现。它们之间的数据传输格式和传输频率要结合应用需求来定义。
2.1 DSP目标程序RTDX实现
在DSP目标程序中使用RTDX进行数据传输,只需在原有的DSP目标程序中加入关于RTDX通道初始化、数据缓存区定义和数据收发的代码即可。以下是RTDX在DSP程序中的实现过程。
(1)RTDX初始化
首先使用以下宏完成RTDX输入、输出通道的创建:
RTDX_CreatelnputChannel(d_jchan);
RTDX_CreateOutputChannel(a_ochan)。其中:d_ichan为输入通道名:a_ochan为输出通道名。后面有关RTDX通道的操作函数都要使用它们来指定通道。完成通道创建以后使用以下宏来使能输入、输出通道:
RTDX_enableInput(&d_ichan);
RTDX_enableOutput(&a_ochan)。
(2)创建接收和发送数据缓存区
进行数据发送之前需要定义好接收和发送缓冲区,缓冲区的大小可根据实际应用情况定义,但不可超过RTDX通道最大容量值。定义 Readdata[counterl]为接收缓冲区,counterl为缓冲区容量大小,定义Seaddata[counter2]为发送缓冲区。
(3)向RTDX通道读写数据
函数RTDX_readNB(&d_ichan,(void*)&Readdata,sizeof(short))可实现 RTDX输入通道数据非阻塞读取。使用 RTDX_write(&a_ochan,&Seaddata,500*sizeof(short))可以向RTDX通道发送数据,这里向通道中写入了500个short类型数据,发送数据个数不应超过RTDX通道容量大小,否则会发送失败。
在实际应用过程中RTDX只提供了一个数据的传输通道,而如何有效地使用这个通道还需要DSP目标程序和PC主机程序定义好数据的传输协议来实现。
2.2 MATLAB主机程序实现
PC主机程序是在MATLAB/GUI编程环境实现的。主要实现定时获取DSP目标程序通过RTDX通道发送上来的数据:实时显示接收到的数据信息;通过人机交互界面向DSP目标程序发送数据。设计流程如图2所示。
主机程序首先通过MATLAB Link for CodeComposer Studio的相关API函数与CCS集成开发环境建立双向和实时数据链接,成功建立链接后可以通过MATLAB/GUI程序控制执行CCS的命令来进行批处理调试和显示,然后再进行DSP类型及数量的探测。待探测到目标DSP类型和数量后,程序将进行RTDX通道缓冲区配置、通道初始化等操作。完成这些操作后MATLAB/GUI程序控制CCS运行目标程序,同时启动数据接收和发送定时器,此时DSP和PC可进行数据的实时交换。以下为MATLAB环境下RTDX的实现过程。
(1)RTDX初始化过程
首先使用configure(cc.rtdx,8192,4)对通道进行配置,配置参数需要根据DSP目标程序通道创建的个数来确定,这里配置缓冲区大小为8192字节,同时配置了4个通道,其中cc.rtdx为MATLAB和CCS建立连接成功后返回的句柄,后面有关RT-DX通道的操作函数都需要把它作为参数来使用。完成配置后,可使用open(cc.rtdx,’a_ochan’,’r’)来打开RTDX读通道,使用 open(cc.rtdx,’d_ichan’,’w’)来打开写通道,其中a_ochan,d_jchan为DSP目标程序中创建通道时定义的通道名。最后使用以下函数完成RTDX输入、输出通道的使能:
enable(cc.rtdx,’d_ichan’);
enable(cc.rtdx,’a_ochan’)。
(2)接收定时器服务函数
TimeUpdateChannelATl( )
在定时服务程序中主要完成实时接收RTDX通道中的数据,并把接收到的数据存人数据缓存区,然后根据数据传输协议解析数据并对数据进行处理或图形绘制。
(3)发送定时器服务函数
TimeUpdateChannelDTl( )
发送定时器服务函数主要实现数据的发送和协议的封包。当PC主机程序需要向DSP发送连续数据时,例如,正弦、方波和锯齿波等类型的激励信号时,需要将上述激励信号离散化处理后再进行发送,发送控制命令时,只需发送按照传输协议封包好的数据即可。
3、RTDX应用实例
以某型光电稳定平台的光电伺服控制软件调试为背景,结合上文RTDX在DSP目标程序和MATLAB/GUI的实现过程,对光电伺服控制软件和MATLAB/GUI程序进行修改,对DSP目标程序增加RTDX初始化、配置、收发等相关代码,对MATLAB/GUI修改有关数据处理和图形显示代码,并根据实际应用需求,实现平台中各种参数的显示、状态控制等功能。
某型光电稳定平台调试系统构成如图3所示。软件构成:MATLAB2011b、CCS3.3;硬件构成:两轴光电稳定平台、驱动控制硬件电路、调试PC主机、仿真器和直流稳压电源等。RTDX应用实现如下:
步骤一,在光电伺服控制软件中加入RTDX初始化相关函数并定义接收、发送缓冲区数组,数组大小按照RTDX最大容量500定义,同时还需实现平台数据的传输协议,其中上传数据包括陀螺、编码器、测速机、跟踪器数据类型及格式的定义。在伺服控制周期里采集到500个数据后进行数据上传,因此数据上传周期为500 ms;Pc机下传数据包括控制指令和正弦、方波、阶跃信号的离散化数据,数据下传周期由MATLAB/GUI发送定时器设定,根据伺服控制的响应特性,设定下传周期为10 ms,每个周期发送500个数据。
步骤二,在MATLAB/GUI程序中设计人机交互界面,如图4所示。需对MATLAB/GUI程序中的接收定时服务函数和发送定时服务函数进行修改,设置接收定时器定时周期为5 ms,并且要小于光电伺服控制程序数据上传周期,以防止数据丢失。按照传输协议,对接收定时服务函数增加数据传输协议解析函数,波形绘制函数等。对发送定时服务函数需增加激励信号波形离散化函数和传输协议封包函数。
步骤三,利用MATLAB/GUI程序观察光电稳定平台各个传感器的数据值,并可发送指令实现对光电稳定平台各种功能的控制,实现对光电伺服控制软件在线监控与调试,如图4所示。
在MATLAB/GUI界面上单击电机上电控制按钮,运动轴选择为俯仰轴,运动模式选择稳定模式,激励信号选择为正弦,幅值为60(°) /s,频率为4 Hz,点击陀螺数据显示按钮,此时可在主机程序界面上观察激励信号(虚线)和响应信号(实线)的曲线。可以选择不同类型的激励信号和运动模式来实现对光电稳定平台位置、速度和跟踪闭环状态性能的测试。在电机不上电的情况下还可以单独观察某个传感器的数据,判断它是否正常工作。
4、结论
本文以光电伺服控制软件的调试为应用背景,针对DSP环境与PC环境实时数据交换的技术问题展开研究。利用RTDX技术实现了CCS3.3与 MAT,LAB2011b编程环境之间的实时数据交换,并在MATLAB/GUI环境下开发了基于RTDX的光电伺服控制软件调试工具。该调试工具为开发人员提供了连续、实时、直观的调试环境,提高了调试效率。