Arduino无刷电机控制教程|ESC |BLDC.

在本教程中,我们将学习如何使用Arduino和ESC控制无刷电机。如果你想要更多的细节如何无刷直流电机工作,你可以检查其他文章或观看以下视频,其中包含的解释无刷电机的工作原理以及如何控制一个使用Arduino和ESC。

概述


对于此示例,我有一个超出了一个具有以下规格的外出BLDC电机:它具有1000的kV等级,可以使用2S,3S或4S Lipo电池供电,需要30A ESC。无刷电机上的KV额定值限定了每伏电机的RPM,无负载。

无刷直流电机规格- 1000KV 2S 3S 4S Lipo电池30A ESC

在这个例子中,1000KV意味着,例如,如果我们给电机提供7.4伏的2S LiPo电池,电机可以达到7.4乘以1000的最大转速,也就是7400 RPM。

无刷电机是电力饥渴和最常见的方法为他们供电是使用LiPo电池。“S”号的LiPo电池表明有多少电池有,每个电池有3.7V的电压。

3S Lipo电池无刷电机

对于这个例子,我将使用3S Lipo电池,其中有3个细胞,这是11.1V。所以,我可以期待我的电机达到11100的最大RPM。

最后,这里有一个30A ESC,我将在这个示例中使用,并与电机要求匹配。在一边的ESC有三根线,控制电机的三个阶段,在另一边,它有两根线,VCC和GND,用于供电。

还有另外一组三根电线从ESC出来,那是信号线,+5V和地。ESC的这一特性称为电池消除器电路,顾名思义,它消除了对单片机单独电池的需要。有了这个,ESC提供调节的5V,可以用来为我们的Arduino供电。

我们可以注意到,这个连接实际上是相同的,我们看到在伺服电机。

无刷电机和伺服-相同类型的连接

所以,控制一个无刷电机使用ESC和Arduino是简单的使用Arduino控制伺服。ESC使用与伺服相同类型的控制信号,这是标准的50Hz PWM信号。

无刷电机控制信号50hz PWM与伺服电机相同

这非常方便,因为例如,当建造一个RC飞机,我们通常需要两个伺服和无刷电机,这样,我们可以很容易地控制他们与相同类型的控制器。

因此,使用Arduino我们只需要产生50Hz的PWM信号,根据脉冲宽度或高状态持续时间,应该从1毫秒到2毫秒不等,ESC将驱动电机从最小到最大RPM。

采用ESC进行Arduino无刷电机控制

Arduino无刷电机控制-电路图

这是这个例子的电路图。除了ESC,我们将只使用一个简单的电位器来控制电机转速。

Arduino无刷直流电机控制-电路图-原理图

你可以从下面的链接获得这个Arduino教程所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

无刷直流电机控制Arduino代码

Arduino代码非常简单,只有几行代码。

/* Arduino无刷电机控制由Dejan, //www.kuaixg.com亚搏手机版官方下载 */ #包括 Servo ESC;//创建伺服对象控制ESC int potValue;//从模拟引脚无效设置(){//连接ESC针9 ESC. Attach (9,1000,2000);//(引脚,最小脉冲宽度,最大脉冲宽度,以微秒为单位)}void loop() {potValue = analogRead(A0);//读取电位计的值(值介于0和1023之间)potValue = map(potValue, 0, 1023, 0, 180);//缩放它使用它与伺服库(值在0和180之间)ESC.write(potValue);//发送信号到ESC}

描述:因此,我们需要定义伺服库,因为有了伺服库,我们可以很容易地产生50Hz的PWM信号,否则Arduino产生的PWM信号是在不同的频率。然后,我们需要为ESC控制创建一个伺服对象,并定义一个变量来存储来自电位器的模拟输入。在设置部分,使用attach()函数,我们定义Arduino引脚是连接的ESC控制信号,并定义以微秒为单位的PWM信号的最小和最大脉冲宽度。

在循环部分中,首先读取电位器,将其从0到1023的值映射为0到180的值。然后使用write()函数将信号发送到ESC,或产生50Hz的PWM信号。0到180之间的值对应于设置部分中定义的1000到2000微秒之间的值。

所以,如果我们将此代码上传到我们的Arduino,然后使用电池电源电源,然后我们可以使用电位计控制无刷电机的速度为零至最大。

利用Arduino和ESC控制无刷电机

但是,我们应该在这里注意一些事情。最初为电机供电时,信号值必须相同或低于1毫秒的最小值。这被称为ESC的武装,电机确认发出了哔哔声,以便我们知道它是正确的武装。如果我们在供电时具有更高的值,这意味着我们有一个节流阀,ESC将无法启动电机,直到我们将下降到正确的最小值。这在安全方面非常方便,因为电机无法启动,以防我们在供电时节气。

ESC校准

最后,让我们解释ESC校准的工作原理。每个ESC都有自己的高点,而且它们可能会略有不同。例如,低点可能为1.2毫秒,高点可能为1.9毫秒。在这种情况下,我们的油门在前20%中不会做任何事情,直到它达到低点值为1.2毫秒。

ESC校正-脉冲宽度-高低点调整

要解决此问题,我们可以根据需要校准ESC或设置高低点。为此目的,在为ESC供电之前,首先我们需要将电位器节流起来最大或至少更大的值,然后至少更大。然后我们可以向ESC上电,我们将从电机中听到几张蜂鸣声,实际上证实我们已经设置了新的高点。

使用Arduino校准Esc

然后在2秒后,我们应该将我们的电位器移动到我们新低点的位置。我们将再次听到确认发出哔哔声,并随着我们使用ESC校准完成的。现在我们的油门会立即回复,我们可以在这些新的两点内控制电机。

这就是本教程的全部内容。如果你想学习如何无线使这个Arduino无刷电机控制,你可以检查我以前的视频,我建立和Arduino基于RC发射器,并解释了如何控制无刷电机使用它。

采用Arduino无刷电机无线控制

我希望你喜欢这个教程并学会了新的东西。请随意在下面的评论部分提出任何问题,不要忘记检查我的Arduino项目的集合足彩网女欧洲杯

29日回复

  1. 伊利克

    谢谢你总是发布这么好的内容!我试图运行两个无刷电机与两个esc通过蓝牙。我一直试图将这一信息与您的指南结合在一起,关于两个直流电机和蓝牙。我想我有困难的代码为它虽然,因为我的esc不识别信号。在通过蓝牙传输信息到ESC时,是否有一个重要的步骤我可能会错过?谢谢!

    回复
    • 德国

      首先,你必须确保ESCs控制和蓝牙通信正常工作,通过测试单独的教程。一旦您知道它们正在工作,那么将它们组合在一起应该不会有任何问题。您从蓝牙接收的值应该简单地用于控制esc。您知道您总是可以转换值来匹配您的需求,例如,如果您从蓝牙接收从0到255的值,您可以使用map函数将它们转换为从1000到2000的值,等等。

      回复
  2. 伊德里斯Delvi

    谢谢你的教程。它解释得很好。详细信息关于组件的工作和逐步解释代码,真的使整个主题易于理解。我有几个查询我希望你能澄清,
    - 在Arduino有一个命令,关闭/撤销电机
    - 有方法可以通过代码反转电机的方向。
    谢谢您的帮助!!

    回复
    • 德国

      谢谢!好吧,为了逆转你需要一个能够这样做的特定esc的方向。用Arduino命令解除电机的武装,您可以使用某种继电器。

      回复
  3. 诺姆

    谢谢你的教程!我搜索了一个关于这一段时间的教程,现在有一个,谢谢。
    我像你展示的那样连接了所有东西,但出于某种原因它仍然不工作-

    有时它的哔哔声像它应该工作(良好的哔哔声,而不是错误之一),但然后当我转动穿透计,它不工作,但有时(与一些值-通常60左右)它随机“工作”-移动,但保持在相同的位置?就像它自己在“战斗”,试图旋转但不能
    很多时候,它只是哔哔一声(大约半秒)-我找不到任何网上关于一个单一的哔哔声。或者根本没有哔哔声,或者像它应该工作的哔哔声,然后它立即发出错误的哔哔声。

    然后我试图重新启动电路板/重新连接到电脑/重新连接电池,每次执行这些内容中的每一个时,它会发生不同的反应。
    这里有一些电线的照片,和一个视频时,电机是移动的,但不移动
    https://imgur.com/a/C8dZlJC

    有什么想法吗?问题是什么?如何解决?我想弄清楚了这么长时间,仍然不能让马达工作:\我真的很感激任何帮助,谢谢!

    回复
    • 德国

      ESC或者马达本身可能出了问题。举个例子,我有一个问题,我的马达现在工作,因为一个如果它的电线是错误的/切断在电线中间的塑料管。我认为它是ESC不工作,但它是一个简单的电线问题。然后我只是移开绝缘,重新焊接电线很好地到连接器,一切都工作。所以我的点它,尝试不同的ESC和电机,在本教程中解释的方法应该100%工作。

      回复
      • no ..

        首先感谢您的快速回复!
        我重新检查了一切,重新接线,仍然不工作:/然后我尝试了一个全新的电机(和新的esc) -和连线一切都不工作,没有哔或任何东西。(我也试过用固定值的电机,结果是一样的)
        我正在使用与您的完全相同的电池(或者只是同一品牌,3S)和Arudino Nano。
        我很沮丧,很绝望。我在这上面花了太多时间…
        有没有办法检查ESC或电机?也许以某种方式打开电机全速,没有代码?或者以某种方式检查ESC?我只是毫无希望,不知道该怎么办

  4. 卡尔德

    嗨,谢谢你的完美解释。
    我使用你的代码控制200kv无刷直流与120a的esc从racerstar和尝试后的代码,它不工作,它只工作时arduino连接到笔记本电脑通过usb。电机在两个方向工作,在电位器范围的中间停止。

    回复
    • 德国

      嘿,谢谢!好吧,似乎你没有因为你的arduino而无法为你的工作或没有正常连接而动力。BEC提供5V,因此您应该将其连接到Arduino的5V和GND引脚。

      回复
      • 卡尔德

        谢谢你的回复…
        ESC提供BEC和它的工作,我也使用你的代码,使我自己的远程由nrf所以我真的很欣赏你的工作和爱这些有用的视频。
        最后一个问题是校准,因为每个ESC都有自己的方式来做,并没有很多教程关于它。我应该使用示波器,然后更改附加功能中的(1000,2000)吗?

  5. 丹尼尔布鲁克斯

    好写!但是…您的代码部分的注释中有一个错误,这使我感到困惑。我必须查看伺服图书馆的文档,以确保甚至……但你的代码的部分是:“ESC.attach(9,1000,2000);//(引脚,最小脉冲宽度,最大脉冲宽度在毫秒)"是错误的,它不是毫秒,它的微秒!我很困惑,因为我知道脉冲宽度不应该是1秒和2秒,哈哈。

    回复
  6. 支队伍

    谢谢你的伟大信息。
    我有一个问题。
    你的3S LiPo电池容量是多少?1800mAh的电池够了吗,还是我应该拿一个2400mAh的?电机我将使用的是大培XXD A2212 1000KV无刷电机与30A ESC如果你需要这个信息。
    我很期待你的答案。祝你一天愉快

    回复
    • 支队伍

      现在我还有一个问题
      将其映射到0到180的代码是什么意思?你为什么选择那个,而不是另一个价值?

      回复
      • 德国

        对于推动BLDC电机,我们使用的是伺服库,其与这些值从0到180配合使用。从0到1023的值是从电位器读取的模拟,因此我们将该值映射到0到180的值为0到180这样,我们可以将BLDC电机速度从最小控制到最大值。

  7. 惠特

    我刚刚发现你的网站,我不得不说,你做了一个精彩的工作解释了机械的东西!我一直在使用基本的RC飞机,并在BLDC电机和ESC上阅读,看到和观看许多文章和视频。要么我试图在当天早早(或太晚)才能拿起信息,也是最后一次。。。点击!!做得好,谢谢!!

    回复
  8. Asma

    谢谢,很有成效
    我有两个问题,我到处都找不到答案。
    RPM和PWM之间的关系是什么?
    例如,如果Kv是1000和Lipo电池供应7.4 (v),我们有一个最大RPM 7400。我从很多资料中看到,当我们没有负载时,这是正确的。所以我现在的问题是1)负载是什么意思?是与马达相连的螺旋桨吗?如果我们有螺旋桨最大转速还是7400 ?
    2)如果我们说最大转数是7400。这意味着当我们有10%的负载率时,我们的速度是7400转/分??(像您的情况2毫秒,这等于10%的占空比)。如果这是真的,我们应该在代码中定义“10%的占空比,我们得到7400 RPM″??
    如果您能给我回复,我将不胜感激。
    谢谢你

    回复
    • 德国

      1)这是对的,负载是反对轴自由旋转的任何东西。不同的尺寸螺旋桨将具有不同的负载,更大的螺旋桨将抓住更多的空气,这意味着更大的阻力意味着更大的负载。
      2)在这种情况下,控制无刷电机的RPM和PWM实际上是不相关的。20毫秒的信号只是一个标准的信号,用于控制转速的无刷电机。根据这个信号控制器,ESC,适当地驱动无刷电机。

      回复
  9. 尼曼萨瓦尔

    你好,我试着用Arduino通过ESC (simonk 30A)运行2212 BLDC电机,但是在接口时遇到了问题。有时我的无刷直流电机运行一段时间,然后停止。我意识到,当我打开Arduino时,BLDC开始工作,但只是几秒钟,然后就停止了。请让我知道解决方案。
    我上传的代码是。

    # include
    伺服ESC;//创建伺服对象控制ESC

    无效的设置(){
    //连接ESC在引脚9
    ESC.attach (9);
    }
    无效循环(){
    ESC.write (100);//发送信号到ESC
    }

    //我只是想运行电机,这就是我在这里没有使用电位器的原因。

    回复
  10. 尼曼萨瓦尔

    如果我使用2200mah的3S Lipo电池运行1000kv无刷直流电机,那么我可以有多少备份的时间或电机可以运行多长时间,如果他们没有任何负载?
    什么是电流期限的BLDC(1000kV)电机负载?
    如果你回复我,我真的很感激,
    谢谢。

    回复
    • SHIV

      你应该做一个V除数,以便输入电池到模拟输入。

      一旦完成,您可以实时检查并添加低级警告或关闭电源。

      回复
  11. Siddh Narhari.

    嗨,我想使用无刷电机作为驱动电机在车轮为我的机器人,但我不知道如何我可以操作一个BLDC在两个方向,向前和反向,使用一个ESC。我们有办法做到吗?

    回复
    • 德国

      嘿,为了那个目的,你需要一个特殊的ESC能够在两个方向上驱动无刷电机。还有其他方法可以实现这一点,例如使用继电器。在这种情况下,可以通过继电器的一种方式将三根导线连接起来,当激活继电器时,将两根导线放在电机开关处。

      回复
  12. 耶稣

    Bec连接错误,Bec提供5V(+ PIN是输出),Arduino的5V引脚也是一个输出,这就是为什么没有人可以做到这一点。
    不要连接ESC的+引脚,连接Arduino的Vin引脚或者用USB线给Arduino供电。

    回复
    • 德国

      你可以使用Arduino上的5+引脚作为输入,如果你提供5V。Vin引脚不能在5V下工作,因为它有稳压器,可以在7V到12V的电压下工作,然后降到5V。

      回复
  13. Daniel Fernandes.

    问候
    我有一个“无刷电机驱动器的多边形镜”从施乐激光打印机。该板有5个输入引脚:我认为它是24v, Gnd, 5v加上两个信号引脚,它使用一个IC命名为HA13535。我想让它运行;你用哪个电路来控制?
    我需要你的帮助。谢谢

    回复

发表评论

您的电子邮件地址将不会被公布。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

最适合初学者和爱好者的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

8个最好的arduino初学者工具包

受到推崇的

用于初学者和爱好者的最佳3D打印机 -  3D打印

初学者和爱好者的最佳3D打印机