一板网电子技术论坛

风筝
发表于: 2018-7-26 11:28:26 | 显示全部楼层

制作一些小物件,并且让它们按照自己想要的方式,这一直是一项非常有趣的事情。在达成一致意见的同时,制作飞行器会让业余爱好者显得不是那么很自信。这里,我所说的是滑翔机、直升机、飞机和多功能运输机。今天,由于在线提供社区的支持,很容易自己制作一个类似的产品。在这些飞行器中,它们都使用BLDC电机,那么什么是BLDC电机?为什么我们需要它来飞行?有什么特别之处呢?如何购买合适的电机并与控制器连接?什么是ESC,我们为什么要使用它?如果您有这些问题,那么本篇文章可以解决您所有的疑惑。


因此,在本篇文章中,我们将使用Arduino开发板和20A电子速度控制器(ESC)控制A2212 / 1T无感BLDC外转子电机(通常用于制作无人机)的速度。


所需的材料

●    A2212 / 13T BLDC电机

●    ESC控制器(20A)

●    电源(12V 20A)

●    Arduino开发板

●    电位器


了解BLDC电机

BLDC电机表示无刷直流电机,由于其平稳运行,常用于吊扇和电动汽车。与其他电机不同,BLDC电机引出来三根导线,每根导线形成自己的相位,因此对于我们来说,它是一个三相电机。


是的,虽然BLDC电机被认为是直流电机,它们工作在脉冲波模式下。电子速度控制器(ESC)将来自电池的直流电压转换为脉冲,并将其提供给电机的3根电线。在任何给定时间,只有两相电动机将被供电,因此电流通过一相进入并通过另一相。在此过程中,电动机内的线圈通电,因此转子上的磁铁自身与通电线圈对齐。接下来的两根导线由ESC通电,继续该过程使电机旋转。电动机的速度取决于线圈通电的速度,电动机的方向取决于线圈通电的顺序。我们将在本文后面详细了解ESC。


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

●    内转子和外转子BLDC电机:内转子BLDC电机的工作方式与其他电机相同。也就是说,电机内部的轴旋转,而外壳保持固定。外转子BLDC电机正好相反,电机的外壳随着轴一起旋转,而线圈内部保持固定。外转子电机在电动自行车中是非常有优势的,因为外壳(旋转的外壳)本身被制成轮胎的轮辋,因此避免了联接机构。此外,外转子电机往往比内转子电机提供更大的扭矩,因此它成为EV和无人机的理想选择。我们在这里使用的电机也是外转子电机。

注意:还有另一种电机,称为无芯BLDC电机,也用于袖珍无人机,它们的工作原理不同,本篇文章不对其进行介绍。


●    有传感器和无传感器BLDC电机:对于无需任何加速度即可旋转的BLDC电机,需要一个反馈信号。也就是说,ESC必须知道转子中磁铁的位置和极点,以便据此激励定子。这些信息可以通过两种方式获得:一种是将霍尔传感器放在电机内。霍尔传感器将检测磁铁并将信息发送到ESC,这种类型的电机称为Sensord BLDC电机,用于电动车辆。第二种方法是通过使用线圈在磁铁交叉时产生的反电动势,这不需要额外的硬件或电线,相线本身用作反馈来检查反电动势。我们的电机使用的是这种方法,常用于无人机和其他飞行项目。


为什么无人机和其他多功能直升机使用BLDC电机?

从四轮直升机到直升机以及滑翔机,有很多类型的无人机,所有这些飞行器都有一个共同的硬件。那就是BLDC电机,但为什么呢?为什么他们使用比直流电机贵一些的BLDC电机?

Brushless-DC-motor.jpg



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


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


为什么我们需要一个ESC,它的作用是什么?

我们知道每个BLDC电机都需要某种控制器来将电池的直流电压转换成脉冲,为电机的相线供电。该控制器称为ESC,表示电子速度控制器。控制器的主要职责是按顺序激励BLDC电机的相线,以便电机旋转。这是通过检测每根导线的反电动势来完成的,并在磁铁穿过线圈时准确地激励线圈。所以ESC内部有很多硬件亮点,我们这里不打算详细介绍。但是要提一下它有速度控制器和电池消除器电路。

Electronic-Speed-Controller-for-Brushless-DC-motor.jpg



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

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

●    固件:每个ESC都有一个由制造商写入的固件程序。该固件极大地决定了您的ESC如何响应;一些流行的固件是Traditional、Simon-K和BL-Heli。该固件也是用户可编程的,但我们在本教程中不会涉及到大部分内容。


BLDC和ESC的一些常用术语:

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

●    制动:制动是指除去油门后BLDC电机停止旋转的能力。这种能力对于多直升机非常重要,因为它们必须更频繁地改变它们的转速以在空中进行机动。

●    软启动:当BLDC电机与齿轮相关时,软启动是一个重要的特性。当电机启用软启动时,它不会突然开始非常快速地旋转,无论油门给出多快,它都会逐渐增加速度。这将有助于我们减少与电机连接的齿轮(如果有的话)的磨损。

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

●    低电压停止:一旦校准,我们总是需要我们的BLDC电机以相同的特定速度运行以获得特定的节流值。但这很难实现,因为当电池电压降低时,电机往往会在相同的节流值下降低速度。为避免这种情况,我们通常将ESC编程为在电池电压低于阈值时停止工作。此功能称为低电压停止,在无人机中非常有用。

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

●    超前(Advance):超前是一个问题,或者更像是BLDC电机的错误。所有BLDC电机都有一些超前。也就是说,当定子线圈通电时,转子被吸引向它,因为它们上存在永久磁铁。在被吸引之后,转子倾向于在线圈断电之前在相同方向上向前移动一点,然后下一个线圈通电。这种运动被称为“超前”,它会产生抖动、温升、发出噪音等问题。所以一个好的ESC应该避免该问题。


好了,我们已经有了足够的理论知识基础,现在让我们连接电机和Arduino开发板,开始认识硬件设计部分。

跳转到指定楼层
风筝
发表于: 2018-7-26 12:01:02 | 显示全部楼层

Arduino开发板控制BLDC电机的连接原理图

Circuit-Diagram-for-Controlling-Brushless-DC-motor-using-Arduino.png


BLDC电机与Arduino开发板的连接非常简单。 ESC需要一个最小12V/5A的电源。 在本篇文章中,我使用的是RPS作为电源,但您也可以使用Li-Po电池为ESC供电。 ESC的三相线应连接到电机的三相线,这些线的连接没有顺序,您可以按任意顺序连接它们。

注意:某些ESC控制器上没有连接接口,在这种情况下,请确保连接方式牢固,并使用绝缘胶带保护裸露的电线。由于会有大电流通过相线,任何短路都会导致ESC和电机永久性损坏。


ESC中的BEC(电池消除器电路)将会调节输出一个+5V,可用于向Arduino开发板供电。 最后为了设置BLDC电机的速度,我们还使用一个电位器,连接到Arduino的A0引脚。

Circuit-Hardware-for-Controlling-Brushless-DC-motor-using-Arduino.jpg


BLDC电机的Arduino程序

我们需要创建一个PWM信号,其占空比从0%变化到100%,频率为50Hz。使用电位器控制占空比,以便控制电机的速度。该操作的代码类似于控制伺服电机,因为它们也需要具有50Hz频率的PWM信号;因此我们使用来自Arduino的相同的伺服电机库。完整的代码可以在下面的本页末尾处找到。


PWM信号只能在硬件支持PWM的引脚上产生,这些引脚通常用〜符号表示。在Arduino UNO开发板上,引脚9可以产生PWM信号,所以我们将ESC信号引脚(橙色线)连接到引脚9;我们使用以下代码来表示这种连接:

  1. ESC.attach(9);
复制代码

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

  1. int throttle = analogRead(A0);
复制代码

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

  1. throttle = map(throttle, 0, 1023, 0, 180);
复制代码

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

  1. ESC.write(throttle);
复制代码

用Arduino控制BLDC电机

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

Controlling-Brushless-DC-motor-using-Arduino.jpg


如果您在使用此工作时遇到任何问题,请在本帖下面进行回复,以获取更多的技术帮助。


代码

本篇文章完整的代码如下所示:

  1. #include <Servo.h> //Use the Servo librarey for generating PWM
  2. Servo ESC; //name the servo object, here ESC

  3. void setup()
  4. {
  5. ESC.attach(9); //Generate PWM in pin 9 of Arduino
  6. }

  7. void loop()
  8. {
  9. int throttle = analogRead(A0); //Read the voltage from POT
  10. throttle = map(throttle, 0, 1023, 0, 180); //Map the values of 0-102 from pot to 0-180 bcs servo works only from 0-180
  11. ESC.write(throttle); //based on the value of throttle generate PWM signal
  12. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 377 | 回复: 691



手机版|

GMT+8, 2019-11-20 04:58 , Processed in 0.109374 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表