介绍
首先,我们需要考虑这个叫做系统脉冲响应的东西到底是什么,它是什么意思。这是一个抽象的概念,需要一点思考才能形象化。我不会进入严格的数学。我的意思是尝试给出一些直觉,这是什么,然后引导你如何使用它。
示例控制问题
想象一下,你有一个大功率电阻器,上面安装了温度传感器。一切都在环境温度下开始。当你打开电源时,你知道传感器的温度最终会上升并稳定下来,但确切的方程式很难预测。假设系统有一个大约 1 分钟的时间常数,尽管“时间常数”并不完全适用,因为温度不会像在具有单极的系统中那样以良好的指数上升,因此只有一个时间常数. 假设您想要准确地控制温度,并将其更改为一个新的水平并稳定地保持在那里,这比您在适当的功率水平下打开并等待的速度要快得多。
基本上,您有控制系统问题。开环响应是合理可重复的,并且在某个地方有一个方程可以很好地对其进行建模,但问题是有太多未知数,您无法推导出该方程。
PID控制
解决此问题的一种经典方法是使用 PID 控制器。回到更新世,当这必须在模拟电子设备中完成时,人们变得聪明起来,想出了一个与手头的模拟功能配合得很好的方案。该方案被称为“PID”,用于Proportional、Integral和Derivative。
P 项
你开始测量误差。这只是测量的系统响应(在我们的例子中传感器报告的温度)减去控制输入(所需的温度设置)。通常这些可以被安排为电压信号,因此找到误差只是一个模拟差异,这很容易。你可能认为这很容易。您所要做的就是用更高的功率驱动电阻,误差越大。当它太冷时,它会自动尝试让它变热,当它太热时它会自动变冷。那行得通,有点。请注意,此方案需要一些错误才能导致任何非零控制输出(驱动电阻器的功率)。事实上,这意味着所需的功率越高,误差越大,因为这是获得高功率的唯一方法。现在您可能会说您所要做的就是提高增益,以便即使在高功率输出时误差也是可以接受的。毕竟,这几乎是许多电路中如何使用运算放大器的基础。你是对的,但现实世界通常不会让你侥幸逃脱。这可能适用于一些简单的控制系统,但是当响应存在各种微妙的皱纹并且可能需要很长时间时,当增益过高时,您最终会得到一些振荡的东西。换句话说,系统变得不稳定。但是当响应有各种细微的皱纹时,并且当它可能需要很长时间时,当增益太高时,您最终会得到一些振荡的东西。换句话说,系统变得不稳定。但是当响应有各种细微的皱纹时,并且当它可能需要很长时间时,当增益太高时,您最终会得到一些振荡的东西。换句话说,系统变得不稳定。
我上面描述的是 PID 的 P(比例)部分。就像您可以使输出与误差信号成比例一样,您也可以添加与时间导数和误差积分成比例的项。这些 P、I 和 D 信号中的每一个在相加以产生控制输出信号之前都有自己的单独增益。
我称
I 项允许错误随着时间的推移而消失。只要有任何正误差,I 项就会不断累积,最终将控制输出提高到整体误差消失的程度。在我们的示例中,如果温度一直很低,它将不断增加电阻器的功率,直到输出温度最终不再低。希望你能看到它变得不稳定,甚至比高 P 项更快。AI项本身很容易引起过冲,很容易变成振荡。
D 项
D 项有时会被忽略。D 项的基本用途是增加一点稳定性,以便 P 和 I 项可以更具侵略性。D 术语基本上是说如果我已经朝着正确的方向前进,请稍微放松一下,因为我现在所拥有的似乎正在让我们到达那里。
调整 PID
PID 控制的基础知识非常简单,但要恰到好处地获得 P、I 和 D 项却并非如此。这通常是通过大量的实验和调整来完成的。最终目标是获得一个整体系统,其中输出尽可能快地响应,但没有过度的过冲或振铃,当然它需要稳定(不要自己开始振荡)。有很多关于 PID 控制的书籍,如何在方程中添加一点皱纹,尤其是如何“调整”它们。调整是指预测最佳的 P、I 和 D 增益。
PID 控制系统可以正常工作,而且肯定有很多知识和技巧可以让它们正常工作。然而,PID 控制并不是控制系统的唯一正确答案。人们似乎忘记了为什么首先选择 PID,这更多地与模拟电子设备的约束有关,而不是某种通用的最优控制方案。不幸的是,今天有太多的工程师将“控制系统”与 PID 等同起来,这无非是一种思维敏捷的膝跳反应。这不会使当今世界的 PID 控制出错,而只是解决控制问题的众多方法之一。
超越PID
今天,像温度示例这样的闭环控制系统将在微控制器中完成。这些可以做更多的事情,而不仅仅是获取误差值的导数和积分。在处理器中,您可以进行除法、平方根、保留最近值的历史记录等等。PID 以外的许多控制方案都是可能的。
冲动反应
因此,忘记模拟电子设备的局限性,退后一步,想想我们如何控制一个回到第一原理的系统。如果对于每一小块控制输出,我们都知道系统会做什么。连续控制输出只是许多小块的总和。由于我们知道每个部分的结果是什么,因此我们可以知道任何以前的控制输出历史的结果是什么。现在请注意,控制输出的“一小部分”非常适合数字控制。您将计算控制输出应该是什么并将其设置为该值,然后返回并再次测量输入,从中计算新的控制输出并再次设置,等等。您正在循环运行控制算法,它测量输入并在每次循环迭代时重新设置控制输出。输入在离散时间“采样”,输出同样以固定间隔设置为新值。只要你能足够快地做到这一点,你就可以认为这是在一个连续的过程中发生的。在通常需要几分钟才能稳定的电阻器加热的情况下,每秒几次肯定比系统固有地以有意义的方式响应要快得多,以至于以 4 Hz 的频率更新输出对于系统来说看起来是连续的。这与数字录制的音乐完全一样,实际上在 40-50 kHz 范围内以离散的步长改变输出值,而且速度如此之快,以至于我们的耳朵听不到它,而且听起来像原始音乐一样连续。你可以认为这是在一个连续的过程中发生的。在通常需要几分钟才能稳定的电阻器加热的情况下,每秒几次肯定比系统固有地以有意义的方式响应要快得多,以至于以 4 Hz 的频率更新输出对于系统来说看起来是连续的。这与数字录制的音乐完全一样,实际上在 40-50 kHz 范围内以离散的步长改变输出值,而且速度如此之快,以至于我们的耳朵听不到它,而且听起来像原始音乐一样连续。你可以认为这是在一个连续的过程中发生的。在通常需要几分钟才能稳定的电阻器加热的情况下,每秒几次肯定比系统固有地以有意义的方式响应要快得多,以至于以 4 Hz 的频率更新输出对于系统来说看起来是连续的。这与数字录制的音乐完全一样,实际上在 40-50 kHz 范围内以离散的步长改变输出值,而且速度如此之快,以至于我们的耳朵听不到它,而且听起来像原始音乐一样连续。当然,每秒几次比系统固有地以有意义的方式响应要快得多,以至于以 4 Hz 的频率更新输出对系统来说是连续的。这与数字录制的音乐完全一样,实际上在 40-50 kHz 范围内以离散的步长改变输出值,而且速度如此之快,以至于我们的耳朵听不到它,而且听起来像原始音乐一样连续。当然,每秒几次比系统固有地以有意义的方式响应要快得多,以至于以 4 Hz 的频率更新输出对系统来说是连续的。这与数字录制的音乐完全一样,实际上在 40-50 kHz 范围内以离散的步长改变输出值,而且速度如此之快,以至于我们的耳朵听不到它,而且听起来像原始音乐一样连续。
那么,如果我们有一种神奇的方法可以知道系统会因为任何一个控制输出样本而随着时间的推移而做什么呢?由于实际的控制响应只是一系列样本,我们可以将所有样本的响应相加,并知道最终的系统响应将是什么。换句话说,我们可以预测任意控制响应波形的系统响应。
这很酷,但仅仅预测系统响应并不能解决问题。然而,这是一个令人惊叹的时刻,您可以翻转它并找到获得任何所需系统响应所需的控制输出。请注意,这正是解决控制问题,但前提是我们能够以某种方式知道系统对单个任意控制输出样本的响应。
所以你可能在想,这很简单,只要给它一个大脉冲,看看它做了什么。是的,这在理论上可行,但在实践中通常不会。这是因为任何一个控制样本,即使是一个大样本,在整体方案中都非常小,以至于系统几乎没有可测量的响应。请记住,每个控制样本在事物方案中必须很小,以便控制样本的序列对系统来说是连续的。所以并不是这个想法行不通,而是在实践中系统响应非常小,以至于它被埋没在测量噪声中。在电阻器示例中,以 100 W 的功率撞击电阻器 100 ms 不会导致足够的温度变化来测量。
阶跃响应
但是,还是有办法的。虽然将单个对照样本放入系统会直接给我们对单个样本的响应,但我们仍然可以通过将已知且受控的对照响应序列放入系统并测量其对这些响应的响应来推断它。通常这是通过放置一个控制步骤来完成的我们真正想要的是对小信号的响应,但对单个步骤的响应只是其中的一部分。在电阻器示例中,我们可以确保在 0 W 时一切都处于稳定状态,然后突然打开电源并将 10 W 输入电阻器。这最终会导致输出端出现可测量的温度变化。具有正确比例的导数告诉我们对单个对照样本的响应,即使我们无法直接测量。
总而言之,我们可以将步进控制输入放入未知系统并测量结果输出。这就是所谓的阶跃响应。然后我们取它的时间导数,称为脉冲响应。任何一个控制输入样本产生的系统输出只是脉冲响应适当地缩放到该控制样本的强度。对整个控制样本历史的系统响应是针对每个控制输入及时添加、缩放和倾斜的一整串脉冲响应。最后一个操作出现了很多,并且有一个特殊的名字卷积。
卷积控制
因此,现在您应该能够想象,对于任何所需的系统输出集,您都可以提出控制输入序列来产生该输出。但是,有一个问题。如果您对您想要从系统中获得的东西过于激进,那么实现这一目标的控制输入将需要通过高值和低值来实现。基本上,您期望系统响应的速度越快,控制值就需要在两个方向上越大。在电阻器示例中,您可以从数学上说您希望它立即达到新的温度,但这需要一个无限的控制信号才能实现。您允许温度更改为新值的速度越慢,您需要能够转储到电阻器中的最大功率就越低。另一个问题是电阻器的功率有时也需要降低。你可以'
解决此问题的一种方法是控制系统在内部使用用户控制输入之前对其进行低通滤波。图用户做用户想做的事。让他们快速输入。在内部,您使用低通滤波器将其平滑并减慢到您知道的最快速度,因为您可以将最大和最小功率放入电阻器中。
现实世界的例子
这是使用真实世界数据的部分示例。这来自实际产品中的嵌入式系统,除其他外,该系统必须控制几十个加热器,以将各种化学容器保持在特定温度。在这种情况下,客户选择做 PID 控制(这是他们觉得舒服的),但系统本身仍然存在并且可以测量。这是通过步进输入驱动其中一个加热器的原始数据。循环迭代时间为 500 毫秒,考虑到系统在 2 小时后仍明显稳定在该比例图上,这显然是一个非常短的时间。
在这种情况下,您可以看到加热器以大约 0.35 的步长驱动(“Out”值)。长时间输入完整的 1.0 步会导致温度过高。可以移除初始偏移,并缩放结果以考虑小输入步骤以推断单位阶跃响应:
从这里你会认为它只是减去连续的阶跃响应值来获得脉冲响应。这在理论上是正确的,但实际上你得到的主要是测量和量化噪声,因为系统在 500 毫秒内变化很小:
还要注意值的小范围。脉冲响应按 10 6比例显示。
显然,单个读数甚至几个读数之间的巨大差异只是噪声,因此我们可以对其进行低通滤波以去除高频(随机噪声),这有望让我们看到较慢的潜在响应。这是一种尝试:
这更好,表明确实有有意义的数据,但仍然有太多的噪音。这是通过对原始脉冲数据进行更多低通滤波获得的更有用的结果:
现在这是我们可以实际使用的东西。与整体信号相比,剩余噪声很小,因此不应妨碍。信号似乎仍然完好无损。看到这一点的一种方法是注意到 240 的峰值大约是从快速的视觉检查和眼球过滤前一个图。
所以现在停下来想想这个脉冲响应到底意味着什么。首先,注意它显示的是 1M 倍,所以峰值实际上是满量程的 0.000240。这意味着理论上,如果系统仅在 500 ms 时隙之一内使用单个满量程脉冲驱动,则这将是相对于它被单独放置的结果温度。任何一个 500 ms 周期的贡献都非常小,这在直觉上是有意义的。这也是为什么直接测量脉冲响应不起作用的原因,因为满量程的 0.000240(约 4000 分之一)低于我们的噪声水平。
现在,您可以轻松计算任何控制输入信号的系统响应。对于每个 500 ms 控制输出样本,添加这些脉冲响应之一,该脉冲响应按该控制样本的大小进行缩放。该脉冲响应对最终系统输出信号的贡献的 0 时间是在其控制样本的时间。因此,系统输出信号是这些脉冲响应的连续偏移,彼此偏移 500 毫秒,每个都按当时的控制样本电平进行缩放。
系统响应是控制输入与该脉冲响应的卷积,计算每个控制样本,在本例中为每 500 毫秒。要从中制作控制系统,您需要向后工作以确定产生所需系统输出的控制输入。
即使您想做一个经典的 PID 控制器,这种脉冲响应仍然非常有用。调整 PID 控制器需要大量的实验。在实际系统上,每次迭代都需要一两个小时,这会使迭代调优变得非常非常缓慢。使用脉冲响应,您可以在几分之一秒内模拟计算机上的系统响应。您现在可以尽可能快地尝试更改新的 PID 值,而不必等待一两个小时让真实系统向您显示它的响应。当然,最终值应该始终在真实系统上进行检查,但大部分工作可以通过仿真在很短的时间内完成。这就是您在问题中引用的段落中的“您可以将其用作模拟基础来查找老式PID控制的参数”的意思。