这些是有关如何设置 MaaXBoard 以使用精确的 PWM 外部附加卡驱动多个伺服系统的分步说明。
目标是能够使用 Python 控制这些电机。我们将重用最初由Adafruit的 Tony DiCola 为 RaspberryPi 编写的代码(感谢 Tony)。只需进行少量修改,即可在 MaaXBoard 上运行一切。
首先在这里完成 MaaXBoard 无头设置。
除了电路板本身,我们还需要一些外部部件:
PCA9685伺服驱动器
外部控制将使用 PCA9685 芯片,该芯片允许利用单个 I2C 总线控制多达 16 个独立通道(即 16 个伺服)。有多个为 Raspberry Pi 制造的带有 PCA9685 的防护罩。我们可以使用Adafruit 的盾牌,或者作为替代方案WaveShare 的盾牌。
GPIO 适配器(可选)
由于 MaaxBoard 上的散热器非常高,如果您使用 WaveShare 的屏蔽罩,您可能还需要一个适配器来安装它。我们可以为树莓派使用GPIO 立管或直角 GPIO 适配器。这将允许“垂直”安装任何外部屏蔽,如果您在 MaaxBoard 散热器上安装了风扇,这将更加方便。
伺服电机
在为您的项目选择伺服电机的类型时,您需要注意您使用的电机类型。标准标签很少(SG90、MG90S、MG995、MG996R 等),但 PCA9685 兼容大多数变体。
一旦你有了所有的零件,你需要安装伺服驱动器并将伺服器连接到它上面。
注意:Adafruit 的防护罩与 Waveshare 的防护罩不同。Waveshare 版本使用板载 5V/3A 稳压器为舵机供电(最终使用电池作为备用电源),而 Adafruit 版本让您可以灵活地使用外部电源为舵机提供 5V 电压。如果您计划使用多个伺服系统(最多 16 个),Adafruit 版本可能是更好的选择,因为您不会直接从树莓电源 (5V) 为伺服系统供电。
连接屏蔽后,我们需要确保硬件已被识别。为此,我们需要安装i2ctools 包。通过 SSH 连接到您的开发板并安装软件包
sudo apt install i2c-tools
为了允许我们的用户在不使用 sudo 的情况下访问 i2c-dev hw,我们需要添加一个自定义规则。我们首先创建一个自定义规则文件
sudo touch /etc/udev/rules.d/50-i2c.rules
然后使用 nano 编辑器编辑文件:
sudo nano /etc/udev/rules.d/50-i2c.rules
并确保内容如下
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
现在我们将用户添加到“i2c”组并设置权限:
sudo adduser ebv i2c
sudo chmod g+rw /dev/i2c-*
sudo reboot
重新启动板后,通过 ssh 连接到它并检查是否检测到屏蔽。跑:
sudo i2cdetect -y 1
i2cdetect 的输出(对于 /dev/i2c-dev-1)应如下所示:
要将设备与 Python 一起使用,我们需要安装一些库。
sudo apt install git build-essential python-dev
要使用 Python 控制 GPIO 和 PWM,我们需要直接从 GitHub 下载 Adafruit 的三个库。创建一个工作文件夹并将库拉入其中。
cd ~/
mkdir example
cd example
git clone https://github.com/adafruit/Adafruit_Python_PureIO.git
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
安装树,以便您可以检查目录:
sudo apt install tree
现在打印目录树:
tree -d
示例目录的树应如下所示:
需要修改 Adafruit 库才能在 MaaxBoard 上运行。幸运的是,这只是一个小改动。像这样创建“测试”文件夹:
cd ~/
cd example
mkdir test
cd test
创建我们将用于我们的简单测试 Python 应用程序的实际 Python 库的符号链接:
ln -s ../Adafruit_Python_GPIO/Adafruit_GPIO/ .
ln -s ../Adafruit_Python_PureIO/Adafruit_PureIO/ .
ln -s ../Adafruit_Python_PCA9685/Adafruit_PCA9685/ .
注意:我们也可以编译和安装这些库(系统范围安装),但是这样做允许我们直接修改代码并逐个使用它。
现在我们需要修改 GPIO 库的两个文件,以确保 MaaXBoard 被识别为 linux 系统(就像它是 RaspberryPi 一样)。
要修改的两个文件是I2C.py和Platform.Py 。
使用 nano 打开 I2C.py:
cd Adafruit_GPIO
nano I2C.py
我们需要通过添加粗体的 elif 语句在 get_default_bus() (大约第 40 行)函数中添加一行:
elif plat == Platform.BEAGLEBONE_BLACK:
# Beaglebone Black has multiple I2C buses, default to 1 (P9_19 and P9_20).
return 1
elif plat == Platform.MAAXBOARD:
return 1
对于 Platform.py,我们需要再添加一个定义来选择 MAAXBOARD。还是在 test/Adafruit_GPIO 目录下,在 nano 中打开 Platform.py:
nano Platform.py
在下面添加粗体行(第 24 行附近):
# Platform identification constants.
UNKNOWN = 0
RASPBERRY_PI = 1
BEAGLEBONE_BLACK = 2
MINNOWBOARD = 3
JETSON_NANO = 4
MAAXBOARD = 5
在 def platform_detect() 函数中,添加粗线:
...
# Handle Beaglebone Black
# TODO: Check the Beaglebone Black /proc/cpuinfo value instead of reading
# the platform.
plat = platform.platform()
print(plat)
if plat.lower().find('armv7l-with-debian') > -1:
return BEAGLEBONE_BLACK
...
elif plat.lower().find('tegra-aarch64-with-ubuntu') > -1:
return JETSON_NANO
elif plat.lower().find('aarch64-with-debian') > -1:
return MAAXBOARD
...
最终 Platform.py 应如下所示:
现在我们准备使用 Adafruit 提供的示例之一。由于 Python 代码的可移植性,这里不需要修改。我们将simpletest.py文件复制到我们的测试目录中:
cd example
cp Adafruit_Python_PCA9685/examples/simpletest.py test
执行测试文件。
cd example/test
python ./simpletest.py
如果一切正常,您的伺服电机将移动,直到您使用 CTRL-C 退出脚本。
注意:在本例中,我们控制的是 N.0 通道,因此请确保将您的伺服器连接到屏蔽位置零的编号接头。
现在,您可以控制多个伺服电机,用于您的机械装配,例如云台变焦或电子动画或工业原型。当您计划在外部屏蔽上使用多个伺服时,请始终确保控制伺服类型和最大额定电流,最终添加一个专用于伺服屏蔽的特定电源。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !