【STM32U3 评测】步进电机驱动
本文介绍了 NUCLEO-U3C5ZI-Q 开发板结合 TMC2209 驱动器、STM32CubeMX 和 CubeIDE,实现 42 步进电机驱动和旋转的项目设计,包括环境搭建、工程创建、关键代码、流程图、效果演示等。
项目介绍
Nucleo-U3C5ZI-Q 开发板结合 TMC2209 驱动板实现 42 步进电机驱动和旋转测试。
- 准备工作:步进电机参数、环境搭建、硬件连接等;
- 工程创建:流程图、工程配置、工程代码等;
- 工程测试:工程编译、固件上传、效果演示等。
丝杆步进电机
采用 NIDEC 尼得科 8mm 步进电机。

尼得科 MSHN 两相 PM(永磁)型步进电机,聚焦微型精密传动场景,适配对安装空间和功耗要求严苛的电子设备。用于精密设备,尺寸直径 6 - 8mm、长度 4 - 8mm。重量 1 - 3g ,符合 REACH 和 RoHS 环保标准。
参数
| 参数 |
数值 |
| 类型 |
2 相 4 线 |
| 步距角 |
18° |
| 额定电压 |
3 - 5V |
| 额定电流 |
0.12A/相 |
| 电阻 |
35 - 45Ω/相 |
| 电感 |
30mH/相 |
| 保持扭矩 |
0.15 - 0.2 mN·cm |
| 机身 |
Φ8mm, H8.5mm |
详见:PM型步进电机(轴/螺杆型) | NIDEC(尼得科) .
引脚定义

转接板设计
为了使用杜邦线连接,绘制 1.5mm 转 2.54mm 转接板

适配步进电机 1.5mm 排针间距,转为常用的 2.54mm 排针,便于杜邦线连接、调试等操作;

采用 0.8mm 板厚,以适配步进电机接口排针长度。
PCB 工程详见:微型丝杠步进电机转接板 .
环境搭建
详见:【STM32U3 评测】介绍、环境搭建、工程测试 .
硬件连接
NUCLEO-U3C5ZI-Q 与 TMC2209 驱动板的接线方式如下
| TMC2209 |
NUCLEO-U3C5ZI-Q |
Note |
| Dir |
PB10 |
Direction |
| Step |
PC6 |
Step pulse |
| EN |
PE13 |
Enable |
| GND |
GND |
Ground |
| VIO |
3V3 |
Power |
TMC2209 与步进电机的接线方式如下
| 42步进电机 |
TMC2209 |
Note |
| B- |
2B |
B phase |
| B+ |
2A |
B phase |
| A+ |
1A |
A phase |
| A- |
1B |
A phase |
实物图

流程图

工程创建
- 打开 STM32CubeMX 软件,选择从开发板创建工程;

- 在 Board 标签下搜索并选择 NUCLEO-U3C5ZI-Q 型号开发板;
- 右下方选中目标开发板,点击右上角 Start Project 按钮,进入 CubeMX 配置界面;

- 在引脚配置标签页下,左侧工具目录展开 System Core,选中 GPIO;
- 在右侧图形引脚下方搜索 PE13 ,将其设置为 GPIO 输出模式,同时配置标签为
EN_PIN ;
- 同理,将 PC6 和 PB10 引脚设置为 GPIO 输出模式,配置标签分别为
STEP_PIN 和 DIR_PIN ;

-
点击上方 Clock 标签配置时钟参数,这里使用默认值;
-
点击上方 Project Manager 标签,设置工程名称、路径、工具栏等,这里使用 STM32CubeIDE 加载工程;

-
点击右上角 GENERATE CODE 按钮,生成并打开工程。

-
展开左侧工程文件目录,打开 Core/Src/main.c 文件,点击上方工具栏小锤子按钮,编译工程,无报错;

工程代码
展开左侧工程文件目录,双击打开 Core/Src/main.c 文件,关键代码如下
#include "main.h"
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
// 步进电机参数:1.8°步距角 + 8细分
#define STEP_PER_DEG (1600.0f / 360.0f) // 每度需要的步数 ≈4.444步
#define DIR_FORWARD 0 // 正转
#define DIR_BACKWARD 1 // 反转
/* USER CODE END PD */
COM_InitTypeDef BspCOMInit;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */
// 内部函数:旋转指定角度
void Motor_RunAngle(float angle, uint8_t dir, uint16_t pulse_delay);
// 内部函数:发送单步脉冲
void Motor_StepPulse(void);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
// 发送单个步进脉冲
void Motor_StepPulse(void)
{
HAL_GPIO_WritePin(STEP_PIN_GPIO_Port, STEP_PIN_Pin, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(STEP_PIN_GPIO_Port, STEP_PIN_Pin, GPIO_PIN_RESET);
}
// 旋转指定角度
// angle: 角度
// dir: 方向 0/1
// pulse_delay: 速度(越小越快)
void Motor_RunAngle(float angle, uint8_t dir, uint16_t pulse_delay)
{
uint32_t steps = (uint32_t)(angle * STEP_PER_DEG);
// 方向
HAL_GPIO_WritePin(DIR_PIN_GPIO_Port, DIR_PIN_Pin, dir);
// 使能电机
HAL_GPIO_WritePin(EN_PIN_GPIO_Port, EN_PIN_Pin, GPIO_PIN_RESET);
// 发脉冲
for(uint32_t i=0; i<steps; i++)
{
Motor_StepPulse();
HAL_Delay(pulse_delay);
}
// 失能电机
HAL_GPIO_WritePin(EN_PIN_GPIO_Port, EN_PIN_Pin, GPIO_PIN_SET);
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
// 电机初始状态
HAL_GPIO_WritePin(EN_PIN_GPIO_Port, EN_PIN_Pin, GPIO_PIN_SET); // 失能
HAL_GPIO_WritePin(STEP_PIN_GPIO_Port, STEP_PIN_Pin, GPIO_PIN_RESET);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// ===================== 正转 90° =====================
BSP_LED_On(LED_GREEN);
Motor_RunAngle(90.0f, DIR_FORWARD, 5);
BSP_LED_Off(LED_GREEN);
HAL_Delay(1000);
// ===================== 反转 90° =====================
BSP_LED_On(LED_BLUE);
Motor_RunAngle(90.0f, DIR_BACKWARD, 5);
BSP_LED_Off(LED_BLUE);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
保存代码。
编译上传
- 右键工程文件夹,选择构建项目,或点击工具栏小锤子按钮;
- 构建完成后,无报错产生,点击工具栏运行按钮,自动上传固件至开发板并运行;

效果演示
42 步进电机正反方向交替旋转;

局部放大演示如下

总结
本文介绍了 NUCLEO-U3C5ZI-Q 开发板结合 TMC2209 驱动器、STM32CubeMX 和 CubeIDE,实现 42 步进电机驱动和旋转的项目设计,包括环境搭建、工程创建、关键代码、流程图、效果演示等,为相关产品的快速开发和应用设计提供了参考。