以前的实验我们实验过了单个pca9685驱动板,同时驱动多个舵机的实验;但是有些情况下,可能一个板子无法满足我们的驱动需求;我们知道一个板子最大可驱动16个舵机,但是如果我们想同时驱动 17个舵机,这个时候就遇到问题;本篇文章就实验一下如何解决这个问题。
为了解决这个问题,先得解决地址冲突问题;因为板子默认地址都是0x40,那么我们无法辨别哪个是哪个板子,这个时候就需要修改板子的地址;如下图:
地址修改后,连接树莓派,执行如下命令:
可见下图,由于树莓派连接了两个pca9685驱动板,所以可见两个地址,分别为0x40和修改地址后的0x41;
#解决地址冲突后,接下来看一下树莓派如何同时接多块板子,见下图:
由上图可见,由于板子默认没有焊接尾部扩展针脚,因此需要我们先焊接针脚;然后用杜邦线连接第二个板子;电源部分两者共用即可。
#实验代码:
#coding:utf-8
'''
from JiuJiang
树莓酱的操作实例
http:://www.shumeijiang.com
'''
import time
from board import SCL, SDA
import busio
from adafruit_pca9685 import PCA9685
from adafruit_motor import servo
#引入i2c
i2c = busio.I2C(SCL, SDA)
#控制第一块板子
pca = PCA9685(i2c, address=0x40) #地址可以修改 默认0x40
pca.frequency = 50
print("执行第一块板子")
for i in [0]:
servo_o = servo.Servo(pca.channels[i]) #i是舵机在pca9685上的编号
#设置脉冲宽度 500到2500是正常的 这个可以自己调整 不设置默认只到135度
servo_o.set_pulse_width_range(min_pulse=500, max_pulse=2500)
#先0度
servo_o.angle = 0
time.sleep(1)
#再执行90度
servo_o.angle = 90
time.sleep(1)
#再执行180度
servo_o.angle = 180
time.sleep(1)
#再恢复90度
servo_o.angle = 90
time.sleep(1)
pca.deinit()
#控制第二块板子
pca = PCA9685(i2c, address=0x41)
pca.frequency = 50
print("执行第二块板子")
for i in [0, 1]:
servo_o = servo.Servo(pca.channels[i]) #i是舵机在pca9685上的编号
#设置脉冲宽度 500到2500是正常的 这个可以自己调整 不设置默认只到135度
servo_o.set_pulse_width_range(min_pulse=500, max_pulse=2500)
#先0度
servo_o.angle = 0
time.sleep(1)
#再执行90度
servo_o.angle = 90
time.sleep(1)
#再执行180度
servo_o.angle = 180
time.sleep(1)
#再恢复90度
servo_o.angle = 90
time.sleep(1)
pca.deinit()
#实验效果,可见三个舵机依次转动,如下图:
2条评论