本教程先容了如何利用ESP32和L298N电机驱动器来掌握DC电机的方向和速率。首先,我们将快速理解L298N电机驱动器的事情事理。然后,我们将向您展示一个示例,解释如何利用带有Arduino IDE的ESP32和L298N电机驱动器来掌握DC电机的速率和方向。
把稳:有很多方法可以掌握直流电动机。我们将利用L298N电机驱动器。本教程还与类似的电机驱动器模块兼容。
所需部件
要完本钱教程,您须要以下部分:
ESP32 DOIT DEVKIT V1直流马达L298N电机驱动器电源: 4节1.5节AA电池 或 开关电源2个100nF陶瓷电容器 (可选)1个SPDT滑动开关 (可选)跳线
L298N电机驱动器先容
有许多方法可以掌握直流电动机。我们将在这里利用的方法适用于大多数须要6V或12V操作的业余爱好者电机。
我们将利用L298N电动机驱动器,该驱动器在35V电压下可处理高达3A的电流。此外,它还许可我们同时驱动两个直流电动机,这非常适宜构建机器人。
L298N电机驱动器如下图所示:
L298N电机驱动器引脚排列
让我们看一下L298N电机驱动器的引脚排列,看看它是如何事情的。
电机驱动器在每个电机的每侧都有两个接线端子。OUT1和OUT2在左侧,OUT3和OUT4在右侧。
OUT1:直流电机A +端子OUT2:直流电动机A –端子OUT3:直流电机B +端子OUT4:直流电动机B –端子在底部,有一个带+ 12V,GND和+ 5V的三个接线端子。+ 12V端子用于马达电源。+ 5V端子用于L298N芯片。但是,如果安装了跳线,则芯片将利用电动机的电源供电,并且您无需通过+ 5V端子供应5V 电压。
把稳:如果您供应的电压超过12V,则须要卸下跳线,并向+ 5V端子供应5V的电压。
主要的是要把稳,只管端子名称为+ 12V,但在这里我们将利用设置(在有跳线的情形下)可以供应6V至12V之间的任何电压。在本教程中,将利用4节AA 1.5V电池,这些电池的总输出约为6V,但是您可以利用任何其他得当的电源。例如,您可以利用开关电源来测试本教程。
综上所述:
+ 12V:+ 12V端子是您该当连接电源的地方GND:电源GND+ 5V:如果移除了跳线,则供应5V。如果有跳线,则充当5V输出跳线:默认的跳线–利用电动机电源为芯片加电。跳线已移除:您须要为+ 5V端子供应5V电压。如果您供应的电压超过12V,则应卸下跳线在右下角,您有四个输入引脚和两个启用端子。输入引脚用于掌握直流电动机的方向,而使能引脚用于掌握每个电动机的速率。
IN1: 电动机A的输入1IN2:电动机A的输入2IN3:电机B的输入1IN4:电机B的输入2EN1:电机A的使能引脚EN2:电机B的使能引脚默认情形下,使能引脚上有跳线帽。您须要卸下那些跳线帽以掌握电动机的速率。
利用L298N掌握直流电动机
现在您已经熟习了L298N电动机驱动器,让我们看看如何利用它来掌握直流电动机。
使能引脚
使能引脚就像电动机的ON和OFF开关。例如:
如果将HIGH旗子暗记发送到使能1引脚,则电动机A准备好以最大速率进行掌握;如果将低电平旗子暗记发送到使能1引脚,则电动机A关闭;否则,电动机A启用。如果发送PWM旗子暗记,则可以掌握电动机的速率。电机速率与占空比成正比。但是,请把稳,在较小的占空比下,电动机可能不会旋转,并且会发出持续的嗡嗡声。输入脚
输入引脚掌握电动机旋转的方向。输入1和输入2掌握马达A,输入3和4掌握马达B.
如果将LOW运用于输入1,将HIGH运用于输入2,则电动机将正转;如果以相反的办法加电:输入1为高,输入2为低,电动机将向后旋转。可以利用相同的方法来掌握电动机B,但是将HIGH或LOW运用于输入3和输入4。掌握2台直流电动机–是构建机器人的空想选择
如果要利用2个直流电动机建造机器人汽车,则这些电动机应沿特定方向旋转,以使机器人向左,向右,向前或向后移动。
例如,如果您希望机器人向前移动,则两个电动机都应向前旋转。为了使其向后移动,两者都应向后旋转。
为了使机器人朝一个方向旋转,您须要更快地旋转相反的电机。例如,要使机器人向右转,请在左侧启用电动机,然后在右侧禁用电动机。
利用ESP32掌握直流电机–速率和方向
现在,您知道如何利用L298N电动机驱动器掌握直流电动机,让我们建立一个大略的示例来掌握一个直流电动机的速率和方向。
事理图
我们将掌握的电机连接到电机A的输出引脚,因此我们须要将电机驱动器的ENABLEA,INPUT1和INPUT2引脚连接到ESP32。将直流电动机和L298N电动机驱动器连接到ESP32。
DC电动机须要较大的电流跳跃才能启动,因此应利用ESP32的外部电源为电动机供电。例如,我们利用4AA电池,但是您可以利用任何其他得当的电源。在此配置中,您可以利用6V至12V的电源。
电池座和电机驱动器之间的开关是可选的,但割断和接通电源非常方便。这样,您就不须要不断地连接然后断开电线以节省功率。
我们建议将0.1uF陶瓷电容器焊接到直流电动机的正负极,以帮助肃清任何电压尖峰。(把稳:电动机也可以在没有电容器的情形下事情。)
准备Arduino IDE
Arduino IDE有一个附加组件,可让您利用Arduino IDE及其编程措辞对ESP32进行编程。确保已安装ESP32插件后,可以连续本教程。
上传代码
以下代码掌握直流电动机的速率和方向。该代码在现实天下中没有用,这只是一个大略的示例,可以更好地理解如何利用ESP32掌握DC电动机的速率和方向。
/
Rui Santos
Complete project details at https://randomnerdtutorials.com
/
// Motor A
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;
// Setting PWM properties
const int freq = 30000;
const int pwmChannel = 0;
const int resolution = 8;
int dutyCycle = 200;
void setup() {
// sets the pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
// configure LED PWM functionalitites
ledcSetup(pwmChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(enable1Pin, pwmChannel);
Serial.begin(115200);
// testing
Serial.print("Testing DC Motor...");
}
void loop() {
// Move the DC motor forward at maximum speed
Serial.println("Moving Forward");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
delay(2000);
// Stop the DC motor
Serial.println("Motor stopped");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
delay(1000);
// Move DC motor backwards at maximum speed
Serial.println("Moving Backwards");
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
delay(2000);
// Stop the DC motor
Serial.println("Motor stopped");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
delay(1000);
// Move DC motor forward with increasing speed
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
while (dutyCycle <= 255){
ledcWrite(pwmChannel, dutyCycle);
Serial.print("Forward with duty cycle: ");
Serial.println(dutyCycle);
dutyCycle = dutyCycle + 5;
delay(500);
}
dutyCycle = 200;
}
将代码上传到ESP32。确保选择了精确的板和COM端口。让我们看一下代码是如何事情的。
声明电机引脚
首先,定义电机引脚连接的GPIO。在这种情形下,电机A的输入1连接到GPIO 27,输入2连接到GPIO 26,使能引脚连接到GPIO 14。
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;
设置PWM属性以掌握速率
如前所述,您可以通过向L298N电机驱动器的使能引脚施加PWM旗子暗记来掌握直流电机的速率。速率将与占空比成正比。要将PWM与ESP32一起利用,您须要首先设置PWM旗子暗记属性。
const int freq = 30000;
const int pwmChannel = 0;
const int resolution = 8;
int dutyCycle = 200;
在这种情形下,我们将在通道0上以8位分辨率天生30000 Hz的旗子暗记。我们从200的占空比开始(您可以将占空比值设置为0到255)。
对付我们利用的频率,当您运用小于200的占空比时,电机将不会移动,并且会发出奇怪的蜂鸣声。因此,这便是为什么我们一开始将占空比设置为200的缘故原由。
把稳:我们在此处定义的PWM属性只是一个示例。电机可以在其他频率下正常事情。
设定()
在setup()中,首先将电动机引脚设置为输出。
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
您须要通过利用ledcSetup()函数来配置具有先前定义的属性的PWM旗子暗记,该函数接管pwmChannel,frequency和resolution作为参数,如下所示:
ledcSetup(pwmChannel, freq, resolution);
接下来,您须要选择将从其获取信号的GPIO。为此,请利用 ledcAttachPin()函数,该函数接管要获取信号的GPIO以及天生旗子暗记的通道作为参数。在此示例中,我们将在enable1Pin GPIO中获取信号,该GPIO与GPIO 14相对应。天生旗子暗记的通道为pwmChannel,与通道0相对应。
ledcAttachPin(enable1Pin, pwmChannel);
向前移动直流电动机
在loop()中是电动机运动的地方。该代码很好地解释了代码各部分的功能。要使电动机向前移动,请将输入1引脚设置为LOW,将输入2引脚设置为HIGH。在此示例中,电动机向前旋转2秒钟(2000毫秒)。
// Move the DC motor forward at maximum speed
Serial.println("Moving Forward");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
delay(2000);
向后移动直流电动机
要向后移动直流电动机,请反方向向电动机输入引脚供电。高输入1,低输入2。
// Move DC motor backwards at maximum speed
Serial.println("Moving Backwards");
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
delay(2000);
停滞直流电机
要使直流电动机停滞,您可以将使能引脚设置为LOW,或者将输入1和输入2引脚都设置为LOW。在此示例中,我们将两个输入引脚都设置为LOW。
// Stop the DC motor
Serial.println("Motor stopped");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
delay(1000);
掌握直流电动机速率
要掌握直流电动机的速率,我们须要变动PWM旗子暗记占空比。为此,您可以利用ledcWrite()函数,该函数接管天生旗子暗记的PWM通道(而不是输出GPIO)和占空比的参数,如下所示。
ledcWrite(pwmChannel, dutyCycle);
在我们的示例中,我们有一个while循环,可以在每个循环中将占空比增加5。
// Move DC motor forward with increasing speed
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
while (dutyCycle <= 255){
ledcWrite(pwmChannel, dutyCycle);
Serial.print("Forward with duty cycle: ");
Serial.println(dutyCycle);
dutyCycle = dutyCycle + 5;
delay(500);
}
当while条件不再成立时,我们将占空比再次设置为200。
dutyCycle = 200;
写在末了
在本教程中,我们向您展示了如何利用ESP32和L298N电机驱动器来掌握DC电机的方向和速率。综上所述:
要掌握直流电动机旋转的方向,请利用输入1和输入2引脚;将LOW运用于输入1,将HIGH运用于输入2,以使电动机向前旋转。用另一种方法加电以使其向后旋转。要掌握直流电动机的速率,请在使能引脚上利用PWM旗子暗记。直流电动机的速率与占空比成正比。