调节PID回路的好的策略是什么?


55

调节控制器的增益可能很困难,哪种通用策略可以很好地工作以使系统稳定收敛到正确的解决方案?


1
针对更具体问题的问题将更有用。否则,您应该只看PID文章,其中包含有关调整的部分
ronalchn 2012年

2
我一直发现调整PID非常依赖于系统的特性,这就是为什么我从未发现自动调整系统非常有用的原因。对于初次通过,性能低下的参数集,它们是很好的选择,但它们远非最优,对于任何未针对给定系统的机械,电气和控制方面进行优化的通用策略,您都会遇到同样的问题。
Mark Booth

Answers:


66

对于齿轮很少或没有齿轮的小型,低扭矩电动机,您可以使用一种方法来获得良好的基准调谐,以检测其对干扰的响应。

要调整PID,请执行以下步骤:

  1. 将所有增益设置为零。
  2. 增加P增益,直到对干扰的响应稳定振荡为止。
  3. 增大D增益,直到振荡消失(即,已严重衰减)。
  4. 重复步骤2和3,直到增加D增益不会停止振荡。
  5. 将P和D设置为最后一个稳定值。
  6. 增加I增益,直到达到所需的振荡次数为止(通常为零,但如果您不介意出现两次超调,则响应速度更快)

使用哪种干扰取决于控制器所连接的机制。通常,用手将机械装置移离设定点并放开就足够了。如果振荡越来越大,则需要降低P增益。

如果将D增益设置得太高,系统将开始颤动(以比P增益振荡更高的频率振动)。如果发生这种情况,请减小D增益直至停止。

我相信这项技术很有名。找到它后,我会把它放在这里。



1
@ Throwback1986,绝对不是 Ziegler-Nichols,它仅使用P增益,然后从振荡的P增益和振荡周期相应地计算出I和D增益
dm76 2014年

您是否还有其他建议专门针对具有多个关节需要调整的机械臂进行调整?您是从基地开始,然后向外延伸到末端执行器,还是相反?还是重要?
adamconkey

1
在学术或工业环境中,您将需要更复杂的控制方法。最喜欢的 重力具有阻尼作用,因此请调整每个关节的角度,使重力对电动机影响最小。例如,使手臂笔直指向上方,以使重力作用在轴承上而不是电动机上。顺序无所谓。如果您无法获得所需的性能,则在控制中添加前馈重力补偿项可能是最简单的改进(将递归牛顿-欧拉用于串行臂)。
hauptmech '17

pidtuner.com工具给了我更好的结果比Ziegler-Nichols方法,其中有几个已知的缺点; folk.ntnu.no/skoge/publications/2003/tuningPID/more/...
胡安冈萨雷斯布尔戈斯

13

我在大学里曾教过一种类似于hauptmech答案的实验方法:

  1. 将所有增益设置为0。
  2. 增加K d直到系统振荡。
  3. K d降低2-4倍。
  4. K p设置为K d的 1%左右。
  5. 增加K p直到振荡开始。
  6. K p降低2-4倍。
  7. K i设置为K p的 1%左右。
  8. 增加K i直到振荡开始。
  9. K i降低2-4倍。

Ziegler-Nichols方法更精确,如果你能得到的振荡周期的准确数。通常使用给定的“经典PID”数字会引起振荡,因此它并不总是最佳的。

有关每个术语对上升时间,超调,建立时间,稳态误差和稳定性的影响的一般规则,请参阅IEEE Con​​trol Systems中Li,Ang和Chong撰写的“ PID控制系统分析和设计”表1。杂志。


2
Kd首先?我一直认为最好从Kp开始。
Rocketmagnet

我正在从旧的演讲幻灯片中转录,如果有充分的理由不这样做,我很想听到它。
Joe Baker

1
这就是我提倡的“调整裤子”的算法。这将使您尽可能地接近您,而无需对系统建模或测量其响应。(如果您确实需要正确的调整,则建模和/或测量是唯一的方法)。
TimWescott 2013年

首先调整Kd对我来说没有任何意义,因为在我实施的每个PID中,Kd的符号都是负数。它用于在发生非常大的错误变化时减少控制信号,从本质上抑制系统的运行。如果只有Kd,则系统将朝相反方向移动,从而增加了误差并使问题更加复杂。如果Kd为正,则只要在正确的方向上发生较大的误差变化,您都将使其变化更快,并超出目标。
Andrew Capodieci 2014年

实际上,首先调整D增益是有道理的,但是我假设“增加” D增益意味着增加绝对值,而只是增加阻尼。D增益的最大问题是它会放大高频噪声,并且很高兴看到没有P增益的效果。因此,从本质上来说,您首先要寻找增益,使其不再像阻尼一样表现并开始放大噪声和滞后误差信号。我假设要进行第2步,您需要戳一下植物以查看其是否振荡。
DrRobotNinja 2014年

7

Embedded.com再次移动了我的文章,但这是现在的地方。这既向您展示了如何编写PID循环(弄清楚如何在浮点数之外的其他方法中完成该操作,作为阅读器的练习)以及如何对其进行调整。

没有博士学位的PID

最好的方式取决于你的能力了很多。假设您是经验丰富的控制系统专家,获得最佳调优的方法通常是测量工厂的响应(“工厂” ==“您正在控制的事物”),然后根据您的操作方式进行测量。测量可以提取工厂模型并对其进行设计,也可以直接针对测量进行设计。

对于某些困难的工厂,您会发现无法进行令人满意的测量,在这种情况下,您必须单独进行模型分析。这些很少见,但是让您满意时会感到满意。


5

塞巴斯蒂安·特伦(Sebastian Thrun)在他的“如何编程自动驾驶汽车”课程中介绍了一种用于调节PID的简单算法。他称之为“旋转”,他在这里对此进行描述。

玩弄很容易找到局部极小-这意味着你可以拿出一组三个常量是好的,但不是最优的局面。调整PID常数的问题是更通用的搜索问题的一个子集,该问题可以找到某些参数以最大化效用(在这种情况下,可以使PID算法的误差最小)。您可以研究此问题的其他一般解决方案,例如爬山,模拟退火,遗传算法等,这些最终可能会找到更多的最佳解决方案。


4

与其他两个答案相反,我会说一种很好的手动调整PID的方法是忽略Kd​​。因此,从0开始,增加Kp直到达到目标,然后增加Ki摆脱稳态误差。

Kd可能会混淆该问题,因为它对噪声的响应很差,然后您开始在模拟输入上添加滤波器,然后问这除了减慢控制速度之外还会导致什么,使整个事情变得更难解决...

另一个使我感到困惑的事情是PID方程是标准形式还是独立形式(在维基百科中为平行形式)。当形式是您认为的错误方式时,Ki的作用似乎相反。两种类型都用于自动化中,有时可以选择在它们之间进行切换。


4

系统建模

当然,可以按照其他答案中的说明进行实验性调整,但是如果您能够为想要控制的对象定义合理的动态模型并能够识别其参数,则应该能够基于定义的标准,例如过冲上升时间建立时间稳态误差等。

MATLAB中甚至有一些工具可以调整您的控制器,以针对这些条件的组合进行优化,从而使其使用效果更好。

了解你的控制器

学习PID控制器中每个参数的功能也很有帮助。所有的实验算法都基于某种知识。如果您不仅遵循说明,而且能够使自己有这种感觉,则可能会发现手动调整控制器更加容易。

现实世界中的问题

有机会的话这些东西,等等,会得到对你的方式调整你的控制器时:饱和采样率不足饱和度

结论

最后,这完全取决于您可以对系统进行的实际操作,以获取有关其工作方式以及可以进行哪种实验的知识。最好的方法是实际了解有关IMO的PID控制器和控制理论的更多信息,但我有偏见:)


我不明白为什么人们总是建议使用启发式方法来调整PID,而如今,我们为工厂识别和控制器设计提供了许多不需要深厚理论背景的自动工具。然后竖起大拇指来回答这个问题。
Ugo Pattacini 2015年

3

我会尝试从我的经验中扩展一些可能感兴趣的人。我认为问题在于我们有很多控制理论,这些理论有些难以理解(有时没有用),然后我们有了一些经验法则,它们对通常不准确的系统进行了假设。

稳定性

让我们首先谈谈为什么控制回路变得不稳定。在此讨论中,我将假设一个线性系统。非正式地,这意味着如果控制信号是给定频率的正弦波,则观察到的输出将处于相同的频率,并且如果您更改控制系统的幅度,则输出将以相同的比率响应。对于许多现实系统而言,此假设是一个很好的近似值,并且可以让我们隔离地查看不同的频率。

如果查看控制路径,则有一个设定点,PID控制器,系统(又称“工厂”),然后是传感器。想象一个固定的设定点和来自传感器的正弦波(这等于传感器上的真实干扰,并被反馈)。在不稳定的系统中,您的反馈会导致控制回路放大误差而不是减小误差,从而随着时间的增加您的振幅也会增加。发生这种情况的原因是由于延迟,或者对于此特定频率,输入和输出之间存在相移。对于给定的频率,我们可以查看输出的开环(即无反馈)偏移和幅度,当在图表上绘制所有这些偏移时,我们会得到类似于波特图的图。如果在此开环图中出现错误不断放大的情况,则说明系统不稳定。如果延迟小于波长的1/2或增益小于x1,则系统将保持稳定。实际上,我们希望从那一点开始获得一定的余量(增益余量和相位余量),这就是为什么您会在许多手动/启发式方法中看到这种“退缩”的原因。

这些手动方法的主要问题是您盲目飞行,并且几乎可以保证获得一个差劲的控制系统。

还请记住,P,I和D的含义与传感器正在测量的内容以及所应用的控件有关。家用控制器的一个常见错误是,人们认为他们实际上没有使用P。电机控制器通常有一个位置环,在速度环和转矩环之间运行。(级联

可以,但是这对我们有什么帮助?

我要说明的第一点是,如果要构建自己的PID控制器,则还应该构建一种测量开环响应的方法。对控制器的输入进行扫频,并在断开反馈的情况下测量传感器的输出。然后,您可以绘制开环Bode图,并查看系统为什么稳定并能够权衡各种控件的原因。测量闭环响应也很有用,您可以在闭环时对设定点进行频率扫描,从而在任何系统中进行测量。两者都不难,不需要很多理论知识。

如果您只是在不了解幕后情况的情况下简单地调整控件,就将无法优化系统。建立关于这些系统的直觉并不难。例如,比例增益对相位没有影响,而只是增加了所有频率上的开环增益。因此,当您在所有这些手动调整方法中增加比例增益时所要做的就是找到相位达到-180的频率。看到此信息可进一步了解各种控件对频率响应的影响。

经常要获得最佳的闭环性能涉及到调整系统,而不仅仅是调整控制器的增益。您想要的是使系统尽可能“僵硬”。这样一来,您就可以增大控制参数并获得最佳的开环和闭环带宽。根据我在电机控制应用中的经验,比例增益是应该完成大部分“工作”的工作,而积分器应该是“休息”的工作。我认为您根本不需要D词。在您可能会有一些机械共振的情况下,使用低通滤波器和陷波滤波器会很有帮助,但是在没有波德图的情况下进行设置非常困难(在闭环下观察到的振荡频率可能与开环不同)。

如果出于安全考虑(非常强大的电动机或可能因电动机失控而损坏的系统),则需要在开始调整之前设置一些限制(例如,电流限制,最大位置误差)以保护系统。然后,您需要对参数范围有所了解。如果您的反馈每转40个计数或每转4000个计数,则对于给定系统,参数将为100。我的方法是首先找到一个可控性较差的范围,然后从P开始,然后从I开始逐渐增加(尽管您再次盲目飞行)。退缩会产生这种稳定性裕度。

超越闭环

闭环尝试从系统中排除错误。总是会有一些有限的性能。您想要做的是最大程度地减少闭环控制器看到的错误,而做到这一点的一种方法是通过一种称为前馈的技术。在前馈中,您绕过控制器并直接向系统发出命令。加速前馈就是一个例子。如果您知道自己是电动机的转矩常数,并且知道了负载,那么您几乎可以说出要达到负载的一定加速度需要驱动多少电流。您只需简单地获取命令输入加速度,将其乘以一个常数,然后将其添加到控制器的驱动命令中即可。如果没有控制器,则基本上就是在做驱动系统所需的工作,并且越靠近,您获得的错误就越少,而循环必须消除的错误和系统的性能也会更好。在实践中,它有很大的不同。


“以我在电机控制应用中的经验,比例增益是应该完成大部分“工作”的比例增益,积分器应该是“其余”的积分。我认为您根本不需要D项。” 我同意典型的电机控制应用。P做主要工作,I补偿长期漂移/误差。但是在这里,四轴飞行器会受到许多外部湍流的影响,因此D项对于获得快速响应很重要。至于第一个术语,除非四边形处于自动导航模式,否则它并不是那么关键。
dm76 2014年

@ dm76:我的大部分经验是关于电机控制的,我对此表示否认;-)我的直觉虽然说我在四轴飞行器应用中仍有空间,但我认为如果P很高,则可以处理外部干扰(就像在电机控制中也是如此)。我真的需要仔细研究一下这些系统,以说出关于四旋翼飞行器的确切信息。我认为我在这里所说的很多内容都适用(尤其是在频域中进行调整,并具有系统的开环响应) )。
Guy Sirton 2014年

1
@ dm76:确实,这些“经验法则” PID调整导致电动机的性能非常中等,大概与四旋翼飞机的性能相同。有时放置良好的陷波滤波器可能会产生一个数量级的差异……
Guy Sirton 2014年

0

Ziegler-Nichols是一种简便的手动方法。还存在更强大的方法-这些方法通常依赖于数学解(解析,迭代优化等)。

除此之外,谷歌“自调整PID”的一些自动化技术。我最喜欢的是将神经网络应用于PID调节。


0

如果要获得准确的PID系数:

  • 让你的统计数据驱动器(即collecting input voltages+ encoder pulses在一个const频繁(0.01sec)时间20secs3X 2000矩阵)
  • 获取执行器的传递函数(TF)(使用MATLAB中的Ident工具箱)。
  • 最后,使用MATLAB中的PIDTool工具箱并上传您的变换函数。

或以一种快速简单的方式:

有一种更快的方法叫做Ziegler–Nichols在此处输入图片说明

并在此图像中演示PID参数的影响
PID参数影响

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.