#解码器 #正交 #编码器 #改变 #编解码器 #全步 #半步

不依赖std quadrature-decoder

支持全步、半步和四倍步进的正交解码器的纯逻辑级别实现

2 个版本

0.1.1 2024年6月5日
0.1.0 2024年5月20日

#147 in 嵌入式开发


quadrature-encoder 中使用

MPL-2.0 许可证

77KB
1K SLoC

quadrature-decoder

Crates.io Crates.io Crates.io docs.rs

支持全步、半步和四倍步进的正交解码器的纯逻辑级别实现。


增量解码器

use quadrature_decoder::{FullStep, IncrementalDecoder};

let mut decoder: IncrementalDecoder<...> = Default::default();

// Update the decoder with pulse trains `a` and `b` and handle the result:
match decoder.update(a, b) {
    Ok(Some(change)) => println!("Change detected: {change:?}."),
    Ok(None) => println!("No change detected."),
    Err(error) => println!("Error detected: {error:?}."),
}

// Or, if you only care about correctly detected changes:
if let Some(change) = decoder.update(a, b).unwrap_or_default() {
    println!("Change detected: {change:?}.")
}

println!("Decoder is at counter: {:?}.", decoder.counter());

请参阅示例目录以获取更全面的示例。

索引增量解码器

索引解码器在检测到 z 脉冲序列上的上升沿时重置其计数器。

use quadrature_decoder::{IndexedIncrementalDecoder};

let mut decoder: IndexedIncrementalDecoder<...> = Default::default();

// Update the decoder with pulse trains `a`, `b` and `z` and handle the result:
match decoder.update(a, b, z) {
    Ok(Some(change)) => println!("Change detected: {change:?}."),
    Ok(None) => println!("No change detected."),
    Err(error) => println!("Error detected: {error:?}."),
}

// Or, if you only care about correctly detected changes:
if let Some(change) = decoder.update(a, b, z).unwrap_or_default() {
    println!("Change detected: {change:?}.")
}

println!("Decoder is at counter: {:?}.", decoder.counter());

请参阅示例目录以获取更全面的示例。

解码策略

全步解码

全步解码器能够检测到每个正交周期中的最多1次变化。

use quadrature_decoder::{FullStep, IncrementalDecoder};

let mut decoder: IncrementalDecoder<FullStep> = Default::default();

半步解码

全步解码器能够检测到每个正交周期中的最多2次变化。

use quadrature_decoder::{HalfStep, IncrementalDecoder};

let mut decoder: IncrementalDecoder<HalfStep> = Default::default();

四倍步解码

全步解码器能够检测到每个正交周期中的最多4次变化。

use quadrature_decoder::{QuadStep, IncrementalDecoder};

let mut decoder: IncrementalDecoder<QuadStep> = Default::default();

文档

请参阅docs.rs上的文档。

贡献

请阅读CONTRIBUTING.md以了解我们的行为准则
以及向我们提交拉取请求的流程。

版本控制

我们使用SemVer进行版本控制。有关可用的版本,请参阅此仓库的标签

许可证

本项目受MPL-2.0 许可证保护 – 请参阅LICENSE.md文件以获取详细信息。

依赖项

~155KB