servodriver是什么驱动器,servodriver伺服驱动器说明书

  

  在人力短缺的背景下,机械手正大显身手,得到越来越多的应用。今天,我们将通过一个廉价的机械手套件来了解其控制的基本原理和电路。我们将使用Arduino Nano plus PCA9685伺服控制器同时控制五台伺服电机。   

  

     

  

  作者:加拿大DroneBotWorkShop,翻译整理:DIY百事可乐   

  

  1目录介绍   

  

  2 DFRobot五自由度机械臂套件   

  

  3个自由度   

  

  4机械臂部分   

  

  5机械臂组件   

  

  6装配夹具   

  

  6.1所需零件   

  

  6.2组装说明   

  

  7.组装基本电机安装座。   

  

  7.1所需零件   

  

  7.2组装说明   

  

  8组装双U形支架。   

  

  8.1所需零件   

  

  8.2组装说明   

  

  9组装带支架的肘形电机安装座。   

  

  9.1所需零件   

  

  9.2组装说明   

  

  10组装手腕电机支架和固定器支架。   

  

  0.1必需零件   

  

  10.2组装说明   

  

  1安装基本马达。   

  

  1.1所需零件   

  

  1.2组装说明   

  

  12将底座连接到双U形支架上   

  

  要求的零件   

  

  12.2组装说明   

  

  13安装弯管电机。   

  

  要求的零件   

  

  13.2组装说明   

  

  14用支架将双U形支架连接到弯头安装座上。   

  

  要求的零件   

  

  14.2组装说明   

  

  15安装手腕电机。   

  

  要求的零件   

  

  15.2组装说明   

  

  16将带支架的肘部安装座连接到腕部电机安装座上。   

  

  要求的零件   

  

  16.2组装说明   

  

  17安装夹爪。   

  

  要求的零件   

  

  17.2组装说明   

  

  1Arduino控制器   

  

  18.1 Arduino Nano   

  

  控制器的接线   

  

  18.3 Arduino代码   

  

  19测试臂   

  

  20展开机械臂。   

  

  我们先来看看我们要建什么。   

  

  DFRobot 5 DOF机械臂套件这款DFRobot 5 DOF机械臂套件包括所有伺服电机、支架、紧固件和其他硬件。你可以用它来建造一个小而强大的机器人手臂和夹紧机构。   

  

     

  

  手臂支架和支撑由黑色阳极氧化铝制成,提供强大的支撑。   

  

  机械臂由5个伺服电机驱动,所有电机都是标准尺寸:   

  

  两个15Kg/cm的转向器用于底座和肘部,一个5.5 Kg/cm的腕部转向器和两个4 Kg/cm的服务器用于夹紧机构。转向器、支架和五金件包装在带有识别标签的单独塑料袋中。除伺服电机外,夹紧机构已装配完毕。   

  

     

  

  DFRobot 5 DOF机械手套件的完整零件列表如下:   

  

     

  

  组装机械臂所需的唯一工具是一把十字螺丝刀和一套钳子。   

  

  5自由度与大多数机械臂一样,DFRobot套件被宣传为“5 DOF”或5自由度机械臂。“自由度”这个术语到底是什么意思?   

  

  事实证明,这可能意味着不同的事情,取决于你的领域。   

  

  如果你是一名航空工程师,那么对于你来说,自由度可能用经典的三维和物体可以移动的方向来表示:   

  

  向前,向后,向前向后,上,下,左,右,左,右。然而,在机器人技术中,“自由度”或DOF通常被认为是表示一个机构具有的活动关节的数量。对于机器人手臂,这通常意味着手臂拥有的电机数量。   

  

  我们的机械臂有五个电机,所以它被宣传为“5 DOF”机械臂。   

  

  机器人手臂的一部分的伺服电机分别为机器人手臂的不同部分提供动力,并且在下面的描述中将使用为它们提供动力的部分的名称。   

  

  我给手臂部分起的名字大致对应于人体手臂上的对等部分,这是我们大多数人应该都很熟悉的一个参照点。在某些情况下(在手爪周围),人类的手臂上没有相应的部分,所以我尽量用描述性的方式来命名这些部分。   

  

     

  

  这些部分如下:   

  

  机器人手臂的底座the底座,相当于人类的。   

肩膀。底座固定到位,至少现在是这样。肘部–手臂上的第一部分。就像人的肘部一样,它允许手臂弯曲。手腕–手臂上的第二部分。它允许更好地定位夹具组件。关节–允许夹具向任一方向旋转 90 度。人的手和手臂没有这样的关节,旋转一只手是用手臂上的几块不同的肌肉来完成的。夹爪 – 夹具机构本身,操作起来很像台钳或钳子。在操作中,手臂的底座需要牢固地固定在坚固的表面上。手臂能够承受很大的扭矩和动量,因此需要可靠固定。

  

机械臂组装DFRobot 5 DOF 机械臂套件是许多 5 DOF 机械臂的典型代表,因此您可能拥有与之类似的套件。您还可以使用DFRobot 网站上的部件将这个手臂或它的自定义版本拼凑起来。

  

机器人手臂的组装将按以下顺序进行:

  

组装夹爪组装底座电机安装座组装双 U 型支架用支架组装肘部电机安装座使用夹持器安装座组装腕式电机安装座安装底座电机将底座连接到双 U 型支架安装肘部电机将双 U 型支架连接到带支架的弯头安装座安装手腕电机将带支架的肘部安装座连接到手腕马达安装座安装夹爪接线和测试!以下是每个步骤的详细信息:

  

组装夹爪所需零件

  

  

组装说明将两个舵机都设置为 0 度位置(完全逆时针)拿起夹具并将其与其中一台电机成 90 度角将伺服轴插入夹具组件背面,与齿轮啮合。测试对齐是否正确插入并拧紧臂安装螺钉以将夹具固定回电机轴手动操作夹爪直到它们处于完全打开位置。注意不要超过这个范围。将伺服电机插入钳口下方的位置,与齿轮啮合。测试对齐是否正确插入并拧紧臂安装螺钉以将夹爪机构固定到电机轴上。测试两个伺服电机以验证夹具是否正常运行。组装底座电机安装座所需零件

  

组装说明放置舵机安装支架,使舵机安装在前面,带有两个孔的平板在后面。将人员轴承套件中的螺钉插入伺服支架背面左侧的孔中,螺钉头朝向伺服电机的一侧。将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。在轴承顶部插入锁紧垫圈。将螺母拧到螺钉上。拧紧螺钉和锁紧螺母。确认在拧紧螺钉后轴承仍能自由旋转。组装双 U 型支架所需零件

  

组装说明

  

将两个 U 型支架对齐,使短节相互压紧,并对齐安装孔。如果您有像我这样预先钻好的安装孔,您需要确保它们以相同的方式排列,否则方向无关紧要。使用袋子中的 4 个螺钉和螺母将支架固定在一起。确保将它们牢牢固定。用支架组装弯头电机安装座所需零件

  

组装说明放置舵机安装支架,使舵机安装在前面,带有两个孔的平板在后面。将人员轴承套件中的螺钉插入伺服支架背面左侧的孔中,螺钉头朝向伺服电机的一侧。将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。在轴承顶部插入锁紧垫圈。将螺母拧到螺钉上。拧紧螺钉和锁紧螺母。确认在拧紧螺钉后轴承仍能自由旋转。将 L 型支架短边上的安装孔与 U 型支架短平底上的安装孔对齐。L 型支架应与 U 型支架成直角,详情请参见插图。使用 L 型支架随附的螺钉将 L 型支架固定到 U 型支架上。螺钉头应位于 L 型支架一侧。将 L 型支架长边的安装孔与舵机安装支架右下方的安装孔对齐。使用袋子中的 4 个螺钉和螺母将 L 型支架固定到伺服安装支架上。螺钉头应位于 L 型支架一侧。使用夹持器安装座组装腕式电机安装座所需零件

  

组装说明放一个舵机安装支架,舵机安装在前,两个孔的平板在后。将人员轴承套件中的螺钉插入伺服支架右后侧的孔中,螺钉头面向伺服电机的一侧(请注意,这是之前电机安装装配说明中使用的相反侧)。将人员轴承套件中的轴承插入伺服支架外侧的螺钉上。确保轴承的斜面部分与伺服支架齐平。在轴承顶部插入锁紧垫圈。将螺母拧到螺钉上。拧紧螺钉和锁紧螺母。确认在拧紧螺钉后轴承仍能自由旋转。将第二个伺服安装支架下方的第二个伺服安装支架成直角对齐,以便第二个伺服的轴位于组件的右侧。对齐安装孔,有关详细信息,请参见插图。用袋子中的 4 个螺钉和螺母固定两个伺服安装支架。螺丝头应面向底部伺服支架。牢固地拧紧。安装底座电机所需零件 组装说明

  

将电机旋转到 0 度位置(完全逆时针)。安装电机时轴与背面轴承对齐,使用随伺服支架提供的 4 个螺钉和螺母将电机紧固。将臂放在电机轴上,暂时留在原处。

其它小部件装配不再详述您现在已经完成了手臂的机械组装。

  

重置和运行所有伺服电机以确保一切正常工作并正确对齐是一个好主意。如有必要,通过卸下将伺服臂固定到框架的 4 个螺钉来调整连接点的位置,并根据需要重新定位。

  

现在让我们组装一个简单的控制器并让手臂完成它的步伐!

  

Arduino控制器我将 PCA9685 16 通道 PWM 控制器直接安装到我的机械臂上,以便我可以使用 I2C 总线控制所有电机。

  

虽然我现在对机器人手臂有很好的计划,但我只需要一个简单的控制器来调整所有五个伺服电机的位置。我是围绕 Arduino Nano 来设计的。

  

Arduino Nano我的 Arduino 项目通常基于 Arduino Uno,它是一种流行且廉价的微控制器板,具有大量输入和输出。但有时它不符合要求。这次就是。

  

我想构建一个具有 5 个电位器的控制器,分别控制每个电机。然后它会通过 I2C 总线将信息发送到 PCA9685 以控制伺服系统。我还希望它能够轻松升级为使用 6 个电位计用于 6 DOF 臂(基本上是我的 5 DOF 臂,底部带有转盘)。

  

Arduino Uno 有 6 个模拟输入,因此乍一看似乎非常适合这项工作。但是有一个问题!在此设计中有两个模拟输入不能用。

  

Arduino Uno 上的模拟输入 A4 和 A5 作为 I2C 总线上的 SDA(数据)和 SCL(时钟)线执行双重任务。即使您的 Uno 具有单独的 SDA 和 SCL 引脚,它们也只是在内部连接到 A4 和 A5。

  

因此,如果您使用 I2C,那么您就不能使用模拟引脚 A4 和 A5,它们是共用的。

  

而Arduino Nano 有八个模拟输入,比 Uno 多两个。因此,即使 Nano 用引脚 A4 和 A5 作I2C通讯,它仍然有足够的剩余模拟输入来完成这项工作。

  

即使我最终添加了第六个电位器!

  

Nano 在大多数方面与 Uno 一样易于使用,尤其是当您将其安装到无焊面包板上或使用适配器插座时。请记住将 Arduino IDE 中的开发板类型更改为“Arduino Nano”,否则在编译代码时会出现错误。

  

为控制器接线我们简易型机械臂控制器的接线非常简单,尤其是当我们使用 PCA9685 进行伺服连接时。

  

为了减少任何混乱,我在两个图表上显示了接线。这与我将 PCA9685 直接安装在手臂上的安排相匹配。如果您希望将 PCA9685 安装在用于 Arduino Nano 的同一块板或面包板上,这取决于您。

  

我喜欢直接安装在手臂上的 PCA9685,因为我认为它可以减少接线并避免延长任何伺服电机电缆。而且我还打算在我的手臂上安装其他 I2C 设备,因此为所有这些设备设置一个 I2C 连接是有意义的。

  

  

我们接线图的“Arduino 部分”有 Nano 和 5 个电位器。控制器一侧接地,另一侧从 Arduino Nano 获得 5 伏电压。

  

每个电位计的输出连接到 Arduino Nano 上的模拟输入,如下所示:

  

底座Base - A0肘部Elbow - A1手腕Wrist – A2关节Grip Pivot – A3夹爪Grip Jaws – A6请注意,A4 和 A5 用于 I2C 连接。

  

现在让我们转到连接的 PCA9685 一侧。

  

  

I2C 连接到 PCA9685 末端的一个连接器,任一连接器都可以工作。

  

然后,您需要将 5 个(或 6 个)伺服电机连接到该模块。确保以正确的方式连接。

  

最后,您将需要一个具有足够电流来驱动五个伺服电机的电源。6 伏 2 安电源将是理想的选择。电源直接连接到 PCA9685 模块上的连接器。

  

一旦你把它全部连接起来,就该编写一些代码了!

  

Arduino代码此处提供了简单机械臂控制器的代码。

  

该草图使用了 Adafruit PWM 库,您需要将其安装到 Arduino IDE 中。只需在库管理器中搜索“Adafruit PWM”,它应该是第一个结果。

  

如果您需要安装库的帮助或想了解有关此库和 PCA9685 的更多信息,请查看我关于使用伺服电机的文章。

  

/*  Basic Robot Arm Controller  robot-arm-control-basic.ino  Controls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM Controller  Uses Adafruit PWM library  Uses 5 potentiometers for input (can be modified for 6)   DroneBot Workshop 2018  https://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             50 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // Define Potentiometer Inputs int controlBase = A0;int controlElbow = A1;int controlWrist = A2;int controlPivot = A3;int controlJaws = A6; // Define Motor Outputs on PCA9685 board int motorBase = 0;int motorElbow = 1;int motorWrist = 2;int motorPivot = 3;int motorJaws = 4; // Define Motor position variablesint mtrDegreeBase;int mtrDegreeElbow;int mtrDegreeWrist;int mtrDegreePivot;int mtrDegreeJaws; void setup(){  // Setup PWM Controller object  pwm.begin();  pwm.setPWMFreq(FREQUENCY);} // Function to move motor to specific positionvoid moveMotorDeg(int moveDegree, int motorOut){  int pulse_wide, pulse_width;   // Convert to pulse width  pulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);  pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);    //Control Motor  pwm.setPWM(motorOut, 0, pulse_width);} // Function to convert potentiometer position into servo angleint getDegree(int controlIn){  int potVal,srvDegree;    // Read values from potentiometer  potVal = analogRead(controlIn);    // Calculate angle in degrees  srvDegree = map(potVal, 0, 1023, 0, 180);    // Return angle in degrees  return srvDegree;  } void loop() {   //Control Base Motor    // Get desired position  mtrDegreeBase = getDegree(controlBase);  // Move motor  moveMotorDeg(mtrDegreeBase,motorBase);      //Control Elbow Motor    // Get desired position  mtrDegreeElbow = getDegree(controlElbow);  // Move motor  moveMotorDeg(mtrDegreeElbow,motorElbow);      //Control Wrist Motor    // Get desired position  mtrDegreeWrist = getDegree(controlWrist);  // Move motor  moveMotorDeg(mtrDegreeWrist,motorWrist);      //Control Pivot Motor    // Get desired position  mtrDegreePivot = getDegree(controlPivot);  // Move motor  moveMotorDeg(mtrDegreePivot,motorPivot);      //Control Jaws Motor    // Get desired position  mtrDegreeJaws = getDegree(controlJaws);  // Move motor  moveMotorDeg(mtrDegreeJaws,motorJaws);    // Add short delay  delay(20); }该代码包括 Adafruit PWM 库和 Wire 库,这对于通过 I2C 总线进行通信至关重要。

  

为 PWM 控制器定义了一些常数,PWM 信号的最小和最大脉冲宽度以及信号的频率。代码中的值将适用于 DF Robot 5 DOF 机器人手臂套件随附的电机。

  

接下来定义了许多变量:

  

“control”变量,代表电位计所连接的模拟端口。“motor" 变量代表 PCA9685 板上 PWM 输出。“ mtrDegree ”变量表示您希望电机轴定位到的角度(从 0 到 180)。在设置中,我们只初始化 PWM 对象并将 PWM 振荡器的频率设置为 50 Hz,这是模拟伺服电机的标准。

  

然后我们定义两个函数:

  

moveMotorDeg – 此函数将电机名称和位置(以度为单位)作为输入。然后它将请求的电机移动到该位置。getDegree – 此函数将电位计名称作为输入并以度数输出位置。由于我们定义了两个函数,循环非常简单。这确实是相同的程序重复五次,每个电机一次。

  

电位计位置是使用getDegree函数确定的。然后将此信息传递给moveMotorDeg函数以将相应的电机移动到所需位置。

  

在为每个电机执行此例程后,会产生短暂的延迟,然后循环重新开始。结果是伺服电机响应电位计位置而移动。

  

测试机械臂将所有东西连接起来并提供合适的电源,然后准备测试您的手臂。

  

确保将手臂牢固地固定在有足够质量支撑它的底座上。当你第一次给手臂加电时,不要让你的手和手指挡住你的手,舵机会立即移动到位,它们不会因为你的手指而停下来!

  

手臂很结实,能够举起合理的重量。如果您使用过像 MeArm 这样的小型实验臂,那么您会发现这是一个显著的改进。

  

抓手特别有用,它实际上能够以可重复的方式拾取小物件。

  

花几个小时把玩一下你的新机械手臂,这让人上瘾!

  

展开机械臂这样我们完成了手臂的构建,但还可以做些后续的事情。这实际上只是 DFRobot 5 DOF 机械臂项目的开始,至少对我来说是这样。

  

我已经在我的下一批实验中安装了一个传感器。这是一个 MPU5060 陀螺仪和高度计设备,我安装在手臂手腕上以测量位置。它们用 I2C通讯,因此接口很简单。

  

摄像头、距离传感器、限位传感器、力敏电阻器——对于像这样的坚固机器人手臂可以连接的东西,天空是无限的。

  

所以我可以保证你会在车间看到更多的手臂。将此文章和视频视为系列的一部分。

  

我希望这篇文章能激励你建造一个像这样的机械臂。DFRobot 套件价格低廉,并且包含一些可以使用很长时间的高质量部件。

  

我很想听听你的机械臂设计。请在下面的评论中告诉我您的创作以及您在制作手臂时可能遇到的任何问题。

相关文章