9个稳定版本 (3个主要版本)
4.0.0 | 2022年12月27日 |
---|---|
3.0.0 | 2020年11月30日 |
2.2.0 |
|
2.1.0 | 2020年1月20日 |
1.0.0 | 2018年7月24日 |
#86 在 硬件支持
每月4,557次下载
在 5 个包 中使用
21KB
202 行
Rust PID控制器
比例积分微分(PID)控制器。
特性
- 可以查看P、I和D项的单独贡献,这些通常需要记录下来以供后续分析和参数调整。
- 每个项的输出限制。
- 三个项的控制输出限制。
- 使用积分项限制来减轻积分饱和。
- 通过使用测量的微分而不是误差的微分来减轻微分冲击。
- 动态更改
setpoint
/kp
/ki
/kd
。- 通过存储
e(t) * ki(t)
而不是仅存储e(t)
来减轻更改ki
时的输出跳跃。
- 通过存储
- 通用的浮点类型参数,支持
f32
或f64
。 - 支持
no_std
环境,例如嵌入式系统。 - 可选支持Serde。如果您需要
Pid
实现Serialize/
Deserialize
,请启用serde
Cargo功能。
示例
use pid::Pid;
// Create a new proportional-only PID controller with a setpoint of 15
let mut pid = Pid::new(15.0, 100.0);
pid.p(10.0, 100.0);
// Input a measurement with an error of 5.0 from our setpoint
let output = pid.next_control_output(10.0);
// Show that the error is correct by multiplying by our kp
assert_eq!(output.output, 50.0); // <--
assert_eq!(output.p, 50.0);
// It won't change on repeat; the controller is proportional-only
let output = pid.next_control_output(10.0);
assert_eq!(output.output, 50.0); // <--
assert_eq!(output.p, 50.0);
// Add a new integral term to the controller and input again
pid.i(1.0, 100.0);
let output = pid.next_control_output(10.0);
// Now that the integral makes the controller stateful, it will change
assert_eq!(output.output, 55.0); // <--
assert_eq!(output.p, 50.0);
assert_eq!(output.i, 5.0);
// Add our final derivative term and match our setpoint target
pid.d(2.0, 100.0);
let output = pid.next_control_output(15.0);
// The output will now say to go down due to the derivative
assert_eq!(output.output, -5.0); // <--
assert_eq!(output.p, 0.0);
assert_eq!(output.i, 5.0);
assert_eq!(output.d, -10.0);
假设
- 测量以等间隔发生。(
t(i) = t(i-1) + C
) - 每个项的输出限制关于0对称(
-limit <= term <= limit
)。
公式
PID控制器有几种不同的公式。本库使用独立形式
其中
- C(t) = 控制输出,执行器的输出。
- P(t) = 过程变量,测量的值。
- e(t) = 错误 = S(t) - P(t)
- S(t) = 设定点,过程变量的期望目标。
kp
/ki
/kd
可以在运行时更改,因此可以是时间的函数。
如果您对相关形式感兴趣,可以添加自己的逻辑,使用死时间、时间常数、kc
或其他任何东西来计算kp
/ki
/kd
。
待办事项
- 通过检测振荡的频率和振幅来辅助(自动)调整。
许可
根据您的意愿许可
- Apache License,版本2.0(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
依赖项
~95–325KB