利用matlab工具箱的pid参数科学整定方法

声明

这篇文章目前仅对电机调速有效,暂时不知道对调整姿态这样的pid是否可以有同样的效果。如果是SISO,我的感觉是可以的,可以尝试方波信号而不是简单的阶跃。

采集数据

给电机提供一个单位阶跃输入(固定一个模拟量或是pwm占空比,本文用的是arduino的analogWrite(100)),单片机定时采集电机转速(单位时间编码器脉冲)并通过串口输出,PC端用串口通讯工具采集。

导入数据

截取恰当的部分,导入数据到MATLAB,作为输出向量(output)
在这里插入图片描述
再定义输入向量:

input = 100 * ones(63,1);

系统辨识

安装System Identification工具箱,Import data一栏选择Time domain data,自行填好相关参数,然后点击import
在这里插入图片描述
在这里插入图片描述
operation一栏选择Transfer Function Models,poles、zero的个数随缘选择,基本上都差不多,然后点击estimate,就会出预测的结果
在这里插入图片描述

在这里插入图片描述
系统辨识完毕后双击右边的“tf1”可以得到结果如图
在这里插入图片描述

为了验证系统辨识是否准确,可以给估计出来的传递函数一个阶跃输入,看输出是否和采集到的差不多。值得注意的是,MATLAB中离散系统传递函数的通式是如下所示的,和上图结果的格式略有差别,需要自行变换。
在这里插入图片描述
执行下面代码,得到下图结果,发现参数比较合理。

num = [0.07286, 0, 0];
den = [1, -1.277, 0.0065, 0.3002];
 f = tf(num, den, 0.05);

plot(t, output/100)
hold on
step(f)

在这里插入图片描述

整定pid参数

接下来利用PID Tuner工具箱整定参数。执行以下代码,自行选择CONTROLLER,我选择了PID,然后拖动滑块得到较为理想的(没有完美的)响应曲线形状,这个就是你需要的PID参数:

pidTuner(f)

在这里插入图片描述
在这里插入图片描述

写在后面

有人会问采集的是转速、或者说一个和转速正相关的量,调节的是输出的模拟量大小,是不是有问题、不能直接相减?

不是的,控制系统需要大概经过:1、输入量,2、控制器,3、执行器,4、被控对象,5、输出量这些部分。我采集的数据,即阶跃信号下的输出,是3-5的过程,输入和输出不是同一个单位,不能直接相减。而当我经过PID控制器(增加2控制器这个环节),我设定的值,也就是我的输入,发生了量纲、数值上的转换,再成为执行器的输出,这时候的输入量和输出量已经是同一个量纲了,可以直接相减。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧易风船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值