这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo|2026年第1期】【成果帖】静音步进电机控制实践-成果总结

共1条 1/1 1 跳转至

【Let'sdo|2026年第1期】【成果帖】静音步进电机控制实践-成果总结

助工
2026-07-07 16:50:45     打赏

【Let'sdo|2026年第1期】【成果帖】静音步进电机控制实践 - 成果总结

很荣幸参加本次的"Let's do活动",非常感谢digikey和EEPW对本次活动的大力支持,本期的活动主题是:静音步进电机控制。

image.png

在本章中,对本次活动进行一个成果的总结。

本次使用到的物料有ADI的步进驱动模块TMC2209SILENTSTEPSTICK和ESP32P4开发板,以及TB上买的2相4线步进电机滑台

image.pngimage.png

0ce28dd4-60e5-4255-b634-e0ca06bce851.png

统框图

整体所需要连接的由三大部分:驱动器、步进电机、主控。整体系统的硬件连接方式如下,

c3b95e90-13b6-4980-8012-fd08bcc63017.png

按照框图将硬件连接完成后,后面只需要注入灵魂就可以运行了。在编写代码之前看看硬件的相关介绍和使用方法:

TMC2209是个超静音电机驱动器 IC,具有以下特性和优势:

  • 用于高达 2 ARMS 和 4.75 V 至 29 V 的 2 相步进电机的驱动器

  • Step/Dir 和单线 UART 接口

  • 同时使用 StealthChop 和 StallGuard

  • 低功耗待机,可适应 EUP 或电池供电

  • 低 RDS(ON)、低发热:LS170mΩ 和 HS170mΩ(+25°C 时的典型值)

  • 紧凑的 5x5mm² QFN28 封装

image-20260508152902352.pngimage-20260508160403212.png

image-20260508160403212

1、GND

2、VIO - 数字接口逻辑电源引脚。只给“数字接口电平”供电, 不给内部电机驱动核心供电。

3、OB2 - 电机线圈B输出2

4、OB1 - 电机线圈B输出1

5、OA1 - 电机线圈A输出1

6、OA2 - 电机线圈A输出2

7、GND

8、VM - 电机供电电压

9、DIR - 控制电机转动方向(正转或者反转),内部有下拉电阻

10、SETP:控制电机转动,一个脉冲走一个微步

11、PDN:省电待机,低电平有效(PDN和UART是复用同一个引脚)

12、UART:串口通信(PDN和UART是复用同一个引脚)

13、SPREAD:斩波器模式选择:低=StealthChop,高=SpreadCycle(可以保持未连接状态)

14、MS2:微步分辨率配置(内部下拉电阻),MS2, MS1: 00: 1/8, 01: 1/32, 10: 1/64 11: 1/16

15、MS1:微步分辨率配置(内部下拉电阻),MS2, MS1: 00: 1/8, 01: 1/32, 10: 1/64 11: 1/16

16、EN:模块内有上拉,0: 使能,1: 禁用

17、INDEX:同步输出,用于位置参考

18、GIAG:如果发生错误,DIAG 会保持报警(高电平)


软件介绍

在软件开发中,从最简的方式进行验证,让电机转起来,所以在代码中设置使能、方向引脚后,让STEP不断的翻转看看电机是否运动起来了,如此就可以验证硬件有无连接错误了。

在主函数中很简单,初始化相关IO,并创建一个串口解析线程

void app_main(void)
{
    GPIO_Init();
    UART0_Test_Init();
    xTaskCreate(UART0_Test_Task, "uart0_test", UART_TEST_TASK_STACK, NULL, 10, NULL);

    vTaskDelete(NULL);
}

在串口线程中就定时解析和发送数据

static void UART0_Test_Task(void *arg)
{
    uint8_t rx_data[UART_TEST_RX_BUF_SIZE];

    UART0_Send_Command_List();

    while (1) {
        const int rx_len = UART0_Read_All(rx_data, sizeof(rx_data));
        if (rx_len > 0) {
            UART0_Process_Rx_Data(rx_data, rx_len);
        }

        uart_wait_tx_done(UART_TEST_PORT, pdMS_TO_TICKS(100));
        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

这是定义的相关命令表

static const uart_command_t uart_command_table[] = {
    {"Moter Start", NULL, Moter_Start},
    {"Moter Stop", NULL, Moter_Stop},
    {"Moter Reversal", NULL, Moter_Reversal},
    {"Moter Period", "<us>", Moter_Period},
};

大致流程就是解析串口命令,执行对应动作。

完成的代码如下:

code.zip


下面是相关的文章介绍

【Let'sdo|2026年第1期】【开箱帖】静音步进电机控制实践 - 开箱及芯片介绍

【Let'sdo|2026年第1期】【过程帖】静音步进电机控制实践 - MCU环境搭建

【Let'sdo|2026年第1期】【过程帖】静音步进电机控制实践 - TMC2209驱动板基础使用

【Let'sdo|2026年第1期】【过程帖】静音步进电机控制实践 - 基础步进电机运动控制系统

【Let'sdo|2026年第1期】【过程帖】静音步进电机控制实践 - TMC2209的UART/PDN引脚使用


视频介绍

【Let'sdo|2026年第1期】【成果帖】静音步进电机控制实践 - 成果总结-项目演示-电子产品世界







关键词: Let's do | 2026年第1期     静音步进电    

共1条 1/1 1 跳转至

回复

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