这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » let'do2026年第一期步进电机控制-过程帖

共1条 1/1 1 跳转至

let'do2026年第一期步进电机控制-过程帖

助工
2026-06-14 13:20:20     打赏

本项目没有直接使用树莓派作为主控,而是选用 STM32F407 来控制 TMC2209 SilentStepStick。硬件连接思路比较清晰:STM32 的 TIM3_CH1 输出 STEP 脉冲,PA1 控制 DIR 方向,PA2 控制 EN 使能,USART3 预留给 TMC2209 的 UART 配置接口。按键部分使用 PC13、PA0、PE8 三个输入键,分别用于启动/换向/停止以及速度调节。

软件工程基于 STM32CubeMX/HAL 生成,项目中已经拆分了几个模块:motor.c 负责电机底层控制,包括使能、方向、PWM 启停和速度设置;key.c 负责按键扫描、消抖和连发;motor_ctrl.c 负责运动状态机;tmc2209.c 实现了 TMC2209 的 UART 寄存器读写、CRC8 校验、电流设置、微步设置以及 StealthChop/SpreadCycle 模式配置。

目前主循环中每 10ms 扫描一次按键,并交给运动控制模块处理。RUN 键在停止、正转、反转之间循环切换;UP/DOWN 键用于调整速度。STEP 脉冲由 TIM3 PWM 输出,速度换算后修改定时器 ARR 和 CCR,占空比保持约 50%。TMC2209 UART 驱动代码已经完成,后续联调时会把 TMC2209_Init() 接入初始化流程,重点验证 1/16 微步、电流参数和静音模式对运行效果的影响。


while (1) { Key_ID_t key = Key_Scan(); MotorCtrl_HandleKey(key);

HAL_Delay(10);

}

void Motor_SetSpeed(uint32_t rpm) { if (rpm == 0) { Motor_Stop(); return; } if (rpm > SPEED_MAX) rpm = SPEED_MAX;

uint32_t period = 18750 / rpm;
if (period < 10) period = 10;

__HAL_TIM_SET_AUTORELOAD(&MOTOR_STEP_TIM, period - 1);
__HAL_TIM_SET_COMPARE(&MOTOR_STEP_TIM, MOTOR_STEP_TIM_CH, period / 2);

}





关键词: 过程    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]