本次项目实现了一个基于 STM32F407 和 TMC2209 SilentStepStick 的步进电机基础控制系统。项目目标是用 MCU 输出 STEP/DIR 信号驱动步进电机,实现启动、停止、正反转和速度调节,并在此基础上加入 TMC2209 的 UART 参数配置能力,为后续电流调节、微步细分和静音模式切换做准备。
电路原理图可以按下面连接理解:
STM32 PA6 -> TMC2209 STEP
STM32 PA1 -> TMC2209 DIR
STM32 PA2 -> TMC2209 EN
STM32 PB10 -> TMC2209 UART/PDN
STM32 PB11 <- TMC2209 UART/PDN
GND -> TMC2209 GND
VM -> 电机电源
A1/A2/B1/B2 -> 两相步进电机线圈
软件部分主要分为四层。第一层是硬件初始化,由 main.c 完成 GPIO、USART3、TIM3 PWM 初始化;第二层是 motor.c,封装电机使能、失能、方向控制、PWM 启停和速度设置;第三层是 key.c,负责按键读取、20ms 消抖和 150ms 调速连发;第四层是 motor_ctrl.c,实现停止、正转、反转三个状态之间的切换。TMC2209 参数配置放在 tmc2209.c,实现 CRC8、寄存器读写、电流设置、微步设置、StealthChop 静音模式和 SpreadCycle 高动态模式接口。
主要参数如下:STM32 系统时钟配置到 168MHz;TIM3 预分频为 83,形成 1MHz 计数基准;STEP 使用 TIM3_CH1 PWM 输出;默认速度为 30RPM,速度范围 1RPM 到 200RPM,每次按键调整 10RPM;电机按 200 步/圈、1/16 微步计算。TMC2209 UART 默认使用 USART3,波特率 9600,驱动地址为 0x00;初始化参数中预设 IHOLD=8、IRUN=20、IHOLDDELAY=1,并设置 1/16 微步和 StealthChop 静音模式。
开启运行步骤:先连接 STM32、TMC2209、电机和电源,确认共地;再编译工程并通过 DAPLink/OpenOCD 下载;上电后按 RUN 键,电机开始正转;再次按 RUN 键,电机切换为反转;第三次按 RUN 键,电机停止并释放;运行过程中按 UP/DOWN 键可以降低或提高转速。工程中 Motor_SetSpeed() 会根据 RPM 计算 TIM3 的自动重装载值,并同步更新比较值,使 STEP 脉冲保持稳定输出。
本次成果完成了活动主题一中的 STEP 脉冲生成、DIR 正反转控制、至少两种转速和按键控制运动。
本项目代码已按模块拆分为 motor.c、key.c、motor_ctrl.c 和 tmc2209.c,其中 motor.c 负责 STEP/DIR/EN 控制,motor_ctrl.c 负责运行状态机,tmc2209.c 负责 UART 寄存器配置,后续可以继续扩展电流动态调整、堵转检测和不同细分模式对比测试。
case KEY_ID_RUN: switch (ctrl_state) { case STATE_STOP: MotorCtrl_Start(0, STATE_RUN_FORWARD); break; case STATE_RUN_FORWARD: Motor_StopPulse(); MotorCtrl_Start(1, STATE_RUN_REVERSE); break; case STATE_RUN_REVERSE: Motor_Stop(); ctrl_state = STATE_STOP; break; } break;
void TMC2209_SetCurrent(uint8_t ihold, uint8_t irun, uint8_t iholddelay) { uint32_t data = (uint32_t)(ihold & 0x1F) | ((uint32_t)(irun & 0x1F) << 8) | ((uint32_t)(iholddelay & 0x0F) << 16);
TMC2209_WriteReg(TMC2209_REG_IHOLD_IRUN, data);
}
TMC2209_SetCurrent(8, 20, 1);
TMC2209_SetMicrosteps(16);
TMC2209_EnableStealthChop();
我要赚赏金
