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

共2条 1/1 1 跳转至

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

菜鸟
2026-05-20 18:28:28     打赏

TMC2209驱动板基础使用

在TMC2209开箱贴中,已经介绍了驱动模块每一个引脚的作用,这样贴出来再看一下:

image-20260520161807795e0c5abe5-0b0b-4c77-b1de-a7c09efbe711.png

首先,我需要快速验证一下我所购买的步进电机滑台丝杆是否可以正常的驱动,秉承着接最少的线让电机先转起来的原则,总共连接了11根线,连接示意图如下:

image-20260520162047631fdfac6e1-5e82-4e16-b98d-32d02ab8d634.pngb3fecb30d99c500e18243bbd5491ab0a.jpg

大致可以分为三类:

1、电机(A+、A-、B+、B-)

2、电源(电机供电、信号线电平)

3、信号线(EN、DIR、STEP)

这样应该就可以转动电机,开始敲代码,将上一章“MCU环境搭建”中的LED翻转Copy过来,再添加三个GPIO即可,完成后如下:

#include <stdio.h>#include "driver/gpio.h"#define USR_LED_IO  GPIO_NUM_3#define TMC_EN_IO   GPIO_NUM_4#define TMC_STEP_IO GPIO_NUM_5#define TMC_DIR_IO  GPIO_NUM_20void TMC_SET_EN(uint8_t en){    gpio_set_level(TMC_EN_IO, !en);}void TMC_SET_DIR(uint8_t dir){    gpio_set_level(TMC_DIR_IO, dir);}void GPIO_Init(void){    gpio_config_t gpio_conf = {0};    gpio_conf.pin_bit_mask = 1ull << USR_LED_IO;    gpio_conf.mode = GPIO_MODE_OUTPUT;    gpio_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;    gpio_conf.pull_up_en = GPIO_PULLUP_DISABLE;    gpio_conf.intr_type = GPIO_INTR_DISABLE;    gpio_config(&gpio_conf);    gpio_conf.pin_bit_mask = 1ull << TMC_EN_IO;    gpio_config(&gpio_conf);    gpio_conf.pin_bit_mask = 1ull << TMC_STEP_IO;    gpio_config(&gpio_conf);    gpio_conf.pin_bit_mask = 1ull << TMC_DIR_IO;    gpio_config(&gpio_conf);}void app_main(void){    GPIO_Init();    TMC_SET_EN(1);    TMC_SET_DIR(1);    while(1)    {         gpio_set_level(GPIO_NUM_3, 1);         gpio_set_level(GPIO_NUM_5, 1);         vTaskDelay(500);         gpio_set_level(GPIO_NUM_3, 0);         gpio_set_level(GPIO_NUM_5, 0);         vTaskDelay(500);    }}

我擦,为什么灯每个500ms再闪烁,而电机为什么不会500ms转动一点呢?是我线接错了还是代码写错了?应该排除发现将vTaskDelay中的参数修改成1,电机就开始转动了。

欸,不对啊。我所购买的步进电机滑台丝杆是:输出190个脉冲,白色塑料转动360°,那么一整步大约就是1.95°。按理说1.95°的变化应该是可以看到的,为什么会看不出来呢?

这就跟部分活动的TMC2209的驱动有关系了,都是它在"捣鬼"!这里有两个名词整步微步

先来介绍一下概念:

  • 整步:这是步进电机的基础物理单位。普通的步进电机(如1.8°步距角电机)默认情况下,每接收1个脉冲,就会转动 1.8度。转完一整圈(360度)需要 200 个脉冲。

  • 微步:这是一种通过驱动器实现的电子技术。它把原本的一个“整步”(比如那 1.8度),人为地切分成很多个极小的步骤。常见的细分倍数有 1/2、1/4、1/16、1/32 等。

假设将驱动器设置成了 1/16 微步模式。原本的整步角度:1.8°,现在的微步角度:1.8° ÷ 16 = 0.1125°。此时,控制器发出的每一个脉冲,只会让电机转动极其微小的 0.1125度。想要电机转满一圈,就需要 200 × 16 = 3200 个脉冲

模块中MS2和MS1,内部分别有个下来电阻,因此默认设置的是1/8微步。所以在STEP的引脚上输出8个脉冲,才是转动一整步(1.95°)

1779324937243660.gif





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

院士
2026-05-20 19:57:43     打赏
2楼

电机动起来了吗?


共2条 1/1 1 跳转至

回复

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