实验三:基于matlab的积分分离PID控制算法

实验内容

在普通PID控制中引入积分环节的目的,主要氏为了消除静差,提高控制精度。但在或称的启动、结束或者大幅度增减设定时,短时间内系统的输出有很大的偏差,就会造成PID运算的积分累计,只是控制量超过执行机构可能允许的最大动作范围对应的极限控制量,引起系统较大的超调,甚至引起系统较大的震荡。

积分分离的基本思路:当控制量与设定值偏差较大时,取消积分作用,以避免由于积分作用使系统稳定性降低,超调量变大;当控制量接近给定值时,引入积分控制,消除静差,提高控制精度。

控制对象


实验代码

%Integration Separation PID Controller

clear all;

close all;

ts=20;

%Delay plant

sys=tf(1,60,1,'inputdelay',80);

dsys=c2d(sys,ts,'zoh');

num,den=tfdata(dsys,'v');

u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;

y_1=0;y_2=0;y_3=0;

error_1=0;error_2=0;

ei=0;

for k=1:1:200

time(k)=k*ts;

%Delay plant

y(k)=-den(2)*y_1+num(2)*u_5;

%I separation

yd(k)=40;

error(k)=yd(k)-y(k);

ei=ei+error(k)*ts;

M=2;

if M1 %Using integration separation
if abs(error(k))>=30
beta=0.0;
elseif abs(error(k))>=20&abs(error(k))<=30
beta=0.6;
elseif abs(error(k))>=10&abs(error(k))<=20
beta=0.9;
else
beta=1.0;
end
elseif M2

beta=1.0; %Not using integration separation

end

kp=0.80;

ki=0.005;

kd=3.0;

u(k)=kperror(k)+kd (error(k)-error_1)/ts+betakiei;

if u(k)>=110 % Restricting the output of controller

u(k)=110;

end

if u(k)<=-110

u(k)=-110;

end

u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);

y_3=y_2;y_2=y_1;y_1=y(k);

error_2=error_1;

error_1=error(k);

end

figure(1);

plot(time,yd,'r',time,y,'k:','linewidth',2);

xlabel('time(s)');ylabel('yd,y');

legend('Ideal position signal','Position tracking');

figure(2);

plot(time,u,'r','linewidth',2);

xlabel('time(s)');ylabel('Control input');

实验结果分析

M =1

M=2

由仿真结果可以看出,当采用积分分离方法控制效果有很大的改善。值得注意的是,为了保证积分作用后系统的稳定行不变,在输入积分作用是=时比例系数Kp可以做相应变化。此外, β值应该根据具体对象的要求而定,若β过大,则达不到积分分离的目的;若β过大小,则回导致无法进入积分区。如果只进行PD控制,会是控制出现余差。

相关推荐
大圣编程13 小时前
Java 多维数组详解
java·开发语言
殳翰16 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
落寞的星星16 小时前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#
nothing&nowhere17 小时前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
2601_9615934217 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
HZZD_HZZD18 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
多加点辣也没关系20 小时前
JavaScript|第4章:类型转换
开发语言·javascript
聪慧的水蜜桃20 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·c#
yqcoder20 小时前
httpOnly 是什么,又有什么用?
开发语言·前端·javascript
wuqingshun31415921 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言