Z 变换派生的 PID 实现的优势是什么?

电器工程 控制 pid控制器
2022-01-19 15:07:41

我看过很多 PID 文章,例如this,使用通用 PID 方程的 Z 变换来推导一些疯狂的差分方程,然后可以在软件(或者在这种情况下是 FPGA)中实现。我的问题是,与没有博士学位的传统且更直观的 PID 相比,这种实现有什么优势类型实现?第二个似乎更容易理解和实施。P 项是直接乘法,积分使用运行和,并且通过从当前样本中减去前一个样本来估计导数。如果您需要添加诸如积分饱和保护之类的功能,那就是直截了当的代数。尝试将积分饱和保护或其他功能添加到差异类型算法中,例如上面链接的,似乎要复杂得多。除了“我是个喜欢为了好玩而做 Z 变换的坏蛋”类型的吹牛之外,还有什么理由使用这样的实现?

编辑:我链接的没有 PHD 文章的 PID 是一个更简单的实现示例,它使用积分项的运行总和以及导数项的连续样本之间的差异。它可以用定点数学以确定性的方式实现,并且如果需要,可以在计算中包含实时时间常数信息。我基本上是在寻找 Z 变换方法的实际优势。我看不出它怎么会更快,或者使用更少的资源。Z 方法似乎不是保持积分的运行总和,而是使用先前的输出并减去先前的 P 和 D 分量(通过计算得出积分和)。所以,除非有人能指出我遗漏的东西,否则我会接受 AngryEE 的评论,即它们本质上是相同的。

最后编辑:感谢您的回复。我想我对每一个都了解了一些,但最后,我认为 Angry 是正确的,因为这只是一个偏好问题。两种形式:

u(k)=u(k1)+Kp(e(k)e(k1)+KiTie(k)+KdTi(e(k)2e(k1)+e(k2))
e(k2)=e(k1),e(k1)=e(k)
u(k1)=u(k)

要么

sum=sum+e(k)
u(k)=Kpe(k)+KiTisum+KdTi(e(k)e(k1))
e(k1)=e(k)

将评估基本相同的事情。有人提到第一个可以更快地在 DSP 或 FPGA 中实现,但我不相信。任何一个都可以被矢量化。第一个需要两个 post 操作,第二个需要一个 pre 和一个 post 操作,所以看起来很均匀。第一个在实际计算中还需要多1个乘法。

4个回答

设计 PID 控制器的 Z 变换方法最终将产生更有效的实现。如果您正在为您的应用设计最小的 FPGA/DSP/微控制器,这一点至关重要。

上面提到的“没有 PHD 的 PID”可能是在软件中实现 PID 控制的最简单方法,但在更高的采样率下它变得很麻烦。

此外,Z 变换更适合在离散(数字)域中进行设计。传统的(拉普拉斯变换)设计方法更适用于连续时间。两者之间有多种转换方式(零阶保持、线性插值、极点放置、双线性/Tustin),每种方式在系统稳定性和响应方面都有其优点和缺点。在离散域中进行整个设计通常更容易。

长话短说,如果您使用的是相对“慢”的系统(所有主要行为都明显发生在 100kHz 左右),那么第一个设计可能就可以了。您可以在微控制器或 PC 上实现它并完成它。随着系统变得更快,您可能必须使用 Z 变换方法来获得所需的速度(文章提到 9.5MHz,假设您有可以跟上的 A/D 和 DAC)。

你被 Z 变换的所有花哨弄糊涂了。这两种方法基本相同——没有 PHD 的 PID 方法只是下标更少。它们执行相同的基本功能并使用相同的基本数学。

我可以看到两者之间的唯一主要区别是没有 PHD 的 PID 没有考虑采样时间。对于做任何可能不稳定的事情,采样时间是一个非常重要的考虑因素。在这种情况下,Z 变换方法的好处是,如果不考虑采样时间,您就无法使用它——它迫使您展示您的工作并帮助您设计一个更稳定的系统。

看起来您发现实施 Z 变换方法的案例研究被设计为具有高度确定性。这解释了他们对 FPGA 的使用——计算将始终花费相同的时间。没有 PHD 实现的 PID 显然不是确定性的。使用双精度作为变量而不是定点实现肯定会在任何没有浮点单元的微控制器上导致不确定的行为(也可能在带有 FPU 的 uC 上)。与 PID w/o PHD 方法相比,该案例研究的复杂程度完全不同。

因此,从根本上说,数学和控制方法是相同的,但案例研究/Z 变换方法更加严谨和理论扎实。PID w/o PHD 方法仅适用于相对稳定的非常简单、非时间关键的系统。

这是交易,以我的经验:

  • Z 变换有助于进行一些分析:离散时间采样系统的理论最好通过 Z 变换建模。
  • PID 控制器或低通滤波器的设计既可以通过 Z 变换也可以通过经典分析来完成,其中一种用于将导数/积分从连续时间转换为离散时间的近似值之一。如果与采样率相比,您的极点和零点的频率较低,那没关系。坚持任何你觉得最有信心的方法。
  • 滤波器和控制器的 Z 变换推导通常会模糊这些滤波器和控制器参数的物理意义。如果我有一个具有积分增益、比例增益和微分增益的 PID 回路,我知道这些参数中的每一个都直接做什么。如果我使用 Z 变换,它们只是我必须以某种方式得出的数字。
  • 过滤器和控制器的实现可能会或可能不会模糊这些过滤器和控制器的参数的物理含义。这种品质在很大程度上独立于前一点:如果我有一个基于 Z 变换的设计,我可以将其转换为具有经典外观的实现,反之亦然。您在 FINAL EDIT 下的示例是一个很好的示例,因为第二个实现将积分器(“ sum”)保持在其自己的状态变量中。那个状态变量是有意义的。第一个实现将状态变量保留为错误的过去历史;这很有意义,但在我看来,它提供的洞察力较少。

最后,还有其他涉及非线性或分析的问题,通常会让您选择一种实现而不是另一种实现(对我来说,它始终是控制器的经典方法,对于 FIR 滤波器,它是 Z 变换,对于 1 极或 2 极 IIR 滤波器,它通常是经典方法):

  • 对于控制器,我总是将积分器作为状态变量,而不是过去的错误样本。原因是实际系统通常需要抗饱和,在这种情况下,您必须限制积分变得太正或太负。(如果你在定点实现,无论如何你都必须这样做,因为当你遇到溢出时的环绕条件会对你的控制循环的行为产生不好的影响)

  • 出于同样的原因,我也总是以输出引用的方式计算积分器:例如sum += Ki*error; out = stuff + sum,而不是sum += error; out = stuff + Ki*sum. 使用第二种方法,如果您更改增益 Ki,则会上下调整积分器对输出的影响,这可能不是您想要的,并且限制会根据增益而变化。如果在积分前将误差乘以 Ki,则积分器的单位与控制回路输出的单位相同,具有更明显的物理意义。

(更新:我已经更详细地写了一篇关于这个主题的博客文章。)

编辑

使用 Z 变换可以更轻松地组合和简化 LTI 系统以进行分析例如,具有传递函数 H1、H2、...、Hk 的级联系列 k LTI 系统将组合为一个简单的产品H = H1*H2*...*Hk此外,负反馈回路的传递函数为T = G/(1 + G*H),其中 H 在反馈路径上。获得整体传递函数后,您可以分析稳定性(极点位置)和性能(瞬态、稳态误差),添加额外的滤波器和反馈以优化设计。

对于高阶子系统,您可以对系统函数进行分区,并将其实现为一系列级联双二阶(即通过零极对,例如复共轭或重复根),从而降低量化引起的不稳定性。规范形式的双二阶:

双二阶部分