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

相关推荐
LDR00611 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术11 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园11 天前
C++20 Modules 模块详解
java·开发语言·spring
xiao5kou4chang6kai411 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
swordbob11 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享11 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.11 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..11 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽11 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下11 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php