【静音步进电机控制实践过程帖】树莓派Pico扩展板设计
本文介绍了树莓派 Pico 扩展板的项目设计,包括原理图、PCB设计、3D渲染、BOM器件焊接、步进电机驱动测试、OLED 显示测试等。
项目介绍
为了方便测试和硬件连接,设计主控 MCU 扩展板。
扩展板设计:原理图、3D 渲染图、实物图;
硬件连接:TMC2209模块和树莓派Pico扩展板的接线、系统接线示意图、实物图;
工程测试:MicoPython 编程实现步进电机旋转控制、OLED 显示旋转状态等。
扩展板
树莓派 Pico 扩展板设计,包括原理图、3D 渲染图、实物图等。
原理图


详见:树莓派Pico扩展板 .
3D 图
Top view


Bottom view


详见:树莓派Pico扩展板 .
BOM
扩展板所需物料如下
| 物料 | 数量 | 说明 |
| 20 Pin 排母 | 2 | 2.54mm 间距 |
| 20 Pin 排针 | 2 | 2.54mm 间距 |
| 4 Pin 排母 | 1 | 2.54mm 间距 |
| XH2.54 直针端子母座 | 1 | 4 Pin |
| 8 Pin 排母 | 10 | 2.54mm 间距 |
实物图
使用电烙铁和锡线将上述器件与目标位置对应焊接,成品如下


硬件连接
包括 TMC2209、OLED、步进电机、树莓派Pico的接线方式。
TMC2209
TMC2209 模块与树莓派 Pico 的接线方式如下
| TMC2209 | RPi Pico | Note |
| Dir | GP 16 | Direction |
| Step | GP 17 | Step pulse |
| EN | GP 18 | 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 |
相序判断
采用手动旋转法判断步进电机的 A、B 相序:
步进电机 4 个引脚悬空,手动旋转电机轴,此时阻力较小;
短接其中两个引脚,旋转电机轴,若阻力明显增加,则这两个引脚属于同一相,可接至 A+、A-;剩余两个引脚接 B+、B-;


OLED
OLED 与树莓派 Pico 的接线方式
| OLED | RPi Pico | Note |
| SCL | GP 05 | Serial Clock |
| SDA | GP 04 | Serial Data |
| GND | GND | Ground |
| VCC | 3V3 | Power |
树莓派 Pico 引脚定义详见:树莓派 Pico 引脚功能(Pinout) .
系统连接


实物连接效果如下


工程测试
运行 Thonny IDE 新建文件,添加如下代码
'''
电机:42步进电机
电压:直流12V
步距角:1.8度
细分:8
单圈脉冲数:360 / 1.8 * 8 = 1600 个/圈
'''
from machine import Pin, I2C
import ssd1306
import time
# Define TMC2209 pinout
dir = Pin(16, Pin.OUT)
step = Pin(17, Pin.OUT)
en = Pin(18, Pin.OUT)
# ==== Initialized IIC OLED ====
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# ==== OLED ====
def display_motor_status(status, direction, speed):
oled.fill(0) # clear
oled.text("=== MOTOR ===", 0, 0)
oled.text("Status: " + status, 0, 20)
oled.text("Direction: " + direction, 0, 35)
oled.text("Speed: " + speed, 0, 50)
oled.rotate(1)
oled.show()
while True:
en.value(0) # enable stepper
dir.value(not dir.value()) # switch direction
dir_str = "CW" if dir.value() == 0 else "CCW"
display_motor_status("RUNNING", dir_str, "1200us")
for _ in range(800): # 180 度对应步数
step.value(1)
time.sleep_us(1200)
step.value(0)
time.sleep_us(1200)
en.value(1) # disable stepper
display_motor_status("STOPPED", dir_str, "1200us")
print("rotated! now reverse")
time.sleep(1)保存代码。
效果演示
Thonny IDE 运行 stepper_run.py 程序;
步进电机顺时针、逆时针交替旋转;


方向切换时,终端打印提示字符串;
OLED 显示步进电机参数和运行状态,包括停止/运行、方向CW/CCW、转速等;


总结
本文介绍了树莓派 Pico 扩展板的项目设计,包括原理图、PCB设计、3D渲染、BOM器件焊接、步进电机驱动测试、OLED 显示测试等,为相关产品的快速开发和应用设计提供了参考。
我要赚赏金
