You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pHAT Stack单独控制多个Motor Bonnet驱动步进电机?

解决Raspberry Pi多Motor Bonnet单独控制步进电机的问题

问题根源

所有Motor Bonnet默认使用相同的I2C地址(0x60),树莓派发送的指令会被所有bonnet同时响应,导致同编号电机同步动作。

硬件修改:修改每块Bonnet的I2C地址

Adafruit Motor Bonnet基于PCA9685芯片,板上带有地址选择焊盘(标记为A0、A1、A2),通过焊接短路焊盘可修改地址:

  • 不焊接任何焊盘:默认地址 0x60
  • 焊接A0:地址变为 0x61
  • 焊接A1:地址变为 0x62
  • 焊接A0+A1:地址变为 0x63(如需更多设备可使用)

操作步骤:

  1. 断开树莓派所有电源,取下所有Motor Bonnet
  2. 给每块bonnet焊接对应焊盘(比如3块分别用0x60、0x61、0x62)
  3. 用pHAT Stack重新堆叠bonnet和树莓派,确保连接牢固

验证地址修改成功

通电后在树莓派终端执行命令:

i2cdetect -y 1

终端会显示所有已连接的I2C设备地址,确认0x60、0x61、0x62均存在即可。

软件实现:用Adafruit MotorKit库单独控制

首先确保库已安装:

pip3 install adafruit-circuitpython-motorkit

示例代码(单独控制6台步进电机):

from adafruit_motorkit import MotorKit

# 初始化三个不同地址的MotorKit实例
kit_default = MotorKit(address=0x60)  # 第一块bonnet(默认地址)
kit_a0 = MotorKit(address=0x61)       # 第二块bonnet(焊了A0)
kit_a1 = MotorKit(address=0x62)       # 第三块bonnet(焊了A1)

# 单独控制每台电机
# 第一块bonnet的stepper1正转一步
kit_default.stepper1.onestep()
# 第一块bonnet的stepper2反转一步
kit_default.stepper2.onestep(direction=False)

# 第二块bonnet的stepper1用双步模式正转
kit_a0.stepper1.onestep(style="double")
# 第二块bonnet的stepper2连续转动
kit_a0.stepper2.throttle = 0.5

# 第三块bonnet的stepper1反转连续转动
kit_a1.stepper1.throttle = -0.5
# 第三块bonnet的stepper2停止
kit_a1.stepper2.throttle = 0

注意事项

  • 焊接焊盘时使用细焊锡丝,避免短路其他引脚
  • 所有硬件操作必须在断电状态下进行,防止损坏设备
  • 如果使用非Adafruit品牌的Motor Bonnet,地址焊盘标记可能不同,但核心都是通过修改PCA9685芯片的ADDR引脚电平来改变I2C地址

内容的提问来源于stack exchange,提问作者nnahmed2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:45:38