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

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

概述


对于这个例子,我有一个outunner BLDC电机与以下规格:它有KV额定值1000,它可以使用2S, 3S或4S LiPo电池供电,它需要30A ESC。无刷电机上的KV额定定义了每伏无负载电机的RPM。

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

在这种情况下,1000kV意味着例如,如果我们用2S Lipo电池提供具有7.4伏的电压的电机,电机可以实现最大RPM 1000,或者是7400转。

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

3S脂电池无刷电机

在这个例子中,我将使用3S脂质电池,它有3个电池,也就是11。1v。所以,我可以期望我的电机达到最大转速11100。

最后,这里有一个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将驱动电机从最小转速到最大转速。

Arduino刷式电机控制使用ESC

Arduino无刷电机控制 - 电路图

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

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

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

必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我的收入来自符合条件的购买。

BLDC电机控制的Arduino代码

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

/ * Arduino无刷电机控制由Dejan,//www.mfxpo.combet188官方网站 * / #include  servo esc;//创建伺服对象以控制ESC INT Potvalue;//从模拟引脚void setup(){//附上Esc上的ESC 9 ESC.ATTACH(9,1000,2000);//(PIN,min脉冲宽度,microdonds中的最大脉冲宽度)} void loop(){potvalue = analogread(a0);//读取电位器的值(0到1023之间的值)Potvalue = Map(Potvalue,0,1023,0,180);//缩放它与伺服库(0到180之间的值)Esc.Write(Potvalue)使用它;//将信号发送到ESC}

描述:我们需要定义伺服图书馆,因为对于伺服库,我们可以轻松地生成50Hz PWM信号,否则PWM信号是Arduino生成的频率。然后我们需要为ESC控制创建一个伺服对象,并定义用于存储来自电位器的模拟输入的变量。在设置部分中,使用附件()函数,我们定义了哪些Arduino引脚是ESC连接的控制信号,并且还定义了微秒中PWM信号的最小和最大脉冲宽度。

在循环部分中,首先我们读取电位器,将其值从0到1023映射到0到180的值。然后使用写()函数我们将信号发送到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项目的收集bet188me

29日回复

  1. 埃里克

    谢谢你总是发布这么好的内容!我试图运行两个无刷电机与两个ESCs通过蓝牙。我一直在尝试把这个信息和你关于两个直流电机和蓝牙的教程结合起来。我想我在代码上有困难,因为我的ESCs不能识别信号。是否有一个重要的步骤,我可能错过了通过蓝牙传输信息到ESC?谢谢!

    回复
    • 德扬

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

      回复
  2. 伊德里斯Delvi

    谢谢你的指导。解释得很好。组件工作的详细信息和代码的一步一步的解释,确实使整个主题易于理解。我有几个问题希望你能解释清楚,
    - arduino中是否有关闭/解除电机的命令
    -有没有办法通过代码逆转电机的方向。
    谢谢您的帮助!!

    回复
    • 德扬

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

      回复
  3. no ..

    感谢教程!我找了一阵子关于这个的教程,现在终于有了,谢谢。
    我像你展示的那样把所有的东西都连接起来,但它仍然不工作,因为某种原因-

    有时它哔哔作响,就像它应该工作(好的哔哔声,不是错误的那一个),但然后当我转动渗透计它不工作,但有时(一些值-通常在60左右)它随机“工作”-移动但保持在相同的位置?就像它在“战斗”自己,试图旋转,但却做不到
    很多时候它只会哔哔一声(大约半秒)-我在网上找不到任何关于哔哔声的东西。或者根本没有哔哔声,或者哔哔声应该能正常工作,然后紧接着就是错误哔哔声。

    然后我试着重新启动电路板/重新连接电脑/重新连接电池,每一次我做这些事情,它的反应都不一样。
    这里有几张接线的照片,以及电动机移动但不移动时的视频
    https://imgur.com/a/C8dZlJC

    有什么想法是什么问题,如何解决它?我想了这么长时间,还是不能让马达工作:真的很感谢你的帮助,谢谢!

    回复
    • 德扬

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

      回复
      • no ..

        首先感谢您的快速回复!
        我重新检查了所有的东西,重新接线,仍然不工作:/然后我尝试了一个全新的电机(和新的esc) -并重新接线,一切都不工作,没有哔哔或任何东西。(我也尝试了固定值的电机,相同的结果)
        我用的电池和你的一模一样(或者只是相同的品牌,含3s),还有arudino nano。
        我是如此沮丧和绝望..我已经花了很多时间..
        有没有办法只检查esc或电机?也许可以在没有代码的情况下,以最快的速度启动马达?或者只是以某种方式检查esc ?我太绝望了,不知道该怎么办了

  4. 哈立德

    嗨,谢谢你的完美解释。
    我使用你的代码控制200kv bldc与120a esc从racerstar和经过尝试的代码,它不工作,它只有当arduino连接到笔记本电脑通过usb。电机双向工作,停在电位器量程中间。

    回复
    • 德扬

      嘿,谢谢!好像你没有BEC来给你的Arduino供电或者是它不工作或者连接不正常。BEC提供5V,所以你应该把它连接到Arduino的5V和GND引脚。

      回复
      • 哈立德

        感谢您的回复..
        ESC提供BEC,它可以工作,我也使用你的代码,通过nrf制作我自己的遥控器,所以我非常欣赏你的工作,喜欢这些有用的视频。
        最后一个问题是校准,因为每个ESC都有自己的方法去做,没有很多关于它的教程。我应该使用示波器,然后改变(1000,2000)在附加功能?

  5. 丹尼尔·布鲁克

    好写!但是…你的代码部分有一个错误的注释,使我迷惑。我必须浏览伺服库文档,以确保你的代码部分是:“ESC.attach(9,1000,2000);// (pin,最小脉冲宽度,最大脉冲宽度,以毫秒为单位)"是错误的,它的单位不是毫秒,而是微秒!我很困惑,因为我知道脉冲宽度不应该是1秒和2秒,哈哈。

    回复
  6. alpi.

    谢谢你提供的大量信息。
    我有一个问题。
    哪个容量确实有你的3S Lipo电池?电池是否足够1800mAh或者我应该用2400mah拿一个吗?如果您需要此信息,电机IM将使用的是Dapei XXD A2212 1000KV无刷电机,如果您需要此信息,请使用30A ESC。
    我对你的答案很兴奋。祝你有美好的一天

    回复
    • alpi.

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

      回复
      • 德扬

        为了驱动无刷直流电动机,我们使用了伺服库,它的工作范围从0到180。从0到1023的值是电位器读出的模拟值,所以我们将这些值映射到0到180的值,这样我们就可以控制无刷直流电机的转速从最小到最大。

  7. 惠特

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

    回复
  8. Asma.

    谢谢,非常有成效,
    我有两个问题,我到处都找不到答案。
    RPM和PWM之间的关系是什么?
    例如,如果kV是1000和Lipo电池供应7.4(v),我们的最大RPM为7400.我已经在许多消息来源中读取,当我们没有负载时,它真实。所以我的问题现在是1)如何装载是什么意思?它是电机附带的推进器吗?如果我们有一个螺旋桨,最大RPM仍然是7400?
    2)如果我们说最大RPM是7400。这意味着当我们有10%的占空比时,我们得到7400 rpm的速度(如你的案件2毫秒,那么等于10%的占空比)。如果是真的,我们应该在“10%占空比我们得到7400的RPM”的代码中定义它???
    如果你能回复我,我真的很欣赏它,
    谢谢你!

    回复
    • 德扬

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

      回复
  9. 尼曼萨瓦尔

    你好,我试图运行2212无刷直流电机Arduino通过ESC (simonk 30A),但有问题,而接口他们。有时我的无刷直流电动机运行一会儿,然后停止。我意识到,当我打开Arduino,无刷直流电机开始工作但只有几秒钟,然后就停止了。请告诉我解决方案。
    我上传的代码是。

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

    void setup(){
    //附上销钉上的ESC
    ESC.attach (9);
    }
    无效循环(){
    ESC.write (100);//发送信号到ESC
    }

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

    回复
  10. 尼曼萨瓦尔

    如果我使用3S的2200毫安的Lipo电池运行1000kv的无刷直流电机,那么在时间方面我可以有多少备份或电机可以在这个电池上运行多久,如果他们没有任何负载?
    无刷直流(1000kv)电机的电流负荷是多少?
    如果你能回复我,我将不胜感激。
    谢谢。

    回复
    • 为了把电池输入到模拟输入,你应该做一个V除数。

      一旦完成,你可以实时检查,并添加一个低级别警告或关机。

      回复
  11. Siddh Narhari

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

    回复
    • 德扬

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

      回复
  12. 耶稣

    BEC连接错误,BEC提供5V(+引脚是输出),Arduino的5V引脚也是输出,所以没人能做到。
    只需连接ESC的+引脚,并连接到Arduino的Vin Pin或电源Arduino Whit USB电缆。

    回复
    • 德扬

      嗯,您可以在Arduino上使用5+针作为输入,如果您提供5V。VIN引脚不能使用5V,因为它具有电压调节器,可以使用7V至12V的电压,这将被丢弃至5V。

      回复
  13. Daniel Fernandes.

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

    回复

发表评论

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

推荐

2019年最佳入门级示波器为初学者和爱好者

为初学者和爱好者最好的示波器

推荐

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

初学者的8个最佳Arduino Starter Kits

推荐

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

最好的3D打印机为初学者和业余爱好者