自适应控制学习笔记(2)——自校正PID控制

PID控制器连续形式如下:

\bg_white \small u(t)=k_{p}[e(t)+k_{i}\int_{0}^{t}e(t)dt+k_{d}\frac{de(t)}{dt}]

e(t)——偏差信号。

e(t)=y_{r}(t)-y(t)

控制框图如下:

数字PID闭环控制系统框图:

数字PID的两种基本形式:

(1)位置式PID控制:

传递函数形式:

                u(k)=k_(p)[e(k)+k_{(i)}T_{s}\sum_{j=0}^{k}e(j)+\frac{k_d}{T_s}(e(k)-e(k-1))]                              (1)

T_s为采样周期。

(2)增量式PID控制:

                 u(k)=k_(p)[e(k)+k_{(i)}T_{s}\sum_{j=0}^{k}e(j)+\frac{k_d}{T_s}(e(k)-e(k-1))]                          (2)

故:        \Delta u(k)=u(k)-u(k-1)=g_0e(k)+g_1e(k-1)+g_2e(k-2)                   (3)

其中:        g_0=k_p+k_pk_iT_s+\frac{k_pk_d}{T_s},g_1=-k_p-\frac{2k_pk_d}{T_s},g_2=\frac{2k_pk_d}{T_s}

对(3)进行z变换:

[1-z^{-1}]u(k)=[g_0e(k)+g_1z^{-1}+g_2z^{-2}]e(k)

        [1-z^{-1}]u(k)=[g_0e(k)+g_1z^{-1}+g_2z^{-2}][y_r(k)-y(k)]                                         (4)

u(k)=\frac{g_0+g_1z^{-1}+g_2z^{-2}}{1-z^{-1}}[y_r(k)-y(k)]

需要确定参数:g_0,g_1,g_2

极点配置形式如下:

                                        u(k)=\frac{E(z^{-1})}{H(z^{-1})}y_r(k)-\frac{G(z^{-1})}{H(z^{-1})}y(k)                                        (5)

可见,数字PID是极限点配置形式特殊情形。

3.数字PID控制:

被控对象:

                                        A(z^{-1})y(k)=z^{-d}B(z^{-1})u(k)+C(z^{-1})\varepsilon (k)                          (6)

采用增量式PID控制器,控制框图如下:

对于F,G如何确定,下面给出方法:

                                A(z^{-1})y(k)=z^{-d}B(z^{-1})u(k)+C(z^{-1})\xi (k)           ARMAX模型

                                                y(k)=\frac{z^{-d}B(z^{-1})}{A(z^{-1})}u(k)+\frac{C(z^{-1})}{A(z^{-1})}\xi (k)

y(k)=\frac{z^{-d}B(z^{-1})G(z^{-1})}{A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})}y_r(k)+\frac{C(z^{-1})F(z^{-1})}{A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})}\xi (k)

闭环特征多项式:

A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})

方法1:

        设期望闭环特征多项式:

                                        A_m=1+a_{m1}z^{-1}+a_{m2}z^{-2}+...+a_{mn_a}z^{-n_{ma}}

                                \widetilde{F}(z^{-1})=F(z^{-1})(1-f_1z^{-1})(1-f_2z^{-1})...(1-f_{n_f}z^{-1})

        以\widetilde{F}(z^{-1})代替F(z^{-1})得到下列等式:

                                        A(z^{-1}){\widetilde{F}(z^{-1})}+z^{-d}B(z^{-1})G(z^{-1})=A_m(z^{-1})

        比较上式两端同次数项的系数,即可确定PID控制器系数。

        此时PID控制器参数为:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        u(k)=\frac{G(z^{-1})}{\widetilde{F}(z^{-1})}[y_r(k)-y(k)]

        控制目的:

                                将系统输出跟踪误差e=y_r-y调节为0。即:输出跟踪参考输入。

        其中:

        ​​​​​​​        ​​​​​​​        \widetilde{F}(z^{-1})=F(z^{-1})(1-f_1z^{-1})(1-f_2z^{-1})...(1-f_{n_f}z^{-1})

        ​​​​​​​        ​​​​​​​        ​​​​​​​        A(z^{-1}){\widetilde{F}(z^{-1})}+z^{-d}B(z^{-1})G(z^{-1})=A_m(z^{-1})

                                                {\color{Blue} F(z^{-1})=1-z^{-1}}

                                        {\color{Blue} G(z^{-1})=g_0+g_1z^{-1}+g_2z^{-2}}

        称为广义PID控制器。

方法2:

        若已知参考模型:

                                                y_m=\frac{z^{-d}B_m(z^{-1})}{A_m(z^{-1})}y_r(k)

        闭环系统:

                                y(k)=\frac{z^{-d}B(z^{-1})G(z^{-1})}{A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})}y_r(k)+\frac{C(z^{-1})F(z^{-1})}{A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})}\xi (k)

        其中:

                                        \frac{z^{-d}B(z^{-1})G(z^{-1})}{A(z^{-1})F(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})}=A_m(z^{-1})

        控制目的:

                                               ​​​​​​​         y​​​​​​​跟踪参考模型输出y_m

                            优点:待求系数较少。                        缺点:不是严密推理的结果。

          

 ​​​​​​​        ​​​​​​​        

举例:

在Matlab中输入传递函数:

tfunc=tf([240 240],[1 3 0])

输出结果: 

tfunc =
 
  240 s + 240
  -----------
   s^2 + 3 s
 
Continuous-time transfer function.

将其离散化,采样时间为0.5,带有零阶保持器形式:

sysd=c2d(tfunc,0.5,'zoh')

 得到结果:

sysd =
 
     81.43 z - 50.36
  ----------------------
  z^2 - 1.223 z + 0.2231
 
Sample time: 0.5 seconds
Discrete-time transfer function.

步骤2:将上式的离散模型写成习惯形式:

\bg_white \small \theta _o(k)=\frac{81.43z^{-1}-50.36z^{-2}}{1-1.223z^{-1}+0.2231z^{-2}}u(k)+\frac{1}{1-1.223z^{-1}+0.2231z^{-2}}\xi(k)

        其中:

A(z^{-1})=1-1.223z^{-1}+0.2231z^{-2}        B(z^{-1})=81.43-50.36z^{-1}

C(z^{-1})=1        ​​​​​​​d=1

步骤3:确定参考模型的特征多项式:

        一般情况下可要求\bg_white \small A_m与A同阶次。

A_m(z^{-1})=(1-0.2z^{-1})(1-0.3z^{-1})=1-0.5z^{-1}+0.06z^{-2}

步骤4:假定F,G的形式:

\widetilde{F}(z^{-1})=(1-z^{-1})(1-f_1z^{-1})=1-(1+f_1)z^{-1}+f_1z^{-2}

G(z^{-1})=g_0+g_1z^{-1}+g_2z^{-2}

步骤5:求解Diophantine方程:

A(z^{-1})\widetilde{F}(z^{-1})+z^{-d}B(z^{-1})G(z^{-1})=C(z^{-1})A_m(z^{-1})

在matlab中输入如下命令:

[x,y,z,t]=solve('-x+81.43*y-2.223=-0.5', '2.223*x-50.36*y+81.43*z+1.4461=0.06','-1.4461*x-50.36*z+81.43*t-0.2231=0', '0.2231*x-50.36*t=0', 'x','y','z','t')

 可得结果如下:

x =-0.26741242513589483611508570324968
y = 0.01787532328213318388658865647489
z = 0.0013331585603011342406046943190411
t =-0.0011846646554372148120984038998214

u(k)=\frac{G(^{-1})}{\widetilde{F}(z^{-1})}[\theta _i(k)-\theta _o(k)]=\frac{g_0+g_1z^{-1}+g_2z^{-2}}{(1-z^{-1})(1-f_1z^{-1})}[\theta_i(k)-\theta_o(k)]

带入以上计算结果,可得:

​​​​​​​ u(k)=\frac{-0.26741242513589483611508570324968+0.01787532328213318388658865647489z^{-1}+0.0013331585603011342406046943190411z^{-2}}{(1-z^{-1})(1+-0.0011846646554372148120984038998214z^{-1})}[\theta _i(k)-\theta _o(k)]

步骤6:构建simulink模型

 

 仿真曲线如图所示:

 ​​​​​​​

 ​​​​​​​

未完待续...


  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
自适应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) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值