玩命加载中 . . .

【simulink】模糊PID控制器


【simulink】模糊PID控制器

1. 输入的e跟ec在哪

​ e其实很好理解,输入-输出就是我们的误差,也就是开头的sum,那么误差变化率ec

Unit Delay(单位延迟模块)
p1

​ 先来看这部分,输出跟输入做差,得到e,这里e分了四路,先看下面两路,一路直接进行sum准备运算,另外一路经过了UD模块,下面介绍一下这个模块

作用:将输入的误差信号\(e(t)\)延迟一个时间步长,输出前一刻的误差\(e(t-1)\)

image-20250310155830884
sum(求和模块,此处做减法)
  • 输入: 当前误差\[e(t)\]和延迟后的误差\[e(t-1)\]
  • 输出:\[e(t)-e(t-1)\],即误差的变化量△e

这一步是在干啥

  • 计算误差变化率ec

    通过\[e(t)−e(t−1)\],得到误差在单位时间内的变化量(离散系统的微分近似)。

    • 物理意义:若 ec>0,误差正在增大;若 ec<0,误差正在减小。
  • 为微分控制(D项)提供输入: 该变化量 ec 会乘以微分系数 *K**d*,生成PID中的微分控制量,用于抑制系统震荡和超调。


2. 准备输入到模糊控制器了

p2

​ 前面我们得到了e跟ec了,然后进入Mux模块

Mux模块(多路复用器)
  • 输入: 指有两路独立的输入信号(e跟ec)
  • 输出:Mux将两路信号合并为一个向量信号(如[e,ec])
  • 物理表现:看似输出是“一路”,但实际上传输的是包含两个分量的数据
  • 必要性:模糊控制器的规则库需要同时基于 eec 的状态(例如“误差大且快速增大”),必须将两者合并为统一输入。
Mux参数
Gain(增益模块)

量化因子

3. 模糊控制

模糊PI控制的Simulink仿真(保姆级别)

3.1 在matlab命令行中输入fuzzy

​ 就打开了下图这玩意

模糊控制

3.2 确定模糊控制工具箱的输入输出

  • 输入
    • e:实际值与给定值的误差
    • ec:为e的导数
  • 输出
    • △Kp
    • △Ki

​ 点一下框选中,然后下侧name改名

改名

​ 最后长这样,就是明确了输入输出

3.3 确定隶属度函数(输入输出都要) 目的:为了模糊化和解模糊

隶属度函数在哪写

​ 双击 输入/输出,就弹出来新的窗口

一般是用中间三角形隶属函数,两边高斯型隶属函数

这四个圈起来的分别是:

  1. rang

    设置输入、输出的边界,下面是个例子,定义输入输出的论域和隶属函数如下图:

    一共七个等级,论域是【-3,3】

  2. Name

    没看懂啥意义,但是是这么说的:

    这里我们要严格按照 matlab 初始的时候给我们的顺序来从左到右定义我们的等级,这样子后面写模糊规则会方便很多。

    哦~大概就是按规定的等级,从左到右改名

  3. type

    图中圈起来的就是三角跟高斯

  4. Params

    三角函数这里的参数有仨数,分别代表了图中的仨实圈,,这里的参数是说的x轴

    我们之前选了7个等级吧,那如何产生7个哩

在这一节中,最终得到的隶属函数图如下

3.4 确定模糊规则

这个表应该是写错了吧?,△ki的PM PB应该是PB,还有最后,PB+NS,kp没有ns直接就nm了,可以改成ns试试

3.5 在simulink中实现

​ 关掉保存,取好名字

在simulink中,打开下图的模块

改名

4. 模糊控制器的输出

p4

​ 看上去输出的是三维的[△Kp,△Ki, △Kd]

Demux(多路分解器)
demux

​ 有归一化就得有解归一化,有mux就有demux

  • 功能:将一个输入信号拆分为多个独立的输出信号
    • 输入:一个信号
    • 输出:多路独立信号

这后面的gain应该就是比例因子了,在经过sum,就完成了 \[ Kp=Kp+△Kp \]

5.The End

最终输出

​ 这里已经是看图说话了,首先还是认识模块

Product(乘法器)
乘法器参数
Add(加法器)
加法器参数

所以这里的最终输出也就是pid控制器的那个公式: \[ u(t) = K_p \cdot e + K_s \cdot \int e \, dt + K_d \cdot \frac{de}{dt} \]


文章作者: LS
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LS !
  目录