PID温控实验平台搭建(五)——最终实验现象与总结

PID温控实验平台搭建

(一)PID基础知识介绍

(二)PID进阶知识介绍及源码分享

(三)从零开始搭建STM32温控实验平台

(四)PID温控系统代码讲解

(五)最终实验现象与总结



前言

最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!当年做这些项目的时候可走了很多弯路,所以想着可以将它们上传到网络上,并通过我的讲解文章可以帮助你们少走一些弯路!

今天,我要分享的是一个PID温控实验平台的搭建,因为我想要讲的详细一点,所以打算做成一个系列,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!!


一、实验数据的获得与处理

实验数据的获取方式主要是靠STM32通过串口发送指定格式的数据给VOFA++上位机,然后上位机对数据进行拆分,绘出温度实时变化的曲线,还可以将数据保存为csv格式

aafc25049a5240e3b9642b9445396923.png

图1 VOFA++上位机


二、实验过程

1、实验前参数的选择

1)采样周期

DS18B20的数据手册里并没有给出最大采样频率,于是我参考了很多网络资料,查到了200ms作为DS18B20的最小采样周期是合适的。只有采样周期短,我们才可以获得更多的数据,这样我们的控制才更加精准!

2)调节周期

针对譬如温度控制这种大惯性系统而言,调节周期的选择尤为重要!在第二节中,我已经详细和大家介绍了调节周期如何选择,我们需要针对不同系统的不同特性来选择调节周期,既不能太大(控制会变形),也不能太小(曲线噪声会变多)。我先行通过工程经验计算法初步确定调节周期在2000ms~4000ms之间,但还需要通过试验的方式进一步确定好!在这里,我们限定Kp=90,Ki=Kd=0,通过测试(200ms~10000ms)之间多组次的采样周期,观察曲线的平滑情况。通过不断的测试,我们发现在调节周期为4s时,曲线最为平滑,噪声数据也最小。如图1所示,是在Kp=90,Ki=Kd=0下,200~5000ms下温度变化图,我还测试了5000ms~10000ms的,由于数据量太大,我就不放出来的,需要的可以稍后评论区自取。

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享https://blog.youkuaiyun.com/qq_35953617/article/details/127849549

626bf1568a8546dcb56107b9a76ae1ca.png

图1 Kp=90 Ki=Kd=0下 200~5000ms下温度变化图

 3)PWM波的输出频率

由于STM32F103的ARR寄存器为16位,最大值在1~65535之间,设置ARR寄存器的值为(10000-1),分频因子PSC的值为(72-1),在这里没有用到重复计数器。故PWM波的输出频率为  f = 72M/(71+1)*(9999+1) = 100 Hz,T = 1/f = 10 ms,远小于采样频率和调节周期,符合要求! 

663bb0a13aba4e36af9699e3b0bba7ef.png

图2 逻辑分析仪捕捉到的100Hz频率

2、PID参数整定过程

我们还是依据系列第二节讲的顺序,一步步整定PID参数,遵循一个基本原则:先比例,再积分,然后才把微分加上。前面我们确定了采样周期为200ms,调节周期为4s,PWM频率为100Hz,这里我们从小到大不断调整Kp、Ki和Kd

详细的原则,请见PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享。实际上,我测试的数据远远大于下图所展现出来的,选取了几个典型值,供大家学习参考!

1)调节比例系数Kp

从图3可以看到,随着Kp的不断增大,温度曲线的峰值也会逐渐升高,最后稳态温度也会上升。而在加入Ki的作用后,温度曲线会整体上移。综合多方面考虑,我最终选定了Kp = 80。

128576f6f01b443f891540ff6ac1d328.png

图3 不同Kp下的温度变化图

2)调节积分系数Ki

从图4可以看到随着Ki的增大,温度峰值增加的比较明显,且稳态误差渐渐被消除!可以明显看到的是,Ki如果不加以限制,将会造成曲线的波动明显,最终将会延长达到稳态的时间。综合多方面考虑,我最终选定了Ki = 2.5。

57a1b514dcbb41839c69099de0557804.png

图4 Kp=80,不同Ki下的温度变化图

3)调节微分系数Kd

从图5中可以看到,随着Kd的增大,曲线的峰值明显被抑制,波动的情况也减少得很多,但Kd如果太大,将会导致曲线噪声增多和波动剧烈的现象发生。综合多方面考虑,我最终选定了Kd = 800。

978951e6d16b4ef5969c1da74ac3cc98.png

图5 Kp=80,Ki=2.5,不同Kd下的温度变化图


三、实验结果

根据上述的实验过程,将PID参数确定为:Kp = 80,Ki = 2.5,Kd = 800。最终位置式PID算法的控制精度在1°C附近,控制效果并没有达到我的预期,而期间我有尝试过其他PID参数,但最终的控制精度还是没能摆脱到1°C附近。在查阅了大量资料后,我认为可能的原因以及解决办法为以下几点:

  1. 温度传感器受热不均匀,一面受加热棒的加热,另一面是与空气发生自然冷却,最终导致了温度传感器不实数据的产生,影响了控制效果;解决办法:可以使用非接触式的红外测温,直接测量加热棒中心点的温度,直接控制该点的温度,虽然非接触式测温精度没有接触式的高,但是在不改变现有设备的情况下,这是比较便捷的,后续我也会尝试一下这种方法。
  2. 对于加热棒本身而言,加热芯到外壳的传热需要一定的时间,属于大惯性系统的范畴。使用普通的数字PID控制算法效果并不好,必须对其进行优化;解决办法:采用模拟PID算法,模拟PID算法对这种温控系统效果很好!后续我也会尝试一下这种办法。

 6d5ee7e61d3b4e96bd8fded8bf25f68b.jpegec78f3bf80b3462ea7175310325db53f.jpeg

   2bfe4913cbd74ec7996b6c6d2bf73583.gif413b416200144cd8b3732a9961cb0528.gif


总结

虽然最终没有达到预期的效果,但是对于学习PID控制思想而言,是很有帮助的。希望我的系列文章能对大家产生帮助,欢迎大家在评论区评论!后续我也会把我的解决办法实践出来,做一个补充性的文章,敬请期待!

这一节的所有的实验数据,我将整理后放在评论区,需要的自取!!!

### 使用MATLAB实现自控实验中的PID控制器设计仿真 #### 设计背景 在自动化领域,PID控制器因其结构简单、稳定性好等特点被广泛应用。为了更好地理解和应用这一技术,在MATLAB环境中进行PID控制器的设计仿真是非常有必要的。 #### Simulink环境下的模糊自PID控制器设计 对于复杂的工业过程控制问题,传统的PID参数调方法可能难以达到理想的性能指标。因此提出了基于Simulink平台的模糊自PID控制器设计方案[^1]。该方案采用了一种改进型的模糊逻辑算法来动态调节PID三个核心参数(Kp, Ki, Kd),从而提高了系统的响应速度和平稳度。具体来说: - **建立数学模型**:以水箱液位控制系统为例,构建了相应的传递函数描述对象特性; - **搭建Simulink模型**:利用内置模块创建包含模糊推理引擎在内的体架构图; - **编写M文件脚本**:定义输入变量范围及其隶属度函数形式;设置规则库并初始化参数向量; - **运行仿真测试**:改变设定值观察输出变化趋势,并记录下各时刻的关键数据以便后续分析评估效果优劣。 ```matlab % 定义模糊集及隶属度函数 fis = mamfis('Name','FuzzyTuner'); inputRange = [0 1]; % 输入论域边界 outputRange = [-1 1]; % 输出论域边界 addInput(fis,inputRange,'Name','Error'); addMF(fis.Inputs(1),'trimf',[0 0 .5],'Name','NegativeBig'); ... ``` #### PID控制器经典案例——温度控制系统 另一个典型的应用实例是在加热炉温控场合中运用标准比例积分微分环节完成精准调控任务[^2]。个项目涵盖了以下几个方面的工作要点: - 应用根轨迹法或频率特性曲线辅助确定最优增益系数组合; - 编写S-function封装C/C++代码片段提高计算效率; - 利用Scope工具实时监测波形展现误差收敛情况以及超调量大小等重要信息。 ```matlab % 创建连续时间PI控制器对象 pidController = pid(3,5); % 将其连接至已有的线性时不变子系统之上形成闭环回路 feedback(sys*pidController,-1); step(feedback(sys*pidController,-1)) grid on; title('Closed-loop Response with PI Control') xlabel('Time (seconds)') ylabel('Amplitude') legend('Response', 'Location', 'Best') ``` #### MATLAB基础语句总结 针对初学者而言,掌握一系列常用的命令有助于快速入门自动化学科内的计算机辅助教学活动[^3]。这里列举了一些常用的操作指令供参考学习之用: - `tf(num,den)` —— 建立由分子多项式`num`和分母多项式`den`构成的标准状态空间表示形式的对象; - `bode(G)` / `margin(G)` —— 绘制伯德图/裕度图直观展示频响特性和稳定裕量数值; - `lsim(G,u,t,x0)` —— 对于给定的时间序列激励信号u(t),求解对应状态下LTI系统的零初始条件响应y(t); - `c2d(G,Ts[,method])` —— 实现离散化转换操作,其中Ts代表采样周期长度而method指定具体的近似方式如'zoh'(零阶保持器) 或者 'tustin';
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值