【PID】基于Matlab实现增量式PID算法

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

增量式PID控制较常规PID更具优势,但有关其参数整定的方法很少,针对这种问题,介绍了增量式PID算法的原理及特点,基于MATLAB平台,模拟扩充临界比例度法对增量式PID参数的整定方法,整定过程简单直观,控制效果明显改善,证实了该方法对增量式PID有较好的整定效果.

⛄ 完整代码

clear all;close all;clc

%% 获取离散化模型

t_s = 0.001;  %采样时间

T_f = 1;     %仿真时间

Step_simulate=T_f/t_s;

sys = tf([200],[1 50 1]);

%% 绘制传递函数的单位阶跃响应曲线

t=0:0.01:750;

figure(1);

c=step(sys,t);

plot(t,c);

%% 进行传递函数的离散化

dsys = c2d(sys,t_s,'z');

[num,den]=tfdata(dsys,'v');   %num为离散传递函数的分子系数矩阵,den为离散传递函数的分母系数矩阵

%% 设置增量式PID的校正参数

k_p=10;

k_i=0.12;

k_d=5;

%% 设置输入信号数学表达式

y_d = ones(1,Step_simulate);   %输入信号为阶跃信号    

%% 增量式PID控制器算法模块

y = zeros(1,Step_simulate);    %初始化输出信号

y_feedback=0;                  %反馈回来的信号,y_feedback=y

error = 0;                      %信号差值

erro_1 = 0;                    %上一时刻信号差值

erro_2 = 0;                    %上上一时刻信号差值

y_1=0;                         %上一时刻的输出

y_2=0;                         %上一上一时刻的输出

pi_out=0;                      %pid控制器的输出,注意不是系统输出

pi_out_1=0;                    %上一时刻PID控制器的输出,注意不是系统输出

pi_out_2=0;                    %上一上一时刻PID控制器的输出,注意不是系统输出

pi_out = 0;                   %初始的PID控制输出值

delta_pi_out = 0;             %初始的PID控制输出增量值

for k=1:1:Step_simulate

    time(k)=k*t_s;            %存储时间,用于后面画图

    error=y_d(k)-y_feedback;  %控制器误差

                              %增量式PID的算法表达式

    delta_pi_out=k_p*(error-erro_1)+k_i*error+k_d*(error-2*erro_1+erro_2);

    pi_out =pi_out+delta_pi_out ;

                              %增量式PID的算法表达式

    %对PID控制器的输出进行限幅

    if  pi_out>=10

        pi_out =10;

    end

    if  pi_out<=-10

        pi_out =-10;

    end

   %y_1 上一时刻的输出

   %y_2 上两时刻的输出

    y(k)=-den(2)*y_1-den(3)*y_2+num(2)* pi_out_1+num(3)*pi_out_2;%控制对象

    y_feedback=y(k);

    %更新系统输出状态

    y_2=y_1;

    y_1=y(k);

    %更新pid输出状态

    pi_out_2=pi_out_1;

    pi_out_1=pi_out;

    %更新信号差值状态

    erro_2=erro_1;

    erro_1=error;

end

%画图

figure(2);

subplot(2,1,1);

plot(time,y_d,'b*',time,y,'go');

xlabel('time');ylabel('幅值');legend('期望输出','实际输出');

subplot(2,1,2);

plot(time,y_d-y);

xlabel('time');ylabel('幅值');legend('误差');

⛄ 运行结果

⛄ 参考文献

[1] 杨龙. 基于位置式PID算法的压力控制设计及MATLAB仿真[J]. 电子技术与软件工程, 2018(24):1.

[2] 王俊伟, 张帅, 温荣. MATLAB的PID算法在温室大棚中的温湿度串级控制中的应用研究[J]. 价值工程, 2016, 35(5):2.

[3] 曾豪勇, 周思柱, 易文君. 基于MATLAB的增量式PID参数整定[J]. 工业控制计算机, 2014, 000(006):69-70.

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值