多个PCA9685舵机驱动板一起执行实验(含地址修改)

多个PCA9685舵机驱动板一起执行实验(含地址修改)

    以前的实验我们实验过了单个pca9685驱动板,同时驱动多个舵机的实验;但是有些情况下,可能一个板子无法满足我们的驱动需求;我们知道一个板子最大可驱动16个舵机,但是如果我们想同时驱动 17个舵机,这个时候就遇到问题;本篇文章就实验一下如何解决这个问题。
    为了解决这个问题,先得解决地址冲突问题;因为板子默认地址都是0x40,那么我们无法辨别哪个是哪个板子,这个时候就需要修改板子的地址;如下图:
地址修改
 地址修改后,连接树莓派,执行如下命令:

i2cdetect -y 1
    可见下图,由于树莓派连接了两个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()
#实验效果,可见三个舵机依次转动,如下图:
jiujiang

2条评论

Ninecl 发布于下午7:08 - 2023年5月4日

你好,想请问一下导入包中board和busio分别都是什么包呀,pip可以直接下载的吗,感谢!

    jiujiang 发布于上午10:32 - 2023年5月30日

    驱动采用的CircuitPython,具体安装和使用可以参考我前面的文章:https://www.shumeijiang.com/2021/08/29/舵机的新驱动方式.html。

评论已关闭。

评论已关闭。