1个不稳定版本
0.1.0 | 2022年12月27日 |
---|
#1726 in 嵌入式开发
在 pot-conditioner 中使用
10KB
136 代码行
backlash
此 no_std
Rust crate 实现了一个处理器,该处理器将 背隙 引入到连续值中,类似于机械系统中发生的情况。
在大多数情况下,背隙是一种不受欢迎的效果,但有时可以通过减少不稳定值的来回跳跃来利用它进行信号调理。一个典型的用例是在嵌入式系统中读取电位计(通过ADC),用于在移动时生成事件。
与使用简单的死区方法相比,其优点是在改变运动方向时输出信号没有间断。对于电位计来说,它允许在改变方向时微调设置,而不会出现明显的跳跃。
重要
- 背隙与迟滞不同,迟滞不会引入死区,而是引入位移。
- 当需要精度时不要使用背隙。它会产生非线性,并减少由配置的死区引起的输入值范围。
- 引入背隙不能替代传统的平滑处理。仍然可能需要任何过滤,并且应在该处理器之前执行。
使用示例
use backlash::Backlash;
// The width of the deadband.
const DEADBAND_WIDTH: i32 = 10;
// Create an instance of the processor using `i32` values.
// Floating point types like `f32` are also supported.
let mut backlash = Backlash::<i32>::new(DEADBAND_WIDTH);
// These are some simulated input values from a pot moving upwards from 90 to 100
// with some instability when settled.
let input_values = [90, 95, 98, 99, 100, 99, 98, 99, 100, 99];
for input_value in input_values {
// Process the input and get the output value.
let output_value = backlash.update(input_value);
// The output values will raise from 85 to 95 and then stay there.
println!("{}", output_value);
}
// Now the pot will be turned down to 50, also with some instability at the end.
let input_values = [100, 80, 60, 55, 50, 52, 51, 50, 51, 52];
for input_value in input_values {
// Process the input and get the output value.
let output_value = backlash.update(input_value);
// The output values will fall from 95 to 55 and then stay there.
println!("{}", output_value);
}
测试
运行 cargo test
进行单元测试。
许可证
在MIT许可证下发布。对该项目的任何贡献都必须在相同的许可证条件下提供。
作者:Oliver Rockstedt [email protected]