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界面,将系数的分子和分母部分复制粘贴即可。

相关推荐
tangliang_cn17 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
程序猿阿伟18 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
新知图书29 分钟前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
威威猫的栗子31 分钟前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
力透键背31 分钟前
display: none和visibility: hidden的区别
开发语言·前端·javascript
bluefox197932 分钟前
使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别
开发语言·c#
ö Constancy1 小时前
c++ 笔记
开发语言·c++
墨染风华不染尘1 小时前
python之开发笔记
开发语言·笔记·python
徐霞客3201 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt
LKID体1 小时前
Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)
开发语言·python·neo4j