MATLAB使用系统辨识工具箱建立PID水温的传递函数系数

概述

利用PID控制水温,由于实际在工程项目中,手动调节PID参数比较耗费时间,所以可以先利用MATLAB中的Simulink软件建立模型,先在仿真软件上调节大概的PID参数,再利用此PID参数为基础在实际的工程项目中手动调节PID参数,以此缩短调节PID参数的时间。由于Simulink中传递函数(Transfer Fcn)为被控对象,传递函数中相关的系数需要根据实际的控制模型进行填写,控制模型的系数可以利用MATLAB中的系统辨识工具箱(System Identification)识别。

实现步骤

(1).以PID控制水温为例子,在实际的工程项目中,以PWM的占空比为输入,输出为温度的值,以百分之百的占空比加热水温,将水温从当前温度(例如:30度)加热到100度,记录加热期间每秒钟对应的PWM占空比的值,以及每秒钟对应的水温值,这里为了便于计算以恒定的占空比百分之百加热,记录的数值存储到SD卡中,若没有SD卡可用串口讲记录的数据发送到上位机中,这里以SD卡为例,将每秒钟记录的水温存储到txt格式的文本中。

(2).打开MATLAB软件,导入数据,将导入的数据转换为列向量,并修改导入数据的变量名为PID_Output。

(3).创建一个脚本文件,并定义一个变量名为PID_Input的列向量,由于以恒定的占空比百分之百加热,所以值定为100,由于输出的数据是一共有970行,输入和输出需要对应,所以输入的数据也要是970行,输入完之后,记得点击运行,否则数据不会进入工作区中。

(4).打开MATLAB软件中的APP中的System Identification软件,会弹出System Identification界面,在此界面中的Import data中选择Time-Domain Signals,即时域信号,随时间变化的信号,弹出Import data界面,Input处输入PID_Input,Output处输入PID_Output,因为开始时间从1开始计时,所以Starting time处输入为1,因为记录的数据间隔时间为1,,所以Sample time处输入为1。最后点击Import选项。


(5).点击Import选项后,会更新System Identification界面,选择Estimate中的Transfer Function Models选项,会弹出Transfer Function界面,由于水温控制是一阶系统,所以在这里选择1个极点和1个零点,时间选择Continuous-time,最后点击Estimate选项。

(6).点击Estimate选项后,会弹出Plant Identification Progress界面,此界面中的Fit to estimation data代表系统辨识的识别度,若此百分比大于80就代表此模型识别成功,可以应用到Simulink中的传递函数中。

(7).再次查看System Identification界面,界面中的tf1即为模型传递函数的系数,双击可以点开,或者拖动tf1到To Workspace中,MATLAB工作区中就会有tf1变量。



(7).在Simulink中建议一个PID控制模型,双击Transfer Fun对象,会弹出Block Parameters:Transfer Fcn界面,将系数的分子和分母部分复制粘贴即可。

相关推荐
郑州光合科技余经理11 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo12312 天前
matlab画图工具
开发语言·matlab
dustcell.12 天前
haproxy七层代理
java·开发语言·前端
norlan_jame12 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone12 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ40220549612 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月12 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_5312371712 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian12 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡12 天前
简单工厂模式
开发语言·算法·c#