树莓派电机驱动板

一、概述

这是基于树莓派制作运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供4路全速PWM控制,可以控制4路舵机。自带稳压电路,直接为树莓派提供稳定的供电电源。

树莓派电机驱动板

树莓派(Raspberry Pi)没有足够的PWM引脚,使用基于I2C通讯的专用PWM驱动芯片(PCA9685)控制电机的速度和方向可以节省更多的树莓派资源。只用2根GPIO引脚(SDA&SCL)就可以驱动多个电机,也可以多个驱动器叠加使用(可级联),并且不干扰其他I2C设备的使用。

树莓派电机驱动板
树莓派驱动器V5.0版接口图示

参数说明:

  • 每路2.5A(3.6A峰值)输出,可运行4.5-13.5V直流电机;
  • 可以驱动4个直流电机或2路步进电机;
  • 额外提供8路PWM输出,可以控制8路舵机;
  • 自带稳压电路,直接为树莓派提供稳定5V电源;
  • 可自定义I2C地址,支持多个驱动器叠加级联;
  • 提供完整的代码库和丰富示例程序(Python),简单易用。

二、电源说明

  • 因为驱动器需要同时为电机和树莓派提供电源,建议使用动力电池作为电源。供电电压为6-12V;
  • 电机通过供电电源直接供电,所以电机的输入电压等于外接电源电压;
  • 驱动器内置稳压模块,输出5V2A为树莓派和4路PWM(舵机)供电;
  • 可以通过跳线选择不同的供电方式。

三、软件安装与说明

驱动器是基于树莓派运行在linux环境,驱动器提供Python类库(Python library)和相关示例代码。

首先需要使树莓派的I2C处于Enable(详细配置请参考网上资料)

*运行 apt-get install python-smbus git 安装smbus库

将代码上传到树莓派(比如 “/home/pi”),再尝试运行examples目录下的示例。

*如果提示没有找到类库,请配置相关的库文件,或者直接拷贝列库文件到当前目录下。

以ubuntu系统演示配置:

1.安装raspi-config

sudo apt update
sudo apt install raspi-config

2.运行配置工具

sudo raspi-config

  1. 导航到I2C设置
    • 选择 “Interface Options”
    • 选择 “I2C”
    • 选择 “Yes” 启用
    • 确认后退出

1、控制直流电机(DC motor)

a)连接电机

驱动板上 有4组电机接线柱分别为M1, M2, M3, 和 M4。如果运行DCTest.py示例,请将电机连接到M3接口。然后运行如下命令:

sudo python DCTest.py

#!/usr/bin/python
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor

import time
import atexit

# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x50)

# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
  mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE)

atexit.register(turnOffMotors)

################################# DC motor test!
myMotor = mh.getMotor(3)

# set the speed to start, from 0 (off) to 255 (max speed)
myMotor.setSpeed(150)
myMotor.run(Adafruit_MotorHAT.FORWARD);
# turn on motor
myMotor.run(Adafruit_MotorHAT.RELEASE);


while (True):
  print "Forward! "
  myMotor.run(Adafruit_MotorHAT.FORWARD)

  print "\tSpeed up..."
  for i in range(255):
    myMotor.setSpeed(i)
    time.sleep(0.01)

  print "\tSlow down..."
  for i in reversed(range(255)):
    myMotor.setSpeed(i)
    time.sleep(0.01)

  print "Backward! "
  myMotor.run(Adafruit_MotorHAT.BACKWARD)

  print "\tSpeed up..."
  for i in range(255):
    myMotor.setSpeed(i)
    time.sleep(0.01)

  print "\tSlow down..."
  for i in reversed(range(255)):
    myMotor.setSpeed(i)
    time.sleep(0.01)

  print "Release"
  myMotor.run(Adafruit_MotorHAT.RELEASE)
  time.sleep(1.0)

b)DC motor 示例详解

创建MotorHAT对象,并设置I2C的地址,默认地址是0x50(详细设置地址参考后面的内容)

mh = Adafruit_MotorHAT(addr=0x50)

创建 DC motor 对象

MotorHAT 有一个 getMotor(num)方法,num为1~4。

myMotor = mh.getMotor(3)

设置电机旋转速度

myMotor.setSpeed(150)

setSpeed(speed)

speed :0 (off)~ 255 (maximum!).

*speed取值是0到255,速度是个相对值,跟供电电压有关。

设置DC Motor 方向

myMotor.run(Adafruit_MotorHAT.FORWARD)

 run(direction)

direction 定义如下:

  • Adafruit_MotorHAT.FORWARD – DC motor spins forward
  • Adafruit_MotorHAT.BACKWARD – DC motor spins forward
  • Adafruit_MotorHAT.RELEASE – DC motor is ‘off’, not spinning but will also not hold its place.

2、使用步进电机(Stepper Motors)(V5版暂未更新,不支持步进电机)

驱动板可以同时接2个步进电机,单极和双极都可适用。树莓派电机驱动板

a)连接电机Stepper Motors

树莓派电机驱动板

上图中左为双极驱动Bipolar stepper motors(4线),右为单极驱动Unipolar Stepper Motor(6线)

  • 单极驱动Unipolar Stepper Motor(6线): 首先需要知道哪根线是中心线,然后将中心线都接到接线柱的GND(右图白色和黄色),剩下的两组端线(黑和绿,红和蓝)分别接到M1、M2或M3、M4。
  • 双极驱动Bipolar stepper motors(4线): 跟单极驱动类似,GND留空不接就可以。

StepperTest.py 示例

将步进电机连接到 M1、M2,在examples目录下运行:

#!/usr/bin/python
#import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_Stepper 
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_StepperMotor

import time
import atexit

# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT()

# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
  mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE)
  mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE)

atexit.register(turnOffMotors)

myStepper = mh.getStepper(200, 1)  	# 200 steps/rev, motor port #1
myStepper.setSpeed(30)  		# 30 RPM

while (True):
  print("Single coil steps")
  myStepper.step(100, Adafruit_MotorHAT.FORWARD,  Adafruit_MotorHAT.SINGLE)
  myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.SINGLE)

  print("Double coil steps")
  myStepper.step(100, Adafruit_MotorHAT.FORWARD,  Adafruit_MotorHAT.DOUBLE)
  myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.DOUBLE)

  print("Interleaved coil steps")
  myStepper.step(100, Adafruit_MotorHAT.FORWARD,  Adafruit_MotorHAT.INTERLEAVE)
  myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.INTERLEAVE)

  print("Microsteps")
        myStepper.step(100, Adafruit_MotorHAT.FORWARD,  Adafruit_MotorHAT.MICROSTEP)
        myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.MICROSTEP)

b)示例详解

创建MotorHAT对象,并设置I2C的地址,默认地址是0x50(详细设置地址参考后面的内容)

mh = Adafruit_MotorHAT(addr=0x50)

创建 Stepper motor object

myStepper = mh.getStepper(200, 1) # 200 steps/rev, motor port #1

getStepper(steps, portnum)

steps :每一转多少步(通常35~200之间)

portnum :1~2,Port #1 is M1 and M2, port #2 is M3 and M4

设置速度,每分钟转速(RPM)

myStepper.setSpeed(30) # 30 RPM

setSpeed() 设置速度,每分钟转速(RPM)

step() – blocking steps

stepper1.step(100, Adafruit_MotorHAT.FORWARD, Adafruit_MotorHAT.SINGLE)

step(numberofsteps, direction, type)

numbersteps:步数

direction:FORWARD or BACKWARD

type:SINGLE, DOUBLE, INTERLEAVE or MICROSTEP

*关于步进电机工作特性请参考网上资料。

Using “Non-blocking” oneStep()

oneStep(direction, stepstyle) 单步执行

3、舵机控制

驱动板的舵机控制通过PWM专用芯片PCA9685实现,对应的编号分别为0-7。由于市面上普通舵机通常只支持50Hz的信号,所以pwm.setPWMFreq(50)频率控制在50左右。

from Adafruit_PWM_Servo_Driver import PWM
import time

# Initialise the PWM device using the default address
pwm = PWM(0x50,debug = False)

servoMin = 150  # Min pulse length out of 4096
servoMax = 600  # Max pulse length out of 4096

def setServoPulse(channel, pulse):
  pulseLength = 1000000.0                   # 1,000,000 us per second
  pulseLength /= 50.0                       # 50 Hz
  print "%d us per period" % pulseLength
  pulseLength /= 4096.0                     # 12 bits of resolution
  print "%d us per bit" % pulseLength
  pulse *= 1000.0
  pulse /= (pulseLength*1.0)
# pwmV=int(pluse)
  print "pluse: %f  " % (pulse)
  pwm.setPWM(channel, 0, int(pulse))


# Angle to PWM
def write(servonum,x):
  y=x/90.0+0.5
  y=max(y,0.5)
  y=min(y,2.5)
  setServoPulse(servonum,y)

pwm.setPWMFreq(50)                        # Set frequency to 60 Hz

write(0, 90)
write(14, 120)

四、叠加级联

当觉得电机接口不够用时,可以多个驱动板级联使用。我们最多支持 4个驱动器叠加使用。

多个驱动器级联需要为每个驱动器设置唯一的I2C地址,默认地址是0x50。地址范围从0x50~0x53总共4个地址。

驱动板上有A0~A4总共5个跳线,焊接不同的跳线可以设置不同的地址。规则如下

Board 0: Address = 0x50 Offset = binary 0000 (默认全部为空)
Board 1: Address = 0x51 Offset = binary 0001 (只焊接A0)
Board 2: Address = 0x52 Offset = binary 0010 (只焊接A1)
Board 3: Address = 0x53 Offset = binary 0011 (同时焊接A0 & A1)

StackingTest.py是级联叠加的代码示例,关键部分是创建2个MotorHAT对象:

# bottom hat is default address 0x50
bottomhat = Adafruit_MotorHAT(addr=0x50)

# top hat has A0 jumper closed, so its address 0x61
tophat = Adafruit_MotorHAT(addr=0x61)

五、原理图和库程序下载

树莓派电机驱动板
树莓派驱动器V5.0版

原创文章,作者:奇果派工坊,如若转载,请注明出处:https://www.7gp.cn/archives/329

(16)
上一篇 2020年12月31日 下午3:02
下一篇 2021年1月4日 上午11:45

相关推荐

  • 奇果派S1机甲战车使用手册

    安装发射器 安装底座 底盘安装 《麦克纳轮V2底盘安装》 麦克纳姆轮车架底盘安装请访问以上链接 集成版底盘车架的安装 发射器接线注意事项: 发射器电流比较大,电源供电功率需要足够大…

    2021年1月11日
  • 机械臂麦克纳姆轮V2.0版小车安装说明

    程序下载:Arduino巡线示例代码 《MEARM机械臂安装教程》 小车机械臂安装机手册,请访问以上文章链接,安装机械臂。机械臂无需底座,可从Step 4开始。 《麦克纳姆轮小车V…

    2021年1月12日
  • 麦克纳姆轮小车V2版安装说明

    《V2金属版麦克纳姆轮小车安装视频》 金属版麦轮小车请点击以上链接查看 一、概述 二、开始安装 电机线焊接/连接 安装电机支架和电机 安装侧板和顶盖 先确认好顶部盖板需要安装哪些东…

    2021年1月8日
  • MotorShiled电机驱动器 – Arduino

    这是基于Arduino开发运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供8路全速PWM控制,可以控制8路舵机。支持PS2无线手柄,充分发挥PS2手柄的强大功能。

    2024年11月6日
  • MotorShield电机驱动器 – Mixly/Mind+图形化编程

    此篇文章主要介绍如何使用米思奇图形化编程的插件下载、安装和使用

    2024年11月5日
  • MeArm机械臂安装教程

    我们将在这里介绍最新版机械臂的安装方法。这个版本的机械臂经过多次更新和改良,结构更加合理。适合用于机械和电子方面的入门学习、也可以作为毕业论文设计的材料。 Step 1: 对舵机进…

    2020年12月29日
  • Arduino新手程序安装三板斧

    什么是Arduino Arduino是全球流行的开源硬件,也是一个优秀的硬件开发平台。落实到具体,就是一个开发环境【软件】(Arduino IDE)和一块单片机开发板(常用的Ard…

    2021年1月12日
  • 智能车调试开发教程

    1.教程目标 本期教程的目标是为了实现:利用Mixly米思奇图形编码来驱动遥小车及其附加组件。 2.安装插件 2.1下载插件 2.2安装插件 下载后的插件如图所示 打开米思奇,选择…

    2023年12月3日
  • MotorShiled电机驱动器 – 扩展板

    该线路板是奇果派自研的一款电机驱动扩展解决方案,可以驱动4个直流电机或2个步进电机,并且额外提供8路全速PWM控制,可以控制8路舵机。

    2024年10月28日
  • 16路PWM舵机驱动板(PCA9685)的使用说明(更新中)

    一、概述 用Arduino类库驱动舵机并不是一件难事,如果需要驱动很多电机,就需要要占用更多的引脚,也会影响到Arduino的处理能力。专门的舵机驱动板很好的解决了这个问题。 此舵…

    2021年1月4日