回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

【LattePanda Mu 开发套件】步进电机驱动板 PCB 设计 简单

头像 无垠的广袤 2025.11.02 14 0

【LattePanda Mu 开发套件】步进电机驱动板 PCB 设计

本文介绍了 LattePanda Mu 开发套件步进电机扩展板 PCB 设计,包括参数特点、效果展示、原理图、实物验证、工程测试等。

PCB 工程详见:LattePanda Mu 步进电机驱动板 - 立创开源硬件平台 .

项目介绍

LattePanda Mu 开发板为主控,运行 LabVIEW 上位机实现步进电机驱动控制及数据采集。

参数特点

RP2350 高性能 MCU 主控,为步进电机提供精准控制;

五线步进电机接口,便于快速模块化连接;

步进电机运行指示 LED,显示实时驱动顺序和状态;

ULN2003 达林顿放大驱动芯片,支持 5V-12V 宽输入电压;

多排电源支持,便于扩展和集成更多外设资源;

4 线 OLED 和 7 线 TFT 接口,支持单色和彩色屏显示系统运行的实时状态;

UART、ADC、IIC、SPI 接口,丰富的接口为外设连接提供支持;

DHT11 传感器接口,监控环境温湿度信息,以便调整相关参数;

支持 直插贴片 两种安装方式,适应不同测试需求;

支持 Battery 接口,便于外接锂电池使用,为便携和低功耗设备提供了有利支持;

OLED、TFT、DHT11 的 VCC 供电处增加 100nF 滤波电容,提升抗干扰能力;

支持 3D 外壳,确保 PCB 金属引脚电气隔离和美观;

大供电过孔,内径20mil,外径40mil,确保供电线宽,减少发热,保障电路安全;

……

原理图

SCH_ExpansionBoard.jpg

原理图主要包括如下模块

GPIO 排针;

步进电机驱动:快接插头、ULN2003 芯片、状态指示灯等;

通信接口:包括 UART、IIC、SPI、ADC 等;

显示屏:包括四线 OLED、TFT 彩屏;

传感器:支持 DHT11 模块;

电源供电:支持 3V3、5V 以及 3.7V 锂电池供电。

PCB

Top view

PCB_topview.jpg

Bottom view

PCB_bottomview.jpg

外壳

expansion_board.jpg

引脚及接口精准开孔;

步进电机驱动芯片侧边打孔设计,便于散热;

步进电机运行指示 LED 侧边开槽设计,便于观察指示灯状态;

功能分布

PCB_Pinout.jpg

参数特点

RP2350 高性能 MCU 主控,为步进电机提供精准控制;

五线步进电机接口,便于快速模块化连接;

步进电机运行指示 LED,显示实时驱动顺序和状态;

ULN2003 达林顿放大驱动芯片,支持 5V-12V 宽输入电压;

多排电源支持,便于扩展和集成更多外设资源;

4 线 OLED 和 7 线 TFT 接口,支持单色和彩色屏显示系统运行的实时状态;

UART、ADC、IIC、SPI 接口,丰富的接口为外设连接提供支持;

DHT11 传感器接口,监控环境温湿度信息,以便调整相关参数;

支持 直插贴片 两种安装方式,适应不同测试需求;

支持 Battery 接口,便于外接锂电池使用,为便携和低功耗设备提供了有利支持;

OLED、TFT、DHT11 的 VCC 供电处增加 100nF 滤波电容,提升抗干扰能力;

支持 3D 外壳,确保 PCB 金属引脚电气隔离和美观;

大供电过孔,内径20mil,外径40mil,确保供电线宽,减少发热,保障电路安全;

……

实物展示

board-step-motor.jpg

五线 28BYJ-48 步进电机接入板载 XH2.54 快插底座;

供电可使用板载 5V 引脚,或外接共地 12-24V 直流电源供电,注意提供匹配的电压以驱动步进电机。

工程测试

LattePanda Mu 通过 USB 数据线连接开发板,通过 LabVIEW 上位机串口发送旋转角度和速度控制步进电机精确转动。

代码

 

见底部。

 

效果

不带外壳

rotate_pcb.gif

 

加上外壳

rotate_shell.gif

 

总结

本文介绍了 LattePanda Mu 开发套件步进电机扩展板 PCB 设计,包括原理图、PCB 展示、外壳设计、参数特点、效果展示、实物验证、工程测试等,为 LattePanda Mu 系列产品的开发设计提供了参考。

代码
'''
Name: Stepper Motor rotate custom angle from serial and OLED display
Version: v1.0
Date: 2025.11
Author: ljl
Other: Rotate stepper motor (28byj-48) for custom angle from UART, and OLED display the motor state in moving or steady.
Hardware connect:
8 ---- IN1 (ULN2003)
9 ---- IN2 (ULN2003)
18 ---- IN3 (ULN2003)
19 ---- IN4 (ULN2003)
4 ---- SDA (OLED_SSD1306)
5 ---- SCL (OLED_SSD1306)
'''
​
from machine import Pin, I2C
import ssd1306 # OLED
import utime
​
# ==== 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)
​
# display the motor state
def display_motor(angle,state):
    oled.fill(0)  # 清屏
    oled.text("Rotate Angle: ", 0, 0)
    oled.text("{:.1f} deg".format(angle), 20, 15)
    oled.text("State: ", 0, 35)
    if state == 1:
        oled.text("Rotating ...", 20, 50)
    elif state == 0:
        oled.text("Reset", 20, 50)
    else:
        oled.text("Error", 20, 50)
    oled.rotate(0) # rotate the screen display for a more comfortable position
    oled.show()
​
# 电机控制引脚
coils = [
    Pin(8, Pin.OUT),  # A相 (IN1)
    Pin(9, Pin.OUT),  # B相 (IN2)
    Pin(18, Pin.OUT),  # C相 (IN3)
    Pin(19, Pin.OUT)   # D相 (IN4)
]
​
# 四相八拍步进电机的相序
STEP_SEQ = [
    [1, 0, 0, 1],  # AB'
    [1, 0, 0, 0],  # A
    [1, 1, 0, 0],  # AB
    [0, 1, 0, 0],  # B
    [0, 1, 1, 0],  # BC
    [0, 0, 1, 0],  # C
    [0, 0, 1, 1],  # CD
    [0, 0, 0, 1]   # D
]
​
# 驱动电机旋转指定步数;delay_ms 步间延时(ms),控制转速
def step_motor(steps, delay_ms=1):
    direction = 1 if steps >=0 else -1
    for _ in range(abs(steps)):
        for phase in range(8)[::direction]:  # 方向控制
            for coil, state in zip(coils, STEP_SEQ[phase]):
                coil.value(state)
            utime.sleep_ms(delay_ms)
​
# 角度控制
def rotate_angle(angle):
    steps_per_rev = 509  # 64步/拍 × 8拍 × 8相位
    steps = int(angle * (steps_per_rev / 360))
    display_motor(angle,1)
    step_motor(steps)
    
​
# 释放电机扭矩
def release():
    for coil in coils:
        coil.value(0)
    display_motor(0,0)
# main loop
display_motor(0,0) # initialize OLED display
while True:
    #rotate_angle(1) # 以单步方式持续转动
    rotate_angle(180) # 逆时针
    release()
    utime.sleep_ms(2000)
    rotate_angle(-90) # 顺时针
    release()
    utime.sleep_ms(2000)

评论

user-avatar