无刷直流电动机的模糊逻辑算法控制
越来越多企业开始使用变速驱动发动机来减少能源的消耗。这需要通过从微分(PID)控制器转向基于模糊逻辑算法的系统来简化设计,缩短开发时间,并消除复杂的数学公式。
但是,这对发动机提出了新的挑战。当使用传统的积分和微分(PID)控制器来控制无刷直流(BLDC)电机的速度是复杂的,因为它们依赖于复杂的数学模型,并且是计算密集型的。而使用模糊逻辑(FL)的算法,可以消除设计过程对复杂的数学公式的依赖,并且提供一个容易理解的解决方案。与(PID)微分控制器相比,模糊逻辑(FL)发动机控制还有一个优势,那就是开发周期更短。本文讨论了采用德州仪器c28xx定点DSP系列,实现用模糊逻辑算法来控制无刷直流电动机的过程。
无刷直流电机控制模型的发展
在模糊逻辑(FL)发动机构建之前,我们必须首先建立一个模型作为设计的基础。模糊逻辑控制器使用启发式知识,并使用一个语言描述模型来表达它的设计。我们将以PID控制器模型为出发点,而不是从头开始开发一个模型。一旦完成开发和实现,模糊逻辑控制器将通过调整其参数来提高性能。
一般来说,开发模糊逻辑无刷直流控制器有三个设计步骤:
1.定义输入、输出控制器的操作范围。
2.定义模糊成员集的功能和规则。
3.调整引擎。
第一步是定义模式相关的输入和输出。输入是误差(E),它是设置的速度(SS)和当前的速度(CS)之间的当前误差;另外的输入是误差的变化(CE),它是当前误差和以前计算误差(PE)之间的差值。输出是电枢电压(CV)的改变值,它是现有的电枢电压(CAV)和以前的电枢电压(PAV)保存值的差额。由此产生的模型方程式如下:
E=SS-CS
CE=E-PE
CV=CAV-PAV
发动机旋转速单位为转每分钟(RPM),E决定了接近目标速度的程度。因此,当E>0,发动机的旋转速度低于设定的速度;当E<0,电机旋转速度超过设定的速度。CE决定控制器的调整方向。当且仅当(iff)目前的旋转速度比设定的速度要低时CE为正,;当且仅当目前的旋转速度大于设定的速度时,CE 为负。当接近设定速度时,CE就会在正的和负的值之间来回调整。CV是电枢的供电电压。这个电压表示为脉冲的宽度调制(PWM)占空比。
下一步是定义模糊集的成员函数、变量和规则。为了保证能工作,非模糊(清晰)输入和输出必须转化成模糊的。转换由使用语言变量来表示输入和输出范围。这些也被称为模糊变量。模糊变量用于为成员函数划分隶属值的区域。例如,5个变量用来映射输入和输出,它们是中等负值(NM)、小负值(NS)、零(z)、小正值(PS)、中等正值(PM)。
它不是数学公式,模糊控制器使用模糊规则来作出决定,并产生一个输出。模糊规则是通过IF-THEN语句的形式来描述的。模糊规则决定系统的行为,而不是复杂的数学方程。例如,如果错误(E)是等于中等负值(NM),而错误的变化(CE)等于小正值 (PS),那么在电枢电压(CV)的改变就等于小负值(NS)。所用的一些规则是根据设计者的经验和系统的知识来设定的。因此,我们的系统所使用的规则的数量是25个。
为了激活电枢,CV模糊输出必须被转换回清晰输出。这个过程称为去模糊化。一种流行的去模糊方法称为重心法。
设计的最后一步是调整成员函数和规则。这个阶段也称为优化调整阶段。优化调整用于提高模糊控制器的性能。一旦设计完成,控制器就将准备付诸实现。
模糊逻辑控制器的实现是由三个模块组成的。它们分别是模糊化、规则部署和去模糊化。以下各节讨论模糊逻辑无刷直流电动机相关模块的实现情况。
模糊化
模糊化是将有明晰数值的数据转换成模糊数据的过程。由此产生的模糊数据的转换是基于对输入变量的模糊隶属度。对于这种应用,电机控制输入变量是旋转误差 (Error)和旋转误差差值(Cerror)。旋转误差(Error)是从一个采样时间到下一个采样时间的绝对旋转速度差。同样地,旋转误差差值 (Cerror)是一个采样时间和下一个采样时间之间的旋转误差变化值。公式如下:
旋转误差(Error)=SetSpeed(设定速度)-Cur-rentSpeed(目前速度)
旋转误差差值(Cerror)=旋转误差(Error)-Pre-viousError(前一次误差)
正如前面谈到的,为旋转误差(Error)变量和旋转误差差值(Cerror)变量定义了五个成员集:
1.NM:中等负值
2.NS:小负值
3.ZE:零
4.PS:小正值
5.PM:中等正值
图1显示了为旋转误差(Error)变量和旋转误差差值(Cerror)变量定义的五个成员集。这些成员集是三角型重叠,以提供良好的响应。每一组有一个0×1AAA的最大值。
输入变量模糊化后产生了由五部分组成的向量,这五个部分相对应于模糊化成员集的中等负值、小负值、零、小正值、中等正值。每个组件对应的Y轴的值代表该明晰输入值的隶属度。向量含有旋转误差(Error)和旋转误差差值(Cerror)模糊化值被表示为数组×1[]和X2[]。
图2和图3图形化地显示了旋转误差[Error)和旋转误差差值(Cerror)模糊化值。