2 个版本
0.1.1 | 2024 年 6 月 5 日 |
---|---|
0.1.0 | 2024 年 5 月 20 日 |
174 在 嵌入式开发 中
96KB
1.5K SLoC
quadrature-encoder
支持全步、半步和四倍步进的增量编码器驱动程序的硬件级实现。
增量编码器
use quadrature_encoder::{FullStep, IncrementalEncoder};
let mut encoder: IncrementalEncoder<...> = Default::new(pin_clk, pin_dt);
// Update the encoder with pulse trains `a` and `b` and handle the result:
match encoder.poll() {
Ok(Some(movement)) => println!("Movement detected: {movement:?}."),
Ok(None) => println!("No movement detected."),
Err(error) => println!("Error detected: {error:?}."),
}
// Or, if you only care about correctly detected movement:
if let Some(movement) = encoder.poll().unwrap_or_default() {
println!("Movement detected: {movement:?}.")
}
println!("Encoder is at position: {:?}.", encoder.position());
请参阅示例目录以获取更全面的示例。
索引增量编码器
当检测到 idx
引脚上的上升沿时,索引编码器会重置其位置。
use quadrature_encoder::{IndexedIncrementalEncoder};
let mut encoder: IndexedIncrementalEncoder<...> = Default::new(pin_clk, pin_dt, pin_idx);
// Update the encoder with pulse trains `a`, `b` and `z` and handle the result:
match encoder.poll() {
Ok(Some(movement)) => println!("Movement detected: {movement:?}."),
Ok(None) => println!("No movement detected."),
Err(error) => println!("Error detected: {error:?}."),
}
// Or, if you only care about correctly detected movement:
if let Some(movement) = encoder.poll().unwrap_or_default() {
println!("Movement detected: {movement:?}.")
}
println!("Encoder is at position: {:?}.", encoder.position());
请参阅示例目录以获取更全面的示例。
便利别名
由于完整的类型名 IncrementalEncoder<Mode, ..., Step, T>
可能相当复杂,因此提供了一些便利类型别名,用于最常见的用例
旋转编码器
use quadrature_encoder::{RotaryEncoder, IndexedRotaryEncoder};
let mut encoder: RotaryEncoder::new(pin_clk, pin_dt);
let mut indexed_encoder: IndexedRotaryEncoder::new(pin_clk, pin_dt, pin_idx);
线性编码器
use quadrature_encoder::{LinearEncoder, IndexedLinearEncoder};
let mut encoder: LinearEncoder::new(pin_clk, pin_dt);
let mut indexed_encoder: IndexedLinearEncoder::new(pin_clk, pin_dt, pin_idx);
解码策略
全步解码
全步编码器能够在每个正交周期中检测到多达 1 个变化。
use quadrature_encoder::{FullStep, IncrementalEncoder};
let mut encoder: IncrementalEncoder<_, _, FullStep> = Default::new(...);
半步解码
全步编码器能够在每个正交周期中检测到多达 2 个变化。
use quadrature_encoder::{HalfStep, IncrementalEncoder};
let mut encoder: IncrementalEncoder<_, _, HalfStep> = Default::new(...);
四倍步解码
全步编码器能够在每个正交周期中检测到多达 4 个变化。
use quadrature_encoder::{QuadStep, IncrementalEncoder};
let mut encoder: IncrementalEncoder<_, _, QuadStep> = Default::new(...);
文档
请参阅 docs.rs 上的文档。
贡献
请阅读 CONTRIBUTING.md 以了解我们的 行为准则,
以及向我们的提交 pull 请求的过程。
版本控制
我们使用 SemVer 进行版本控制。有关可用版本,请参阅此存储库的 标签。
许可证
本项目采用 MPL-2.0 许可证 – 有关详细信息,请参阅 LICENSE.md 文件。
依赖项
~210KB