实验六 PID控制器的设计
实验目的
研究PID控制器对系统的影响;
实验原理
1.模拟PID控制器
function [sys,x0,str,ts]=jfflpid(t,x,u,flag,Kp,Ti,Td,T,E)
% 积分分离PID S-函数
% T为采样周期,E为积分分离阈值
global umax Ki Kd uk_1 ek_1 ek_2 B %umax为最大控制量,B为积分分离算子
switch flag,
case 0, %Initialization 初始化部分
sizes=simsizes;
sizes.NumContStates=0; sizes.NumDiscStates=0;
sizes.NumOutputs=1; sizes.NumInputs=1;
sizes.DirFeedthrough=1; sizes.NumSampleTimes=1;
sys=simsizes(sizes); x0=[]; str=[]; ts=[T 0];
umax=50; uk_1=0; ek_1=0; ek_2=0;
Ki=Kp*T/Ti; Kd=Kp*Td/T; % 控制器参数初始化
case 3, % Outputs 控制器输出计算
ek=u; % 获取误差
if abs(ek)<=E, B=1; else B=0; end
uk=uk_1+Kp*(ek-ek_1)+B*Ki*ek+Kd*(ek-2*ek_1+ek_2);
if uk>umax, uk=umax; end
if uk<-umax, uk=-umax; end
uk_1=uk; ek_2=ek_1; ek_1=ek;
sys=[uk];
case {1,2,4,9}
sys=[];
otherwise
error(['无效的标志 flag=',num2str(flag)]);
end
(1)Ti≈∞,Td≈0 时,在不同KP值下,闭环系统的阶跃响应;
>>Kp=2;Ti=10000;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>> Kp=8;Ti=10000;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>>Kp=200;Ti=10000;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
(2) Kp=1,Td≈0时,在Ti不同值下,闭环系统的阶跃响应
>> Kp=1;Ti=0.5;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>> Kp=1;Ti=1;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>> Kp=1;Ti=10;Td=0.001;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
(3) Kp=Ti=1时,在Td不同值下,闭环系统的阶跃响应;
>> Kp=1;Ti=1;Td=0.5;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>> Kp=1;Ti=1;Td=10;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;
>> Kp=1;Ti=1;Td=20;T=0.3;E=100; Ki=Kp*T/Ti;Kd=Kp*Td/T;