PID 控制律
误差定义为 e(t)=r(t)-y(t)。本页使用工业实现里常见的“微分作用于输出”形式:
当目标值不再变化时,-dy/dt 与 de/dt 等价;在目标值突然阶跃时,它能避免微分项产生瞬时尖峰。本仿真直接使用模型内部的速度状态 dy/dt,没有模拟传感器噪声、数值微分或微分滤波。代码还把积分状态限制在 [-4,4],这是简单的积分钳位,不代表所有工程抗饱和方案。
Closed-loop control
在同一个二阶对象上调整比例、积分与微分增益,直接比较输出响应、控制量和误差指标。公式、指标定义与下方仿真代码保持一致。
公式与代码保持一致:微分项作用于对象输出,避免设定值阶跃带来的 derivative kick;数值积分、限幅和指标口径也在下方明确给出。
误差定义为 e(t)=r(t)-y(t)。本页使用工业实现里常见的“微分作用于输出”形式:
当目标值不再变化时,-dy/dt 与 de/dt 等价;在目标值突然阶跃时,它能避免微分项产生瞬时尖峰。本仿真直接使用模型内部的速度状态 dy/dt,没有模拟传感器噪声、数值微分或微分滤波。代码还把积分状态限制在 [-4,4],这是简单的积分钳位,不代表所有工程抗饱和方案。
u_P=K_pe。P 项像弹簧,误差越大推得越用力。它提高响应速度,但过大时会降低阻尼,带来超调和振荡。
u_I=K_i∫e dt。I 项会累积长期偏差,是消除当前对象稳态误差的关键;但积累太快会产生积分饱和和慢振荡。
本页实际采用 u_D=-K_d dy/dt,并直接读取对象模型的速度状态。当设定值保持不变时,它才与 K_d de/dt 等价;真实测量微分通常还要加入低通滤波。
仿真对象为二阶线性系统,控制器输出先限制在 ±10,再进入对象:
当前取 ω_n=2.2、ζ=0.55、K=1。这是用于学习与分享的简化模型,不代表某个特定电机、温控或飞行器。
采样周期为 Δt=0.01 s。下标 k−1 表示更新前状态;clip(x,a,b) 表示把数值限制在区间 [a,b]:
对象采用半隐式 Euler:先更新速度,再用新速度更新位置。它是连续模型的数值近似,不等同于解析解。
本页只运行从 0 到 1 的正单位阶跃,因此超调量按 |Δr|=1 归一化。响应连续停留在 ±5%·|Δr| 内 0.8 s 后,首次进入时刻记为“稳定时间估计”;这是实时演示用的驻留判据,不等同于检查全部未来轨迹的严格调节时间。
Ki=0、Kd=0,逐步提高 Kp,直到响应足够快但还未持续振荡。Ki 消除残余稳态误差。若出现慢速来回摆动,说明积分太强或输出已经饱和。Kd 抑制超调和振铃。若曲线变得毛躁,真实系统里应降低 Kd 或增加微分滤波。超调量、调节时间、ITAE,不要只追求某一个指标。Kp=2.20、Ki=1.00、Kd=1.00。这组参数对当前二阶对象响应较快,基本无超调,适合先理解三项作用。
Kp=0、Ki=0、Kd=0。先只加 P,再补 I,最后用 D 抑制超调,这样最容易看清每一项的影响。
若输出长时间振荡,优先降低 Kp 或 Ki;若控制量经常贴近限幅,再追求更快响应意义不大。
Kp 太小,也可能是输出限幅太低。Kp 或 Ki 过强,可降低它们或适当增加 Kd。Kp/Ki,或增加合适的 D 项。