肖倩,崔思柱,刘丰豪,杨恺迪,程石
(长安大学工程机械学院,西安710061)
二自由度云台是一种可远程控制摄像头水平旋转和俯仰角度调节的电动设备,广泛应用于安防、工业、军事、无人机航拍等领域。云台的稳定运行是保证其所搭载相机正常拍摄的基础。因此,一个稳定可靠的实时监控系统就显得尤为重要,它不仅能保证设备温度、电压、电流在安全范围内,更能提高云台的精确控制能力。如果监测到云台运行异常,可以有针对性地及时处理,避免造成不必要的损失。
本文提出了一种基于MATLAB GUI的云台运动状态监控系统[1]的设计方案,该监控系统通过Modbus协议将采集到的云台运动状态参数上传至上位机实时显示并通过界面进行控制,保证了云台转速控制的快速性、稳定性,解决了云台控制参数难以精确测量和控制的问题,具有实际的工程意义。
云台参数监控系统整体结构如图1所示。系统功能主要由两部分实现:一部分是下位机对温度、电流、电压、转速、位置等信息的采集和控制;另一部分是利用MATLAB GUI实现对监控参数的控制操作、图形显示和数据处理功能。
图1 云台监控系统整体结构图
系统的下位机部分负责监控数据的采集工作,将位置、转速、电流、电压和温度等待监控模拟量信息采集并送入DSP的ADC模块,将待监控数据处理后,通过串行通信实时地将数据传送回上位机进行处理。驱控一体云台控制器采用TMS320F28069 DSP作为主控芯片,片内集成12位分辨率的16通道ADC转换通道,非常适用于多模拟量采集系统。
下位机程序在CCS(Code Composer Studio)6.0集成开发环境下进行开发,通过对各功能函数的编写,然后进行编译、调试、生成.out文件,并下载到DSP中。
系统的上位机是基于MATLAB GUI界面的集M控制算法文件和Modbus通讯协议模块为一体的实时参数监控系统,主要负责对监控数据进行处理和分析。通过调用MATLAB内置的serial函数,操作RS-232串口,并通过Modbus协议在云台控制器与PC串口之间进行实时通信,主要包括以下几个模块:
(1)串口通信。与下位机之间实现数据交换。
(2)GUI界面。界面设计以及对监控参数进行显示并绘制动态曲线和动态模拟。
(3)监控主程序和滤波算法。主要负责在回调函数中编写控制云台电机启停、转动角度及发送串口数据等功能的程序编写,并通过滤波算法来消除偶然脉冲对监控到数据的影响。
MATLAB配置了串口通信API[2],提供了对串口进行打开、关闭,以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。在配置控制器时,用户需要选择通信模式和串口的通讯参数,保证通信设备配置相同的通信模式和串口通讯参数。
建立函数的过程如下:
s=serial(‘com1’);%创建串口对象s,串口号为COM1
set(s,‘BaudRate’,9600,‘Parity’,‘even’,‘Stop⁃Bits’,1,‘DataBits’,8,‘TimerPeriod’,0.05);
%设置串口波特率为9600;偶校验,一位停止位,8位数据位;定时器周期为0.05s
Modbus通讯协议[3]是一种主-从通讯机构,是世界上第一个用于工业现场的总线协议,它只定义了协议层,支持RS-232和RS-485电气接口。常用的Modbus通讯协议有ASCII和RTU[4]两种通信模式。一般来说,通讯数据量少且主要是文本的通讯采用ASCII模式,通讯数据量大而且是二进制数值时,多采用RTU模式,综合考虑,本系统选用Modbus RTU模式作为通信协议。
Modbus RTU模式中,数据以帧的方式进行传输,通信指令以8位二进制数的形式传递。当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。
CRC-16校验码多项式为X16+X15+X2+1,具体步骤如下:
unsigned int CRC16(unsigned char*Msg,unsigned int DataLen)%*Msg为待校验数据首地址,DataLen为待校验数据长度
{
unsigned char uchCRCHi=0xFF;
%高CRC字节初始化
unsigned char uchCRCLo=0xFF;
%低CRC字节初始化
unsigned int i; %CRC循环中的索引 while(Dat⁃
aLen--) %传输消息缓存区
{
i=uchCRCHi*Msg++;%计算CRC
uchCRCHi=uchCRCLo^auCRCHi[i];
uchCRCLo=auCRCLo[i];
}
return(uchCRCHi<< 8|uchCRCLo);
}
监控系统的界面设计应遵循布局合理、清楚直观、方便用户操作等原则,具体的界面设计如图2所示。系统的GUI界面[6]主要由监控数据显示模块、参数设置模块、实时位置动态模拟模块、故障诊断模块、实时曲线绘制模块等组成。
(1)监控数据显示与参数设置模块。数据显示面板主要将上位机采集到的温度、电压、电流、转速、位置等信息显示在GUI界面中,方便使用者进行观察;参数设置面板主要包含串口的设置、电机启停开关和转速的设定。
(2)实时位置动态模拟及故障诊断模块。由于云台监控系统需要得知云台转动的实时位置,因此,用两个表盘将云台水平转向和俯仰转向的实时运动位置以角度的形式动态模拟出来。在系统正常运行时,故障诊断模块的error显示“正常运行”,当运行时错误发生次数达到一定值后,会在error区显示哪个监控参数出现错误,进行系统故障自诊断。
(3)实时曲线绘制模块。曲线绘制模块主要负责对云台的水平实时转速、俯仰实时转速、水平电机相电流、俯仰电机相电流进行实时监测。通过在MATLAB GUI中添加axes控件通过曲线绘制来显示水平和俯仰方向的实时转速和实时电流的动态变化。在axes()函数中设置当前曲线绘制坐标,再调用set()函数完成曲线的绘制。
图2 二自由度云台参数监测系统界面设计
由该监控系统的设计要求,需要实时监控云台的水平实时转速,俯仰实时转速,水平实时位置,俯仰实时位置,母线电压,电路参考电压,水平电机v相电流,水平电机u相电流,俯仰电机v相电流,俯仰电机u相电流,温度等数据。
本系统采用的是基于MATLAB GUI的平台上编写的上位机程序,其中有很多库函数可以直接调用,因此编写很方便、快捷。只需要在GUI面板中设计好界面,再在每个模块中编写相应功能的回调函数即可。
为了滤掉信号经过模拟电路时的那些偶然的脉冲波或者周期性波[8],减小采集到信号的误差,针对该监控系统采用限幅滤波法,该滤波方法能有效克服因偶然因素引起的脉冲干扰。滤波程序如下:
/*A值可根据实际情况调整,Value为有效值,NewValue为当前采样值,滤波程序返回有效的实际值*/
#define FILTER.
int Filter()
{
int NewValue;
NewValue=Get_AD();
if(((NewValue-Value)> FILTER_A)||((Value-NewVal⁃ue)>FILTER_A))
return Value;
else
return NewValue;
}
图3 监控程序流程图
图4 串口测试数据传输流程图
为了测试监控系统的实时通信效果,利用MAT⁃LAB GUI制作了一个简单的通信测试[5]界面,如图5所示。监控系统的串口测试流程图如图4所示。经测试,该系统的上位机可以和下位机进行实时通信。当通过监测系统给下位机发送读取水平转速指令(01 03 00 00 00 01 84 0A)后,下位机返回数据(01 03 02 00 C8 B9 D2),其中00 C8为返回数据,转换为二进制表示水平转速为200rpm,通过测速仪测得水平电机的转速为197rpm,结果表明监控系统的通信正常。
将上位机和下位机连接完毕,进入测试程序,打开GUI监控界面并打开串口,点击开始监控按钮,监测系统的实验效果如图6所示。
图5 串口通信GUI测试界面
图6 监控功能测试界面
结果表明,监控系统可以将采集到的监控数据实时显示在面板上,且实时位置动态模拟面板和实时曲线绘制面板均正常显示,监控系统各模块工作正常。此测试为云台在低速运行时的数据采集,实验基本上达到了所要实现的效果,监测结果精确。
本文基于MATLAB GUI的串口通信方法,以Mod⁃bus为基础通信协议,设计了二自由度云台的参数监测系统。选用MATLAB GUI作为界面开发的工具是合适的,虽然其界面开发和数据采集的功能相对较简单。但是,在一般的界面开发和普通功能的串口通信开发中,GUI的控制算法写在M文件中,便于使用人员进行修改,且GUI组件使用方便快捷,编程简单易懂,很方便新手学习。实验结果证明了该GUI监控系统界面丰富、功能完善,且运行稳定可靠。