Arduino - 直流电机

在本章中,我们将把不同类型的电机与 Arduino 板 (UNO) 连接起来,并向您展示如何连接电机并从电路板驱动它。

有三种不同类型的电机 −

  • 直流电机
  • 伺服电机
  • 步进电机

直流电机 (DC motor) 是最常见的电机类型。直流电机通常只有两根引线,一根正极,一根负极。如果将这两根引线直接连接到电池,电机就会旋转。如果切换引线,电机将朝相反方向旋转。

DC Motor

警告 − 请勿直接从 Arduino 板引脚驱动电机。这可能会损坏电路板。使用驱动电路或 IC。

我们将本章分为三个部分 −

  • 只需让您的电机旋转
  • 控制电机速度
  • 控制直流电机旋转的方向

所需组件

您将需要以下组件 −

  • 1x Arduino UNO 板
  • 1x PN2222 晶体管
  • 1x 小型 6V 直流电机
  • 1x 1N4001 二极管
  • 1x 270 Ω 电阻器

步骤

按照电路图进行连接,如下图所示。

直流电机连接

注意事项

连接时请采取以下预防措施。

  • 首先,确保晶体管连接正确。晶体管的平面应朝向 Arduino 板,如布置所示。

  • 其次,二极管的条纹端应朝向 +5V 电源线,如图像所示。

旋转控制 Arduino 代码

int motorPin = 3;

void setup() {

}

void loop() {
   digitalWrite(motorPin, HIGH);
}

需要注意的代码

晶体管的作用类似于开关,控制电机的电源。Arduino 引脚 3 用于打开和关闭晶体管,在草图中被命名为"motorPin"。

结果

当 Arduino 引脚 3 变为高电平时,电机将全速旋转。

电机速度控制

以下是连接到 Arduino 板的直流电机的原理图。

电机速度控制

Arduino 代码

int motorPin = 9;

void setup() {
   pinMode(motorPin, OUTPUT);
   Serial.begin(9600);
   while (! Serial);
   Serial.println("Speed 0 to 255");
}

void loop() {
   if (Serial.available()) {
      int speed = Serial.parseInt();
      if (speed >= 0 && speed <= 255) {
         analogWrite(motorPin, speed);
      }
   }
}

Code to Note

晶体管的作用类似于开关,控制电机的功率。Arduino 引脚 3 用于打开和关闭晶体管,在草图中命名为"motorPin"。

程序启动时,它会提示您提供控制电机速度的值。您需要在串行监视器中输入 0 到 255 之间的值。

命令窗口

在"loop"函数中,命令"Serial.parseInt"用于读取在串行监视器中以文本形式输入的数字并将其转换为"int"。您可以在此处输入任何数字。如果数字介于 0 和 255 之间,下一行中的"if"语句将使用此数字进行模拟写入。

结果

直流电机将根据通过串行端口接收的值(0 到 250)以不同的速度旋转。

旋转方向控制

要控制直流电机的旋转方向,而无需交换引线,可以使用称为H 桥的电路。H 桥是一种可以双向驱动电机的电子电路。H 桥用于许多不同的应用。最常见的应用之一是控制机器人中的电机。它之所以被称为 H 桥,是因为它使用四个晶体管,以这样的方式连接,使得原理图看起来像一个"H"。

我们将在这里使用 L298 H 桥 IC。 L298 可以控制直流电机和步进电机的速度和方向,并且可以同时控制两个电机。其额定电流为每个电机 2A。但是,在这些电流下,您需要使用散热器。

旋转方向控制

所需组件

您将需要以下组件 −

  • 1 × L298 桥接 IC
  • 1 × 直流电机
  • 1 × Arduino UNO
  • 1 × 面包板
  • 10 ×跳线

步骤

以下是直流电机接口与 Arduino Uno 板的示意图。

旋转方向控制连接

上图显示了如何连接 L298 IC 来控制两个电机。每个电机有三个输入引脚,电机 1 有 Input1 (IN1)、Input2 (IN2) 和 Enable1 (EN1),电机 2 有 Input3、Input4 和 Enable2。

由于我们在此示例中只控制一个电机,我们将 Arduino 连接到 L298 IC 的 IN1(引脚 5)、IN2(引脚 7)和 Enable1(引脚 6)。引脚 5 和 7 是数字的,即 ON 或 OFF 输入,而引脚 6 需要脉冲宽度调制 (PWM) 信号来控制电机速度。

下表显示了根据 IN1 和 IN2 的数字值电机将转向哪个方向。

IN1 IN2 电机行为
刹车
1 前进
1 后退
1 1 刹车

IC L298 的引脚 IN1 连接到 Arduino 的引脚 8,而 IN2 连接到引脚 9。Arduino 的这两个数字引脚控制电机的方向。IC 的 EN A 引脚连接到 Arduino 的 PWM 引脚 2。这将控制电机的速度。

要设置 Arduino 引脚 8 和 9 的值,我们使用了 digitalWrite() 函数,要设置引脚 2 的值,我们必须使用 analogWrite() 函数。

连接步骤

  • 分别将 IC 的 5V 和接地连接到 Arduino 的 5V 和接地。
  • 将电机连接到 IC 的引脚 2 和 3。
  • 将 IC 的 IN1 连接到 Arduino 的引脚 8。
  • 将 IC 的 IN2 连接到 Arduino 的引脚 9。
  • 将 IC 的 EN1 连接到 Arduino 的引脚 2。
  • 将 IC 的 SENS A 引脚接地。
  • 使用 Arduino USB 电缆连接 Arduino,并使用 Arduino IDE 软件将程序上传到 Arduino。
  • 提供使用电源、电池或 USB 线为 Arduino 电路板供电。

Arduino 代码

const int pwm = 2 ; //将引脚 2 初始化为 pwm
const int in_1 = 8 ;
const int in_2 = 9 ;
//为 L298 IC 提供逻辑以选择直流电机的方向

void setup() {
pinMode(pwm,OUTPUT) ; //我们必须将 PWM 引脚设置为输出
pinMode(in_1,OUTPUT) ; //逻辑引脚也设置为输出
pinMode(in_2,OUTPUT) ;
}

void loop() {
    //对于顺时针运动,in_1 = 高,in_2 = 低
    digitalWrite(in_1,HIGH) ;
    digitalWrite(in_2,LOW) ;
    analogWrite(pwm,255) ;
    /* 将电机的 pwm 设置为 255,我们可以通过更改 pwm 输入来改变旋转速度,但我们只使用 arduino,因此我们使用最高值来驱动电机 */
    //顺时针旋转 3 秒
    delay(3000) ;
    //用于制动
    digitalWrite(in_1,HIGH) ;
    digitalWrite(in_2,HIGH) ;
    delay(1000) ;
    //用于逆时针运动 - IN_1 = LOW,IN_2 = HIGH
    digitalWrite(in_1,LOW) ;
    digitalWrite(in_2,HIGH) ;
    delay(3000) ;
    //用于制动
    digitalWrite(in_1,HIGH) ;
    digitalWrite(in_2,HIGH) ;
    delay(1000) ;
}

结果

电机将首先顺时针 (CW) 方向运行 3 秒,然后逆时针 (CCW) 运行 3 秒。