浅析基于模糊PID的永磁同步电机矢量控制

发布者:SerendipitySoul最新更新时间:2024-08-21 来源: elecfans关键字:模糊PID  永磁同步电机  矢量控制 手机看文章 扫描二维码
随时随地手机看文章

永磁同步电机由于其转动惯量低、效率高、控制方式便捷等优点,已成为当今伺服系统中最佳的执行结构之一。速度、位置和电流组成了永磁同步电机伺服控制系统。实际控制的过程中,电机所带的转动惯量和负载转矩都会对系统的伺服性能造成不良的影响。高性能的永磁同步电机伺服控制系统需具备:稳态、抗干扰和鲁棒性强的特点。因此,针对永磁同步电机的控制策略需要很强的时变性和抗干扰性。


传统的控制策略有PID控制方法。PID控制策略由于其易实现、结构简单常应用于伺服系统中。但是当永磁同步电机受到外界因素干扰时,该方法往往无法保证得到理想的控制性能。目前,针对永磁同步电机的控制方法专家学者们提出了很多的方法。包括:滑模控制、智能算法控制及自适应控制等。


模糊PID控制方法是一种利用模糊控制器实现整定PID控制器参数的控制方法,其即有模糊控制器不依赖控制对象数学模型的优点,也具有PID控制器良好的稳态精度。因此,本期对永磁同步电机(以下简称PMSM)模型和矢量控制算法进行了分析,设计了一种基于模糊PID的复合控制策略,基于Simulink环境仿真下的结果表明,模糊PID控制具有良好的鲁棒性。


1、永磁同步电机原理

2、模糊PID控制器

模糊PID控制器可以根据PID参数整定经验或方法获得可行的控制效果,但整定过程具有一定盲目性;尽管初始论域、初始规则通过在线调整一般能保证系统的稳定性,但规则本身往往存在一定的粗造性和冗余性,带来在线调整时间长等问题。模糊控制器的结构如下图所示:

图片

把输入的精确量进行模糊化变成模糊量,得到的模糊量可用相应的模糊语言表示,再由模糊控制规则根据推理的合成规则进行模糊决策,得到模糊控制量,最后进行解模糊处理,得到精确的控制量输入系统。

(1)论域和比例因子量化因子的选择

模糊控制器的输入输出都是精确数值,而模糊推理的决策量都是模糊值。为了进行模糊化处理,需要将输入输出变量从基本论域转化到相应的模糊论域中去。

设置误差、误差变化率、Kp和Ki的基本论域分别为:

图片

则,误差的量化因子Ke、误差变化率的量化因子Kec、输出控制量的比例因子Kup和Kui可表示为:

图片

合理的选择一个模糊控制器的输入变量的量化因子和输出控制量的比例因子是非常重要的。试验结果表明,量化因子和比例因子的大小及其不同量化因子之间的大小的相对关系,对模糊控制器的性能影响很大。实际过程中,需要根据系统要求的性能调节适合的量化因子和比例因子。

(2)模糊控制规则

这里主要以Matlab/Simulink的形式展示:

图片

图片

function [antecedentOutputs,sumAntecedentOutputs] = fcn(inputs, ...

    fis,SimulateUsing,diagnostics)



if SimulateUsing==1 && coder.internal.canUseExtrinsic ...

        && (isa(inputs,'double') || isa(inputs,'single'))


    antecedentOutputs = zeros(fis.rfsSize,'like',inputs);

    sumAntecedentOutputs = zeros(fis.sumSize,'like',inputs);


    if fis.inputFuzzySetType==1

        if isa(inputs,'double')

            [antecedentOutputs(:),sumAntecedentOutputs(:)] = feval(...

                'fuzzy.internal.codegen.evaluateRuleAntecedent_double_mex',...

                inputs,fis,diagnostics);

        else

            [antecedentOutputs(:),sumAntecedentOutputs(:)] = feval(...

                'fuzzy.internal.codegen.evaluateRuleAntecedent_single_mex',...

                inputs,fis,diagnostics);

        end

    else

        if isa(inputs,'double')

            [antecedentOutputs(:),sumAntecedentOutputs(:)] = feval(...

                'fuzzy.internal.codegen.evaluateRuleAntecedentType2_double_mex',...

                inputs,fis,diagnostics);

        else

            [antecedentOutputs(:),sumAntecedentOutputs(:)] = feval(...

                'fuzzy.internal.codegen.evaluateRuleAntecedentType2_single_mex',...

                inputs,fis,diagnostics);

        end

    end

else

    if fis.inputFuzzySetType==1

        [antecedentOutputs,sumAntecedentOutputs] = ...

            fuzzy.internal.codegen.evaluateRuleAntecedent(...

            inputs,fis,diagnostics);

    else

        [antecedentOutputs,sumAntecedentOutputs] = ...

            fuzzy.internal.codegen.evaluateRuleAntecedentType2(...

            inputs,fis,diagnostics);

    end

end

end

function aggregatedOutputs = fcn(inputs,antecedentOutputs, ...

    fis,samplePoints,SimulateUsing)



if SimulateUsing==1 && coder.internal.canUseExtrinsic ...

        && (isa(inputs,'double') || isa(inputs,'single'))


    aggregatedOutputs = zeros(fis.aggSize,'like',inputs);


    if fis.inputFuzzySetType==1

        if strcmp(char(fis.type),'mamdani')

            if isa(inputs,'double')

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForMamdaniFIS_double_mex'],...

                    antecedentOutputs,fis,samplePoints);

            else

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForMamdaniFIS_single_mex'],...

                    antecedentOutputs,fis,samplePoints);

            end

        else

            if isa(inputs,'double')

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForSugenoFIS_double_mex'],...

                    inputs,antecedentOutputs,fis);

            else

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForSugenoFIS_single_mex'],...

                    inputs,antecedentOutputs,fis);

            end

        end

    else

        if strcmp(char(fis.type),'mamdani')

            if isa(inputs,'double')

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForMamdaniFISType2_double_mex'],...

                    antecedentOutputs,fis,samplePoints);

            else

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForMamdaniFISType2_single_mex'],...

                    antecedentOutputs,fis,samplePoints);

            end

        else

            if isa(inputs,'double')

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForSugenoFISType2_double_mex'],...

                    inputs,antecedentOutputs,fis);

            else

                aggregatedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'evaluateRuleConsequentForSugenoFISType2_single_mex'],...

                    inputs,antecedentOutputs,fis);

            end

        end

    end


else

    if fis.inputFuzzySetType==1

        if strcmp(char(fis.type),'mamdani')

            aggregatedOutputs = ...

                fuzzy.internal.codegen.evaluateRuleConsequentForMamdaniFIS(...

                antecedentOutputs,fis,samplePoints);

        else

            aggregatedOutputs = ...

                fuzzy.internal.codegen.evaluateRuleConsequentForSugenoFIS(...

                inputs,antecedentOutputs,fis);

        end

    else

        if strcmp(char(fis.type),'mamdani')

            aggregatedOutputs = ...

                fuzzy.internal.codegen.evaluateRuleConsequentForMamdaniFISType2(...

                antecedentOutputs,fis,samplePoints);

        else

            aggregatedOutputs = ...

                fuzzy.internal.codegen.evaluateRuleConsequentForSugenoFISType2(...

                inputs,antecedentOutputs,fis);

        end

    end

end

end

function defuzzifiedOutputs = fcn(sumAntecedentOutputs,...

    aggregatedOutputs,fis,samplePoints,SimulateUsing,diagnostics)



if SimulateUsing==1 && coder.internal.canUseExtrinsic ...

        && (isa(aggregatedOutputs,'double') || isa(aggregatedOutputs,'single'))



    defuzzifiedOutputs = zeros(fis.numOutputs,1,'like',aggregatedOutputs);


    if fis.inputFuzzySetType==1

        if strcmp(char(fis.type),'mamdani')

            if isa(aggregatedOutputs,'double')

                defuzzifiedOutputs(:) = feval(['fuzzy.internal.codegen.' ...

                    'applyMamdaniDefuzzificationMethod_double_mex'],...

[1] [2]
关键字:模糊PID  永磁同步电机  矢量控制 引用地址:浅析基于模糊PID的永磁同步电机矢量控制

上一篇:SVPWM的永磁同步电机系统控制研究
下一篇:PID算法与PID三个调节分量的优缺点概述

推荐阅读最新更新时间:2024-11-05 06:22

基于模糊PID算法的电阻炉温度控制系统设计与实现
  引言   电加热炉是典型工业过程控制对象,其温度控制具有升温单向性,大惯性,纯滞后,时变性等特点,很难用数学方法建立精确的模型和确定参数。而PID控制因其成熟,容易实现,并具有可消除稳态误差的优点,在大多数情况下可以满足系统性能要求,但其性能取决于参数的整定情况。且快速性和超调量之间存在矛盾,使其不一定满足快速升温、超调小的技术要求。模糊控制在快速性和保持较小的超调量方面有着自身的优势,但其理论并不完善, 算法 复杂,控制过程会存在稳态误差。   将模糊控制算法引入传统的加热炉控制系统构成智能模糊控制系统,利用模糊控制规则自适应在线修改PID参数,构成模糊自整定:PID控制系统,借此提高其控制效果。基于PID控制算法,
[电源管理]
基于<font color='red'>模糊PID</font>算法的电阻炉温度控制系统设计与实现
交流异步电动机的矢量控制系统设计方案
0 引言 $异步电动机的动态数学模型是一个高阶、非线性、强耦合的多变量系统,矢量控制是电机控制系统的一种先进控制方法,由于其交流调速时的优越性被广泛应用到异步电机调速系统中。基于Simulink 的交流异步电机仿真可以验证系统设计方案的有效性,在实验室应用过程中可能遇到系统设计难题。 本文以$双闭环矢量控制系统为研究对象,在Simu-link 中进行仿真来验证控制系统的有效性。通过分析仿真结果得到矢量控制系统的动静态特性,从而证实了本设计方案的可行性。 1 矢量控制原理 矢量控制系统,简称VC 系统,坐标变换是核心思想。矢量控制的基本思想是以产生同样的旋转磁动势为准则,将异步电动机在静止三相坐标系上的定子交流电流等效成两
[嵌入式]
矿山机车无速度传感器矢量控制系统
1.引言 现代轨道牵引中,异步电机已经逐步代替直流电机而成为主要的轨道牵引用电机种类。为了得到较好的交流调速性能,矢量控制是一种较为理想的控制方法。对于矿山机车牵引系统,为获得较好的控制性能,应针对矿山机车的工作特点对传统的矢量控制系统进行改进。机车运行条件恶劣,震动强烈且工作环境灰尘多,这些条件对速度传感器会有很大的危害。所以机车在某些情况下不能使用速度传感器,在系统设计时要考虑实现无速度传感器运行,利用电压电流等电量信息估算出电机转速。此外在很多情况下要求机车电机在大于额定转速工作时仍然有足够的转矩输出。所以系统在设计时必须设计合适的弱磁控制算法,以保证电机在额定转速以上的正常工作。 本文首先针对矿山机车的工作
[工业控制]
基于DSP的永磁同步电机磁场定向控制器设计
摘要:介绍了一种采用DSP芯片TMS320LF2407A实现永磁同步电机磁场定向控制器的控制原理,给出了采用磁场定向控制策略来设计该控制器的硬件组成结构及软件设计流程。 关键词:永磁同步电机 磁场定向控制 数据信号处理器 智能功率模块 1 引言 近年,交流伺服系统已经在机械制造、工业机器人、航空航天等领域得到广泛应用,其控制对象大多是永磁感应同步电动机(PMSM)。PMSM的转子采用永磁钢,属于元刷电机的一种,具有结构简单、体积小、易于控制、性能优良等优点。本文讨论的空间矢量控制的永磁同步电机控制器就是采用磁场定向算法并借助DSP的高速度来实现对转速的实时控制, 因而在各种状态下都有良好的控制性能,特别适用于对控制器体积
[工业控制]
矢量控制是什么意思 矢量控制的特点
  矢量控制是什么意思   矢量控制是一种具有高精度的电机控制技术,可以实现电机转矩、速度和位置的精确控制。基于矢量控制技术的电机控制器能够精确调节电机的电流、电压和频率,以达到最佳性能和效率。   矢量控制的原理是将三相交流电机所产生的磁场转换为直角坐标系下磁通量的x、y分量,而后通过改变两个分量的相对大小和相位角来控制电机转矩和转速。这样就可以实现对电机的精确控制,提高其性能和效率。   矢量控制是通过测量和控制异步电动机定子电流矢量,根据磁场定向原理分别对异步电动机的励磁电流和转矩电流进行控制,从而达到控制异步电动机转矩的目的。具体是将异步电动机的定子电流矢量分解为产生磁场的电流分量   (励磁电流)和产生转矩的
[嵌入式]
基于68HC908MR16单片机的空间矢量控制变频电源
摘要:介绍了一种基于空间矢量PWM算法的变频电源的实现方式。系统采用MOTOROLA公司的电机控制专用芯片68HC908MR16,通过PI调节将直流电逆变成频率可调的三相正弦波交流电,同时利用串行通信实现系统的状态显示和参数修改。 关键词:空间矢量;脉宽调制;变频器;专用芯片MR16     0 引言 随着拖动技术的不断发展以及大功率电力电子器件的不断更新,交流异步电机 V / f 控制PWM变频电源在工业上的应用越来越广泛。传统的SPWM变频调速技术理论成熟,原理简单,易于实现,但其逆变器输出线电压的幅值最大值仅为0.866 U d ,直流侧电压利用率较低;而采用空间矢量PWM(SVPWM)算法可使逆变器输
[工业控制]
基于68HC908MR16单片机的空间<font color='red'>矢量控制</font>变频电源
基于F2808的永磁同步电机伺服系统设计
1 引言 与其他电机相比,PMSM构成的交流伺服系统具有明显的优势,如效率高、低速性能好、转子惯量小等,因此研究PMSM构成的高性能驱动和伺服控制系统,具有重要的理论意义和实用价值。针对PMSM控制的工程实际,设计了一种基于DSP F2808的数字伺服控制系统,采用直流母线电压纹波补偿、遇限削弱积分PI控制算法、防振荡处理等控制策略,实现PMSM高性能伺服控制,给出了伺服控制系统相关原理、软硬件设计和实验结果。基于上述方法开发的控制装置具有良好的性能,已获得实际应用。 2 交流伺服控制系统的相关控制方法 2.1 PMSM转子磁场定向矢量控制 在d,q旋转坐标系下,转子磁场定向矢量控制的PMSM电压、磁链方程为:
[单片机]
基于F2808的<font color='red'>永磁同步电机</font>伺服系统设计
基于智能PWM控制的机车制动控制单元的设计
1 引 言 随着我国国民经济的蓬勃发展和人民生活水平的日益提高,铁路的客、货运量将越来越大,列车牵引重量与运行速度将不断提高。高速客运及重载货运列车的发展对列车制动系统提出了更高更新的要求。 国外发达国家都是采用微机应用先进控制理论实现对机车制动气缸的精确控制。而在我国机车上广泛使用的DK-l和JZ-7型制动机只能对机车实现一些简单的逻辑控制功能,不能实现对机车制动缸和均衡风缸的闭环控制,难以满足机车制动控制的需要。随着电子技术及微机控制技术应用的日渐成熟,有必要应用现代电子技术和先进的控制理论,利用微机的强大功能实现对机车的精确制动。 目前世界各国铁路绝大多数仍采用空气制动,要实现对气体压力的控制,特别是小流量压
[工业控制]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved