9个稳定版本 (3个主要版本)

4.0.0 2022年12月27日
3.0.0 2020年11月30日
2.2.0 2020年11月29日
2.1.0 2020年1月20日
1.0.0 2018年7月24日

#86硬件支持

Download history 1795/week @ 2024-03-13 1547/week @ 2024-03-20 1190/week @ 2024-03-27 1445/week @ 2024-04-03 1196/week @ 2024-04-10 914/week @ 2024-04-17 996/week @ 2024-04-24 713/week @ 2024-05-01 673/week @ 2024-05-08 616/week @ 2024-05-15 1056/week @ 2024-05-22 924/week @ 2024-05-29 1142/week @ 2024-06-05 1287/week @ 2024-06-12 783/week @ 2024-06-19 1052/week @ 2024-06-26

每月4,557次下载
5 个包 中使用

MIT/Apache

21KB
202

Rust PID控制器 最新版本 文档 构建状态

比例积分微分(PID)控制器。

特性

  • 可以查看P、I和D项的单独贡献,这些通常需要记录下来以供后续分析和参数调整。
  • 每个项的输出限制。
  • 三个项的控制输出限制。
  • 使用积分项限制来减轻积分饱和。
  • 通过使用测量的微分而不是误差的微分来减轻微分冲击。
  • 动态更改setpoint/kp/ki/kd
    • 通过存储e(t) * ki(t)而不是仅存储e(t)来减轻更改ki时的输出跳跃。
  • 通用的浮点类型参数,支持f32f64
  • 支持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控制器有几种不同的公式。本库使用独立形式

PID independent form

其中

  • C(t) = 控制输出,执行器的输出。
  • P(t) = 过程变量,测量的值。
  • e(t) = 错误 = S(t) - P(t)
  • S(t) = 设定点,过程变量的期望目标。

kp/ki/kd可以在运行时更改,因此可以是时间的函数。

如果您对相关形式感兴趣,可以添加自己的逻辑,使用死时间、时间常数、kc或其他任何东西来计算kp/ki/kd

待办事项

  • 通过检测振荡的频率和振幅来辅助(自动)调整。

许可

根据您的意愿许可

依赖项

~95–325KB