如何用Raspberry Pi 3 B+同时独立控制4台及以上步进电机?
树莓派3 B+控制多台28BYJ-48步进电机的解决方案
核心结论
树莓派3 B+完全可以同时独立控制4台甚至更多的28BYJ-48步进电机(搭配ULN2003驱动板),只要解决GPIO引脚不足的问题,同时完成正确的接线和控制逻辑即可。
基础接线逻辑(单台电机)
28BYJ-48搭配ULN2003驱动板的接线非常直接:
- 驱动板
VCC接树莓派5V引脚(必须用5V,3.3V带不动电机) - 驱动板
GND接树莓派GND引脚 - 驱动板
IN1-IN4分别接树莓派的4个空闲GPIO引脚(比如GPIO17、27、22、10)
解决GPIO引脚不足的方案
单台电机需要4个GPIO,4台就是16个,树莓派3 B+的GPIO虽然够,但如果后续要扩展其他模块,用IO扩展芯片是更高效的选择,推荐两种:
- PCF8574:I2C接口,单芯片扩展8个GPIO,仅占用树莓派的SDA(GPIO2)和SCL(GPIO3)两个引脚,4台电机需要2个PCF8574就能提供16个控制引脚。
- MCP23017:I2C接口,单芯片直接扩展16个GPIO,一个芯片就能搞定4台电机的控制需求,更适合你的多电机场景。
MCP23017接线示例
- MCP23017的
VDD接树莓派3.3V,VSS接GND SDA接GPIO2,SCL接GPIO3A0-A2全部接地(设置I2C地址为0x20)- 4台电机的
IN1-IN4分别接到MCP23017的引脚:- 第一台:GPA0-GPA3
- 第二台:GPA4-GPA7
- 第三台:GPB0-GPB3
- 第四台:GPB4-GPB7
控制代码示例(Python)
用smbus2库控制MCP23017,实现多电机独立控制:
首先安装依赖:
sudo apt-get install python3-smbus2
示例代码:
from smbus2 import SMBus import time # MCP23017 I2C地址(A0-A2接地时为0x20) MCP_ADDR = 0x20 # 寄存器地址定义 IODIRA = 0x00 # 端口A方向寄存器(0=输出) IODIRB = 0x01 # 端口B方向寄存器 GPIOA = 0x12 # 端口A数据寄存器 GPIOB = 0x13 # 端口B数据寄存器 # 28BYJ-48单四拍步进序列 STEP_SEQ = [0x01, 0x02, 0x04, 0x08] # 初始化I2C总线(树莓派3 B+用总线1) bus = SMBus(1) # 设置端口A、B为输出模式 bus.write_byte_data(MCP_ADDR, IODIRA, 0x00) bus.write_byte_data(MCP_ADDR, IODIRB, 0x00) def rotate_motor(motor_id, steps): """ 控制指定电机旋转指定步数 motor_id: 0-3,对应4台电机 steps: 旋转步数(28BYJ-48一圈约4096步,八角转盘转一面需要512步) """ seq_idx = 0 for _ in range(steps): if motor_id == 0: bus.write_byte_data(MCP_ADDR, GPIOA, STEP_SEQ[seq_idx]) elif motor_id == 1: bus.write_byte_data(MCP_ADDR, GPIOA, STEP_SEQ[seq_idx] << 4) elif motor_id == 2: bus.write_byte_data(MCP_ADDR, GPIOB, STEP_SEQ[seq_idx]) elif motor_id == 3: bus.write_byte_data(MCP_ADDR, GPIOB, STEP_SEQ[seq_idx] << 4) seq_idx = (seq_idx + 1) % 4 time.sleep(0.001) # 调整转速,值越小越快,避免丢步 # 测试:让第1台电机转半圈 rotate_motor(0, 2048) # 测试:让第4台电机转一个八角面(1/8圈) rotate_motor(3, 512) # 关闭总线 bus.close()
关键注意事项
- 供电问题:4台28BYJ-48同时工作时总电流接近1A,树莓派自身5V引脚可能供电不稳,建议用外部5V电源给所有电机驱动板供电,树莓派和驱动板共地即可。
- 转速与丢步:代码中的
time.sleep(0.001)可以调整,过快会导致电机丢步,建议测试后找到适合的延迟值。 - 盲文映射:八角转盘每面对应一个盲文字符,可预先把字符和电机需要旋转的步数(比如512步/面)做成字典,方便快速调用。
内容的提问来源于stack exchange,提问作者Joti Gokaraju
相关产品推荐
相关产品推荐

