黄工无刷电机学习
直播中

余温重顾

9年用户 890经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

如何使用Arduino去控制无刷直流电机(BLDC)?

什么是无刷直流电机(BLDC)?
如何使用Arduino去控制无刷直流电机(BLDC)?
为什么需要ESC,它的功能是什么?

回帖(1)

殷谷光

2021-7-26 11:42:28
  按照我们想要的方式来构建和使它们工作一直很有趣。在达成共识的同时,建造可以飞翔的东西反而会使业余爱好者和硬件修补匠更加焦虑。是的!我说的是滑翔机,直升机,飞机,主要是多直升机。如今,由于可以在线获得社区支持,因此非常容易自行构建一个。飞行中的所有事物的共同点是它们使用的是**BLDC电机,**那么这台BLDC电机是什么?为什么我们需要它来飞东西?有什么特别之处?如何购买正确的电机并将其与控制器连接?什么是ESC,为什么要使用它?如果您有类似这样的问题,那么本教程就是您的一站式解决方案。
  因此,基本上,在本教程中,我们将 使用Arduino控制无刷电机。此处, A2212 / 13T无传感器BLDC外伸电机与20A电子速度控制器(ESC)一起使用。该电动机通常用于制造无人机。
  所需材料
  A2212 / 13T BLDC电动机
  电调(20A)
  电源(12V 20A)
  Arduino的
  电位器
  了解BLDC电机
  BLDC电动机代表无刷直流电动机,由于其运行平稳,因此常用于吊扇和电动汽车。先前已经详细说明了BLDC电动机在电动汽车中的使用。与其他电动机不同,BLDC电动机有三根导线,每根导线形成自己的相,因此为我们提供了三相电动机。等等…什么!
  是的,尽管BLDC电机被认为是DC电机,但它们在脉冲波的帮助下工作。的电子速度控制器(ESC)来自电池的DC电压转换到脉冲并且将其提供给电机的3线。在任何给定时间,仅电动机的两相将被供电,因此电流通过一个相进入而通过另一相流出。在此过程中,电动机内部的线圈通电,因此转子上的磁铁将自身与通电的线圈对齐。然后,ESC将接下来的两根线通电,继续进行此过程以使电动机旋转。电动机的速度取决于线圈的通电速度,电动机的方向取决于线圈的通电顺序。我们将在本文后面的内容中了解有关ESC的更多信息。
  BLDC电动机有很多类型,让我们看一下最常见的分类。
  *转子内和转子外BLDC电动机:转子内***BLDC电动机的工作原理与其他任何电动机一样。也就是说,在保持外壳固定的同时,电动机内部的轴仍在旋转。当外流式BLDC电动机正好相反时,电动机的外壳与轴一起旋转,而内部线圈保持固定。外轮电动机在电动自行车中是非常有利的,因为外壳(旋转的外壳)本身被制成轮胎的轮辋,因此避免了连接机构。同样,外转轮马达比起转轮类型更倾向于提供更大的扭矩,因此它成为电动汽车和无人机的理想选择。我们在这里使用的也是出局类型。
  *注意:*还有另一种类型的电动机,称为无芯BLDC电动机,也用于袖珍无人机,它们具有不同的工作原理,但在本教程中,我们现在跳过它。
  *传感器和无传感器BLDC电动机:* 为了使BLDC电动机旋转而不会产生任何冲击,需要反馈。也就是说,电调必须知道转子中磁体的位置和磁极,以便据此为定子通电。该信息可以通过两种方式获取:一种是将霍尔传感器放置在电动机内部。霍尔传感器将检测磁体并将信息发送给ESC,这种类型的电动机称为有传感器的BLDC电动机,用于电动汽车。第二种方法是使用线圈横穿磁体时产生的反电动势,这不需要额外的硬件或将相线本身用作反馈以检查反电动势的导线。这种方法用于我们的电机中,在无人机和其他飞行项目中很常见。
  为什么无人机和其他多直升机使用BLDC电机?
  从四轴直升机到直升飞机和滑翔机,有许多种凉爽的无人机,所有东西都有一个共同的硬件。那是BLDC电机,但是为什么呢?为什么他们使用BLDC电动机,该电动机比DC电动机贵一些?
  有很多有效的理由,一个主要的原因是这些电动机提供的扭矩非常高,这对于迅速获得/松开推力以起飞或降落无人机非常重要。这些电机也可以作为流道使用,这又增加了电机的推力。选择BLDC电动机的另一个原因是其平稳的振动和较少的运转,这对于我们在空中稳定的无人机非常理想。
  BLDC电机的功率重量比非常高。这非常重要,因为在无人机上使用的电动机应具有高功率(高速和高扭矩),但重量也应较小。可以提供与BLDC电动机相同的转矩和速度的DC电动机的重量将是BLDC电动机的两倍。
  为什么需要ESC,它的功能是什么?
  众所周知,每台BLDC电机都需要某种控制器,以将来自电池的DC电压转换为脉冲以为电机的相线供电。该控制器称为ESC,它表示电子速度控制器。控制器的主要职责是按顺序向BLDC电机的相线通电,以使电机旋转。这是通过感测每条导线的反电动势并在磁铁穿过线圈时准确地为线圈通电来完成的。因此,ESC内部有很多硬件功能,这超出了本教程的范围。但仅举几例,它具有速度控制器和电池消除器电路。
  基于PWM的速度控制: ESC可以通过读取橙色线上提供的PWM信号来控制BLDC电机的速度。它的工作原理与伺服电机非常相似,所提供的PWM信号的周期应为20ms,并且可以改变占空比以改变BLDC电机的速度。由于相同的逻辑也适用于伺服电动机来控制位置,因此我们可以在Arduino程序中使用相同的伺服库。在此处学习如何将Servo与Arduino结合使用。
  **电池消除器电路(BEC):**几乎所有ESC都带有电池消除器电路。顾名思义,该电路消除了微控制器需要单独的电池的麻烦,在这种情况下,我们不需要单独的电源来为Arduino供电。ESC本身将提供可调节的+ 5V电压,可为我们的Arduino供电。通常有多种类型的电路可调节此电压,在便宜的ESC上将是线性调节,但您也可以找到带有开关电路的电路。
  **固件:**每个ESC都有制造商写入的固件程序。该固件极大地决定了ESC的响应方式。一些流行的固件是Traditional,Simon-K和BL-Heli。该固件也是用户可编程的,但是在本教程中我们将不做过多介绍。
  BLDC和ESC的一些常用术语:
  如果您刚刚开始使用BLDC电机,则可能遇到过诸如制动,软启动,电机方向,低电压,响应时间和超前这样的术语*。*让我们看一下这些术语的含义。
  **制动:**制动是您的BLDC电机在卸下节气门后便立即停止旋转的能力。对于多直升机而言,此功能非常重要,因为他们必须更频繁地更改其RPM才能在空中进行机动。
  **软启动:**当BLDC电机与齿轮关联时,软启动是要考虑的重要功能。启用软启动的电动机不会突然突然开始旋转,无论节气门的开启速度如何,它始终会逐渐提高速度。这将有助于我们减少与电动机相连的齿轮(如果有)的磨损。
  **电动机方向:**在运行期间,BLDC电动机中的电动机方向通常不会改变。但是组装时,用户可能需要改变电动机的旋转方向。改变电动机方向的最简单方法是简单地相互改变电动机的任意两根电线。
  **低压停止:**校准后,我们始终需要BLDC电动机以特定的节气门值以相同的特定速度运行。但这很难实现,因为随着电池电压的降低,电动机趋于以相同的节气门值降低速度。为了避免这种情况,我们通常将ESC编程为在电池电压达到阈值以下时停止工作,此功能称为Low Voltage Stop(低压停止),在无人机中很有用。
  **响应时间:**电动机根据油门变化快速改变速度的能力称为响应时间。响应时间越短,控制效果越好。
  **进阶:**进阶是一个问题,或更像是BLDC马达的错误。所有BLDC电机都有一点进步。就是说,当定子线圈通电时,转子会由于其上存在永磁体而被吸引。在被吸引之后,转子趋向于在线圈断电然后再下一个线圈通电之前沿相同的方向向前移动一点。这种运动称为“前进”,它将产生诸如抖动,发热,发出噪音等问题。因此,这是一个好的电调应该单独避免的事情。
  好的,现在有足够的理论让我们通过将电机与Arduino连接来开始使用硬件。
  Arduino BLDC电机控制电路图
  下面是用Arduino控制无刷电机的电路图**:**
  
  BLDC电机与Arduino接口的连接非常简单。ESC需要至少12V和5A左右的电源。在本教程中,我将RPS用作电源,但您也可以使用锂电池为ESC供电。ESC的三相线应与电机的三相线连接,无连接顺序,可以任意顺序连接。
  **警告:**某些ESC上没有连接器,在这种情况下,请确保连接牢固,并使用绝缘胶带保护裸露的电线。由于将有高电流流经各相,因此任何短路都会导致电调和电动机永久损坏。
  ESC本身的**BEC(电池消除器电路)**将调节+ 5V,可用于为Arduino板供电。最后,为了设置BLDC电机的速度,我们还使用了电位计,该电位计连接到Arduino的A0引脚
  使用Arduino进行BLDC速度控制的程序
  我们必须创建一个PWM信号,其占空比从0%到100%不等,频率为50Hz。应该通过使用电位计来控制占空比,以便我们可以控制电动机的速度。这样做的代码类似于控制伺服电动机,因为它们还需要频率为50Hz的PWM信号。因此,我们使用来自Arduino的相同伺服库。将完整的代码可以在这个页面的底部找到下面进一步解释我的小片段的代码。如果你是新来的Arduino或PWM那么,先通过使用[PWM与Arduino的](file:///F:/circuit digest/upload in microcontrollers/Arduino Based LED Dimmer using PWM)和使用的Arduino控制伺服。
  PWM信号只能在由硬件支持PWM的引脚上生成,这些引脚通常以〜符号表示。**在Arduino UNO上,针脚9可以生成PWM信号,**因此我们将ESC信号针脚(橙色线)连接到针脚9,我们还使用以下行提到了相同的客栈代码
  ESC.attach(9); 我们必须生成占空比从0%到100%变化的PWM信号。对于0%占空比,POT将输出0V(0),对于100%占空比,POT将输出5V(1023)。这里的电位计连接到引脚A0,因此我们必须使用模拟读取功能从POT读取模拟电压,如下所示
  int throttle = AnalogRead(A0);//throttle油门 然后,我们必须将值从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);//throttle油门 Arduino BLDC电机控制
  根据电路图进行连接,然后将代码上传到Arduino并打开ESC的电源。确保已将BLDC电动机安装在某些物体上,因为电动机在旋转时会突然跳动。设置开启后,您的ESC会发出欢迎音并持续发出蜂鸣声,直到油门信号在阈值限制内,逐渐将POT从0V逐渐增加,并且蜂鸣声将停止,这意味着我们现在正在提供PWM信号高于下阈值,并且随着您进一步增大,电动机将开始缓慢旋转。您提供的电压越多,电动机的启动速度就越快,最后,当电压达到阈值上限以上时,电动机将停止。然后,您可以重复该过程。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分