#frame #protocols #speed #command #esc #dshot #d-shot

无 std dshot-frame

生成 DShot ESC 协议的帧

4 个版本

0.1.3 2024年5月25日
0.1.2 2024年5月25日
0.1.1 2024年5月24日
0.1.0 2024年5月24日

#219 in 科学

Download history 298/week @ 2024-05-22 15/week @ 2024-05-29 5/week @ 2024-06-05

每月 <103 次下载

MIT 许可证

10KB
153

DShot Frame

本 crate 为 DShot ESC 协议提供支持。

DShot 有两种字节的帧,其中前 11 位是油门速度,第 12 位是遥测请求标志,最后 4 位是校验和。

低于 48 的油门值保留用于特殊命令。

它以固定速度通过线路传输,一和零都是脉冲,但一比零长两倍。

用法

此示例改编自 embassy-stm32 代码库

async fn dshot(/* ... */) {
    let mut pwm = SimplePwm::new(
        timer,
        Some(PwmPin::new_ch1(pin, OutputType::PushPull)),
        None,
        None,
        None,
        Hertz(150_000),
        CountingMode::EdgeAlignedUp,
    );
    let max_duty_cycle = pwm.get_max_duty() as u16;

    let frame = Frame::new(1000, false).unwrap();
    pwm.waveform_up(&mut dma, Ch1, &frame.duty_cycles()).await;
    // Pull the line low after sending a frame.
    pwm.set_duty(channel, 0);
    pwm.enable(channel);
}

无运行时依赖