PID 伴侣:Matlab 系统辨识工具箱使用
1. 简介
采用一个直流电机PID控制系统的例子来记录Matlab系统辨识工具箱
1.1. 实验环境
- 主控单元:Arduino UNO,负责接收命令、处理数据以及控制电机。
- 电机驱动模块:L298N,用于驱动直流减速电机,并接受 Arduino UNO 的指令。
- 电源供应:采用 12V 直流电源,为整个系统提供稳定电力。
- 电机组件:配备有编码器的直流减速电机,用于实时反馈电机速度信息。
1.2. 流程图
1.3. 系统辨识工具箱界面
来源:MATLAB如何进行系统辨识(传递函数)- 云墨小站 - CSDN
2. VOFA+ 采集数据
2.1. 电机控制程序
- 采用斜坡信号作为输入激励,将目标速度设置为 30-90 区间变化
- 需要记录 2 条数据曲线:电机控制引脚的PWM输出值,电机编码器返回的实际转速值
2.2. FireWater数据格式
- 使用 VOFA+ 的 FireWater 格式获取数据
- 具体的格式要求与 Arduino IDE 中串口示波器的通信格式是一致的。在处理串口数据流时,换行符被视为一个完整数据记录的终止标志,表明随后的数据将对应一个新的时间戳。在同一记录内,各项数据利用逗号(‘,’)作为分隔符,以此来区分同一时刻下需要分别显示的不同数据类型。
2.3. 波形图控件
- 在软件中需要添加波形图控件,从左侧栏拖到右侧的空白界面
- 鼠标移动到波形图控件的边缘,当鼠标形状变成拉伸界面的双向箭头形式时,双击使其占满窗口
2.4. 数据保存为csv文件
- 文件 -> 保存数据,即可将数据保存成csv格式
3. 数据导入
3.1. 数据导入Matlab
- 选择输出类型为数值矩阵
- 点击“导入所选内容”将数据导入到工作区
3.2 数据导入系统辨识工具箱
-
Import data
-
Data Format for Signals-信号数据格式:选择 Time Domain Signals,时域数据
-
Workspace Variable-工作空间变量:Input、Output中分别填写工作区中存储的数据变量的名称
-
Data Information-数据信息:
- data name:辨识数据名称
- Starting name:辨识的起始时间 ,设置为0
- Sample time:采样时间间隔,按照实际情况进行设定,单位是s
4. 数据预处理
4.1. 去偏移
- 选择Remove means
- 会出现一个新的数据集,即当前数据去偏移后的结果
4.2. 划分估计模型和验证模型
- 将去偏移后的数据集拖到Working Data区域,在Operations中选择Select range
- 跳出新窗口,修改Time span,下方的Samples是会随之变化
- 下图是在构建估计模型,裁剪了被处理数据集的前19901条数据。验证模型将保存从200直到末尾的其他数据
- Data name可以设置该数据集的名称
- 点击Insert,会产生新的数据集
- 将估计模型拖入到Working Data,将验证模型拖入到Vaildation Data
5. 系统辨识
5.1. 选择辨识模型
- 将刚才划分的估计模型拖入Working Data区域
- 我选择传递函数模型进行系统辨识,所以Estimate -> Transfer Function Models
- 选择极点为2,选择零点为1
- 选择Continuous-time(连续)
- 点击Estimate开始辨识
5.2. 查看辨识结果
- 系统辨识完成后,右侧会出现辨识后的结果
- 双击tf1,跳出窗口查看辨识结果
- Export将辨识结果保存到工作区
- 选中tf1,选中Model output,将跳出验证模型与辨识出的传递函数的拟合程度
参考链接