冯明军 郑继敏
【摘 要】针对当前电动伺服机构控制软件结构和算法复杂、时间和空间利用不协调的问题,本文在传统电动伺服机构控制软件的基础上对软件结构、算法、时间和空间使用效率方面进行优化。
【关键词】电动伺服机构控制软件;软件优化
引言
电动伺服机构是运控部件执行机构,控制软件作为电动伺服机构控制核心,其执行效率与准确性关乎产品功能是否正确实现,性能指标能否满足使用要求。电动伺服机构控制软件通常同时采用多种控制算法和语言架构,软件所占空间较大,对执行效率、硬件资源等要求较高,载体空间时常难以满足运行要求。因此,优化软件运算逻辑、语法、结构等显得尤为重要。
1.电动伺服机构控制软件概述
1.1电动伺服机构概述
一套电动伺服机构通常由控制器、伺服机构及电缆组成。其中控制器由数字控制电路、模拟控制电路以及电机驱动电路三个部分组成,伺服机构由执行机构、反馈采集装置等组成。
1.2电动伺服机构控制软件概述
电动伺服机构控制软件主要完成控制指令接收处理、反馈数据采集处理、闭环解算并输出PWM信号,并实时通过RS-485等总线向上级控制装置返回指令、反馈以及状态等数据。电动伺服机构控制软件通常由多个软件模块构成,如图1所示。
2.优化控制软件执行效率的原则
提高软件运行效率的方法有许多,根据电动伺服机构控制软件,采取对应的效率优化策略,使软件执行效率得到最大程度的优化。
a.选择合适的算法和数据结构:合理使用结构体、共用体变量及指针等,执行效率更高。
b.代码尽量简洁,避免重复:对于电动伺服机构控制软件来说,尽量减少代码重复率尤为重要。
c.使用条件编译:根据实际情况,选择不同的编译范围,从而产生不同的代码。
d.嵌入汇编语言:某些软件语句用汇编语言来写更加有效。
e.使用位操作:位是可以操作的最小数据单位,灵活的位操作可以有效地提高程序运行的效率。
3.电动伺服机构控制软件效率优化
根据上述软件效率优化的一些原则,以嵌入式C语言控制软件为例,结合传统电动伺服机构控制软件各个模块,对控制软件结构、算法等进行优化,以达到软件性能整体优化的目的,提升软件运行效率、准确性及性能。
3.1控制软件结构方面
在电动伺服机构C语言DSP控制软件中,通常一个文件可能包含多个头文件,而各个头文件之间很多时候是相互作用的,这就导致某些头文件会被重复引用多次。如:
#include”Flash281x_API_Config.h
#endif
采用条件编译,第一次执行时正常引用头文件,当再次引用头文件时,将不满足条件直接跳到#endif。
又如下列代码:
#if IsReleaseVer
EnableDog();//使能看门狗
#endif
控制系统要求电动伺服机构控制软件在某些特定条件下具有系统复位能力,可以使用条件编译通过看门狗实现系统复位。
3.2初始化模块
电动伺服机构控制软件初始化除了要对寄存器、GPIO、串行通讯接口等各个模块进行初始化外,还要定义大量数组和变量用于数据接收、传递、计数、状态标识等,可按照最小资源分配的原则去定义数据类型,或者使用结构体进行定义。如:
Uint16 1553b_flag;//1553B通信标识
Double VoltageFilter[4][16];//电压滤波数据
优化点1:上述定义中,通信标識只有0和1两个状态,占用2个字节空间,可定义为unsignedchar型仅占用1个字节空间;而滤波数据在系统中保留3位小数就能满足实际精度要求,可用float型数据代替double型数据,节省了4个字节空间。
优化点2:另外,把结构体的成员按照它们的类型长度排序,声明成员时首先存放多字节数据,然后再存放少字节数据,把长的类型放在短的前面。
3.3指令接收处理模块
电动伺服机构控制软件通过DSP片上外设、通信控制器等接收控制装置发送的指令数据并解析。如:
DataSum=DataSum+RData[i];
RData_Ave=(DataSum-max-min)/8;//指令数据均值
优化点1:电动伺服机构控制软件工作期间根据指令周期源源不断接收来自控制装置的控制指令,若将上述指令数据求和改为DataSum+=RData[i],可提高效率。
优化点2:另外,乘除法很消耗资源,上述求指令均值可改为(DataSum-max-min)>>3。
3.4反馈采集模块
反馈采集模块完成反馈数据采集、量纲转换、拟合处理,并对反馈数据进行零位补偿等。如:
Delay(100);
angle_data[1]=SpiaRegs.SPIRXBUF;//反馈采集
优化点1:DSP控制软件中,模拟量反馈数据经A/D模数转换后,一般需经片上外设SPI进入DSP参与闭环控制或遥测输出,而A/D转换器发送数据通常需要一定时间,这就需要用到延时函数,对于只需较少的时钟周期延时的地方,可以嵌入汇编语言提高效率,如asm(“RPT#7||NOP”)。
优化点2:延时函数自加的形式for(i=0;i<100;i++),可以写为:for(i=100;i>0;i--),这样使得在大量使用延时函数的电动伺服机构控制软件中将节省很大一部分空间。
3.5闭环控制模塊
软件将当前指令与反馈数据进行比较并解算,根据解算所得控制量大小计算相应PWM波输出占空比,从而输出相应的控制信号。在一个闭环控制系统中融合多种控制算法,必然占用更多的空间资源,且多数系统对闭环周期要求较为苛刻。如:
DataCache[Ch][i]=DataCache[Ch][i+1];
SumData+=DataCache[Ch][i];
Ex=SumData/21;
优化点:可以使用指针运算代替数组索引,用乘法代替除法,这样做常常能产生又快又短的代码。因此上述代码可改为:
*(DataCache+i)= *(DataCache+i+1);
SumData+=*(Cache+i);
*Exout=SumData*0.04762;//用乘法代替除法
3.6调试模式模块
调试模块主要完成电动伺服机构软件的一些辅助功能,如参数上传、参数查询、设置反馈元件ID及程序上传等。如:
switch(Rcvd){
case0xA1:SetID();break;//设置反馈ID
case0xA2:SCParam();break;//参数上传
case0xA3:CXParam();break;//参数查询
case0xA4:Write_flash();break;//写FLASH
default:NOP;}
优化点:可以对case的值依照发生的可能性进行排序,把最有可能的放在第一位,这样可以提高性能。以上调试功能中,按频率从大到小顺序应为:参数查询→参数上传→写FLASH→设置反馈ID。
4.结语
本文通过对电动伺服机构控制软件整体结构及各个模块进行优化设计,使得电动伺服机构控制软件结构、算法、时间及空间的利用效率得到进一步优化,有助于电动伺服机构控制软件功能实现和性能提升。
参考文献
[1]StephenPara.《CPrimerPlus(第五版)中文版》,人民邮电出版社,2005.2.
[2]钟睿,李尚柏.《基于TI系列的DSP设计与开发》,化学工业出版社,2015.1