树莓派4B-PCA9685驱动舵机

4b,pca9685 · 浏览次数 : 35

小编点评

前言 在某些情况下,使用树莓派的引脚直接输出PWM控制舵机会导致舵机出现抖动现象。为了解决这个问题,本文将介绍如何使用PCA9685模块来驱动舵机。PCA9685是一款常用的PWM驱动器芯片,可以控制多达16路PWM输出,具有12位分辨率、内部振荡器、可编程频率等特点。 1. PCA9685模块简介 PCA9685是一种常用的PWM驱动器芯片,可以控制舵机、电机和其他需要精确控制的设备。该芯片可以通过I2C总线与微控制器或单片机通信,实现多路PWM信号的生成和控制。PCA9685具有以下特点: * 16路PWM输出 * 12位分辨率 * 内部振荡器,产生稳定25MHz的时钟信号 * 可编程频率,范围从24Hz到1526Hz * I2C接口,方便集成到各种微控制器系统中 * 强大的输出驱动能力,可直接驱动舵机或其他负载 2. 连接方式 要使用PCA9685驱动舵机,需要按照以下步骤进行连接: * 将PCA9685的绿端VCC和GND与电池的正负极相连 * 将PCA9685控制端的GND和VCC与树莓派的3.3v(pin1)和GND(pin9)相连 * 将PCA9685的SCL和SDA与树莓派的SCL0(pin5)以及SDA0(pin3)相连 3. 安装驱动及测试程序 为了使用PCA9685驱动舵机,需要先安装相应的驱动库。在树莓派终端输入以下命令安装adafruit-circuitpython-pca9685和adafruit-circuitpython-motor: ``` pip3 install adafruit-circuitpython-pca9685 pip3 install adafruit-circuitpython-motor ``` 接下来,可以编写一个简单的测试程序来验证PCA9685的工作状态。以下是一个示例程序,用于控制舵机角度从0度到180度,并以1度为间隔进行旋转: ```python import time import board from adafruit_motor import servo # 创建一个简单的语音识别实例 pca = PCA9685(i2c) # 设置PWM频率 pca.frequency = 50 # 设置舵机角度并运行循环 for angle in range(180): servo_angle = angle / 180 * 180 pca.servo_angle = servo_angle time.sleep(0.03) ``` 通过以上步骤和示例程序,可以学会如何使用PCA9685模块驱动舵机,避免舵机抖动问题。

正文

前言

不知道你们有没有遇到过这么一种情况,直接用树莓派的引脚输出PWM控制舵机,舵机是会出现抖动的。就算代码进行一定的时延迟优化还是会有影响的。

现在我们可以使用PCA9685这个模块去驱动舵机。

PCA9685 是一种常用的 PWM(脉冲宽度调制)驱动器芯片,通常用于控制舵机、电机和其他需要精确控制的设备。该芯片可以通过 I2C 总线与微控制器或单片机通信,以实现对多路 PWM 信号的生成和控制。

16 路 PWM 输出:PCA9685 可以同时控制最多 16 路 PWM 输出,每路输出的占空比都可以独立设置,但是16路PWM频率一样。

12 位分辨率:PCA9685 提供了 12 位分辨率的 PWM 输出,可以实现精细的输出控制。

内部振荡器:芯片内部集成了振荡器,可以产生稳定25MHz的时钟信号,无需外部晶振。

可编程频率:可以通过配置寄存器来设置 PWM 输出的频率,范围从 24 Hz 到 1526 Hz。

I2C 接口:使用标准的 I2C 串行总线接口与主控设备通信,方便集成到各种微控制器系统中。

输出驱动能力:每路 PWM 输出都具有较强的驱动能力,可以直接驱动舵机或者其他负载。

接线

  1. PCA9685绿端VCC和GND要和电池的正负极相连。
  2. PCA9685控制端的GND和VCC和树莓派的3.3v(pin1)和GND(pin9)相连。
  3. PCA9685的SCL和SDA和树莓派的SCL0(pin5)以及SDA0(pin3)相连。

安装PCA9685驱动

adafruit/Adafruit_CircuitPython_PCA9685: Adafruit CircuitPython driver for PCA9685 16-channel, 12-bit PWM LED & servo driver chip. (github.com)

在树莓派终端输入:

pip3 install adafruit-circuitpython-pca9685

或者输入:

sudo pip3 install adafruit-circuitpython-pca9685

如果只是想下载虚拟环境到你当前的项目里可以:

mkdir project-name && cd project-name
python3 -m venv .venv
source .venv/bin/activate
pip3 install adafruit-circuitpython-pca9685

安装Motor驱动

adafruit/Adafruit_CircuitPython_Motor: Helpers for controlling PWM based motors and servos (github.com)

在树莓派终端输入:

pip3 install adafruit-circuitpython-motor

或者输入:

sudo pip3 install adafruit-circuitpython-motor

如果只是想下载虚拟环境到你当前的项目里可以:

mkdir project-name && cd project-name
python3 -m venv .venv
source .venv/bin/activate
pip3 install adafruit-circuitpython-motor

测试程序

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

import time
import board
from adafruit_motor import servo
from adafruit_pca9685 import PCA9685

i2c = board.I2C()  # uses board.SCL and board.SDA
# i2c = busio.I2C(board.GP1, board.GP0)    # Pi Pico RP2040

# Create a simple PCA9685 class instance.
pca = PCA9685(i2c)
# You can optionally provide a finer tuned reference clock speed to improve the accuracy of the
# timing pulses. This calibration will be specific to each board and its environment. See the
# calibration.py example in the PCA9685 driver.
# pca = PCA9685(i2c, reference_clock_speed=25630710)
pca.frequency = 50

# To get the full range of the servo you will likely need to adjust the min_pulse and max_pulse to
# match the stall points of the servo.
# This is an example for the Sub-micro servo: https://www.adafruit.com/product/2201
# servo7 = servo.Servo(pca.channels[7], min_pulse=580, max_pulse=2350)
# This is an example for the Micro Servo - High Powered, High Torque Metal Gear:
#   https://www.adafruit.com/product/2307
# servo7 = servo.Servo(pca.channels[7], min_pulse=500, max_pulse=2600)
# This is an example for the Standard servo - TowerPro SG-5010 - 5010:
#   https://www.adafruit.com/product/155
# servo7 = servo.Servo(pca.channels[7], min_pulse=400, max_pulse=2400)
# This is an example for the Analog Feedback Servo: https://www.adafruit.com/product/1404
# servo7 = servo.Servo(pca.channels[7], min_pulse=600, max_pulse=2500)
# This is an example for the Micro servo - TowerPro SG-92R: https://www.adafruit.com/product/169
# servo7 = servo.Servo(pca.channels[7], min_pulse=500, max_pulse=2400)

# The pulse range is 750 - 2250 by default. This range typically gives 135 degrees of
# range, but the default is to use 180 degrees. You can specify the expected range if you wish:
# servo7 = servo.Servo(pca.channels[7], actuation_range=135)
servo7 = servo.Servo(pca.channels[0])

# We sleep in the loops to give the servo time to move into position.
for i in range(180):
    servo7.angle = i
    time.sleep(0.03)
for i in range(180):
    servo7.angle = 180 - i
    time.sleep(0.03)

# You can also specify the movement fractionally.
fraction = 0.0
while fraction < 1.0:
    servo7.fraction = fraction
    fraction += 0.01
    time.sleep(0.03)

pca.deinit()

参考资料

Introduction — Adafruit motor Library 1.0 documentation (circuitpython.org)

Introduction — Adafruit PCA9685 Library 1.0 documentation (circuitpython.org)

与树莓派4B-PCA9685驱动舵机相似的内容:

树莓派4B-PCA9685驱动舵机

直接用树莓派的引脚输出PWM控制舵机,舵机是会出现抖动的。就算代码进行一定的时延迟优化还是会有影响的。现在我们可以使用PCA9685这个模块去驱动舵机,做到高精度控制舵机。

树莓派安装向日葵教程

树莓派安装向日葵教程 Raspberry Pi版本:2024-03-15-raspios-bookworm-arm64-full.img 下载麒麟arm版本客户端 向日葵远程控制app官方下载 - 贝锐向日葵官网 安装依赖包 sudo apt-get update sudo apt-get inst

IoT 边缘集群基于 Kubernetes Events 的告警通知实现

背景 边缘集群(基于 树莓派 + K3S) 需要实现基本的告警功能。 边缘集群限制 CPU/内存/存储 资源紧张,无法支撑至少需要 2GB 以上内存和大量存储的基于 Prometheus 的完整监控体系方案(即使是基于 Prometheus Agent, 也无法支撑) (需要避免额外的存储和计算资源

[转帖]为非root用户添加NOPASSWD权限

https://www.jianshu.com/p/d1e71bda4b34 查看树莓派默认是怎么为pi用户免去密码 所有配置文件都在 /etc 目录下,免去密码配置文件也不例外。在/etc/sudoers.d/文件夹下可以看到有个 010_pi-nopasswd 文件 sudo cat 101pi

家庭实验室系列文章-如何迁移树莓派系统到更大的 SD 卡?

前言 其实这个专题很久很久之前就想写了,但是一直因为各种原因拖着没动笔。 因为没有资格,也没有钱在一线城市买房 (😂😂😂); 但是在要结婚之前,婚房又是刚需。 我和太太最终一起在一线城市周边的某二线城市买了房。 再之后,一起装修,她负责非电相关,我负责电 网相关的装修。 家庭组网,家庭实验室就

Part-DB 配置流程

介绍 Part-DB是一个开源的器件管理工具,博主用于管理个人的电子器材,最近捣鼓了一下这个工具,由于手头还有一块闲置的赛昉·星光2的开发板,所以我打算一起拿来捣鼓一下,如果不成功,就用树莓派(生气) 1.安装 大家可以直接按照 官方安装指导 来安装即可,我也是参考官方的。 (1)安装docke

[转帖]Debian开启SSH

一、Debian开启SSH 参考链接: https://blog.csdn.net/zzpzheng/article/details/71170572 https://help.aliyun.com/knowledge_detail/41486.html 树莓派的Debian从8.0开始,默认关闭了

玩转 PI 系列-如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?

## 概述 618 买了几个便宜的 [Purple PI OH 开发板](http://www.industio.cn/product-item-37.html) (500 块多一点买了 3 个🤑), 这个开发板类似树莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片。如

@Autowired和@Resource有哪些区别

一、注解的作用 @Autowired和@Resource都是用来实现Bean的自动注入功能。 二、@Autowired和@Resource的区别 1、所属的包不同 @Autowired是Spring的注解。 @Resource是JSR-250的注解。 IDEA 有时候会在 @Autowired 注解

Spring的三种依赖注入的方式

1、什么是依赖注入 依赖注入(Dependency Injection,简称DI),是IOC的一种别称,用来减少对象间的依赖关系。 提起依赖注入,就少不了IOC。 IOC(Inversion of Control,控制反转)是一种设计思想,它将原本在程序中手动创建对象的控制权,交由Spring框架来