Arduino 无刷电机控制教程 |电调 |无刷直流
在本教程中,我们将学习如何使用 Arduino 和 ESC 控制无刷电机。如果您想详细了解 BLDC 电机的工作原理,可以查看另一篇文章或观看以下视频,其中包含无刷电机工作原理的说明以及如何使用 Arduino 和 ESC 控制无刷电机。
在这个例子中,我有一个外转子 BLDC 电机,其规格如下:它的 KV 额定值为 1000,可以使用 2S、3S 或 4S 锂聚合物电池供电,并且需要 30A ESC。无刷电机的 KV 额定值定义了电机在空载时每伏特的转速。
在这种情况下,1000KV意味着,例如,如果我们为电机提供电压为7.4伏的2S LiPo电池,则电机可以达到7.4乘以1000的最大RPM,即7400 RPM。
无刷电机很耗电,最常见的为其供电的方法是使用锂聚合物电池。 LiPo电池的“S”数字表示电池有多少个电芯,每个电芯的电压为3.7V。
在这个例子中,我将使用 3 节锂聚合物电池,它有 3 节电池,电压为 11.1V。所以,我可以期待我的电机达到 11100 的最大 RPM。
最后,这是一个 30A ESC,我将在此示例中使用它并与电机要求相匹配。电调一侧有三根线控制电机的三相,另一侧有两根线VCC和GND,用于供电。
还有另外一组三根线从ESC出来,那就是信号线,+5V和地线。 ESC 的此功能称为电池消除器电路,顾名思义,它消除了微控制器对单独电池的需求。有了这个,ESC 提供了可用于为我们的 Arduino 供电的稳压 5V。
我们可以在这里注意到,这种连接实际上与我们在伺服电机上看到的连接相同。
因此,使用 ESC 和 Arduino 控制无刷电机就像使用 Arduino 控制伺服一样简单。电调使用与舵机相同类型的控制信号,即标准的 50Hz PWM 信号。
这很方便,因为例如在搭建RC飞机时,我们通常需要舵机和无刷电机,这样我们就可以用同类型的控制器轻松控制它们。
因此,使用 Arduino,我们只需要生成 50Hz PWM 信号,并根据脉冲宽度或高态持续时间(应在 1 毫秒到 2 毫秒之间变化),ESC 将驱动电机从最小到最大 RPM。
这是此示例的电路图。除了电调,我们只用一个简单的电位器来控制电机速度。
您可以从以下链接获取本 Arduino 教程所需的组件:
Arduino代码非常简单,只需几行代码。
说明: 所以,我们需要定义Servo库,因为有了Servo库我们可以很容易地产生50Hz的PWM信号,否则Arduino产生的PWM信号是不同频率的。然后我们需要为 ESC 控制创建一个伺服对象,并定义一个变量来存储来自电位器的模拟输入。在设置部分,使用 attach() 函数,我们定义了哪个 Arduino 引脚是连接的 ESC 的控制信号,还定义了 PWM 信号的最小和最大脉冲宽度(以微秒为单位)。
在循环部分,首先我们读取电位器,将其值从 0 到 1023 映射为从 0 到 180 的值。然后使用 write() 函数将信号发送到 ESC,或生成 50Hz PWM 信号。 0 到 180 的值对应设置部分中定义的 1000 到 2000 微秒的值。
所以,如果我们把这段代码上传到我们的Arduino,然后用电池给所有东西上电,那么我们就可以用电位器控制无刷电机从零到最大的速度。
但是,这里有几件事需要注意。最初为电机供电时,信号值必须等于或小于最小值 1 毫秒。这称为 ESC 布防,电机发出确认蜂鸣声,以便我们知道它已正确布防。如果我们在通电时有更高的值,这意味着我们有一个油门,ESC 不会启动电机,直到我们将油门降低到正确的最小值。这在安全方面非常方便,因为如果我们在通电时踩油门,电机将不会启动。
最后,让我们解释一下 ESC 校准的工作原理。每个 ESC 都有自己的高点和低点,它们可能会略有不同。例如,低点可能是 1.2 毫秒,高点可能是 1.9 毫秒。在这种情况下,我们的油门在前 20% 内不会做任何事情,直到达到 1.2 毫秒的低点值。
为了解决这个问题,我们可以校准电调或根据需要设置高低点。为此,在为 ESC 供电之前,首先我们需要将电位器调至最大值或至少大于当前中间点的值。然后我们可以给电调上电,我们会听到电机发出几声哔哔声,这实际上确认我们已经设置了新的高点。
然后 2 秒后,我们应该将电位器移动到新低点的位置。我们将再次听到确认蜂鸣声,这样我们就完成了 ESC 校准。现在我们的油门会立即响应,我们可以在这两个新点内控制电机。
这几乎就是本教程的所有内容。如果您想学习如何无线制作这个 Arduino 无刷电机控制,您可以查看我之前构建的视频和基于 Arduino 的 RC 发射器,并解释了如何使用它来控制 BLDC 电机。
我希望你喜欢这个教程并学到了一些新东西。随时在下面的评论部分提出任何问题,不要忘记查看我收集的 Arduino 项目。概览
Arduino 无刷电机控制 - 电路图
用于 BLDC 电机控制的 Arduino 代码
/*
Arduino Brushless Motor Control
by Dejan, https://howtomechatronics.com
*/
#include <Servo.h>
Servo ESC; // create servo object to control the ESC
int potValue; // value from the analog pin
void setup() {
// Attach the ESC on pin 9
ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds)
}
void loop() {
potValue = analogRead(A0); // reads the value of the potentiometer (value between 0 and 1023)
potValue = map(potValue, 0, 1023, 0, 180); // scale it to use it with the servo library (value between 0 and 180)
ESC.write(potValue); // Send the signal to the ESC
}
Code language: Arduino (arduino)ESC校准
制造工艺