如何使用Arduino Servo库驱动伺服电机

电子说

1.3w人已加入

描述

概述

Arduino

使用Arduino Servo库驱动伺服电机非常简单,但是每个驱动器消耗一个宝贵的引脚-更不用说一些Arduino处理能力了。 Adafruit 16通道12位PWM/伺服驱动器仅需2个引脚即可在I2C上驱动多达16个伺服器。板载PWM控制器将同时驱动所有16个通道,而无需额外的Arduino处理开销。此外,您最多可以链接多达62个,其中的多达62个可以使用相同的2个引脚进行控制。

Adafruit PWM/Servo驱动程序是需要大量伺服的任何项目的完美解决方案。

Arduino

插脚

Arduino

在两侧有两组控制输入引脚。 销钉的两侧相同!使用任意一侧,也可以通过将两个并排连接起来轻松地进行链接

电源引脚

GND -这是电源和信号接地引脚,必须连接

VCC -这是逻辑电源引脚,请将其连接到要使用的逻辑电平对于PCA9685输出,最大应为3-5V!它也用于SCL/SDA上的10K上拉,因此,除非您有自己的上拉,否则它也要与微控制器的逻辑电平相匹配!

V + -这是一个可选的电源引脚,它将为伺服器提供分布式电源。如果您不使用伺服系统,则可以断开连接。芯片完全不使用它。您也可以从板顶部的2针端子排注入电源。如果使用伺服器,则应提供5-6VDC。如果必须的话,可以升高到12VDC,但是如果搞砸了,将VCC连接到V +,则可能会损坏电路板!

控制引脚

SCL -I2C时钟引脚,连接到您的微控制器I2C时钟线。可以使用3V或5V逻辑,并且对 VCC

SDA -I2C数据引脚具有弱上拉,连接到您的微控制器I2C数据线。可以使用3V或5V逻辑,并且对 VCC

OE 具有弱上拉-输出使能。可用于快速禁用所有输出。当此引脚为低时,所有引脚均启用 。当引脚为高时,输出禁用。默认情况下拉低,因此它是可选的引脚!

输出端口

有16个输出端口。每个端口都有3个引脚:V +,GND和PWM输出。每个PWM都完全独立地运行,但它们必须具有相同的PWM频率。也就是说,对于LED,您可能需要1.0 KHz,但伺服器需要60 Hz-因此,您不能将一半用于1.0 KHz的LED和一半用于60 Hz的LED。

它们已设置为用于伺服器,但您可以使用它们用于LED!每个引脚的最大电流为25mA。

所有PWM引脚均串联有220欧姆电阻,并且输出逻辑与 VCC 相同,因此在使用LED时要记住这一点。

程序集

《表类=“ build-table”》

Arduino

安装伺服接头连接器,将4个3x4针插头连接器安装在板边缘上标记的位置。

Arduino

焊接所有图钉它们很多!

Arduino

添加控制标头其中包含一个男性标头。您想在何处安装标头以及从哪方面看都取决于使用情况:

对于 面包板 使用,将接头连接器安装在电路板的底部。

要与 跳线 配合使用,将接头连接器安装在

要与我们的 6-pin电缆 配合使用,将插头安装在顶部

如果要链接多个驱动器板,则需要在两端都安装接头。

Arduino

安装电源端子如果要链接多个驱动器板,则只需要在电源端子上第一个。

连接

Arduino PWM/伺服驱动器使用I2C,因此只需4条线即可连接到Arduino:

“经典” Arduino接线:

+ 5v-》 VCC(这仅是用于突围的电源,不是伺服电源!)

GND-》 GND

模拟4-》 SDA

模拟5-》 SCL

大型Mega接线:

+ 5v-》 VCC(这仅是用于BREAKOUT的电源,而不是伺服电源!)

GND-》 GND

数字20-》 SDA

Digital 21-》 SCL

R3和更高版本的Arduino接线(Uno,Mega和Leonardo):

(这些开发板上的专用SDA和SCL引脚

+ 5v-》 VCC(这是仅用于BREAKOUT的电源,不是伺服电源!)

GND-》 GND

SDA-》 SDA

SCL-》 SCL

Arduino

VCC引脚只是芯片本身的电源。如果要连接使用V +引脚的伺服或LED,则也必须连接V +引脚。即使VCC为3.3V(芯片为5V安全),V +引脚也可以高达6V。我们建议通过蓝色接线端子连接电源,因为它受到极性保护。

Servos的电源

大多数伺服器设计为在5v或6v左右的电压下运行。请记住,许多同时运动的伺服器(尤其是大功率的伺服器)将需要大量电流。甚至微型伺服器在移动时也会消耗几百毫安。某些高转矩伺服器在负载下每个都会消耗超过1A的电流。

好的电源选择是:

5v 2A开关电源

5v 10A开关电源

4xAA电池座-6v,带有碱性电池。带有NiMH可充电电池的4.8v。

来自业余商店的4.8或6v可充电RC电池组。

使用Arduino 5v引脚为伺服器供电不是一个好主意。多余电流消耗会产生电气噪声和“掉电”现象,从而导致您的Arduino行为异常,复位和/或过热。

Arduino

在通孔电容器插槽中添加电容器我们在PCB上有一个用于焊接电解电容器的点。根据您的使用情况,您可能需要电容器,也可能不需要电容器。如果您使用大量的电源驱动伺服器,而伺服器在移动时会下降很多,那么 n * 100uF 其中 n 是伺服器的数量是一个不错的选择开始-例如 470uF 或更高(用于5个伺服器)。由于它非常依赖于伺服电流消耗,每个电动机上的转矩以及所用的电源,因此没有“一个神奇的电容器值”,我们可以建议这就是为什么我们在套件中不包括电容器的原因。

连接伺服器大多数伺服器带有标准的3针凹型连接器,可直接插入伺服驱动器的插头中。请确保插头与底部排的接地线(通常为黑色或棕色)和信号线(通常为黄色或白色)在顶部对齐。

Arduino

添加更多伺服系统一个板上最多可以连接16个伺服器。如果您需要控制16个以上的伺服器,则可以按下一页所述链接其他板。

Arduino

连锁驱动程序

可以链接多个驱动程序(最多62个)以控制更多伺服器。在板的两端都有插头,接线非常简单,就像将一根6针并行电缆从一块板连接到另一块板一样。

Arduino

寻址木板必须为链中的每个木板分配一个唯一的地址。这是通过板右上边缘的地址跳线完成的。每块板的I2C基址为0x40。使用地址跳线编程的二进制地址已添加到基本I2C地址中。

要编程地址偏移量,请使用一滴焊料桥接地址中每个二进制“ 1”的对应地址跳线。

Arduino

委员会0:地址= 0x40偏移量=二进制00000(无需跳线)

板1:地址= 0x41偏移量=二进制00001(如上图所示为桥A0)

板2:地址= 0x42偏移量=二进制00010(桥A1)

Board 3:地址= 0x43偏移=二进制00011(桥A0和A1)

Board 4:地址= 0x44偏移=二进制00100(桥A2)

等。

在您的草图中,您需要为每个板声明一个单独的pobject。在每个对象上调用begin,并通过其附加的对象控制每个舵机。例如:

下载:文件

复制代码

#include

#include

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);

Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

void setup() {

Serial.begin(9600);

Serial.println(“16 channel PWM test!”);

pwm1.begin();

pwm1.setPWMFreq(1600); // This is the maximum PWM frequency

pwm2.begin();

pwm2.setPWMFreq(1600); // This is the maximum PWM frequency

}

#include

#include

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);

Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

void setup() {

Serial.begin(9600);

Serial.println(“16 channel PWM test!”);

pwm1.begin();

pwm1.setPWMFreq(1600); // This is the maximum PWM frequency

pwm2.begin();

pwm2.setPWMFreq(1600); // This is the maximum PWM frequency

}

使用Adafruit库

由于PWM伺服驱动器是通过I2C控制的,因此它非常易于在任何微控制器或微计算机上使用。在本演示中,我们将展示如何将其与Arduino IDE一起使用,但是C ++代码可以轻松移植

安装Adafruit PCA9685库

要开始读取传感器数据,您将需要安装Adafruit_PWMServo库(我们的github存储库中的代码)。可以从Arduino库管理器中获得它,因此我们建议使用它。

从IDE中打开库管理器。..

Arduino

,然后输入 adafruit pwm 来查找库。点击安装

Arduino

我们还提供了有关Arduino库安装的出色教程,网址为:

http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

使用示例代码进行测试:

首先确保关闭了Arduino IDE的所有副本。

接下来打开Arduino IDE,然后选择文件-》示例-》 Adafruit_PWMServoDriver-》 Servo 。这将在IDE窗口中打开示例文件。

Arduino

如果使用Breakout:

按上一页所示连接驱动器板和伺服器。不要忘记为 Vin (3-5V逻辑电平)和 V + (5V伺服电源)提供电源。 检查绿色LED点亮!

如果使用屏蔽:

将屏蔽插入Arduino。别忘了,您还必须为V +接线盒提供5V。 红色和绿色的LED都必须点亮。

如果使用FeatherWing,请执行以下操作:

将FeatherWing插入羽毛中。别忘了,您还必须向V +接线端子提供5V。检查绿色LED点亮!

连接伺服器

单个伺服器应插入 PWM#0 端口(第一个端口)。您应该会在大约180度的范围内看到伺服器来回扫描。

校准Servos

Servo Pulsetiming在不同品牌和型号之间有所不同。由于它是模拟控制电路,因此同一品牌和型号的样本之间通常会有一些差异。为了进行精确的位置控制,您需要在代码中校准最小和最大脉冲宽度,以匹配伺服器的已知位置。

查找最小值:

使用示例代码,编辑SERVOMIN,直到扫描的低点到达最小行程范围。最好逐步解决此问题,并在达到行程的物理限制之前停止。

找到最大值:

再次使用示例代码,编辑SERVOMAX直到扫描的最高点达到最大旅行范围。同样,最好逐渐解决此问题,并在达到行程的物理限制之前停止。

调整SERVOMIN和SERVOMAX时要小心。达到行进的物理极限会剥夺齿轮并永久损坏您的伺服器。

从度数转换为脉冲长度 Arduino的“ map()”功能是在旋转度与校准的SERVOMIN和SERVOMAXpulse长度之间进行转换的简便方法。假设一个典型的伺服器可以旋转180度;将SERVOMIN校准到0度位置并将SERVOMAX校准到180度位置后,您可以使用以下代码行将0到180度之间的任意角度转换为相应的脉冲长度:

下载:文件

复制代码

pulselength = map(degrees, 0, 180, SERVOMIN, SERVOMAX); pulselength = map(degrees, 0, 180, SERVOMIN, SERVOMAX);

库参考

setPWMFreq(freq)

说明

此功能可用于调整PWM频率,该频率确定IC每秒产生多少个完整“脉冲”。换句话说,频率决定了每个脉冲从开始到结束的持续时间有多长,同时考虑了脉冲的高低段。

频率在PWM中很重要,因为将频率设置得太高,很小的占空比可能会引起问题,因为信号的“上升时间”(从0V变为VCC所需的时间)可能比信号有效的时间更长,并且PWM输出将变得平滑并可能甚至没有达到VCC,可能会导致许多问题。

参数

频率:一个数字,表示以Hz为单位的频率,介于40和1600

示例

以下代码将PWM频率设置为1000Hz:

下载:文件

复制代码

pwm.setPWMFreq(1000) pwm.setPWMFreq(1000)

setPWM(通道,打开,关闭) 说明

此功能on设置特定通道上PWM脉冲的高电平段的开始(开)和结束(关)。您可以在信号开启和关闭之间的0..4095之间指定“刻度”值。通道指示应使用新值更新16个PWM输出中的哪个。

参数

通道:应使用以下值更新的通道新值(0..15)

on :当信号应从低电平过渡到高电平时的滴答声(介于0..4095之间)

关闭:信号从高电平转换为低电平时的滴答声(介于0..4095之间)

示例

下面的示例将使通道15开始变低,在脉冲中变高25%左右(在4096中打勾1024),在脉冲中变低至75%变低(壁虱3072),并在脉冲的最后25%保持低电平:/p》

下载:文件

复制代码

pwm.setPWM(15, 1024, 3072) pwm.setPWM(15, 1024, 3072)

使用GPIO

还有一些用于完全打开或完全关闭插针的特殊设置

您可以将插针设置为完全打开或关闭n与

pwm.setPWM(pin, 4096, 0);

一起使用

pwm.setPWM(pin, 0, 4096);

可以将引脚设置为完全断开》

Python和CircuitPython

将PCA9685传感器与Python或CircuitPython以及Adafruit CircuitPython PCA9685模块一起使用很容易。此模块可让您轻松编写可通过此突破口控制伺服器和PWM的Python代码。

借助CircuitPython的Adafruit_Blinka,您可以将此传感器与任何CircuitPython微控制器板或具有GPIO和Python的计算机一起使用-for-Python兼容性库。

CircuitPython微控制器接线

首先,将PCA9685与Arduino的前几页完全一样地连接到板上。以下是使用I2C将Feather M0连接到传感器的示例:

板3V 至传感器VCC

板GND 到传感器GND

板SCL 到传感器SCL

板SDA 到传感器SDA

Arduino

Python计算机接线

由于有数十种Linux计算机/主板,您可以使用我们将显示Raspberry Pi的接线。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

以下是与I2C相连的Raspberry Pi:

Arduino

Pi 3V3 至传感器VCC

Pi GND 到传感器GND

Pi SCL 到传感器SCL

Pi SDA 到传感器SDA

请勿尝试使用RasPi或Linux主板的5V电源为伺服器供电,您很容易导致电源断电并弄乱您的Pi!使用单独的5v 2A或4A适配器

Arduino

5V 2A(2000mA)开关电源-UL认证的

产品ID:276

这是FCC/CE认证和UL认证的电源。需要大量5V电源吗?该开关电源可提供高达2000mA的干净稳压5V输出。 110或240输入,因此可以在。..

$ 7.95

进货

添加到购物车

Arduino

5V 4A(4000mA)开关电源-UL认证

产品ID:1466

需要大量5V电源吗?该开关电源可提供高达4A(4000mA)的干净稳定的5V输出。 110或240输入,因此可在任何国家/地区使用。插头为“ US 。..

$ 14.95

进货

添加到购物车

CircuitPython安装PCA9685和ServoKit库

您需要在CircuitPython板上安装Adafruit CircuitPython PCA9685库。

首先请确保您正在为板运行最新版本的Adafruit CircuitPython。

p》

接下来,您需要安装必要的库以使用硬件-仔细按照以下步骤从Adafruit的CircuitPython库捆绑包中查找和安装这些库。我们的CircuitPython入门指南上有一个很棒的页面,介绍如何安装库捆绑包

对于诸如Trinket M0或Gemma M0之类的非表达板,您需要从捆绑包中手动安装必要的库:

adafruit_pca9685。 mpy

adafruit_bus_device

adafruit_register

adafruit_motor

adafruit_servokit

在继续之前,请确保您董事会的lib文件夹或根文件系统具有 adafruit_pca9685.mpy,adafruit_register,adafruit_servokit,adafruit_motor 和 adafruit_bus_device 文件和文件夹 已复制。

下一步连接到开发板的串行REPL,这样您就可以在CircuitPython上出现》》》 提示。

PCA9685和ServoKit库的Python安装

您需要安装Adafruit_Blinka库,该库在Python中提供了CircuitPython支持。这可能还需要在您的平台上启用I2C并验证您正在运行Python3。由于每个平台都略有不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以准备好您的计算机!

完成后,从您的命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-pca9685

sudo pip3 install adafruit-circuitpython-servokit

如果您的默认Python是版本3,则可能需要运行‘pip’。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python用法

以下部分将展示如何从开发板的Python提示符/REPL中控制PCA9685。您将通过输入以下代码来学习如何交互式控制伺服器和调暗LED。

调光LED

运行以下代码以导入必要的模块并初始化与传感器的I2C连接:

下载:文件

复制代码

import board

import busio

import adafruit_pca9685

i2c = busio.I2C(board.SCL, board.SDA)

pca = adafruit_pca9685.PCA9685(i2c) import board

import busio

import adafruit_pca9685

i2c = busio.I2C(board.SCL, board.SDA)

pca = adafruit_pca9685.PCA9685(i2c)

每个频道PCA9685可用于控制LED的亮度。 PCA9685生成高速PWM信号,该信号可以非常快速地打开和关闭LED。如果LED的开启时间比关闭的时间长,则您的眼睛会显得更亮。

首先按照以下步骤将LED连线到板上。请注意,您不需要使用电阻来限制流经LED的电流,因为PCA9685会将电流限制在10mA左右:

Arduino

LED阴极/短支脚到 PCA9685通道GND/接地。

LED阳极/更长的脚到 PCA9685通道PWM 。

PCA9685类可控制PWM频率和每个通道的占空比。请查阅PCA9685类文档的形式详细信息。

对于调光LED,通常不需要使用快速的PWM信号频率,并且可以通过设置频率来将板的PWM频率设置为60hz。属性:

下载:文件

复制代码

pca.frequency = 60 pca.frequency = 60

PCA9685支持16个独立的通道,这些通道共享一个频率,但可以具有独立的占空比。这样,您可以分别使16个LED变暗!

PCA9685对象具有 channels 属性,该属性为每个可以控制占空比的通道提供一个对象。要获取单个频道,请使用[]索引到频道。

下载:文件

复制代码

led_channel = pca.channels[0] led_channel = pca.channels[0]

现在通过控制LED的占空比来控制LED亮度。通道连接到LED。占空比值应为16位值,即0到0xffff,它表示信号打开与关闭的时间百分比。值0xffff是100%亮度,0是0%亮度,中间值是从0%到100%亮度。

例如,以0xffff的占空比完全打开LED:

下载:文件

复制代码

led_channel.duty_cycle = 0xffff led_channel.duty_cycle = 0xffff

运行上面的命令后,您应该会看到LED以全亮度点亮!

现在,以的占空比关闭LED。 0:

下载:文件

复制代码

led_channel.duty_cycle = 0 led_channel.duty_cycle = 0

尝试介于1000之间的值:

下载:文件

复制代码

led_channel.duty_cycle = 1000 led_channel.duty_cycle = 1000

您应该看到LED昏暗。尝试尝试其他占空比值以查看LED如何改变亮度!

例如,通过在循环中设置 duty_cycle ,使LED发光和熄灭:

下载:文件

复制代码

# Increase brightness:

for i in range(0xffff):

led_channel.duty_cycle = i

# Decrease brightness:

for i in range(0xffff, 0, -1):

led_channel.duty_cycle = i # Increase brightness:

for i in range(0xffff):

led_channel.duty_cycle = i

# Decrease brightness:

for i in range(0xffff, 0, -1):

led_channel.duty_cycle = i

这些for循环需要一段时间,因为16位是很多数字。 CTRL-C 可停止循环运行并返回到REPL。

完整示例代码

下载:Project Zip 或pca9685_simpletest.py | 在Github上查看

复制代码

# This simple test outputs a 50% duty cycle PWM single on the 0th channel. Connect an LED and

# resistor in series to the pin to visualize duty cycle changes and its impact on brightness.

from board import SCL, SDA

import busio

# Import the PCA9685 module.

from adafruit_pca9685 import PCA9685

# Create the I2C bus interface.

i2c_bus = busio.I2C(SCL, SDA)

# Create a simple PCA9685 class instance.

pca = PCA9685(i2c_bus)

# Set the PWM frequency to 60hz.

pca.frequency = 60

# Set the PWM duty cycle for channel zero to 50%. duty_cycle is 16 bits to match other PWM objects

# but the PCA9685 will only actually give 12 bits of resolution.

pca.channels[0].duty_cycle = 0x7fff

# This simple test outputs a 50% duty cycle PWM single on the 0th channel. Connect an LED and

# resistor in series to the pin to visualize duty cycle changes and its impact on brightness.

from board import SCL, SDA

import busio

# Import the PCA9685 module.

from adafruit_pca9685 import PCA9685

# Create the I2C bus interface.

i2c_bus = busio.I2C(SCL, SDA)

# Create a simple PCA9685 class instance.

pca = PCA9685(i2c_bus)

# Set the PWM frequency to 60hz.

pca.frequency = 60

# Set the PWM duty cycle for channel zero to 50%. duty_cycle is 16 bits to match other PWM objects

# but the PCA9685 will only actually give 12 bits of resolution.

pca.channels[0].duty_cycle = 0x7fff

Contro 收费Servos

我们为称为Adafruit CircuitPython ServoKit的各种PWM/Servo套件编写了一个方便的CircuitPython库,该库可为您处理所有复杂的设置。您需要做的就是从库中导入适当的类,然后可以使用该类的所有功能。我们将向您展示如何导入ServoKit类,并使用它来通过Adafruit 16通道分支控制伺服电动机。

如果您对伺服器不熟悉,请确保首先阅读此伺服器简介页面和此深入的伺服器指南页面。

首先将伺服器连接到PCA9685上的通道0。下面是连接到通道0的伺服器的示例:

Arduino

伺服橙线到通道0上的突破PWM

伺服红色导线到通道0上的分支V +

伺服棕色导线到通道0上的分支Gnd

检查您的伺服数据表以验证其连接方式!

请确保您也已打开或插入PCA9685板的外部5V电源!

首先,您需要导入并初始化ServoKit类。您必须指定板上可用的通道数。该分组讨论有16个通道,因此在创建类对象时,您将指定16。

下载:文件

复制代码

from adafruit_servokit import ServoKit

kit = ServoKit(channels=16) from adafruit_servokit import ServoKit

kit = ServoKit(channels=16)

现在您可以同时控制标准和连续旋转伺服器。

标准伺服系统

要控制标准伺服系统,您需要指定与伺服系统连接的通道。然后可以通过将angle设置为度数来控制运动。

例如,将连接到通道0的伺服器移至180度:

下载:文件

复制代码

pca.frequency = 50 pca.frequency = 50

现在,将PCA9685设置为用于伺服,就可以制作一个Servo对象,以便我们可以根据角度而不是 duty_cycle 。

默认情况下,Servo类将使用适用于大多数伺服器的致动范围,最小脉冲宽度和最大脉冲宽度值。但是,请查阅Servo类文档以获取有关附加参数的更多详细信息,以自定义为您的伺服器生成的信号。

下载:文件

复制代码

import adafruit_motor.servo

servo = adafruit_motor.servo.Servo(servo_channel) import adafruit_motor.servo

servo = adafruit_motor.servo.Servo(servo_channel)

使用Servo,您可以将位置指定为角度。角度将始终在0和创建伺服时给定的驱动范围之间。默认值为180度,但您的伺服器扫角可能较小-通过在上面的Servo类初始化程序中指定 actuation_angle 参数来更改总角度。

现在将角度设置为180,是范围的一个极端:

下载:文件

复制代码

kit.servo[0].angle = 180

kit.servo[0].angle = 180

要将伺服器恢复到0度:

下载:文件

复制代码

kit.servo[0].angle = 0 kit.servo[0].angle = 0

对于标准伺服,将位置指定为角度。角度将始终在0和致动范围之间。默认值为180度,但您的伺服器的扫描范围可能较小。您可以通过设置actuation_range来更改总角度。

例如,将驱动范围设置为160度:

下载:文件

复制代码

servokit.servo[0].actuation_range = 160 servokit.servo[0].actuation_range = 160

通常单个伺服器识别的范围与其他伺服器有所不同。如果伺服器未扫描整个预期范围,请尝试使用set_pulse_width_range(min_pulse, max_pulse)调整最小和最大脉冲宽度。

要将脉冲宽度范围设置为最小值1000和最大值2000:

下载:文件

复制代码

kit.servo[0].set_pulse_width_range(1000, 2000) kit.servo[0].set_pulse_width_range(1000, 2000)

使用PCA9685分支,Python和ServoKit来控制标准伺服器就是全部!

连续旋转伺服器

要控制连续旋转伺服,您可以必须指定伺服打开的通道。然后,您可以使用throttle来控制运动。

例如,要启动连接到通道1的连续旋转伺服以使油门完全前进:

下载:文件

复制代码

kit.continuous_servo[1].throttle = 1 kit.continuous_servo[1].throttle = 1

要启动连接到通道1的连续旋转伺服以完全反向节流,请执行以下操作:

下载:文件

复制代码

kit.continuous_servo[1].throttle = -1 kit.continuous_servo[1].throttle = -1

要设置半节流阀,请使用十进制:

下载:文件

复制代码

kit.continuous_servo[1].throttle = 0.5 kit.continuous_servo[1].throttle = 0.5

然后,要停止连续旋转伺服运动,请将throttle设置为0:

下载:文件

复制代码

kit.continuous_servo[1].throttle = 0 kit.continuous_servo[1].throttle = 0

使用PCA9685 16通道Breakout,Python和ServoKit来控制连续旋转伺服器就是全部了!

完整示例代码

下载:Project Zip 或 servokit_simpletest.py | i》在Github上查看

复制代码

“”“Simple test for a standard servo on channel 0 and a continuous rotation servo on channel 1.”“”

import time

from adafruit_servokit import ServoKit

# Set channels to the number of servo channels on your kit.

# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.

kit = ServoKit(channels=8)

kit.servo[0].angle = 180

kit.continuous_servo[1].throttle = 1

time.sleep(1)

kit.continuous_servo[1].throttle = -1

time.sleep(1)

kit.servo[0].angle = 0

kit.continuous_servo[1].throttle = 0

“”“Simple test for a standard servo on channel 0 and a continuous rotation servo on channel 1.”“”

import time

from adafruit_servokit import ServoKit

# Set channels to the number of servo channels on your kit.

# 8 for FeatherWing, 16 for Shield/HAT/Bonnet.

kit = ServoKit(channels=8)

kit.servo[0].angle = 180

kit.continuous_servo[1].throttle = 1

time.sleep(1)

kit.continuous_servo[1].throttle = -1

time.sleep(1)

kit.servo[0].angle = 0

kit.continuous_servo[1].throttle = 0

下载

文件

PCA9685数据表

Arduino驱动程序库

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

示意图和构造打印

Arduino

Arduino

孔的直径为2.5mm

常见问题解答

该板可以用于LED还是仅用于伺服器?

它可用于LED以及任何其他可使用PWM的设备!

当将此屏蔽罩与Adafruit LED矩阵结合使用时,我遇到了奇怪的问题/7Seg背包

PCA9865芯片的“全部通话”地址为0x70 。这是已配置地址的补充。将背包的地址设置为0x71或默认0x70以外的其他值,以消除问题。

在使用LED的情况下,我为何无法打开LED

如果要完全关闭LED,请使用 setPWM(针,4096,0); not setPWM(pin,4095,0);
       责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分