📜  Arduino直流电机

📅  最后修改于: 2020-12-27 10:07:59             🧑  作者: Mango

Arduino直流电机

直流电动机被认为是最简单的电动机,其用途广泛,从家庭到工业。示例包括汽车,电动汽车,电梯等中的电动窗。

直流电动机的原理基于电磁感应。这意味着电动机的旋转取决于磁场产生的力。它将电能转换为机械能。这样的电动机可以由直流电供电。

让我们讨论一下直流电动机的工作原理。

直流电动机的工作

直流电动机由定子,转子,电枢和换向器组成。换向器带有电刷。定子中有两个固定磁体,它们负责产生磁场。

直流电动机中的电枢承载交流电。电枢将电能以转矩形式转换为机械能。它还通过轴传递该机械能。

换向器定义为电气开关。它还可以使外部电路和电动机之间的电流方向反向。电刷充当外部电源和旋转线圈之间的中间部分。

当电流通过导线时,位于中心的铁芯被绝缘的导线包裹,该导线集中在磁场上。绝缘电线的绕组在电动机的铁心周围有许多匝。

导线末端连接到换向器。换向器进一步激励电枢线圈,并通过电刷将电源和旋转线圈连接起来。

直流电动机的优点

下面列出了使用直流电动机的优点:

  • 低成本
  • 简易的电动机速度控制
  • 高可靠性
  • 维护最少
  • 高启动扭矩
  • 快速上手
  • 变速
  • 谐波免费

直流电动机如下图所示:

让我们从项目开始。

我们将讨论直流电动机的两个项目。

项目1:

在这里,我们将讨论使用二极管,晶体管和电阻器将直流电动机与Arduino板的简单连接。

所需硬件

该项目所需的组件如下:

  • Arduino UNO R3开发板
  • 面包板
  • 2.2K欧姆的电阻
  • 晶体管(NPN)
  • 二极管
  • 直流马达
  • 跳线

项目结构

该项目的结构如下所示:

草图

考虑下面的代码:

int PinOFmotor = 10; 
// PIN 10 of the Arduino is initialized to the variable
// the pin must be a PWM pin
void setup() 
{
 pinMode(PinOFmotor, OUTPUT);
}
void loop() 
{
 digitalWrite(PinOFmotor, HIGH);
 delay(1000); 
 digitalWrite(PinOFmotor, LOW);
 delay(1000);
}

将代码上传到板上的步骤

步骤如下:

  • 打开Arduino IDE。
  • 从工具->板-> Arduino UNO中选择板的类型。
  • 从工具->端口-> COM中选择端口。
  • 将以上草图上传到连接图。

连接

下面列出了建立连接的步骤:

  • 将电阻的一端连接到Arduino板的引脚10(PWM)。
  • 将电阻器的另一端连接到晶体管的中间引脚。
  • 将晶体管的一端连接到Arduino的GND引脚,另一端连接到二极管。
  • 将二极管的带侧端子连接到Arduino板的5V引脚。
  • 将直流电动机的一端连接到二极管的带侧端子。
  • 将直流电动机的另一端连接到二极管的另一端。

连接图

我们将使用模拟器来显示连接,以便使连接更清晰,更精确。

我们可以使用硬件设备进行相同的连接。

连接后,电动机将旋转。

专案2:

在这里,我们将讨论使用L293D H桥电机驱动器将DC Gear电机与Arduino板的连接。

让我们讨论一下将L293D H桥电机驱动器与直流电机一起使用的必要性。

L293定义为允许直流电动机沿任何方向驱动的电动机驱动器IC。它还可以同时控制两个直流电动机。它是一个16针集成电路(IC)。

它从Arduino板上的微处理器接收信号,并将该信号传输到电机。它具有两个VCC或电压引脚,其中一个引脚消耗电流以进行工作,而另一个则用于向直流电动机提供电压。

电机通常需要高电流才能运行。我们可以使用的微控制器,但是高电流可能会损坏微控制器。为了克服这个问题,使用了电机驱动器。

L293D是用于驱动直流电动机的最受欢迎的电动机驱动器之一。它可以运行高达1安培电流负载的直流电动机。

L293D驱动器上的四个输出使其也适用于驱动4线步进电机。我们也可以使用L293D驱动器来驱动伺服电机。

L293D引脚排列

L293D的引脚排列如下所示:

所需硬件

该项目所需的组件如下:

  • Arduino UNO R3开发板
  • 面包板
  • 直流减速电机
  • 30V可调电源
  • 跳线
  • L293D H桥电机驱动器

草图

考虑下面的代码:

#define MOTOR_1  11 
// PWM pin 11 
#define MOTOR_A     10
// PWM pin 10 
// we can also connect it to the other PWM pins of the Arduino
#define MOTOR_B     8
// digital I/O pin 
 
#define slow 64
#define normal 128
#define fast 255
 
int Speed; // initialization of speed variable

 // created functions
void Forward_Rev(void)
{
  analogWrite(MOTOR_1, Speed);
  digitalWrite(MOTOR_A, HIGH);
  digitalWrite(MOTOR_B, LOW);
}
void Backward_Rev(void)
{
  analogWrite(MOTOR_1, Speed);
  digitalWrite(MOTOR_A, LOW);
  digitalWrite(MOTOR_B, HIGH);
}
 
void Forward_ramp_up(void)
{
  digitalWrite(MOTOR_A, HIGH);
  digitalWrite(MOTOR_B, LOW);
  for (int i=0; i<255; i++) // loop started
    //value set from 0 to 255
  { 
    analogWrite(MOTOR_A, i); 
    delay(15); // delay time in milliseconds
  } 
} 
void Forward_ramp_down(void)
{ 
  digitalWrite(MOTOR_A, HIGH);
  digitalWrite(MOTOR_B, LOW); 
  
  for (int i=255; i>=0; i--) // loop set in reverse direction
   // value set from 255 to 0 (reverse)
  {
    analogWrite(MOTOR_A, i);
    delay(15);
  }
}
 // same statement but within different function
void Backward_ramp_up(void)
{
  digitalWrite(MOTOR_A, LOW);
  digitalWrite(MOTOR_B, HIGH);
  for (int i=0; i<255; i++) 
  { analogWrite(MOTOR_A, i); 
   delay(15); 
   // we can modify the delay time as per the requirements
  } 
} 
void Backward_ramp_down(void)
{ 
  digitalWrite(MOTOR_A, LOW);
  digitalWrite(MOTOR_B, HIGH); 
  
  for (int i=255; i>=0; i--) 
  {
    analogWrite(MOTOR_A, i);
    delay(15);
  }
}
 
void Brake(void)
{
  digitalWrite(MOTOR_A, HIGH);
  digitalWrite(MOTOR_B, HIGH);
}
 
void setup() 
{
  
  Serial.begin(9600); // bps rate of 9600
  Serial.println("DC motor test using L293D");
 
  pinMode(MOTOR_1, OUTPUT);
  pinMode(MOTOR_A, OUTPUT);
  pinMode(MOTOR_B, OUTPUT);
}
 
void loop() 
{
 
  Speed=slow; // Slow Speed
  // we can modify the value as fast, slow, and normal depending on the required speed
  //the motor will revolve according to the specified speed
  // for example, fast will cause it to move at fast speed
  // we can also add more parameters using #define
 
  Forward_Rev(); 
  delay(1000);
  Brake();
  delay(500);
  Backward_Rev(); 
  delay(1000);
  Brake();
  delay(500);
  Forward_ramp_up();
  Forward_ramp_down();
  Backward_ramp_up();
  Backward_ramp_down();
  // the statement inside the functions will run again and again
  // the motor will revolve in forward and backward direction
}

连接

下面列出了建立连接的步骤:

  • 将电源的红色端子连接到L293D的VCC。
  • 将电源的黑色端子连接到L293D的GND。
  • 将电动机的两个端子都连接到L293D驱动器的输出引脚1和2。
  • 将L293D的输入引脚2连接到Arduino板的数字引脚8。
  • 将使能引脚1和输入1连接到Arduino板的PWM引脚10和11。
  • 将L293D驱动器的VCC连接到Arduino板的5V引脚。
  • 将L293D驱动器的GND连接到Arduino板的GND引脚。

连接图

我们将使用模拟器来显示连接,以便使连接更清晰,更精确。

我们可以使用硬件设备进行相同的连接。

速度的“慢速”模式将导致电动机以慢速旋转。如代码中所述,我们还可以将模式更改为快速或正常。

我们还可以根据需要向代码添加更多速度参数。