单位 5 / 9

控制算法:PID和AI支持调节

收益:

  • 能够在正确的上下文中解释和应用 PID 控制器的 P、I、D 项和效果到 AI
  • 能够借助人工智能逐步执行 Ziegler-Nichols 和实验调谐方法
  • 能够识别并消除 AI 建议中的积分饱和、微分噪声等 PID 陷阱

保持烤箱温度恒定,将电机速度驱动到所需值,平衡无人机角度;所有这些的核心是控制算法。其中最常见的是PID控制器,它是行业的支柱。 PID;它简单、强大并且适用于解决广泛的问题。但“简单”并不意味着“易于调整”:设置不正确的 PID 会出现振荡、超调、滞后或变得完全不稳定。人工智能在这里是一个有价值的助手:它解释 PID 术语、指导调整方法、诊断典型陷阱并编写调整代码。然而,最终的调整是通过查看系统的物理行为来进行的,稳定性决定权属于工程师。在本单元中,我们将介绍如何使用 AI 安装、调整和验证 PID 陷阱。

PID的三项

PID 通过三种方式响应误差信号(e = 目标值 - 测量值):

术语

他在看什么?

效果

极端地

P(比例)

当前错误

快速响应

振荡,永久误差

我(积分)

过去累积的错误

重置永久错误

过冲、饱和、振荡

D(导数)

误差变化率

阻尼减少超调

放大噪音

口头总结:P回答“我现在有多远”,I“我离开了多久”,D“我接近有多快”。一个好的控制器可以平衡这三者。

类PID:def __init__(self,Kp,Ki,Kd,output_min = -100,output_max = 100):self.Kp,self.Ki,self.Kd = Kp,Ki,Kd self.out_min,self.out_max = output_min,output_max self.integral = 0.0 self.previous_error = 0.0 def计算(self,目标,测量,dt):错误=目标- measured # P p = self.Kp * error # I -- self.integral 带饱和保护 += error * dt i = self.Ki * self.integral # D -- 微分噪声敏感 d = self.Kd * (error - self.previous_error) / dt self.previous_error = error out = p + i + d # 使输出饱和并限制饱和如果output > self.output_max: output = self.out_max self.integral -= error * dt # 抗饱和:撤消积分 elif output < self.output_min: output = self.output_min self.integral -= error * dt return 输出

这段代码不是“训练PID”,而是一个接近生产逻辑的骨架:它包括输出饱和和抗饱和。 AI给出的许多简单PID绕过了这两种保护;如果没有它们,当执行器达到极限时,积分将膨胀,系统将意外超调。

提示:当向 AI 询问 PID 时,请说“添加输出饱和和抗饱和,将测量导数应用到导数项”。这三个添加将教科书 PID 转换为字段 PID。

积分饱和和微分噪声

两个经典陷阱是 PID 失败的最常见原因:

积分饱和:当执行器饱和时(例如电机已处于全功率),误差仍然存在,并且积分项继续增长。当系统达到目标时,这种膨胀的积分会导致较大的超调。解决方案:当输出饱和时停止或回滚积分(抗饱和,如上面的代码所示)。

导数噪声:D项取误差的导数;噪声测量的导数噪声更大,并且会使执行器振动。解决方案:从测量结果中求导数(测量结果的导数而不是误差),在导数项中添加低通滤波器。

# 减少导数噪声:测量导数 + filterd_raw = -(measured - self.previous_measured) / dt 而不是 error

人工智能擅长识别这些陷阱;如果你说“我的PID在达到目标时大幅超调”,则建议windup。但您可以通过测量该修复是否适用于您的系统来验证。

齐格勒-尼科尔斯设置

从头开始寻找增益(Kp、Ki、Kd)的经典方法是 Ziegler-Nichols。其本质是:仅从P开始,不断增加Kp,直到系统进入持续振荡状态;根据此时的临界增益Ku和振荡周期Tu,从表中计算出Kp、Ki、Kd。

控制器

克普

TD

P。

0.5·库

P.I.

0.45·库

图/1.2

PID

0.6·库

图/2

图/8

Ziegler-Nichols 步骤(计划由 AI 制定): 1.取Ki=0,Kd=0。只需运行 P.2。缓慢增加Kp,直到开始稳定、持续的振荡。3.此Kp=Ku(临界增益),振荡周期=Tu.4。由表计算Kp、Ti、Td; Ki = Kp/Ti,Kd = Kp*Td.5。从这些值开始,然后进行实验性调整。

注意:Ziegler-Nichols 故意使系统达到稳定极限(持续振荡)。在真实硬件上执行此操作时,存在机械应变、过流和危险的风险;如果可能,首先在模拟中进行,然后在硬件中使用低功率限制和紧急停止。 AI建议的Ku是一个起点,它在您的系统中进行测量和验证。

人工智能辅助诊断

您可以通过向 AI 描述 PID 行为来诊断它。症状 → 可能原因映射:

症状

可能的原因

AI会建议的方向

慢坐

Kp/Ki 低

增加kp

永久错误

我缺席或很低

Ki 增加/增加

过冲+振荡

Kp/Ki 高,无 D

添加 Kd,减少 Ki

执行器晃动

导数噪声

过滤/减少D

当你达到大超越时

积分饱和

添加抗饱和功能

弱提示/强提示

弱:“给出PID增益。”(哪个系统?行为如何?有任何测量吗?随机数来了。)强:“我正在调整直流电机速度控制的PID。目前,Kp=2,Ki=0.5,Kd=0。它在阶跃输入上超调35%,当达到目标时,有一个很大的第二次超调;需要很长时间才能稳定。采样为100 Hz。列出可能的原因从这些症状中,可以获得“建议我应该改变它的方向,并告诉我如何测试超调是否是整体饱和”。

迷你包

控制工程师 Kerem 调整挤出机的温度控制。根据人工智能建议的增益,系统很快就达到了目标,但在每次设定变化时,它都会产生很大的超调,然后慢慢稳定下来。 Kerem 向 AI 解释了症状; AI 怀疑积分饱和,因为加热器在一段时间内保持全功率(饱和)状态。 Kerem 在 PID 代码中添加了抗饱和功能,超调量显着减少。但现在加热器出口处有轻微的闪烁;他将此归因于 D 项放大了温度传感器噪声,并向导数添加了低通滤波器。最后,它粗略地验证了 Ziegler-Nichols 的增益并进行实验微调。 AI快速诊断;但凯雷姆通过测量实际的阶跃响应来确认每次校正——无论饱和是否被校正或闪烁是否消失,都只能通过图形来看到。

常见错误

  • 未能向 PID 添加输出饱和和抗饱和功能,并且执行器限制出现较大超调。
  • 从噪声测量的导数中获取导数并振动执行器。
  • 假设 dt 恒定,而采样周期变化。
  • 在没有安全预防措施的情况下对硬件执行 Ziegler-Nichols 振荡测试。
  • 接受人工智能产生的收益为“最终”收益,无需进行系统特定验证。
  • 以非常大的步长改变单个增益并使系统陷入不稳定。

综上所述

  • PID;它对 P(当前误差)、I(累积误差)、D(误差变化率)做出反应。
  • 现场PID应包括输出饱和、抗饱和和微分滤波器。
  • 积分饱和大的超调、微分噪声导致执行器振动。
  • 齐格勒-尼科尔斯开始获得收益;它是通过硬件中的安全措施来实现的。
  • 人工智能可以快速诊断症状和原因;通过测量验证校正。
  • dt 实际测量值;盈利变化是通过小步骤和观察来实现的。

应用任务

选择一个系统(真实的电机/加热器或 Python 中的简单一阶/二阶模型)并让 AI 生成具有饱和 + 抗饱和的 PID 类。然后:(1) 仅从 P 开始并增加 Kp 来观察振荡行为,(2) 添加 Ki 以消除永久误差并查看超调如何增加,(3) 比较打开和关闭抗饱和功能对大超调的影响。绘制每一步的阶跃响应,并注意哪个增益改变哪个行为。将 Ziegler-Nichols 的收益与您自己发现的收益进行比较。