自适应控制—自校正PID控制器设计

写在前面,本报告为研一自适应控制课程的课程作业的一道题,主要内容如题,使用M脚本进行仿真,欢迎同学们交流学习哦。

考虑下图所示的单级倒立摆控制系统。摆杆末端小球的质量为m = 0.5kg,摆杆长度为l = 0.5m,重力加速度为g = 9.8 m/s2,摆杆转动时根部铰链的阻尼力矩系数为c = 2Nms/rad,忽略摆杆的质量。为实现稳定控制,在倒立摆的根部设置电机,假定电机产生的扭矩为u,电机的延迟为0.2s。

 

1) 建立被控对象的数学模型;(5分)

答:

建立倒立摆模型的时域关系式(过程略):

 进一步得到传递函数:

 

2) 假定采样周期为0.1s,离散化被控对象;(5分)

答:

使用ZOH离散得到如下的离散传递函数:

 进而得到(课件上讲的,如果有不清楚下面表达式含义的可以私聊我哈):

 

 

3) 试采用极点配置自校正方法或自校正PID设计控制器,使闭环系统稳定,要求输出稳态误差为0;(10分)

答:

控制器结构如下:

 

取: 

由: 

求解控制律的参数: 

 

 

得到控制律中各个部分的表达式:

 

最终得到自校正PID控制律: 

4) 仿真系统在方波输入下的响应;(5分)

答:

系统的方波响应如下图所示,可以观察到不存在稳态误差:

5) 给出对应的仿真程序(或Simulink框图)。(5分)

答:

%% 传递函数计算  
clc  
clear all  
close all  
num=[8];  
den=[1 16 19.6];  
delay=0.2;%电机延迟  
Ts=0.1;%采样延迟  
  
g=tf(num,den,'ioDelay',delay);%加入0.2s延迟的传递函数  
gd=c2d(g,Ts,'zoh');%采样时间为0.1s的采样  
display(g);  
display(gd);  
  
h=0.01;L=40/h;%数值积分步长和仿真步数  
u=zeros(4,1);  
y=zeros(4,1);  
  
%% 控制律求解  
A=[  1  ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ;...  
  -2.106,   1   ,   0   ,   0   ,   0   ,   0   ,   0   ;...  
  1.3079,-2.106 ,   1   ,   0   ,   0   ,   0   ,   0   ;...  
 -0.2019,1.3079 ,-2.106 ,   1   ,0.0247 ,   0   ,   0   ;...  
     0  ,-0.2019,1.3079 ,-2.106 ,0.01458,0.0247 ,   0   ;...  
     0  ,   0   ,-0.2019,1.3079 ,   0   ,0.01458,0.0247 ;  
     0  ,   0   ,   0   ,-0.2019,   0   ,   0   ,0.01458];  
 b=[1;-1.7;0.72;0;0;0;0];  
 x=A\b;  
 display(x);  
 % 定义两个多项式的系数矩阵  
p = [1 -1];  
q = [1  
    0.4060  
    0.2671  
    0.0904];  
% 对两个多项式进行乘法运算  
r = conv(p, q);  
display(r);  
  
%% 根据计算结果进行仿真  
for k=5:L  
    t(k)=k*h;  
%     yr(k)=2*sin(0.2*pi*t(k));%正弦波输入信号  
    yr(k)=2*square(0.2*pi*t(k));%方波信号  
    y(k)=1.106*y(k-1)-0.2019*y(k-2)+0.0247*u(k-3)+0.01458*u(k-4);  
    %控制律  
    u(k)= 0.594*u(k-1)+0.1389*u(k-2)+0.1767*u(k-3)+0.0904*u(k-4)...  
    -5.7914*y(k)+6.5346*y(k -1)-1.2523*y(k-2)+0.50916*yr(k);  
end  
figure(1)  
plot(t,y,'r',t,yr,'b');  
xlabel('t');ylabel('y(t)、yr(t)');  
legend('y(t)','yr(t)');  

 

 

  • 27
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自适应PID(Proportional-Integral-Derivative)和自校正PID是两种常见的PID控制的变种。它们在控制系统中的应用有所不同。 自适应PID是一种根据系统动态特性自动调整PID参数的控制。它通过实时监测系统的响应,并根据系统的动态特性来调整PID参数,以实现更好的控制性能。自适应PID通常包括一个自适应机制,该机制根据系统的误差和误差变化率来调整PID参数。这种控制适用于系统动态特性随时间变化的情况,可以提高系统的鲁棒性和适应性。 自校正PID是一种根据系统的模型参数自动调整PID参数的控制。它通过对系统进行辨识或建模,获取系统的模型参数,并根据模型参数来调整PID参数,以实现更好的控制性能。自校正PID通常包括一个辨识或建模算法,该算法根据系统的输入和输出数据来估计系统的模型参数,并根据模型参数来调整PID参数。这种控制适用于系统模型参数变化较小的情况,可以提高系统的精度和稳定性。 以下是一个使用自适应PID和自校正PID的示例: 自适应PID控制示例: ```python import control # 定义系统模型 sys = control.TransferFunction([1], [1, 2, 1]) # 定义初始PID参数 Kp = 1 Ki = 1 Kd = 1 # 定义自适应PID控制 controller = control.AdaptivePID(Kp, Ki, Kd) # 设置控制的采样时间和系统模型 controller.set_dt(0.5) controller.set_sys(sys) # 定义目标值和初始状态 setpoint = 1 state = 0 # 进行控制 for _ in range(10): # 计算控制信号 control_signal = controller.update(setpoint, state) # 更新系统状态 state = sys * control_signal # 输出控制信号 print("Control signal:", control_signal) ``` 自校正PID控制示例: ```python import control # 定义系统模型 sys = control.TransferFunction([1], [1, 2, 1]) # 定义初始PID参数 Kp = 1 Ki = 1 Kd = 1 # 定义自校正PID控制 controller = control.SelfTuningPID(Kp, Ki, Kd) # 设置控制的采样时间和系统模型 controller.set_dt(0.5) controller.set_sys(sys) # 定义目标值和初始状态 setpoint = 1 state = 0 # 进行控制 for _ in range(10): # 计算控制信号 control_signal = controller.update(setpoint, state) # 更新系统状态 state = sys * control_signal # 输出控制信号 print("Control signal:", control_signal) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鸽呜顾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值