• Simulink电机控制代码生成-----关于PI控制器参数整定的一点总结


    目录

    PI控制器的参数整定方法

    方法一:

    方法二:

    方法对比

    总结


    看过很多论文,对PI参数的整定方法五花八门,还有PI参数整定的口诀,所谓口诀就是试凑法。除了试凑法,本文提供另外两种方法来整定PI参数,并互相验证两种方法的可行性。

    PI控制器的参数整定方法

    方法一:

    反电动势项忽略得到DQ轴坐标系的电压方程:

     对上式进行拉普拉斯变换得到:

     得到电流环闭环传递函数:

    这里把反馈为单位负反馈,增益环节也是1。

     闭环传递函数零极点对消化简得到PI参数,其中为带宽系数

    一般设计PI控制器参数或者其他控制器参数时需要考虑带宽的选取,一般带宽越高,响应越快但是相应稳态性能偏差,带宽越低响应越慢,相应的稳态性能就越好。设计控制器参数时根据系统定义需求进行调整即可。以上方法经常在很多参考文档里面遇到,而实际工程中带宽的设计都是基于经验和都尝试。

    方法二:

    参考之前的博文

    永磁同步电机矢量控制电流环参数整定方法----Matlab controlSystemDesigner的使用

    方法对比

    这里通过一个控制实例来更直观的感觉下PI控制的效果:

    根据方法一,我们得到下面的代码:

    1. pmsm = struct;
    2. pmsm.RatedVoltage = 800.0; %TBD
    3. pmsm.PolePairs = 4;
    4. pmsm.StatorPhaseResistance = single(0.00653); % RS
    5. pmsm.InductanceLd = single(0.000118); % Ld
    6. pmsm.InductanceLq = single(0.000276); % Lq
    7. pmsm.FluxLinkage = single(0.0672346); %Flux
    8. pmsm.Jkm2=single(0.002);
    9. %Set Inverter Parameters%
    10. inverter = struct;
    11. inverter.BusVoltage = 24.0;
    12. inverter.BusVoltageMax = 36.0;
    13. inverter.BusVoltageMin = 10.0;
    14. inverter.CurrentMax = single(10);
    15. inverter.PWM_frequency = 10000; %20Khz
    16. inverter.Ts=1/inverter.PWM_frequency; %Ts
    17. inverter.Speed_PI_T =0.002;%s
    18. currentloop = struct;
    19. currentloop.wc = single(1500); %rad/s 电流环带宽
    20. currentloop.kp_d = pmsm.InductanceLd * currentloop.wc;
    21. currentloop.ki_d = currentloop.wc*pmsm.StatorPhaseResistance;
    22. currentloop.kp_q = pmsm.InductanceLq * currentloop.wc;
    23. currentloop.ki_q= pmsm.StatorPhaseResistance*currentloop.wc;

     这里根据电机的参数,设计带宽1500 rad/s 换算成频率238.7Hz。得到的PI参数如下:

     根据方法二的方法,把方法一得到的Q轴的PI参数代入到系统传递函数,得到以下代码:

    1. s = tf('s');
    2. Td=1/inverter.PWM_frequency;%+0.5/inverter.PWM_frequency
    3. Giq=1/(pmsm.InductanceLq*s+pmsm.StatorPhaseResistance);
    4. Giq_delay=tf([1],[pmsm.InductanceLq pmsm.StatorPhaseResistance],'inputdelay',Td);
    5. %Giq_z=c2d(Giq_delay, inverter.Ts, 'zoh');
    6. %Ciq
    7. %Iq_numz = 0.66446*[1 -0.9973]
    8. %Iq_denz = [1 -1]
    9. %Ciq = tf(Iq_numz,Iq_denz,inverter.Ts)
    10. Kpq=0.4140;
    11. Kiq=9.7950;
    12. PI_q=Kpq+Kiq/s;
    13. controlSystemDesigner(Giq_delay,PI_q,1,1);

     运行后:

    可以看到,设计带宽正好是1500rad/s. 

     换成频率为单位:

    和我们之前算的一样239,系统的相位裕量和增益裕量也足够,系统稳定。通过方法二设计的PI参数,就可以让我们设计一个控制系统时看得到更多的信息,而不是试凑一个带宽或者一组PI参数。

     增大带宽:

    通过鼠标抓取曲线上下移动,或者调整零点位置都可以达到改变带宽的效果。

    增大带宽可以看到相位裕量变小,增益裕量变小,从阶跃响应来看系统响应更快,但是由于裕量变小了,所以系统的稳定性变差了。具体是什么情况好,取决于系统需求。这里就解释了前面带宽越高,响应越快但是相应稳态性能偏差,带宽越低响应越慢,相应的稳态性能就越好。

    总结

    本文利用实例通过两种方法整定PI参数,并互相比较,总结出两种方法都可以整定出PI参数,但是方法二更加直观和合理。方法一存在一定的不确定性,比如当前设计的带宽是不是太高,太低。只能在实际中验证。方法二如果电机参数准确,可以更方便的看出电机PI参数是否会引起系统超调太大,是否稳定等信息。

  • 相关阅读:
    git命令总结
    隐私计算FATE-离线预测
    Linux进程程序替换
    南昌服务器托管让数据存储更安全
    1. CMake基本
    vue绑定class
    【电源专题】开关模式电源电流检测基础及感应电阻放置位置选择
    数据类型与变量
    HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站
    [附源码]java毕业设计班级班费缴纳及使用情况管理
  • 原文地址:https://blog.csdn.net/weixin_42665184/article/details/127988967