亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

将任何直流电机转变为定制 360° 伺服电机 - 分步指南

在本教程中,我们将学习如何将任何直流电机变成具有多种功能的独立定制伺服电机。与限制运动 180 或 270 度的常规舵机不同,该舵机具有 360 度的无限范围,除此之外,我们还能够将旋转范围调整为我们需要的任何值。

我认为这非常方便,最重要的是,我们甚至可以调整舵机的中心点。所以,我们可以同时调整中心点和旋转范围。

您可以观看以下视频或阅读下面的书面教程。

另一个功能是我们可以调整灵敏度或伺服器响应我们的输入的速度。说到输入,我们可以有三种不同的输入模式。

我们可以使用模拟电压输入或使用电位器来控制舵机,我们可以使用RC发射器来控制舵机,也可以通过PC或笔记本电脑上的串行监视器输入角度值来通过串行端口控制舵机。

我们还可以同时做到这一点,通过串行监视器输入值来控制伺服系统,并使用 RC 发射器手动移动伺服系统。伺服电机将始终知道其当前位置,并可以在串行监视器上看到它。 

该伺服电机功能列表的顶部是连续旋转模式。这是正确的。即使在这种连续旋转模式下,我们也可以控制和跟踪伺服电机的位置。我们可以将伺服电机轴设置为无限圈数到任意位置。  

所有这一切都得益于该伺服电机采用的 12 位编码器、AS5600 磁性旋转位置传感器以及用于驱动直流电机的 PID 控制。

我制作了这个定制伺服电机控制器板,其中包括自己的微控制器和其他所有部件,可以轻松地将任何直流电机变成独立的伺服电机。

我们只需将电路板放置在输出轴的中心(包括轴上的特定磁铁),连接任何尺寸的额定电流高达 3.5A 的直流电机,用 12V 为整个系统供电,就这样,我们从普通直流电机得到了具有所有这些功能的伺服电机。

现在,我将引导您完成制作这款定制伺服电机的整个过程,以便您也可以自己制作一个。我将解释伺服电机、闭环控制器、PID控制器的工作原理,如何为其设计定制PCB和变速箱,并解释其背后的代码。

伺服电机工作原理

为了说明伺服电机的工作原理,我们先拆开一个典型的RC伺服电机,看看里面有什么。

我们可以注意到它有一个小型直流电机、一个控制器板、一个电位器和一个三线连接,两根线用于电源,一根用于输入信号。此外,还有一些齿轮用于降低直流电机的速度并增加扭矩。 

这是大多数 RC 或业余爱好伺服电机的典型设置。电位器安装在直流电机的输出轴上,充当位置传感器,它告诉控制器伺服电机轴的当前位置。控制器板根据输入信号(所需位置)和从电位计获得的反馈实际位置来控制直流电机。这代表了一个闭环控制系统。

输入信号或所需位置与我们从位置反馈传感器获得的电机实际位置进行比较。出现的差异称为误差,然后在控制器中进行处理,控制器命令电机移动,直到到达所需位置。

如何制作定制伺服电机

因此,如果我们想使用比这些典型 RC 伺服系统使用的更大的直流电机来构建我们自己的伺服电机,我们可以实现相同的闭环控制系统。

我们只需要一个以某种方式连接到输出轴的位置传感器和一个用于驱动直流电机的微控制器。  

现在对于位置传感器,最简单的解决方案是使用一个简单的电位器,就像我们在 RC 伺服系统中看到的那样。然而,这些类型电位器的问题是它们的旋转范围有限,只有270度,这直接限制了伺服电机的旋转范围。还有其他类型的电位器可以多圈,可以提供更好的范围和分辨率,但它们的旋转仍然有限。

如果我们需要伺服电机具有无限范围的旋转,那么我们就需要使用编码器。编码器是机电设备,可以跟踪无限旋转的轴的角位置。编码器有多种类型,例如增量式或绝对式,或者取决于其传感技术,光学、磁性或电容式。当然,它们各有各的优点和缺点。

AS5600 编码器 - 磁性旋转位置传感器

我选择使用磁性编码器或 AS5600 磁性旋转位置传感器,因为它非常紧凑且易于实现提供高精度或分辨率的编码器。看看这个微芯片有多小就知道了。

它内置霍尔效应传感器,可以检测磁场方向的变化。因此,我们只需将磁铁固定在电机的输出轴上,并将其与微芯片保持 0.5 至 3mm 的距离即可。

现在,当电机轴和磁铁旋转时,霍尔效应传感器将捕获磁场方向的变化。借助内置的12位A/D转换器,AS5600传感器每转或360度旋转可输出4096个位置。

这意味着,它可以检测小至 0.0878 度的角度位置变化。这是相当令人印象深刻的,而且事实上它非常实惠且易于获得,它是定制伺服电机的正确选择。 

好吧,那么我们还需要什么呢,一个微控制器和一个直流电机驱动器。我选择了可处理高达 3.5 安培电流的 DRV8871 直流电机驱动器和 Atmega328 微控制器。

我选择了它的表面贴装版本,因为它比 DIP 版本更紧凑,我的目标是制作尽可能小的定制 PCB,我可以在上面包含所有内容,以便伺服器可以作为独立设备工作。

定制伺服电机电路图

这是这款定制伺服电机的完整电路图。

您可以从以下链接获取该项目所需的组件:

披露:这些是附属链接。作为亚马逊合作伙伴,我通过符合条件的购买赚取收入。

因此,我们拥有 Atmega328 微控制器及其推荐的最低限度电路,其中包括一个 16Mhz 振荡器、几个电容器和一个电阻器。

为了给微控制器和其他需要 5V 的组件供电,我们使用 AMS1117 稳压器,它将 12V 电源输入降至 5V。

这是 AS5600 位置传感器及其推荐电路,其中包括用于 IC2 通信的两个电容器和两个上拉电阻。

DRV8871 直流电机驱动器仅需要一个限流电阻和两个去耦电容。然后我们有两个电位器连接到微控制器的模拟输入,一个用于调整旋转范围,另一个用于调整舵机的灵敏度。按钮用于设置舵机中心点,双向拨码开关用于选择舵机工作模式。有一个用于伺服输入的引脚接头,可以是模拟电压输入,也可以是来自 RC 接收器的数字 PWM 输入,还有一个 5V 引脚和一个接地引脚。还有一个引脚接头,用于通过 SPI 协议和串行端口对微控制器进行编程。 

以下是该电路及其工作流程的回顾。输入或所需的角度位置通过这两个引脚接收,它可以是来自电位计的模拟电压,也可以是来自 RC 接收器的数字 PWM 信号。输入进入微控制器,与编码器或 AS5600 位置传感器检测到的实际角度位置进行比较。该传感器通过IC2协议与微控制器通信。

然后,微控制器进行数学运算,计算误差,并根据误差将 PWM 信号发送到 DRV8871 驱动器,驱动直流电机直至达到所需位置。 

整个电路采用12V供电,AS1117稳压器为单片机及其他部件提供适当的5V电压。

PCB 设计

根据电路图,我尝试将PCB设计得尽可能小,结果是40x40mm。

我将编码器定位在 PCB 的底部,正好位于 PCB 的中心点,这样它就可以很容易地安装并与伺服器的输出轴对齐。

所有其他部件均位于另一侧,不会干扰编码器和输出轴。

我从 PCBWay 订购了 PCB。在这里我们可以简单地上传Gerber文件,选择我们的PCB的属性,并以合理的价格订购。

我把PCB设计成4层,中间是GND,这样就增加了一些价格。除了 PCB 颜色我选择为白色之外,我没有更改任何默认属性,并且我勾选了我接受将表面处理更改为沉金(如果适用),无需额外付费。

您可以从 PCBWay 项目共享社区找到并下载 Gerber,也可以通过该社区直接订购 PCB。

然而,几天后 PCB 就到了。 PCB 的质量很好,一切都和设计中的一样,而且我得到的是沉金表面处理。

好吧,现在我们可以继续将组件焊接到上面。我从较小的组件开始,例如 LED 指示灯、电容器和电阻器。

这实际上是我第一次焊接这种小型 SMD 元件,而且我真的非常非常不擅长。 

最具挑战性的是焊接 Atmega328 微控制器,因为引脚非常小并且彼此非常接近,但我设法做到了。

AS5600 编码器微芯片很容易焊接在 PCB 的背面,以及更大的通孔组件,如拨码开关、电位器、端子块和排针。

不管怎样,这是控制器板的最终外观,我认为它毕竟还不错。

现在是时候为直流电机和该控制板制作合适的变速箱了。 

自定义伺服 3D 模型

我使用 Onshape 为这款定制伺服电机设计了变速箱。变速箱的设计当然取决于直流电机。正如我提到的,我们可以将任何尺寸的直流电机与我们刚刚制作的控制器板结合使用。

这里我使用直径 37mm 的直流电机和输出 50RPM 的内置变速箱。 50RPM 对于伺服电机来说是不错的速度,但我想比这个速度低一点,以获得更好的扭矩,所以我制作了一个减速 3 倍的变速箱。为此,我使用了人字形齿轮,因为它们高效且易于使用 3D 打印机制作。

当然,在这里我们可以自由地按照我们想要的方式设计变速箱,因为这取决于我们想要使用的直流电机以及我们想要获得的输出速度。 

我将控制器板放置在该变速箱的背面,并将其完美对齐在输出轴的中心。

如果我们想直接使用直流电机轴作为输出,我们可以使用1:1齿轮组,这样我们就可以正确跟踪轴的位置。或者在这种情况下我们也可以使用皮带系统。就像我说的,我们在制造变速箱方面有无限的可能性。 

下载3D模型和STL文件

您可以使用 Onshape 直接在网络浏览器上查看和探索此定制伺服电机的 3D 模型。 (您需要一个 Onshape 帐户,您可以创建一个免费帐户供在家使用)

当然,您也可以从这里下载3D模型,以及3D打印零件所需的STL文件:

步骤文件:

用于3D打印的STL文件:

组装定制伺服器

这是此构建的 3D 打印零件,以便我们可以开始组装伺服电机。

除了它们之外,我们还需要一些 M3 螺栓和螺纹嵌件,以及一些轴承。 

首先,我用一些 8mm 长度的 M3 螺栓将直流电机固定在底板上。

然后我们就可以将两个齿轮安装到位。较小的齿轮直接连接到直流电机轴,较大的齿轮将作为伺服器的输出。不过,其输出轴是由两部分组成的。

我在该输出轴部分的两侧安装了螺纹嵌件,一侧用于将齿轮连接到其上,另一侧用于将东西连接到伺服器的输出上。 

我还在较小的齿轮上安装了螺纹嵌件,用于将其固定到直流电机轴上。现在我们可以将配对的齿轮滑入其位置。由于是人字齿轮,必须同时滑入到位,否则一一插入就无法配对。

我使用平头螺钉将小齿轮固定到直流电机轴上。我向直流电机施加 12V 电压来检查齿轮组是否正常工作。 

通过插入侧板、输出轴滚珠轴承和顶盖即可完成齿轮箱的组装。

我在背板上安装了一些 M3 螺纹嵌件,这样我们就可以用一些 20 毫米长的 M3 螺栓来固定整个组件。我再次测试了变速箱,效果很好。我们可以注意到输出轴如何在背面旋转,这里我们需要插入 AS5600 编码器将跟踪的磁铁。

我们使用一些 M2 螺栓和螺母将控制器板固定到变速箱上。 AS5600 位置传感器现在与磁铁完美对齐,因此当输出轴旋转时,它将正确测量磁场的变化。

这里请注意,永磁体的磁化方向非常重要。根据它是轴向磁化还是径向磁化,我们应该将磁铁垂直或平行于 AS5600 IC 放置。

我最终改变了磁铁的方向,因为它没有正确的磁化强度,因此 AS5600 编码器无法测量它。

接下来,我将两根电线焊接到直流电机上,并使用端子块将电机连接到控制器。至于电源,我将两根电线连接到电源端子块上,另一侧有一个用于连接 12V 电源的直流电源连接器。 就这样,我们定制的伺服电机就完成了。

对控制器进行编程

现在剩下要做的就是赋予这个伺服系统生命,或者对控制器进行编程。为此,首先我们需要将引导加载程序烧录到 ATmega328p 微控制器。如果没有引导加载程序,微控制器将无法理解我们将发送给它的语言或代码。 

引导加载程序烧录

要将引导加载程序烧录到 ATmega328p,我们需要一块 Arduino 板,在我的例子中,我将使用一块 Arduino Nano 板。

我们将使用 SPI 通信,因此我们需要连接 Arduino 板和控制器板上合适的 SPI 引脚。

现在,使用 Arduino IDE,我们需要打开 ArduinoISP 示例草图并将其上传到 Arduino Nano 板。使用此代码,Arduino Nano 现在能够将引导加载程序烧录到 ATmega328 微控制器。 

接下来,从“工具”菜单中,作为程序员,我们需要选择 Arduino 作为 ISP,然后单击“刻录引导加载程序”。

在烧录引导加载程序时,我们应该注意到Arduino NANO灯会频繁闪烁,这将导致引导加载程序烧录成功。 

代码上传

完成后,现在我们可以借助 USB 转 UART 接口模块对代码进行编程或上传到控制器板。

控制器板具有专用引脚,可以轻松连接它们,就像电路图中所示的那样。 

现在我们可以打开我制作的这个定制伺服系统的代码并将其上传到控制器。不过,在此之前,我们应该首先安装 AS5600 传感器和 PID 控制的库。我们可以通过 Arduino IDE 库管理器轻松地做到这一点。一旦我们点击上传按钮,代码将通过 USB 转 UART 接口模块写入我们的 ATmega328 控制器。

就这样,我们的定制伺服电机就完成了。现在我们可以连接一个电位器来测试它。请注意,模拟输入连接到控制器板上的“S”引脚,而不是“A”引脚。

在设计PCB时,我将这两个引脚错误地连接到了ATmega328。然后我们可以通过拨码开关选择模拟输入模式并给舵机供电。

在这里,我们可以借助电位器的模拟输入来控制伺服电机的位置。我们已成功将直流电机转换为伺服电机。

源代码

现在我们来看看这个定制伺服电机的代码。

<前>08

代码概述

因此,我们通过读取编码器值或轴的当前位置来启动循环。

<前>17

然后,如果我们处于连续旋转模式,我们接受来自串行监视器的值并将它们用作 PID 控制器的设定值或所需角度。

<前>25

如果输入模式设置为电位器,我们读取它的模拟输入,并根据我们转动它的距离来校正设定点值。

<前>39

如果输入是 RC 接收器,我们会进行相同的设定点校正。 

在这里,我们将原始编码器值转换为角度值,并通过这些 if 语句我们跟踪轴的当前位置位于哪个象限。

<前>47

有了这些信息,我们就可以跟踪轴如何旋转以及何时旋转一整圈。总角度是PID控制器的输入值。

<前>55

另一方面,如果处于有限旋转模式,则首先读取用于调整旋转范围的电位器值,并相应地调整左右旋转极限。

<前>68

如果输入模式是电位器,我们使用其值作为PID控制器的设定值。

<前>70

如果输入模式是 RC 接收器,我们从接收器读取传入的 PWM 值并将该值用作设定值。

<前>87

为了设置不同的中心点,我们检查是否按下了按钮并将该位置捕获为新的中心点。

<前>97

根据它,我们必须调整编码器的实际读数,并将其偏移新旧中心点之间的角度差。我们使用该值作为 PID 控制器的输入值。

<前>104

使用另一个电位器的模拟输入来调整 PID 控制器的比例增益,最后运行 PID 过程以获得输出值。

<前>111

我们使用该输出值通过 PWM 信号驱动直流电机(向左或向右,或处于静止位置),具体取决于 PID 控制器的输出值,或者取决于编码器读取的期望位置和实际位置之间的误差。

<前>127

这就是本视频的全部内容。请注意,代码没有得到很好的优化,还有改进的空间。

另外,如果您尝试重新创建此项目,您应该准备好进行故障排除。有很多事情可能会出错,尤其是在焊接那些小型 SMD 元件时。

我第一次尝试时就没有让这个伺服系统工作。最初,我在 PCB 上出现了一些错误的连接,然后我再次订购了 PCB 并进行了新的更新,但仍然需要进行几次尝试才能使其正常工作。 

本文的这一部分仍在构建中,请稍后查看......


制造工艺

  1. WiFi ESP8266 和 DHT22 传感器
  2. 高炉及相关辅助设备设计的重要方面
  3. 关于皮托管你需要知道的事情
  4. 现代造纸厂的精密水质监测和化学控制
  5. Circuito.io 为圣帕特里克节提供的 Chug Meter
  6. 蓝色牛仔裤
  7. 焊接通风解释:类型、示例和安全提示
  8. 什么是激光束加工?- 类型和工作
  9. The Badland Brawler - 带有 Arduino 的遥控怪物卡车
  10. 生日快乐:灯光和声音
  11. 铸模和制模
  12. 金属铸件设计——铸件的寿命