本项目没有直接使用树莓派作为主控,而是选用 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);
}
我要赚赏金
