你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32U3 评测】步进电机驱动

[复制链接]
无垠的广袤 发布时间:2026-5-24 22:00

【STM32U3 评测】步进电机驱动

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

项目介绍

Nucleo-U3C5ZI-Q 开发板结合 TMC2209 驱动板实现 42 步进电机驱动和旋转测试。

  • 准备工作:步进电机参数、环境搭建、硬件连接等;
  • 工程创建:流程图、工程配置、工程代码等;
  • 工程测试:工程编译、固件上传、效果演示等。

丝杆步进电机

采用 NIDEC 尼得科 8mm 步进电机。

bj02_step_motor2.jpg

尼得科 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(尼得科) .

引脚定义

stepper_8mm_pinout.jpg

转接板设计

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

mini_stepper.jpg

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

mini_stepper_board.jpg

采用 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

实物图

stepper_connect.jpg

流程图

flowchart_stepper_run.jpg

工程创建

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

cubemx_project_board.jpg

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

cubemx_u3c5_board.jpg

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

cubemx_gpio_config.jpg

  • 点击上方 Clock 标签配置时钟参数,这里使用默认值;

  • 点击上方 Project Manager 标签,设置工程名称、路径、工具栏等,这里使用 STM32CubeIDE 加载工程;

    cubemx_stepmotor_project_manager.jpg

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

    cubemx_open_project.jpg

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

cubeide_stepper_build.jpg

工程代码

展开左侧工程文件目录,双击打开 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 */
}

保存代码。

编译上传

  • 右键工程文件夹,选择构建项目,或点击工具栏小锤子按钮;
  • 构建完成后,无报错产生,点击工具栏运行按钮,自动上传固件至开发板并运行;

toggle_download.jpg

效果演示

42 步进电机正反方向交替旋转;

stepper_run.gif

局部放大演示如下

stepper_run_large.gif

总结

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

收藏 评论0 发布时间:2026-5-24 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版