本文翻译自科普大神donebotWorkshop.com
译者:DIY百事
目录

1 什么是伺服电机? 1.1伺服电机的种类 1.2仿照伺服电机
2 伺服是如何事情的? 2.1连续旋转伺服电机
3 伺服电机掌握旗子暗记 3.1常规伺服电机时序 3.2连续旋转伺服电机时序
4 伺服电机规格4.1电机尺寸 4.2齿轮材料 4.3速率 4.4扭矩 4.5事情电压 4.6臂(连杆)和配件
5 测试伺服电机 5.1伺服测试仪 5.2伺服电机连接
6 连接到 Arduino 6.1 PWM 输出 6.2电源把稳事变
7 旋转扫描的代码
8 可调节角度的旋转扫描的代码
9 PCA9685 伺服驱动板
10 多个伺服系统——掌握 MeArm
11 结论
什么是伺服电机?伺服电机是一种低速、高扭矩的电机,有多种尺寸可供选择。与直流和步进电机不同,伺服电机常日不会旋转完全的 360 度。相反,它被限定在 180、270 或 90 度的范围内。
掌握旗子暗记被发送到伺服系统以将轴定位在所需的角度。这种具有单一旗子暗记的支配使得伺服系统可以大略地用于无线电和遥控设计以及单片机。
我们已经构建了一些利用电机使物体移动的项目,并且在此过程中我们查看了一些可以通过 Arduino 和 Raspberry Pi 项目掌握的不同类型的电机。
图1
伺服电机的种类伺服电机实质上是一种电机,它有一个掌握旗子暗记输入端用于指定电机轴位置。
伺服系统用于工业和业余爱好运用。工业伺服系统常日是带有数字掌握输入的互换电机,本钱数百或数千美元。
业余爱好者用的伺服电机常日是直流电机,可以用数字或仿照旗子暗记进行掌握。
数字伺服系统用于须要快速相应的运用中,例如飞机上的升降舵或直升机上的方向舵。我们也不会利用这些类型的电机,只管用于利用 Arduino 驱动它们的电路图和代码与我们将用于仿照伺服系统的相同。
我们将利用普通的仿照伺服电机,这是业余爱好者最常用的类型。它们价格低廉且易于得到。安装硬件也很随意马虎找到,由于这些伺服用具有一组标准尺寸。
仿照伺服电机仿照伺服电机价格低廉,有多种尺寸和额定值可供选择。当您须要可以准确定位的小型高扭矩电机时,这是完美的选择。
仿照伺服电机的“仿照”部分是掌握旗子暗记。仿照伺服电机相应脉冲宽度调制( PWM) 旗子暗记来定位其电机轴。
PWM 是一种空想的掌握办法。它可以由一个大略的定时器电路或单片机产生。它可以通过单根电线发送,也可以通过无线电或光束传送旗子暗记。
Arduino 有许多支持 PWM 的输出引脚,非常适宜掌握伺服电机。
伺服系统如何事情?伺服电机是一种内置“伺服机构”的电机。
伺服机构利用传感器来监控电机轴位置然后用掌握器来掌握电机。它吸收一个旗子暗记,指示轴应运动到的位置。然后它将电机轴移动到所需的位置。
在仿照伺服电机中,我们将利用的掌握旗子暗记是一个 PWM 旗子暗记,其脉冲宽度决定了电机轴的定位角度。电机本身是一个大略的直流电机,带有减速齿轮组以减慢其速率并增加其扭矩。
为了正常事情,伺服电机须要一个可以准确丈量其轴位置的传感器。在一些工业和高端玩具伺服电机上,这是利用光电盘完成的,但在大多数标准业余伺服电机中,传感器是一个电位计。这也是有效的,由于这些伺服系统常日会移动 180 到 270 度,完备在电位计的范围内。然而,电位计的精度,特殊是在低本钱伺服电机中的精度,会影响伺服机构的整体精度。
连续旋转伺服电机标准仿照伺服电机的旋转受到限定,常日为 180 或 270 度(目前最常见的是 180 度)。其内部齿轮装置以小巧且廉价的包装供应高扭矩动力组。
小尺寸和大扭矩的结合也使伺服电机在小型玩具和机器人等小型设备的设计中用作标准直流电机的替代品。有些人会通过移除电位计来修正标准仿照舵机,让舵机可以旋转整整 360 度。
从制造商得到的,现在也供应“连续旋转伺服电机”,实在是剥离了伺服机构的伺服电机。
在连续旋转伺服电机中,轴旋转的速率和方向由与传统仿照伺服电机相同的 PWM 旗子暗记掌握。
具有大略的单线掌握旗子暗记和与标准伺服电机相同的物理封装使连续旋转伺服电性能用到许多场合。
伺服电机掌握旗子暗记为了利用仿照伺服电机,您须要理解如何利用 PWM 掌握其运行。常规旋转和连续旋转这两个品种利用相同的计时旗子暗记,但对它们的相应略有不同。
让我们来看看大多数仿照伺服电机中利用的PWM旗子暗记。
传统伺服电机时序在传统的仿照伺服电机中,利用周期为 20 ms 的 PWM 旗子暗记来掌握电机。20 ms 的旗子暗记具有 50 Hz 的频率。
脉冲宽度在 1 到 2 ms 之间变革,以掌握电机轴位置。
图2
1.5ms 的脉冲宽度将使伺服轴勾留在 90 度位置,即其行程的中央。1ms 的脉冲宽度将导致伺服轴停在 0 度位置。2ms 的脉冲宽度将使伺服轴停在 180 度位置。
在 1ms 和 2ms 之间改变脉冲宽度将使伺服轴在 180 度的范围内移动。通过相应地调度脉冲宽度,您可以将其放置在您想要的任何角度。
连续旋转伺服电机时序在连续旋转伺服电机中,相同的 PWM 旗子暗记将导致电机的性能不同。
图3
1.5ms 的脉冲宽度将导致伺服轴停滞旋转。1ms的脉冲宽度将导致伺服轴逆时针全速旋转。2ms 的脉冲宽度将导致伺服轴顺时针全速旋转。
在 1ms 和 1.5ms 之间改变脉冲宽度将使电机逆时针旋转,较短的脉冲宽度使电机旋转得更快。
在 1.5ms 和 2ms 之间改变脉冲宽度将导致电机顺时针旋转,脉冲越长,速率越快。
商用连续旋转伺服电机将有一个调节电位器,可用于在电机输入 1.5ms 脉冲宽度时将速率归零。
伺服电机规格市情上有数百种仿照伺服电机可用,理解如何阅读它们的规格对付为您的运用选择精确的电机至关主要。
以下是您在选择伺服电机时会碰着的一些关键参数。
电机尺寸伺服电机的物理尺寸自然是一个主要的考虑成分,您的运用可能会哀求电机符合特定的尺寸限定。
有多种标准伺服电机尺寸,这使得找到适宜您的伺服电机的安装支架和硬件变得更加随意马虎。
伺服大小常日指定如下:
纳米亚微眇小型的标准大也有分外尺寸。微(Micro) 和 标准(Standard) 尺寸是 Arduino 实验者最常利用的尺寸。
齿轮材料伺服系统有许多内齿轮和直接在输出轴上的齿轮装置,这些用于降落电机速率并增加其扭矩。
齿轮可以利用塑料或金属制造。
金属齿轮供应更好的性能,常日可以支持更高的扭矩并且不易脱落。金属齿轮伺服系统的本钱也更高。
塑料齿轮更随意马虎脱落,并且没有金属齿轮的扭矩能力。然而,它们比金属齿轮伺服电机更安静且更便宜。
相同的伺服电机构造可能会利用不同的齿轮材料。一种常见的实验电机是 SG90,带有塑料齿轮的微型伺服电机。它的金属齿轮对应型号是MG90。由于它们采取相同的外壳并具有相同的电压和驱动器哀求,因此它们可以互换,MG90 因其金属齿轮而供应卓越的性能。
伺服电机的质量还受轴承类型和轴承数量的影响。带有多个轴承的电机迁徙改变更平稳、更准确。
速率伺服电机的速率定义为将伺服轴移动 60 度所需的韶光。
图4
比如规格0.25 秒/60°,这意味着行进 60 度须要四分之一秒。
伺服速率更适用于传统伺服电机,连续旋转电机与任何直流电机一样额定为最大 RPM。
高速伺服系统用于航模和直升机运用,以掌握常常须要快速移动的升降舵和方向舵。个中许多利用数字掌握和内部光学位置传感器代替电位计,以实现更快速的移动。
对付一些业余爱好运用如掌握摄像机或超声波传感器的位置,速率常日不是关键成分。
扭矩扭矩是一个非常主要的参数,它从字面上指定了电机的力道。
扭矩被定义为伺服系统可以施加到连杆上的力,换句话说,它可以承受多大的力。
它以千克厘米为单位。
要理解扭矩数字与现实天下情形的关系,请考虑以下示例:
图5
如伺服电机的额定值为 5 kg-cm。也便是说伺服电机可在距轴中央 1 厘米处的杠杆上承受高达 5kg 的负载。
在两倍间隔处,负载将减半,因此在距轴 2 厘米处,杠杆可以支撑 2.5 千克。
一半的间隔使可支撑的负载翻倍至 10kg。
更大的伺服电机每每具有更大的扭矩能力,更大扭矩的电机每每更贵。它们也更重,花费更多电流。
事情电压大多数业余仿照舵机的额定电压为 4.8 到 6 伏,并在更高的电压下实现其最大性能。
还有更多的伺服系统,最大额定电压为 7.5 到 8.5 伏。由于 7.4 伏锂聚合物电池可用于模型飞机、船只、车辆和四轴翱翔器,这些电池变得越来越受欢迎。
伺服电机,尤其是高扭矩型号,会花费相称多的电流,在为您的项目选择电源或电池时须要考虑到这一点。
连杆、和配件大多数伺服电机都有一个齿轮轴,它的中央有螺纹方便坚固。
为了利用伺服电机,您须要在轴上装上另一个零件—平台、齿轮、轮子或任何您试图与伺服电机轴一起移动的东西。
伺服电机配有各种不同形状的杠杆和圆盘,可以与轴合营,以方便将伺服电机连接到您的设计中。这些部件常日被称“连杆”。它们连接到伺服电机轴上并用中央螺钉固定到位,它们可以由塑料或金属制成。
除了连杆,您还该当随伺服电机一起收到各种安装硬件和螺钉,包括轴的中央螺钉(不要丢失它,由于它们每每因伺服类型而异)。
您还可以购买设计用于接管微型和标准等盛行伺服尺寸的安装板。
伺服连杆、固定件和附件的可用性和互换性使您可以轻松地将伺服电机集成到您的设计中。
测试伺服电机与任何组件一样,理解如何测试伺服电机以确保正常运行很有用。
在将伺服电机安装到您的项目中之前,能够将伺服轴旋转到预设位置(例如 90 度)也很有用,以便统统都精确对齐。
您可以利用多种方法来测试伺服。一个大略的 Arduino 代码和连接,就像您将在此处进一步看到的那样,将成为测试伺服并将其轴定位到预设位置的绝佳方法。
另一种方法是利用专用伺服测试仪。
伺服测试仪正如您想象的那样,伺服测试仪是一种用于测试伺服电机的设备!
它们非常有用,而且可能非常便宜,详细取决于您想要的功能。
一个大略的伺服测试仪,如这里所示(并在随附的视频中利用)只需几美元。
更前辈的伺服测试仪有多个电机的速率和定心掌握,有些还有电流表。加上这些都不到20美元。
这些测试仪可以共用电机本身的电源。它们可以插入标准伺服电机连接器,然后它们将掌握伺服电机。
伺服测试仪将许可您手动移动电机并将其置于 90 度位置的中央。这使您可以在连杆固定到电机之前检讨电机是否精确运行并对齐其轴位置。
伺服电机接线仿照伺服电机常日有一个 3 针连接器。
民用伺服电机上利用的颜色代码因制造商而异。然而,大多数制造商利用相同的引脚排列,如下图所示:
图6
伺服电机的三个连接如下:
Ground接地- 电机和逻辑的公共接地。Power电源- 为伺服供电的正电压。Control掌握——PWM 掌握旗子暗记的输入。最常见的连接器是标准的杜邦连接器,间距为 0.1 英寸。这使得利用标准杜邦接头将伺服电机连接到您的项目变得随意马虎。
您还可以将面包板电线直接插入伺服 3 针连接器,以便您可以利用伺服电机进行原型设计。
连接到 Arduino正如我们已经描述的那样,伺服电机须要 PWM 掌握旗子暗记才能精确运行。您可以通过多种办法天生此旗子暗记——大略的定时器电路、专用掌握芯片或利用具有 PWM 输出功能的单片机。
单片机在能够更有效地掌握伺服方面自然具有许多上风。Arduino 是一个很好的选择。
Arduino IDE 已经包含一个伺服库,因此您很快就会看到,将伺服添加到您的代码中非常大略。
PWM脉宽调制输出所有 Arduino 板都有一些能够进行脉宽调制( PWM )的输出引脚。在 Arduino Uno 上有 6 个支持 PWM 的引脚。
请记住,要天生 PWM 旗子暗记,伺服库文件须要利用一些内部 Arduino 计时器,特殊是计时器 1。这可能会滋扰其他也须要相同计时器的库。办理此问题的一种方法是为伺服或其他所需功能探求替代库,这是绕过这些限定的常用方法。
更高等的方法是利用外部 PWM 掌握器板并开释 Arduino 计时器的需求。这将在本文中进一步谈论。
电源把稳事变大多数伺服电机都可以在 5 伏电压下运行,因此很随意马虎利用 Arduino 板上的 5 伏输出为伺服供电。
但这不是一个很好的主张。
伺服系统会花费大量电流,尤其是在负载时。这可能比 Arduino 板上的电压调节器所能承受的电流更大,尤其是在更便宜的克隆板上。虽然大多数 Arduino 板可以支持一个微型伺服电机,但它仍旧会给调压器带来很大的包袱。
伺服电机与所有其他电机一样,会在电源电路上产生电噪声。在为单片机和其他逻辑设备供电的线路上存在这种噪声常日会导致系统缺点。
为您的伺服电机利用单独的电源是一个更好的主张。5 伏 USB 3 电源可以很好地事情, 4 节 AA 电池也可以。
如果您真的必须直接从 Arduino 为伺服电机供电,请将其限定为一个微型伺服电机。在靠近伺服电机的电源线上安装一个 100uf 或更大的电容器可以帮助接管这些电涌。
伺服扫描旋转的代码对付我们的第一个 Arduino 代码,我们将利用Arduino IDE内置示例。无需编写代码或安装库!
连接硬件以用于我们的第一个演示非常大略。您须要一个 Arduino(任何类型)、一个伺服电机和一个伺服电机电源。
图7
连接再大略不过了。伺服由自己的电源供电,接地连接也连接到 Arduino 接地。然后来自伺服的掌握引线连接到 Arduino 上的引脚 9。
Arduino Uno 上的引脚 9 是能够进行 PWM 的六个引脚之一,在大多数 Uno 板上,您会在 6 个启用 PWM 的 I/O 引脚阁下看到一个符号。
将您的 Arduino 连接到您的打算机并启动 Arduino IDE。
单击屏幕顶部的文件菜单。从那里选择示例子菜单。
将显示示例代码列表。它分为几个部分,向下滚动列表直达到到“来自库的示例”部分。
在“库中的示例”部分,您将看到“伺服”。突出显示以显示两个代码,旋钮和扫描。
加载代码。
/ Sweepby BARRAGAN <http://barraganstudio.com>This example code is in the public domain.modified 8 Nov 2013by Scott Fitzgeraldhttp://www.arduino.cc/en/Tutorial/Sweep/#include <Servo.h>Servo myservo;// create servo object to control a servo// twelve servo objects can be created on most boardsint pos = 0;// variable to store the servo positionvoid setup() {myservo.attach(9);// attaches the servo on pin 9 to the servo object}void loop() {for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees// in steps of 1 degreemyservo.write(pos);// tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degreesmyservo.write(pos);// tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}}
扫描旋转是一个非常基本的代码,它只是将伺服轴从头扫描到尾。
该代码利用了Arduino IDE 中包含的Arduino 伺服库。顾名思义,它是一个用 PWM 掌握伺服电机的库。我们包含该库并定义一个名为myservo的工具来表示我们的伺服电机。如果您有多个伺服电机,您可以为每个电机定义一个工具。
然后,我们定义一个名为“ pos ”的变量,用于保存我们希望伺服电机轴移动到的位置(角度)。
在设置中,我们将伺服工具连接到 Arduino 引脚 9 上的伺服电机掌握线。
然后是loop循环,它由两个 for 循环组成。第一个循环增加pos变量的值,并利用它利用myservo.write命令掌握伺服电机,将轴从 0 度发送到 180 度。
第二个 for 循环是相同的,只是它将值从 180 递减到 0,将轴朝相反的方向送回。
将代码加载到 Arduino 中并不雅观察伺服电机轴,它该当从一端移动到另一端。
您刚刚利用 Arduino 进行了伺服运动!
让我们连续看 Arduino IDE 附带的另一个演示代码,即旋钮代码。在我们做之前,我们须要在我们的电路中添加一个组件。
图8
正如接线图所示,您须要一个电位计,10k 以上的任何值都可以正常事情。将它的一端接地,另一端连接到 Arduino +5 伏。中间那个输出连接到仿照输入 A0。
电位器将用作定位伺服电机轴的控件,您可以利用它在其 180 度行程中拨动任何位置。这不仅是一个很好的演示,它还是一个有用的功能,用于在将伺服电机安装到您的项目之前设置它们的位置。
如果您在电路中更换连续旋转伺服系统,您可以利用电位计来掌握电机旋转的速率和方向。
修正实验以包含电位计后,打开 Arduino IDE 并返回示例代码。这次从伺服菜单中选择扫描。
/Controlling a servo position using a potentiometer (variable resistor)by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>modified on 8 Nov 2013by Scott Fitzgeraldhttp://www.arduino.cc/en/Tutorial/Knob/#include <Servo.h>Servo myservo;// create servo object to control a servoint potpin = 0;// analog pin used to connect the potentiometerint val;// variable to read the value from the analog pinvoid setup() {myservo.attach(9);// attaches the servo on pin 9 to the servo object}void loop() {val = analogRead(potpin);// reads the value of the potentiometer (value between 0 and 1023)val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)myservo.write(val);// sets the servo position according to the scaled valuedelay(15); // waits for the servo to get there}
扫描代码也很大略。与旋钮代码一样,它利用它包含的 Arduino 伺服库,然后创建一个myservo工具来表示伺服电机。
然后我们定义几个整数。第一个,potpin,代表我们用于电位计游标连接的仿照引脚。另一个val是读取该仿照输入时采取的值。
设置与旋钮代码相同,我们将伺服工具连接到引脚 9。
在循环中,我们首先从仿照引脚读取值,0 到 1023 的值将分配给val。接下来我们利用 Arduino Map Function 改变val来表示 0 到 180 度之间的角度。
之后,我们利用写入命令将伺服定位到val的值,即电位器选择的角度。
在短暂延迟让伺服电机遇上之后,我们重新开始。
将代码加载到您的 Arduino 并迁徙改变电位计。您该当看到伺服电机的轴与可调电阻同步移动。
PCA9685伺服驱动板正如我们刚刚看到的那样,直接从 Arduino 掌握伺服电机非常大略。但是它有它的局限性:
您受到 Arduino 上 PWM 引脚数量的限定。如果伺服是须要其他 PWM 设备的设计的一部分,则可能会涌现问题。Arduino 伺服库可能会与其他 Arduino 库冲突,由于它们考试测验利用相同的计时器。这有时可以通过探求替代库来办理。您须要掌握很多伺服电机,纵然是 Arduino Mega 也有其局限性。一个更好的办理方案是利用单独的伺服驱动器板。这将省却将 PWM 发送到伺服系统的任务,解放您的 Arduino 以做更好的事情。
我们将利用的电路板基于 PCA9685 芯片。这些板非常受欢迎,由几家公司制造。
PCA9685 板利用 I2C 与 Arduino 通信。这意味着与 Arduino只有两个时钟和数据连接。由于板子 I2C 地址可以利用一系列焊盘进行配置,因此您可以在同一电路上利用多个驱动板。
每块板卡最多可掌握 16 个伺服电机。您可以级联多达 62 个板来掌握多达 992 个伺服电机!
如果您真的须要掌握 992 个伺服电机,您可以利用 I2C 扩展板将多个 I2C 总线连接到您的 Arduino!
与电路板的连接非常大略。
图9
电路板的每一侧都有一组相同的连接,这使得将多个模块连接起来很随意马虎。它们如下:
GND – 接地连接。OE——输出使能。您可以利用此引脚启用和禁用所有 16 个输出。常日它保持未连接状态,这将导致启用所有输出。SCL – I2C 总线的时钟线。SDA – I2C 总线的数据线。VCC – 逻辑电源,+5 伏。V+ – 伺服电机的电源。为此,电路板顶部还有另一个连接器,推举用该连接器,由于它具有反接保护,而 V+ 则没有。V+ 引脚真正用于级联多个 PCA9685 模块,并通过单个电源为所有伺服系统供电。顶部还有一个用于伺服电源的 2 针螺丝连接器。如上所述,它受到反极性保护。
板子底部有 16 组 3 针公头连接器。每一个可连接一个伺服电机。
电路板的右上角是六个焊盘。这些用于设置电路板的 I2C 地址。如果您利用多个板,则须要跳线个中的一个或多个以将其内部 I2C 地址变动为唯一。
没有短接任何跳线的 PCA9685 模块的基地址是 0x40。
如果将 A0 焊盘短路,则地址变为 0x41。
改为桥接 A1,它现在是 0x42 的地址。桥接 A0 和 A1,地址将为 0x43。
多舵机——掌握 MeArm为了演示如何利用 PCA9685 PWM 模块来掌握多个伺服电机,我决定推出我之前构建的 MeArm。它有四个伺服电机。
我按如下办法连接所有内容:
图10
你会把稳到我还添加了四个电位器,和以前一样,它们可以是 10k 或以上的任何值,将用于调节四个伺服电机中每一个的运行。
PCA9685 模块连接到 Arduino 上的 SCL 和 SDA 连接。如果您的 Arduino 没有用于这些 I2C 连接的引脚,则将仿照引脚 A4 用于 SDA,将引脚 A5 用于 SCL。
请把稳,纵然您确实有单独的 SCL 和 SDA 引脚,在利用 I2C 时也无法将 A4 和 A5 用作仿照输入。
四个电位器一侧接地,另一侧接地 5 伏。它们的输出连接到仿照输入 A0 到 A3。
Arduino 电源还用于为 PCA9685 模块上的 VCC 电源供电。四个舵机的独立电源连接到模块上的螺钉连接器。
我将伺服电机连接到输出 0、4、8 和 12。您实际上可以利用任何四个连接,只需记下它们,以便您可以修正代码以匹配您的选择。
由于这是我连接到 Arduino 的唯一 PCA9685 模块,因此我没有短路任何地址焊盘。
现在让我们看看我用来完成这统统的代码:
/PCA9685 PWM Servo Driver Examplepca9685-servomotor-demo.inoDemonstrates use of 16 channel I2C PWM driver board with 4 servo motorsUses Adafruit PWM libraryUses 4 potentiometers for inputDroneBot Workshop 2018https://dronebotworkshop.com/// Include Wire Library for I2C Communications#include <Wire.h>// Include Adafruit PWM Library#include <Adafruit_PWMServoDriver.h>#define MIN_PULSE_WIDTH 650#define MAX_PULSE_WIDTH 2350#define FREQUENCY 50Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();// Define Potentiometer Inputsint controlA = A0;int controlB = A1;int controlC = A2;int controlD = A3;// Define Motor Outputs on PCA9685 boardint motorA = 0;int motorB = 4;int motorC = 8;int motorD = 12;void setup(){pwm.begin();pwm.setPWMFreq(FREQUENCY);}void moveMotor(int controlIn, int motorOut){int pulse_wide, pulse_width, potVal;// Read values from potentiometerpotVal = analogRead(controlIn);// Convert to pulse widthpulse_wide = map(potVal, 0, 1023, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);pulse_width = int(float(pulse_wide) / 1000000 FREQUENCY 4096);//Control Motorpwm.setPWM(motorOut, 0, pulse_width);}void loop() {//Control Motor AmoveMotor(controlA, motorA);//Control Motor BmoveMotor(controlB, motorB);//Control Motor CmoveMotor(controlC, motorC);//Control Motor DmoveMotor(controlD, motorD);}
该代码利用了 Adafruit PWM 伺服驱动程序库,您须要安装该库才能完成这项事情。它可以从 Arduino IDE 中的库管理器安装。
打开 Arduino IDE。从顶部的菜单中选择Sketch。选择包括库。将涌现一个子菜单。从子菜单中选择管理库...。库管理器将打开。在库管理器中搜索“Adafruit PWM”该Adafruit的PWM伺服Library驱动程序该当是第一个结果。单击“更多信息”链接以显示“安装”按钮。利用此按钮将库安装到您的 IDE 中。关闭库管理器。该库现已安装,可以在您的 IDE 中利用。我们通过包含 Wire 库开始代码。它内置于您的 Arduino IDE 中,用于掌握 I2C 通信。
接下来我们包括我们刚刚安装的 Adafruit PWM 伺服库。
我们现在将定义一些常量。
前两个常量定义了我们将发送到伺服系统的 PWM 旗子暗记的最小和最大脉冲宽度。你还记得这个脉冲宽度将决定伺服轴的位置。
我们定义的第三个常数是 PWM 频率,仿照伺服电机的频率为 50 Hz。如果您利用的是数字伺服电机,您可能须要增加它,由于它们常日可以利用高达 200 Hz 的频率。
接下来,我们利用 Adafruit PWM 库创建一个名为pwm的工具。如果您利用了默认 0x40 以外的地址,则须要在此处定义它。
现在我们定义一些变量。第一个是电位器输入引脚,A0 到 A3。之后是 PCA9685 板上的电机输出,我在连接电机时利用了 0、4、8 和 12。如果您为电机利用不同的连接器,请变动这些值。
现在进入setup设置。我们初始化我们之前创建的pwm工具,然后将 PWM 振荡器的频率设置为我们定义的频率,在我们的例子中是 50 Hz。
现在我们创建一个函数来驱动电机以相应电位计的位置。然后我们可以为每个电机调用这个函数。
我们的函数叫做moveMotor。它有两个输入,controlIn代表电位计输入,motorOut代表PCA9685上的电机连接。
该函数读取电位计值并将其转换为脉冲宽度。然后将此脉冲宽度与Adafruit PWM 伺服库的setPWM方法一起利用,以将脉冲发送到由motorOut变量指定的电机。
在循环中,我们只调用moveMotor函数四次,每个电位器-伺服电机组合调用一次。
结果是 MeArm 中的四个伺服电机将相应电位计。在演示中,我利用了滑动电位计,这使得精确定位 MeArm 变得更加随意马虎。
结论伺服电机是多功能的小设备,在业余爱好者项目中有无数用场,知道如何掌握它们是一项必不可少的 Arduino 编码和接线技能。
希望本文及其干系视频有助于阐明伺服电机的利用,伺服电机可以直接连接到 Arduino,也可以利用 PCA9685 PWM 掌握器通过 I2C 连接。
因此,请为自己准备一堆伺服电机,本日就开始动起来吧!