《步进电机》 rust 嵌入式esp23

步进电机是生活中隐形的精密操控者,通过脉冲信号精准控制转动角度,为诸多设备提供核心动力。在数码设备中,佳能相机的 STM 步进电机实现安静平滑的自动对焦,让短片拍摄无干扰;扫描仪依靠它驱动扫描头准确定位,保障图像清晰。智能家居里,28BYJ-48 步进电机推动智能窗帘远程开合,实现毫米级调节。医疗领域更离不开其精准性,输液泵和注射泵通过它控制液体传输速率,确保用药安全。就连微波炉转盘也依赖永磁式步进电机维持稳定转动。从日常家电到精密仪器,步进电机以低成本实现高可靠性,成为自动化生活的隐形基石。

在上一篇 rust 嵌入式esp23 《hello word》的的基础上

实现功能

  1. 控制步进电机旋转

熟悉硬件:

步进电机控制板
作用是将esp32电信号转换成电压

步进电机
实现转动效果

接线

  1. 将步进电机插入电机控制板
  2. 控制板IN1~4接口分别接esp32的G16~19引脚
  3. 电机的-/+分别接电源正极负极

代码实现

声明四个输出引脚

rs 复制代码
    let stepper_orange = Output::new(peripherals.GPIO16, Level::High, OutputConfig::default());
    let stepper_yellow = Output::new(peripherals.GPIO17, Level::High, OutputConfig::default());
    let stepper_pink = Output::new(peripherals.GPIO18, Level::High, OutputConfig::default());
    let stepper_blue = Output::new(peripherals.GPIO19, Level::High, OutputConfig::default());

实现轮流电压输出

rs 复制代码
let delay = Delay::new();
    let mut stepper_arr = [stepper_orange, stepper_yellow, stepper_pink, stepper_blue];
    loop {
        for i in 0..stepper_arr.len() {
            for j in 0..stepper_arr.len() {
                if i == j {
                    continue;
                }
                stepper_arr[j].set_high();
            }
            stepper_arr[i].set_low();
            delay.delay_millis(5);
        }
    }

完整代码

rs 复制代码
#![no_std]
#![no_main]
#![deny(
    clippy::mem_forget,
    reason = "mem::forget is generally not safe to do with esp_hal types, especially those \
    holding buffers for the duration of a data transfer."
)]

use esp_hal::{
    clock::CpuClock,
    delay::Delay,
    gpio::{Level, Output, OutputConfig},
    main,
};
use esp_println::println;

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
    loop {
        println!("Panic!");
    }
}

pub fn update_method(timestamp: u32) {
    println!("update_method: {}", timestamp);
}
esp_bootloader_esp_idf::esp_app_desc!();
#[main]
fn main() -> ! {
    // generator version: 0.5.0
    let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
    let peripherals = esp_hal::init(config);
    let stepper_orange = Output::new(peripherals.GPIO16, Level::High, OutputConfig::default());
    let stepper_yellow = Output::new(peripherals.GPIO17, Level::High, OutputConfig::default());
    let stepper_pink = Output::new(peripherals.GPIO18, Level::High, OutputConfig::default());
    let stepper_blue = Output::new(peripherals.GPIO19, Level::High, OutputConfig::default());
    let delay = Delay::new();
    let mut stepper_arr = [stepper_orange, stepper_yellow, stepper_pink, stepper_blue];
    loop {
        for i in 0..stepper_arr.len() {
            for j in 0..stepper_arr.len() {
                if i == j {
                    continue;
                }
                stepper_arr[j].set_high();
            }
            stepper_arr[i].set_low();
            delay.delay_millis(5);
        }
    }
}

效果展示

相关推荐
迷藏49413 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
左手厨刀右手茼蒿14 小时前
Linux 内核中的块设备驱动:从原理到实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿14 小时前
Linux 内核中的模块机制:从加载到卸载
linux·嵌入式·系统内核
番茄灭世神17 小时前
MCU开发常见软件BUG总结(持续更新)
c语言·stm32·单片机·嵌入式·gd32
济61719 小时前
FreeRTOS 任务管理源码解析---任务创建与删除全流程----FreeRTOS专栏
嵌入式·freertos
迷藏49420 小时前
**发散创新:基于 Rust的模型保护机制设计与实践**在人工智能快速发
java·人工智能·python·rust·neo4j
love530love20 小时前
从零搭建本地版 Claurst:基于 Rust 重构的 Claude Code 终端编码助手 + LM Studio 模型接入测试
开发语言·人工智能·windows·重构·rust·lm studio·claude code
恋喵大鲤鱼20 小时前
如何理解 Rust 没有运行时(No Runtime)
rust
Freak嵌入式20 小时前
MicroPython LVGL基础知识和概念:交互与事件处理
ide·嵌入式·gui·lvgl·micropython·电子·upypi
Tomhex2 天前
Rust数组与Vec的核心差异解析
rust