1个不稳定版本

0.1.0 2022年12月27日

#1726 in 嵌入式开发


pot-conditioner 中使用

MIT 协议

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]

无运行时依赖