Simulink建模:PID控制模型_simulink pid(1)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

d

t

x(t) = K_{p}\cdot e(t) + K_{i}\cdot \int_{0}^{t} e(t)dt + K_{d}\cdot \frac{de(t)}{dt}

x(t)=Kp​⋅e(t)+Ki​⋅∫0t​e(t)dt+Kd​⋅dtde(t)​
其中,e(k)为k时刻的偏差值,Kp,Ki,Kd分别为比例、积分、微分系数。PID控制的示意图如下:
在这里插入图片描述

2 应用场景

通过一个汽车加速的场景可以很好地理解PID控制的原理。

首先,设想自己是一名驾驶员,刚刚经过收费站上了高速公路。现在,高速公路上是一个一望无际的长直道,并且周围都没有车。这时驾驶员的想法是,尽快将车加速到100km/h的时速,并保持这个速度在路上行驶。

此时,驾驶员就是控制系统中的传感器、控制器和执行器。其中眼睛就是传感器,可以获取仪表盘上的车速;大脑是一个控制器,可以计算出油门踏板或刹车踏板的行程;右脚是执行器,可以根据大脑发来的行程指令,踩下踏板。那么PID控制的示意图就会变成下图:

在这里插入图片描述
驾驶员看到当前的车速,会和自己内心期望的100km/h的车速做比较,得出error的偏差值。PID在其中的含义就是:

  • P项的含义就是,偏差越大,就需要踩踏板踩得越深,才能尽快减小偏差值。
  • I项的含义就是考虑整个过程中的偏差的累计值,可以理解为,经历的越长的时间还没到达期望车速,就会在P项的基础上再踩得深一些。
  • D项的含义是考虑当前时刻偏差的变化率,可以理解为如果偏差在减小,那么de/dt就是个负值,其绝对值表示减小的速率,这个速率越大,D项越大,抵消的P项越多,类似于一个阻力的效果,防止变化过快。

3 Simulink建模

本文重点研究通过Simulink实现PID控制模型。

3.1 对公式的理解

PID的工程应用比理论公式稍微复杂一些,因为要考虑实际工况中是离散的控制,并且Err无论怎样都不可能等于0。为了较好的进行建模,博主会结合自己做汽车电控开发的经验对公式进行理解,这些理解会指导后面的建模。

  • 输入值、输出值和参数值都应该是浮点数,建模时统一定为single类型;
  • 比例项的计算直接用Kp乘以偏差值;
  • 积分项的计算需要先累加每个周期的偏差值与周期、Ki的乘积,同时需要对输出限幅和并且在某种条件下清零,以防止积分项过大;
  • 微分项的计算需要本周期和上周期的偏差相减,再除以周期值,同时也需要输出限幅;
  • 最后将比例、积分、微分项相加得到控制量输出,并且每一项也需要单独输出以便于观测。

3.2 建模过程

根据上文的理解,建立一个子系统,在其中实现PID控制算法。模型建模如下:
在这里插入图片描述
1)对于I项的计算中,为了实现能够清零的策略,引入了I_Reset接口,当I_Reset置为1时积分项输出0;
在这里插入图片描述

2)I项和D项分别引入上下限,通过一个Saturation Dynamic模块限值输出,这样可以选择根据外部工况动态调整上下限,或者外部给定一个标定量,比Saturation模块更加灵活;
在这里插入图片描述

3.3 模型配置及更新

模块和信号线都搭建好了以后,需要对他们进行一些必要的配置。

1)将Inport,Outport和每个运算模块的Output DataType都配置成single,这样保证了整个数据流都是浮点型的;将Reset的接口配置为boolean型,因为它是一个0或1的布尔量标志位;
在这里插入图片描述

2)在子系统外部添加port端口或const常数定义,使之成为一个完整的模型,可用于Update或Build;

在这里插入图片描述

3)在Matlab工作空间中创建模型中所用参数的属性,因为配置的太多,所以这里博主直接用一个Matlab脚本创建;

%% 生成PID模块所需要的参数
%% 清空工作空间
clear;
clc;
%% Err信号
Err = Simulink.Signal;
Err.DataType = 'single';
Err.Description = '输入的偏差量';
Err.CoderInfo.StorageClass = 'ExportedGlobal';
%% Ctrl信号
Ctrl = Simulink.Signal;
Ctrl.DataType = 'single';
Ctrl.Description = '输出的控制量';
Ctrl.CoderInfo.StorageClass = 'ExportedGlobal';
%% P_Term信号
P_Term = Simulink.Signal;
P_Term.DataType = 'single';
P_Term.Description = 'P项观测量';
P_Term.CoderInfo.StorageClass = 'ExportedGlobal';
%% I_Term信号
I_Term = Simulink.Signal;
I_Term.DataType = 'single';
I_Term.Description = 'I项观测量';
I_Term.CoderInfo.StorageClass = 'ExportedGlobal';
%% D_Term信号
D_Term = Simulink.Signal;
D_Term.DataType = 'single';
D_Term.Description = 'D项观测量';
D_Term.CoderInfo.StorageClass = 'ExportedGlobal';
%% Kp参数
Kp = Simulink.Parameter;
Kp.Value = 0.2;
Kp.DataType = 'single';
Kp.Description = 'PID控制模块的Kp参数;';
Kp.CoderInfo.StorageClass = 'ExportedGlobal';
%% Ki参数
Ki = Simulink.Parameter;
Ki.Value = 0.02;
Ki.DataType = 'single';
Ki.Description = 'PID控制模块的Ki参数;';
Ki.CoderInfo.StorageClass = 'ExportedGlobal';
%% Kd参数
Kd = Simulink.Parameter;
Kd.Value = 0.02;
Kd.DataType = 'single';
Kd.Description = 'PID控制模块的Kd参数;';
Kd.CoderInfo.StorageClass = 'ExportedGlobal';
%% I_Max上限参数
I_Max = Simulink.Parameter;
I_Max.Value = 1000;
I_Max.DataType = 'single';
I_Max.Description = 'PID控制模块的I项输出上限参数;';
I_Max.CoderInfo.StorageClass = 'ExportedGlobal';
%% I_Min下限参数
I_Min = Simulink.Parameter;
I_Min.Value = 200;
I_Min.DataType = 'single';
I_Min.Description = 'PID控制模块的I项输出下限参数;';
I_Min.CoderInfo.StorageClass = 'ExportedGlobal';
%% D_Max上限参数
D_Max = Simulink.Parameter;
D_Max.Value = 1000;
D_Max.DataType = 'single';
D_Max.Description = 'PID控制模块的D项输出上限参数;';
D_Max.CoderInfo.StorageClass = 'ExportedGlobal';
%% I_Min下限参数
D_Min = Simulink.Parameter;
D_Min.Value = 200;
D_Min.DataType = 'single';
D_Min.Description = 'PID控制模块的D项输出下限参数;';
D_Min.CoderInfo.StorageClass = 'ExportedGlobal';
%% Sample_Time采样时间
Sample_Time = Simulink.Parameter;
Sample_Time.Value = 0.01;
Sample_Time.DataType = 'single';
Sample_Time.Description = 'PID控制模块的D项输出下限参数;';
Sample_Time.CoderInfo.StorageClass = 'ExportedGlobal';
%% End

运行脚本后,会在工作空间里生成对应的Parameter参数。其中除了数值和描述信息以外,数据类型和Storage Class都配置成了相同的。
在这里插入图片描述
注:这里的数值都是博主随便定的,只是为了演示这个过程。参数的定义需要根据实际开发中的需求和场景来定义,并且需要在试车测试的时候不断标定和调试后确认参数。

3)将积分项和微分项中用到的UnitDelay模块分别配置一个名字,并定义代码生成的StorageClass;将积分项的名字定义为I_Term_Last,代表I项的累加,将微分项的名字定义为Err_Last,代表上一次的Error值;

在这里插入图片描述
在这里插入图片描述

注:这里的定义仅仅是为了代码生成的可读性更强,不会影响到Unit Delay的模型功能和代码功能,所以也可以不做这一步名称的定义。另外,无论是否定义名称,这里的Unit Delay模块都会消耗一个全局变量的RAM资源。

4)配置完成后Ctrl + D更新模型,不报错即可;

4 模型代码生成

1)在Simulink中配置一下代码生成,具体方法可参照博主以前的博客《Simulink代码生成: Embedded Coder配置》

2)以上配置好后,可以Ctrl + B生成代码,其中P项直接相乘得到;

在这里插入图片描述

3)I项的计算首先判断Reset清零,如果不清零就进行一个累加计算,最后做限值计算;

在这里插入图片描述

4)D项的算法先计算差分值,再乘以D项系数,最后限值得出;

在这里插入图片描述

5)最后是各个项相加输出;

5 总结

本文研究了PID控制的建模和代码生成。在实际工作中,PID控制可以配合其他策略一起使用,包括对输入输出的滤波,或者结合前馈控制提高响应等等。

>>返回个人博客总目录

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.(img-ntLQFZRO-1715904353147)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 模糊控制是一种基于模糊逻辑的控制方法,它能够处理非线性和复杂系统。PID控制是一种经典的控制方法,通过比例、积分和微分三个控制参数来调节系统的输出。该控制器广泛应用于工业控制领域。 在模糊控制中,PID控制器被改进为模糊PID控制器。模糊PID控制器能够根据输入和输出之间的误差以及误差的变化率进行模糊推理,然后通过自适应地调整模糊规则和输出权重来实现更好的控制性能。这种控制器能够应对非线性和变化的系统,并且在一定程度上能够自动调节控制参数,减少了人工调参的工作量。 在Simulink中,我们可以使用模糊控制PID模块来实现模糊PID控制。该模块可以方便地调节PID参数和模糊规则,并提供了仿真界面来观察和评估控制性能。通过在Simulink中建立控制系统模型,我们可以将输入和输出信号传递给模糊PID控制器,并通过仿真结果来评估控制效果。 总之,模糊控制PID控制器是一种能够处理非线性和复杂系统的控制器,Simulink提供了便捷的工具来进行模型建立和仿真分析。通过模糊PID控制,我们可以实现更好的控制性能,并减少手动调参的工作量。 ### 回答2: 模糊控制PID是一种结合了模糊逻辑和PID控制器的控制方法。在PID控制器中,P代表比例控制,I代表积分控制,D代表微分控制。模糊控制PID通过引入模糊逻辑来改善传统PID控制器在非线性系统中的性能。 在Simulink中,可以使用模糊逻辑工具箱来实现模糊控制PID。首先,需要创建一个模糊推理系统,其中包含输入、输出和模糊规则。输入通常是系统的误差(偏差)和误差的变化率(变化率),输出是PID控制器的输出(控制量)。然后,需要定义模糊规则,通过使用模糊逻辑来将输入映射到输出。可以使用模糊逻辑工具箱提供的图形界面来定义模糊规则。 在模糊控制PID中,模糊规则描述了系统的行为和响应。模糊逻辑根据模糊规则来选择合适的控制策略。模糊推理系统根据当前的误差和误差的变化率来计算模糊输出,并将其作为PID控制器的输入。PID控制器根据该输入来计算控制量,并将其应用于被控制系统。 为了验证模糊控制PID的性能,可以使用Simulink中的仿真工具。通过输入不同的参考信号和扰动信号,可以评估系统的响应和稳定性。通过调整模糊控制PID的参数和模糊规则,可以改善系统的性能,使其更好地适应不同的工况。 总之,模糊控制PID是一种结合了模糊逻辑和PID控制器的控制方法,可以通过Simulink进行建模和仿真。通过对模糊规则和参数的调整,可以改善系统的性能并提高控制质量。 ### 回答3: 模糊控制PID是一种通过模糊逻辑与PID控制器相结合的控制方法。它能够在系统存在非线性和模糊性的情况下实现稳定和精确的控制。 在Simulink中,可以使用模糊控制PID进行系统建模和仿真。首先,需要设计模糊逻辑控制器,包括模糊规则库、模糊语言变量和模糊推理机制。通过模糊规则库定义系统的控制策略,模糊语言变量描述系统的输入和输出,并使用模糊推理机制进行模糊推理和输出值的计算。 接下来,需要将模糊控制器与PID控制器结合起来。PID控制器根据模糊控制器计算出的输出值进行增益调节,以实现系统的闭环控制。PID控制器分别计算比例、积分和微分部分的控制量,并根据前后误差进行反馈控制,使系统快速稳定地达到设定值。 最后,可以通过Simulink进行模糊PID控制器系统的仿真。将系统的输入和输出连接到模糊PID控制器,在仿真中可以模拟系统的动态响应和控制效果。通过调整模糊规则库和PID参数,可以优化系统的控制性能和稳定性。 总之,模糊控制PID是一种有效的控制方法,在Simulink中可以进行系统建模和仿真,通过优化模糊规则库和PID参数,实现稳定和精确的控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值