高泽东 李建军 高教波 王 军 解俊虎
(西安应用光学研究所,陕西 西安 710065)
传统PID控制方法算法简单、鲁棒性好且易于实现,在电机伺服控制中得到大量应用。伺服系统存在参数时变、电机及被控对象的非线性等问题,很难确定准确的控制模型[1-2]。传统PID控制不能解决不同速度高精度位置跟踪问题。对此,现代伺服控制系统采用智能控制方法对传统PID控制算法进行改进[3-4]。模糊自整定PID算法是一种改进的PID控制算法,具有PID控制和模糊控制的优点,可实现对PID参数的在线动态调整。部分研究结果表明,模糊自整定PID算法对被控对象的非线性和时变性具有一定的适应能力,同时也证明了该算法处理变速高精度位置跟踪问题的可行性[4-7]。
本文研究了模糊自整定PID算法的基本原理和程序设计方法,并将研究结果应用于伺服控制系统中。试验表明,基于该算法的伺服控制系统在不同跟踪速度下均具有较短的响应时间、较小的跟踪误差和较高的跟踪精度。
模糊自整定PID控制原理如图1所示。模糊自整定PID控制器以误差E和误差变化ED作为输入,在运行中不断检测E和ED,根据模糊控制原理对PID三个参数进行在线修改,以满足不同E和ED对参数的不同要求,从而使被控对象有良好的动、静态性能。伺服电机的位置设定值由PS给定,实时位置由研华PCI-1784编码器采集卡获取,模糊PID控制器的输出由PCI-1723 AO卡实现,驱动器接收PCI-1723 AO卡的-10~+10 V命令,以驱动伺服电机。
图1 模糊自整定PID控制原理Fig.1 Principle of fuzzy self-tuning PID control
在介绍算法实现之前,有必要介绍一下模糊控制的三个基本概念:精确变量、模糊语言变量和隶属度。精确变量是控制器输入输出变量的实际物理量。模糊自整定PID算法中有误差、误差变化、比例系数、微分系数和积分系数五个精确变量。模糊语言变量是取值为模糊数的、由语言词来定义的变量,简称模糊变量。模糊变量组成的集合称为模糊集合,取模糊集合为{负大,负中,负小,零,正小,正中,正大},用字母集合{NB,NM,NS,ZO,PS,PM,PB}表示,为程序处理方便,又用{0,1,2,3,4,5,6}表示。隶属度就是用[0,1]中的一个实数来度量精确变量属于模糊变量的程度。对于一个模糊集而言,隶属度随着模糊语言变量取值的不同而改变,这个表示隶属度变化规律的函数称为隶属函数[8]。任意精确变量转化成模糊变量都会得到一个与模糊变量相同个数的隶属度向量。本文采用数组float gl_fMemshipValue_Err[7]表示误差的隶属度向量,其中gl_fMemshipValue_Err[0]为误差取模糊值NB时的隶属度,gl_fMemshipValue_Err[1]为误差取模糊值 NM 时的隶属度,...,gl_fMemshipValue_Err[6]为误差取模糊值PB时的隶属度。
模糊自整定PID算法的核心是实现PID参数的自适应整定。PID参数的自整定分三个步骤完成:①将误差和误差变化模糊成模糊集合和隶属度向量;②根据模糊化的隶属度向量和模糊控制规则进行模糊推理,得到PID参数的模糊语言变量和隶属度;③将得到的PID参数的模糊语言变量和隶属度清晰化,得到精确的PID参数值。
所谓模糊化,就是根据输入变量模糊子集的隶属度函数,找出E和ED精确变量对应每个模糊语言变量的隶属度,从而把精确的输入量“模糊化”成不同的语言值,即将精确变量转化成对应的隶属度向量。
2.1.1 标准隶属度函数
隶属函数有多种形式,在实际应用中为方便起见,常采用梯形隶属函数和三角形隶属函数[8]。本文选择三角形隶属函数实现精确量的模糊化,如图2所示。
图2 标准隶属函数Fig.2 Standard membership function
图2中,横轴显示精确量的变化区间是[-3,+3],但是实际的变量范围并不在此区间内,所以须进行尺度变换,将实际尺度转换到标准尺度内。
首先研究标准隶属函数设计成程序的方法,将图2的分布分成三类,即左侧隶属度分布、中间隶属度分布和右侧隶属度分布,如图3所示。
图3 三角形隶属度分布示意图Fig.3 Schematic of the distribution of triangle membership
左侧隶属度分布函数为:
中间隶属度分布函数为:
右侧隶属度分布函数为:
式(1)~式(3)的实现函数为float fLeft_MembershipFunc(float fValue,float fMin,float fMax)、float fMid_MembershipFunc(float fValue, floatfMin, float fMid,float fMax)、float fRight_MembershipFunc(float fValue,float fMin,float fMax)。这三个函数可以完全实现标准隶属度函数。
2.1.2 尺度变换
图2 中标准尺度[-3,3]与实际尺度[Kpmin,Kpmax]相互转换的线性关系为:式中:Kpmin为实际尺度的最小值;Kpmax为实际尺度的最大值;x为标准尺度上的任意值;y为尺度变换后的值。式(4)对应的尺度变换子函数为float fScaleTrans(float fFactMin,float fFactMax,float fStdValue),返回值就是尺度变换后的值。尺度变换的原理如图4所示。
图4 尺度变换原理示意图Fig.4 Principle of the scale conversion
2.1.3 模糊化实现函数
模糊化过程用函数void FuzzyProcess(float fError,float fErrorDiff)实现,函数如下。
利用该函数得到 gl_fMemshipValue_Err[7]和gl_fMemshipValue_ErrDiff[7]两个隶属度向量,其中 gl_fMemshipValue_Err[7]为误差 fError的隶属度向量,gl_fMemshipValue_ErrDiff[7]为误差变化 fErrorDiff的隶属度向量。
模糊推理就是模拟人的思维,运用模糊概念进行推理。采用合适的推理方法,将输入变量的模糊隶属度向量与模糊控制规则进行合成,得到被控制量的模糊隶属度向量。
2.2.1 模糊控制规则
模糊控制规则是对被控对象进行控制的一个知识模型,基于操作人员的控制经验和本领域专家的有关知识而建立。这个模型的建立是否准确,将直接决定模糊控制器性能的好坏。基于本文伺服控制系统的硬件环境,经过分析和调试,得到性能较为理想的Kp、Ki、Kd的控制规则表如表1所示。该表用二维数组gl_RulebaseKp[7][7]、gl_RulebaseKi[7][7]、gl_RulebaseKd[7][7]存储。
表1 模糊控制规则表Tab.1 Fuzzy control rules
2.2.2 模糊推理方法
模糊推理方法的具体步骤如下。
①将误差和误差变化模糊隶属度向量进行合成,得到隶属度合成矩阵。
式中:μerr[i]为误差的隶属度向量;μerrdiff[j]为误差变化的隶属度向量;W[i][j]为合成隶属度向量;运算符“*”表示取min(极小)。
②找出合成矩阵的最大值作为被控制模糊变量的隶属度值,并记录Wmax时的位置值坐标(iWmax,jWmax)。
③查询模糊控制规则矩阵在(iWmax,jWmax)处的值,得到被控制量的模糊语言变量。
2.2.3 模糊推理实现函数
根据上述讨论,模糊推理可由函数void FuzzyReason(int* piFuzzyKp,int* piFuzzyKi,int*piFuzzy-Kd,float*pfMemShipValue)实现。该功能函数的输入值为误差隶属度向量gl_fMemshipValue_Err[7]和误差变化隶属度向量gl_fMemshipValue_ErrDiff[7],输出为Kp、Ki、Kd的模糊语言变量和隶属度值。
通过模糊推理得到的是模糊量,而对于实际的控制必须为清晰量。因此,需要将模糊量转换成清晰量。清晰化过程就是将模糊语言变量和隶属度转换成精确量,也就是对隶属度函数进行反运算。
2.3.1 清晰化方法
根据图3所示,可以得到不同三角隶属度函数分布的反运算公式。左侧的隶属度函数反运算为:
中间的隶属度函数反运算为:
右侧的隶属度函数反运算为:
由此可以得到被控制量的实际值。值得注意的是,xmin、xmid、xmax均需进行尺度变换将其转换到实际Kp、Ki、Kd三个值的调整范围。
2.3.2 清晰化实现函数
清晰化过程由函数void FuzzyVisible(int iFuzzy-Kp,int iFuzzyKi,int iFuzzyKd,float fMemShipValue,float*pfDetKp,float*pfDetKi,float*pfDetKd)实现。函数的输入值为模糊推理过程得到的iFuzzyKp、iFuzzyKi、iFuzzyKd、fMemShipValue,函数的输出值为float*pfDetKp,float*pfDetKi、float*pfDetKd,即 Kp、Ki、Kd的调整值。
伺服控制软件需要完成人机操作非实时任务和控制算法实时任务这两类任务。将人机界面、参数设定和状态数据显示等非实时任务交由Windows XP操作系统完成,这部分程序基于VC6.0开发。将包括模糊自整定PID算法在内的需要严格按照时间节点、具有确定性的任务交由RTX处理,这部分程序利用IntervalZero公司的RTX SDK平台开发。非实时任务和控制算法实时任务这两部分程序通过共享内存实现数据交互,通过事件体实现进程同步。这里着重阐述实时任务的程序实现方法。
进入实时控制程序,首先进行初始化,将当前误差值Error、上一时刻误差值Error_1、误差积分值ErrorIntegral、算法输出值 dUOutput和 dUOutput_1均初始化为0;然后将当前位置的反馈值PosFb作为位置设定值PosSet,再设置模糊控制算法输入、输出五个变量(误差、误差变化、比例调节、积分调节、微分调节)的实际尺度区间,并设置系统的初始PID参数值;最后启动定时器,设置定时器循环周期。定时器循环执行模糊自整定PID算法,算法由TimerBody()函数实现。
TimerBody()函数首先获取位置设定值PosSet,通过PCI-1784获取反馈值PosFb,计算得到当前的误差值Error和误差变化ErrorDiff,再通过抗积分饱和算法计算积分值ErrorIntegral;然后通过模糊化、模糊推理和清晰化这三个过程得到比例、微分、积分调整参数;最后完成PID控制算法,执行输出信号-10~+10 V限幅,通过PCI-1723 AO卡输出。至此即完成模糊自整定PID算法的一个控制周期。
试验对象为Newport公司的URS75CC旋转台,驱动电机为Maxon公司的UE34CC伺服电机,驱动器选择Maxon公司的ADS50/5驱动器,按图1所示的原理组成伺服控制系统。在相同的硬件条件下,设计了基于传统PID算法的实时伺服控制软件和基于模糊自整定PID算法的实时伺服控制软件。输入幅值为1°、频率为4 Hz的方波,得到图5所示的系统方波响应曲线。由此可以看出,与传统的PID控制器相比,模糊自整定PID控制器在位置跟踪方面具有鲁棒性好、动态跟踪性能好和误差小的特点。
图5 方波响应曲线Fig.5 Response curves of rectangular wave
图6为模糊自整定PID算法在幅值为10°、频率为1 Hz的正弦信号的响应曲线,指令周期为500 μs,电机的运行速度范围为0~62.8°/s。
图6 位置跟踪响应曲线Fig.6 Response curves of position tracking
从图6可以看出,位置的指令曲线和反馈曲线基本重合,位置跟踪误差很小。这说明控制系统在不同跟踪速度下的动态响应快,位置控制精度高。
模糊自整定PID控制算法将PID控制和模糊控制原理相结合,以误差和误差变化为输入,通过模糊推理,实现了对PID参数的实时动态调整,具有结构简单、易于实现、方便调试的优点。
试验测试结果表明,该控制器动态响应快,能适应不同速度的高精度位置跟踪。本算法开发的实时伺服控制软件运行可靠、鲁棒性好,已经成功应用于某随动跟踪系统中。
[1]王伟,张晶涛,柴天佑.PID参数先进整定方法综述[J].自动化学报,2000,26(3):347 -355.
[2]杨智,朱海锋,黄以华.PID控制器设计与参数整定方法综述[J].化工自动化及仪表,2005,32(5):1 -7.
[3]胡包钢,应浩.模糊PID控制技术研究发展回顾及其面临的若干重要问题[J].自动化学报,2001,27(4):567 -584.
[4]卢泽生,张强.高精度交流伺服系统的模糊PID双模控制[J].北京航空航天大学学报,2007,33(3):315-318.
[5]张莉,朱海洋.混合模糊PID控制器在伺服控制系统中的应用[J].自动化仪表,2010,31(6):61 -63.
[6]王志明,龚振邦,袁晶,等.基于模糊PID位置控制的气伺服系统[J].机电工程,2009,26(10):93 -108.
[7]黄峰,汪岳峰,顾军,等.模糊参数自整定PID控制器的设计与仿真研究[J].光学精密工程,2004,12(4):235 -239.
[8]刘金琨.先进PID控制及其MATLAB仿真[M].北京:电子工业出版社,2002.
[9]胡祜德,曾乐生,马东生.伺服系统原理与设计[M].北京:北京理工大学出版社,1995.