Arduino:L298N模块使用

本文介绍如何使用Arduino和L298N模块控制直流电机,包括电机的前进、后退、左转、右转及停止等功能,并通过串口接收指令实现调速。

Arduino:L298N模块使用

L298N是ST公司生产的芯片。主要特点是:工作电压高,最高工作电压可达46V,并且可以驱动两个二相电机,可以直接通过电源来调节输出电压;可以直接用单片机的I/O口提供信号,而且电路简单,使用比较方便。





若要对直流电机进行调速,只需要在确定IN1,IN2后(电机的转向),对使能端ENA输出PWM脉冲即可。

Arduino 代码:

<span style="font-size:14px;">const int N1 = 11;
const int N2 = 12;
const int N3 = 3;
const int N4 = 4;
const int PWM_ENA = 6;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(N1,OUTPUT);
  pinMode(N2,OUTPUT);
  pinMode(N3,OUTPUT);
  pinMode(N4,OUTPUT);
  pinMode(PWM_ENA,OUTPUT);
}
void Forword()
{
  digitalWrite(N1,HIGH);
  digitalWrite(N2,LOW);
  digitalWrite(N3,HIGH);
  digitalWrite(N4,LOW);
}
void Backword()
{
  digitalWrite(N1,LOW);
  digitalWrite(N2,HIGH);
  digitalWrite(N3,LOW);
  digitalWrite(N4,HIGH);
}
void TurnLeft()
{
  digitalWrite(N1,LOW);
  digitalWrite(N2,HIGH);
  digitalWrite(N3,HIGH);
  digitalWrite(N4,LOW);
}
void TurnRight()
{
  digitalWrite(N1,HIGH);
  digitalWrite(N2,LOW);
  digitalWrite(N3,LOW);
  digitalWrite(N4,HIGH);
}
void Stop()
{
  digitalWrite(N1,LOW);
  digitalWrite(N2,LOW);
  digitalWrite(N3,LOW);
  digitalWrite(N4,LOW);
}
void PWM_PLUS()
{
    const int rate = 700;
    digitalWrite(PWM_ENA,HIGH);
    delayMicroseconds(rate);
    digitalWrite(PWM_ENA,LOW);
    delayMicroseconds(1000-rate);
}
void loop() {
  // put your main code here, to run repeatedly:
  //PWM_PLUS();调速函数,通过ENA输出PWM脉冲
  while(Serial.available()>0)
   {
     char c=Serial.read();
      if(c=='U')
        {
          Forword();
        }
      else if(c == 'D')
      {
        Backword();
      }
      else if(c == 'L')
      {
        TurnLeft();
      }
      else if(c == 'R')
      {
        TurnRight();
      }
      else if(c == 'S')
      {
        Stop();
      }
   }
}</span>








### 使用L298N电机驱动模块通过PWM调速并实现蓝牙控制 #### 硬件连接 L298N电机驱动模块是一种双H桥直流电机驱动器,能够驱动两个直流电机或一个步进电机。为了实现PWM调速和蓝牙控制,需要将L298N模块的输入引脚与单片机(如Arduino)相连,并通过HC-05蓝牙模块接收外部指令[^1]。 - **ENA/ENB**:用于设置PWM信号的占空比,从而调节电机速度。 - **IN1/IN2 和 IN3/IN4**:用于控制电机的转向。 - **HC-05蓝牙模块**:接收来自手机或其他设备的指令。 #### 示例代码 以下是一个使用ArduinoL298N电机驱动模块和HC-05蓝牙模块实现PWM调速和蓝牙控制的示例代码: ```cpp // 定义L298N的引脚 const int ENA = 9; // PWM 控制左电机速度 const int IN1 = 8; // 左电机方向控制 const int IN2 = 7; // 左电机方向控制 const int ENB = 10; // PWM 控制右电机速度 const int IN3 = 6; // 右电机方向控制 const int IN4 = 5; // 右电机方向控制 void setup() { Serial.begin(9600); // 初始化串口通信,用于蓝牙模块 pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { if (Serial.available()) { // 检测是否有蓝牙数据 char command = Serial.read(); // 读取蓝牙指令 switch (command) { case 'F': // 前进 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 128); // 设置PWM值为128(中速) analogWrite(ENB, 128); break; case 'B': // 后退 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 128); analogWrite(ENB, 128); break; case 'L': // 左转 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 128); analogWrite(ENB, 128); break; case 'R': // 右转 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 128); analogWrite(ENB, 128); break; case 'S': // 停止 digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); analogWrite(ENA, 0); analogWrite(ENB, 0); break; } } } ``` #### 注意事项 如果L298N模块的ENA和ENB引脚键帽未去掉,则处于短路状态,此时无法使用`analogWrite(pin, value)`函数实现调速功能。因此,在进行PWM调速前,请确保已移除ENA和ENB的短接帽。 #### 蓝牙控制原理 HC-05蓝牙模块通过UART协议与单片机通信。在上述代码中,单片机通过串口接收蓝牙模块发送的字符指令(如`F`表示前进,`B`表示后退等),并根据指令调整电机的运行状态[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值