新来的朋友可以看一下我们的活动流程,有兴趣的也可以到报名页面仔细看看相关的活动流程和规范。
https://www.eepw.com.cn/event/action/digikey/diy_2026_first.html
我们的活动时间是2026年5月20日结束报名和器件购买,发帖截止日期是6月21日,评选和报销时间是6月22日至6月26日。本次活动有一块必选板子,也是本次教程的主角,静音步进电机控制驱动模块,使用的芯片是TMC2209。

接下来,我们再来介绍一下TMC2209这款驱动模块。TMC2209 SilentStepStick 是一款基于 Trinamic Motion Control 公司 TMC2209 芯片设计的高性能步进电机驱动模块。它最大的特点就是 “静音” 和 “智能”。极致静音:采用 Trinamic 专利的 StealthChop2™ 斩波技术,能几乎完全消除电机在低速运行时的噪音和振动高精度与平滑性:支持最高 256 微步智能节能:内置的 SpreadCycle™ 模式能在高负载下提供高扭矩,同时芯片还有静置自动降流功能易于使用:它采用经典的 StepStick 封装,引脚兼容常见的 A4988 等驱动模块
简单来说,主题一就是使用最简单的步进和方向两个信号来控制TMC2209模块,实现对步进电机的控制,这也是很多步进电机控制系统里最常见的控制模式。
主题二:基于UART的TMC2209驱动参数配置系统利用TMC2209 SilentStepStick 的UART配置接口,实现驱动参数的动态配置与调节系统。主要帮助参与者掌握:驱动寄存器配置、电流控制、微步控制、静音驱动模式。其实主题2是建立在主题1的基础之上的,为什么要配置电机驱动模块呢,主要是为了更好的适配电机和对应应用,通过调节TMC2209的寄存器配置,能更好的降低噪音和电机抖动的情况。要实现这个题目,就必须掌握驱动寄存器的通信时序和配置、接线方式、电机的微步设置和工作模式的设置方式。这些东西我们在后面会再讲。
主题二的具体活动任务如下:基础任务(入门级),MCU 通过 UART 配置以下参数:微步细分、电机电流(通过调整采样电阻电压),并验证不同细分下电机运行差异(视频演示)进阶任务,实现驱动模式切换:StealthChop(静音模式),SpreadCycle(高动态模式)。这款步进电机驱动在这两种模式切换的过程中,电机会有轻微的抖动。TMC后续的升级版本驱动,切换两种模式是很顺滑的,没有电机抖动的情况。即使存在这种情况,这款电机驱动模块依然是一款非常优秀的静音驱动产品,对于一些简单的应用来说,这两种工作模式选择一种就可以了,大部分时候是不需要切换工作模式的。
主题三:迷你桌面滑台控制系统题目目标使用TMC2209 SilentStepStick 驱动步进电机,结合简单机械结构(丝杆、同步带或滑轨),设计一个迷你桌面滑台控制系统,实现直线运动控制与位置管理。直线滑轨系统在3D打印,CNC控制,自动化设备控制里广泛使用,这里我们可以使用带丝杆的步进电机,设计一个迷你桌面滑台控制系统(类似微型CNC/自动推杆/相机滑轨的基础运动平台)。主要帮助参与者掌握:步进电机位置控制、加减速运动控制、机械运动与软件控制的结合。活动任务:基础任务(入门级),实现一个可工作的桌面滑台系统:使用 TMC2209 SilentStepStick 驱动步进电机(步进电机需要用户自行购买)步进电机带动滑台实现直线运动(丝杆、同步带或滑轨需要用户自行购买)支持基本控制功能:向前移动、向后移动、停止MCU通过:按键、串口命令控制滑台运动,不强制要求使用屏幕显示状态(有能力的用户可以做)进阶任务,在基础任务上实现位置控制功能:通过步数实现简单位置管理,即将长度映射到具体的步数(总长度分为N个位置),可以准确指定移动到准确的位置
支持以下控制功能:回到原点、移动到指定位置、设定移动距离(移动相对位置)实现平滑加减速控制,避免电机突然启动或停止回零操作
主题四是自主命题,使用 TMC2209 控制步进电机,实现一个创意或者产品 demo,需提交项目框图、控制代码(如不能公开,展示部分控制代码)、演示视频等项目提交的相关资料。本次活动的4个主题,就是以上的这些内容了,个人建议直接做任务1,不需要考虑调整驱动配置,也不需要去研究寄存器和通信时序。
现在我们来看一下使用TMC2209 SilentStepStick 的手册,下边的这两幅图就是模块的正面和背面。背面的丝印就是引脚定义,其中最重要的就是VIO和GND,以及步进电机的AB相接线引脚。VIO就是指通信部分的电平,像我们用树莓派Pico来控制,那就要用3.3V接到VIO引脚上。然后就是VM引脚,这个引脚需要接到电机电源上,根据电机的工作电压来接对应电源就行了。按手册上,是建议4.75V到28V,但是我们一般不建议按极限的电压来使用,建议5V到12V就行了。常见的小型步进电机也是12V,如果手头上只有24V的电机,也可以用一下。除了这些引脚,串口通信引脚也是比较重要的,配置芯片寄存器的时候需要用。另外就是直接控制运动的步进和方向信号引脚(STEP和DIR)。板子正面的一个小型旋钮变阻器,是用来调整电机采用电流参考电平的。在下一页有详细的说明。另外板子正面,芯片的右边,两个绿色的电阻就是AB相的采样电阻。一般情况下是没必要去更换采样电阻。


然后,我们接下来看一下TMC2209的规格书,这个规格书虽然是英文的,我们也可以节选部分需要看的内容,丢给AI翻译就可以了。在这个教程里,我们简单过一下我觉得比较重要的内容。首先第一个,我们可以看一下这个芯片的驱动模式一,也就是目前步进电机控制系统里,最常见、也是最通用的一种开环位置控制方式,也就是步进和方向控制信号驱动的模式。就是直接步进和方向的信号给到驱动板就可以了,至于诊断和位置指示信号,完全可以不管。然后再连接电机就可以了,这种是第一种。



芯片规格书里还有其他的内容,例如各种寄存器的详细说明。 另外还有就是可以了解一下两种不同的工作模式的切换策略,可以从图里看到官方是怎样推荐去切换工作模式的。如果大家感兴趣的话,还可以深入了解一下SpreadCycle模式是如何实现快速、精确的电流控制的底层电路机制。 对这个芯片的配置和优化有兴趣的话,还可以了解一下不同工作模式的详细流程图,以及OPT写入配置的流程图。 规格书的内容挺多的,也不需要每个都过一遍,接下来我们就跳到下一个章节,树莓派Pico简介吧。
本次活动的另一款搭配的板子,就是可选的树莓派Pico。树莓派Pico是2021年初的时候,树莓派基金会推出的微控制器领域的新产品,推出后就受到社区和用户的广泛关注。推出至今一共有4款树莓派的板子,我们推荐的是第1款,也就是最经典的。其他的3款,分别是调试引脚使用插座的,还有另外两款是带wifi功能的。前两年还推出了树莓派Pico2,硬件有一些升级,如果对树莓派Pico2有兴趣的,也可以购买。


其他的内容就没啥好说了,我们再来看一下它的引脚定义。就像刚才说的,我们用到的就是1个串口,比如GP0和GP1,然后随便找两个gpio,例如GP2和GP3。使用这几个端口,就可以完成我们主题内容了,并不需要使用其他的外设。如果需要驱动屏幕的话,就需要另外使用其他的引脚去接屏幕。然后我们还需要关注一下5V的引脚和3.3V,GND这些引脚,方便接线。






一些常见的报错的处理方式,内容详情比较长,建议去看一下视频教程。
现在来讲讲CircuitPython的目录组织结构。其实CircuitPython的工程目录结构非常简单。我们打开U盘,可以看到几个内容,code.py文件,这个文件就是主程序入口。只要你对CIRCUITPY盘符下的文件进行了修改并保存,开发板检测到文件系统变动后,通常会立即自动重启并运行最新的code.py代码。这在开发调试时非常方便。除了code.py,你也可以把主程序命名为main.py或code.txt/main.txt,开发板启动时会按顺序寻找这些默认的主文件来执行。 其他的文件可以不关注,如果你烧录的固件里有boot.py,一般也不要把程序写到里面。boot.py通常用于执行一次性的系统级配置,使用不当有可能使设备无法正常工作。code.py文件才是编写代码的正确入口,这点一定要注意。然后就是lib目录,这个是前面提到过的外部库(也就是外部模块)存放的地方。比如你想驱动OLED屏幕或使用传感器,就需要把对应的.mpy库文件下载并放在这个lib文件夹里,然后你的code.py才能正常调用它们。既然CircuitPython有外部库和内部库的区别,那就有一个同名的问题,假如外部库和内部库,都有一个同名的模块,那我们加载的是哪一个?在CircuitPython中,模块加载的优先级规则非常明确,/lib目录下的用户库,其优先级永远高于内置库。这意味着如果你在/lib文件夹中放置了一个名为time.mpy的文件,那么当你的代码执行import time时,加载的将是lib目录的time模块,而不是固件中内置的time模块。这个规则是故意设计的,它为你提供了极大的灵活性,你可以用自己的实现替换掉任何内置模块。




接下来,我们来看看电机的驱动代码,这个代码也很简单,就是初始化两个信号引脚,然后用定时器来输出步进波形。
# SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import time
import board
from digitalio import DigitalInOut, Direction
# direction and step pins as outputs
DIR = DigitalInOut(board.D5)
DIR.direction = Direction.OUTPUT
STEP = DigitalInOut(board.D6)
STEP.direction = Direction.OUTPUT
# microstep mode, default is 1/8 so 8
# another ex: 1/16 microstep would be 16
microMode = 8
# full rotation multiplied by the microstep divider
steps = 200 * microMode
while True:
# change direction every loop
DIR.value = not DIR.value
# toggle STEP pin to move the motor
for i in range(steps):
STEP.value = True
time.sleep(0.001)
STEP.value = False
time.sleep(0.001)
print("rotated! now reverse")
# 1 second delay before starting again
time.sleep(1)还记得我们前面的主题1的内容对吧,我们可以将这个代码提交给AI智能体代理,然后让它帮我们升级成,使用串口接收控制字符,实现加速、减速、前进、后退、停止这些功能。记得增加一个引脚开启EN信号,配置输出低电平就可以了。同时使用串口输出当前的运行状态,例如方向、速度,以及控制提示这些内容。 在等待一段时间后,AI生成的代码就做好了,然后再复制到U盘的code.py文件里。如果有错误的话,就修改一下,最后断电接上电机,测试一下功能,一般都没有什么问题。跟着我们的教程走,基本上就没啥问题了,配置串口的部分,我们会在社区的论坛上分享帖子,实现简单的寄存器读取和写入的功能。
我要赚赏金
