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

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

步进电机
实现转动效果
接线
- 将步进电机插入电机控制板
- 控制板
IN1~4接口
分别接esp32的G16~19引脚
。 - 电机的
-
/+
分别接电源正极
和负极
代码实现
声明四个输出引脚
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);
}
}
}
效果展示
