如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

构建东西并让它们按照我们想要的方式工作,一直很有趣。虽然已经同意这一点,但建造可以飞行的东西肯定会在业余爱好者和硬件修补匠中引起更多的焦虑。是的!我说的是滑翔机、直升机、飞机,主要是多旋翼飞机。今天,由于在线提供的社区支持,自己构建一个变得非常容易。所有飞行事物的一个共同点是它们使用 BLDC 电机,那么这个BLDC 电机是什么?为什么我们需要它来飞行东西?它有什么特别之处?如何购买合适的电机并将其与您的控制器连接?什么是ESC,我们为什么要使用它?如果您有这样的问题,那么本教程是您的一站式解决方案。

所以基本上在本教程中,我们将使用 Arduino 控制无刷电机。这里A2212/13T 无传感器 BLDC外转子电机与 20A 电子速度控制器 (ESC) 一起使用。这种电机通常用于制造无人机。

所需材料

A2212/13T 无刷直流电机

电调 (20A)

电源 (12V 20A)

阿杜伊诺

电位计

了解无刷直流电机

BLDC 电机代表无刷直流电机,由于其平稳运行,它通常用于吊扇和电动汽车。前面详细解释了 BLDC 电机在电动汽车中的使用。与其他电机不同,BLDC 电机有三根电线从中出来,每根电线形成自己的相位,因此为我们提供了一个三相电机。等。。。什么!!??

是的,尽管 BLDC 电机被认为是直流电机,但它们在脉冲波的帮助下工作。电子速度控制器(ESC) 将来自电池的直流电压转换为脉冲,并将其提供给电机的 3 根电线。在任何给定时间,只有电机的两相通电,因此电流通过一相进入并通过另一相离开。在此过程中,电机内部的线圈通电,因此转子上的磁铁与通电线圈对齐。然后接下来的两根电线由电调通电,这个过程继续使电机旋转。电机的速度取决于线圈通电的速度,电机的方向取决于线圈通电的顺序。我们将在本文后面了解有关 ESC 的更多信息。

有许多类型的 BLDC 电机可供选择,让我们来看看最常见的分类。

内流道和外流道 BLDC 电机:在转轮中,BLDC 电机的工作方式与任何其他电机一样。也就是说,电机内部的轴在外壳保持固定的情况下旋转。虽然外流道 BLDC 电机正好相反,但电机的外壳随着轴旋转,而内部线圈保持固定。外转子电机在电动自行车中非常有优势,因为外壳(旋转的外壳)本身被制成轮胎的轮辋,因此避免了耦合机构。此外,外转轮电机往往比转轮类型产生更大的扭矩,因此它成为电动汽车和无人机的理想选择。我们在这里使用的一个也是外流道类型。

注意:还有另一种类型的电机称为无芯 BLDC 电机,也用于袖珍无人机,它们具有不同的工作原理,但现在让我们为了本教程而跳过它。

传感器和无传感器 BLDC 电机:为了使 BLDC 电机在没有任何抖动的情况下旋转,需要反馈。也就是说,电调必须知道转子中磁铁的位置和极点,以便根据定子通电。这些信息可以通过两种方式获取;一种是在电机内部放置霍尔传感器。霍尔传感器将检测磁铁并将信息发送到电调,这种类型的电机称为感应式 BLDC 电机,用于电动汽车。第二种方法是使用磁铁穿过线圈时产生的反电动势,这不需要额外的硬件或电线,相线本身用作反馈来检查反电动势。这种方法用于我们的电机,在无人机和其他飞行项目中很常见。

为什么无人机和其他多旋翼飞行器使用 BLDC 电机?

有许多类型的酷无人机,从四轴飞行器到直升机和滑翔机,一切都有一个共同的硬件。这就是 BLDC 电机,但为什么呢?为什么他们使用与直流电机相比有点贵的 BLDC 电机?

如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

这有很多正当的原因,一个主要原因是这些电机提供的扭矩非常高,这对于快速获得/放松推力以起飞或降落无人机非常重要。此外,这些电机可用作外转轮,这再次增加了电机的推力。选择 BLDC 电机的另一个原因是其平稳的无振动运行,这对于我们的无人机来说非常理想,稳定在半空中。

BLDC 电机的功率重量比非常高。这非常重要,因为无人机上使用的电机应该具有高功率(高速和高扭矩),但也应该重量更轻。可以提供与 BLDC 电机相同的扭矩和速度的直流电机的重量将是 BLDC 电机的两倍。

为什么我们需要ESC,它的功能是什么?

众所周知,每个 BLDC 电机都需要某种控制器将来自电池的直流电压转换为脉冲,为电机的相线供电。该控制器称为ESC,代表电子速度控制器。控制器的主要职责是按顺序激励 BLDC 电机的相线,使电机旋转。这是通过感测每根导线的反电动势并在磁体穿过线圈时精确地为线圈供电来完成的。因此,ESC 内部有很多硬件的出色之处,这超出了本教程的范围。但仅举几例,它具有速度控制器和电池消除器电路。

如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

基于 PWM 的速度控制:电调可以通过读取橙色线上提供的 PWM 信号来控制 BLDC 电机的速度。它的工作原理与伺服电机非常相似,提供的 PWM 信号应具有 20ms 的周期,并且可以改变占空比以改变 BLDC 电机的速度。由于相同的逻辑也适用于伺服电机来控制位置,因此我们可以在Arduino程序中使用相同的伺服库。

电池消除器电路 (BEC):几乎所有的电调都带有电池消除器电路。顾名思义,该电路消除了微控制器对单独电池的需求,在这种情况下,我们不需要单独的电源为Arduino供电;ESC本身将提供稳定的+5V,可用于为我们的Arduino供电。有许多类型的电路可以调节此电压,通常它将是廉价电调的线性调节,但您也可以找到带有开关电路的电路。

固件:每个ESC都有一个由制造商写入的固件程序。此固件极大地决定了您的 ESC 如何响应;一些流行的固件是传统,Simon-K和BL-Heli。该固件也是用户可编程的,但我们不会在本教程中详细介绍。

BLDC和ESC的一些常见术语:

如果您刚刚开始使用 BLDC 电机,那么您可能会遇到制动、软启动、电机方向、低电压、响应时间和提前等术语。让我们来看看这些术语的含义。

制动:制动是 BLDC 电机在油门移除后立即停止旋转的能力。这种能力对于多旋翼飞行器非常重要,因为他们必须更频繁地改变转速才能在空中机动。

软启动:软启动是 BLDC 电机与齿轮相关联时要考虑的重要功能。当电机启用软启动时,它不会突然开始旋转得很快,无论油门有多快,它总是会逐渐增加速度。这将有助于我们减少与电机相连的齿轮(如果有)的磨损。

电机方向:BLDC 电机中的电机方向在运行过程中通常不会改变。但在组装时,用户可能需要改变电机的旋转方向。改变电机方向的最简单方法是简单地相互更换电机的任何两根电线。

低压停止:校准后,我们始终需要我们的 BLDC 电机以相同的特定速度运行,以获得特定的节气门值。但这很难实现,因为随着电池电压的降低,电机倾向于降低其速度,以达到相同的油门值。为了避免这种情况,我们通常对ESC进行编程,使其在电池电压达到阈值以下时停止工作,此功能称为低电压停止,在无人机中很有用。

响应时间:电机根据油门的变化快速改变其速度的能力称为响应时间。响应时间越短,控制效果就越好。

进展:前进是一个问题,或者更像是 BLDC 电机的错误。所有 BLDC 电机都有一点进步。也就是说,当定子线圈通电时,由于它们上存在永磁体,转子被吸引到它身边。被吸引后,转子倾向于在线圈断电之前沿同一方向向前移动一点,然后下一个线圈通电。这种运动称为“前进”,它会产生抖动、升温、发出噪音等问题。因此,这是一个好的ESC应该避免的事情。

好的,现在有足够的理论让我们通过将电机与Arduino连接来开始使用硬件。

Arduino BLDC 电机控制电路图

以下是使用Arduino控制无刷电机的电路图:

如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

将 BLDC 电机与 Arduino 接口的连接非常简单。ESC 需要大约 12V 和 5A 的电源(最小值)。在本教程中,我使用RPS作为电源,但您也可以使用锂聚合物电池为ESC供电。电调的三相线应连接到电机的三相线,没有顺序连接这些电线,您可以按任何顺序连接它们。

警告:有些电调上没有连接器,在这种情况下,请确保您的连接牢固,并使用绝缘胶带保护裸露的电线。由于会有高电流通过相位,任何短路都会导致电调和电机的永久性损坏。

ESC本身的BEC(电池消除器电路)将调节+5V,可用于为Arduino板供电。最后,为了设置 BLDC 电机的速度,我们还使用连接到 Arduino 的 A0 引脚的电位计

如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

使用 Arduino 进行 BLDC 速度控制的程序

我们必须创建一个占空比从0%到100%的PWM信号,频率为50Hz。应使用电位计控制占空比,以便我们可以控制电机的速度。执行此操作的代码类似于控制伺服电机,因为它们还需要频率为 50Hz 的 PWM 信号;因此,我们使用与Arduino相同的伺服库。完整的代码可以在本页底部找到,下面我用小片段解释代码。如果您不熟悉Arduino或PWM,请首先将PWM与Arduino一起使用,并使用Arduino控制伺服。

PWM信号只能在硬件支持PWM的引脚上产生,这些引脚通常用~符号提及。在Arduino UNO上,引脚9可以生成PWM信号,因此我们将ESC信号引脚(橙色线)连接到引脚9,我们还使用以下行提到了相同的inn代码

ESC.attach(9);

我们必须生成占空比从0%到100%变化的PWM信号。对于 0% 占空比,POT 将输出 0V (0),对于 100% 占空比,POT 将输出 5V (1023)。这里的电位器连接到引脚A0,因此我们必须使用模拟读取功能从POT读取模拟电压,如下所示

int throttle = analogRead(A0);

然后我们必须将值从 0 到 1023 转换为 0 到180,因为值 0 将产生 0% PWM,值 180 将产生 100% 占空比。任何高于 180 的值都没有意义。因此,我们使用map函数将值映射到0-180,如下所示。

throttle = map(throttle, 0, 1023, 0, 180);

最后,我们必须将此值发送到伺服功能,以便它可以在该引脚上生成PWM信号。由于我们已将伺服对象命名为 ESC,因此代码如下所示,其中可变油门包含 0-180 之间的值,以控制 PWM 信号的占空比

ESC.write(throttle);

Arduino BLDC 电机控制

根据电路图进行连接,并将代码上传到Arduino并启动ESC。确保已将 BLDC 电机安装在某物上,因为电机在旋转时会跳来跳去。一旦设置通电,您的 ESC 将发出欢迎音并继续发出哔哔声,直到油门信号在阈值限制内,只需从 0V 逐渐增加 POT,蜂鸣音就会停止,这意味着我们现在提供高于下限阈值的 PWM 信号,随着您进一步增加,电机将开始缓慢旋转。您提供的电压越多,电机的速度就越快,最后当电压达到阈值上限以上时,电机将停止。然后,您可以重复该过程。

如何使用Arduino控制无刷电机-arduino无刷电机驱动代码

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:如何使用Arduino控制无刷电机-arduino无刷电机驱动代码 https://www.yhzz.com.cn/a/6443.html

上一篇 2023-04-13 17:22:25
下一篇 2023-04-13 17:29:15

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。