这是基于树莓派制作运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供4路全速PWM控制,可以控制4路舵机。自带稳压电路,直接为树莓派提供稳定的供电电源。
 
树莓派(Raspberry Pi)没有足够的PWM引脚,使用基于I2C通讯的专用PWM驱动芯片(PCA9685)控制电机的速度和方向可以节省更多的树莓派资源。只用2根GPIO引脚(SDA&SCL)就可以驱动多个电机,也可以多个驱动器叠加使用(可级联),并且不干扰其他I2C设备的使用。
 树莓派驱动器V5.0版接口图示
树莓派驱动器V5.0版接口图示
参数说明:


驱动器是基于树莓派运行在linux环境,驱动器提供Python类库(Python library)和相关示例代码。
首先需要使树莓派的I2C处于Enable(详细配置请参考网上资料)
*运行 apt-get install python-smbus git 安装smbus库
将代码上传到树莓派(比如 “/home/pi”),再尝试运行examples目录下的示例。
*如果提示没有找到类库,请配置相关的库文件,或者直接拷贝列库文件到当前目录下。
a)连接电机
驱动板上 有4组电机接线柱分别为M1, M2, M3, 和 M4。如果运行DCTest.py示例,请将电机连接到M3接口。然后运行如下命令:
以下代码仅供参考阅读,请勿直接拷贝。如需运行示例,请下载程序
#!/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=0x60)
# 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的地址,默认地址是0x60(详细设置地址参考后面的内容)
创建 DC motor 对象
MotorHAT 有一个 getMotor(num)方法,num为1~4。
设置电机旋转速度
setSpeed(speed)
speed :0 (off)~ 255 (maximum!).
*speed取值是0到255,速度是个相对值,跟供电电压有关。
设置DC Motor 方向
run(direction)
direction 定义如下:
驱动板可以同时接2个步进电机,单极和双极都可适用。
a)连接电机Stepper Motors
 
上图中左为双极驱动Bipolar stepper motors(4线),右为单极驱动Unipolar Stepper Motor(6线)
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的地址,默认地址是0x60(详细设置地址参考后面的内容)
mh = Adafruit_MotorHAT(addr=0x60)
创建 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) 单步执行
驱动板的舵机控制通过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(0x60,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地址,默认地址是0x60。地址范围从0x60~0x63总共4个地址。
驱动板上有A0~A4总共5个跳线,焊接不同的跳线可以设置不同的地址。规则如下
Board 0: Address = 0x60 Offset = binary 0000 (默认全部为空)
  Board 1: Address = 0x61 Offset = binary 0001 (只焊接A0)
  Board 2: Address = 0x62 Offset = binary 0010 (只焊接A1)
  Board 3: Address = 0x63 Offset = binary 0011 (同时焊接A0 & A1)
StackingTest.py是级联叠加的代码示例,关键部分是创建2个MotorHAT对象:
Python示例程序和类库下载:Motor-HAT-Python3-Library-V5
 树莓派驱动器V5.0版
树莓派驱动器V5.0版 
出处:https://www.7gp.cn/archives/329
 
            串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
Raspberry Pi Build HAT 是一个扩展板,可连接到 Raspberry Pi 的 40 针 GPIO 接头,该接头是与 LEGO® Education 合作设计的,旨在使用 Raspberry Pi 计算机轻松控制 LEGO® Technic™ 电机和传感器。
 
            我们将用 Raspberry Pi 开始我们探索超级计算和科学编程科学领域的激动人心的旅程。
近日,全球规模最大、最具影响力的众筹平台Kickstarter就发售了这样一种全新形态的桌宠机器人——全球首款桌面级树莓派双轮足机器人XGO-Rider。
 
            这篇文章将为大家讲解有关树莓派如何设计3D打印外壳。
树莓派5 具有一些新特性,速度是树莓派 4B 的两倍多,并且是英国剑桥第一台自主设计芯片的树莓派计算机。
 
            最近香橙派推出了它们的香橙派3B、香橙派CM4、香橙派Zero2W,代号和树莓派一模一样。分别对标树莓派的树莓派3B、树莓派CM4、以及树莓派Zero2W。
 
            本文详细介绍了如何设置Raspberry Pi的网络打印机,改造USB打印机为无线打印机,搭建一个中心打印服务器。
 
            你怀恋小时候玩过的小霸王和街机游戏吗?使用RetroPie软件、树莓派和USB游戏控制器,不到一个小时,你就能重新捡起小时候玩过的游戏了:那些小时候没有打通的关,现在还有兴趣吗?
 
            Emo 是一款个人伴侣机器人,集时尚与创新于一身。他的诞生离不开最新的树莓派 4 技术和先进的设计。他不仅仅是一款机器人,更是一个活生生的存在。
 
            Minecraft Link使您能够通过 MCreator 程序、命令和 Minecraft mod 开发人员的通用 API 将 Arduino 和Raspberry Pi 等硬件设备与 Minecraft 游戏连接起来。