基于Arduino的L298N电机驱动模块使用

一.简介:

L298N作为电机驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点,一个模块可同时驱动两个直流电机工作,能够控制电机进行正转、反转、PWM调速。

说明:

1)12V输入端口接入供电电压, 5V端口为输出电压,电压过低会导致驱动电机动力不足,电压过高会烧坏芯片。

2)当用跳线帽将ENA和ENB端口短接时,此时只需通过控制IN1、IN2、IN3、IN4上的电平,即可实现电机转动。

二.使用方法

1)核心控制板使用Arduino UNO

该控制板是基于ATmega328P的Arduino开发板。它有14个数字输入/输出引脚(其中6个可用于PWM输出)、6个模拟输入引脚,一个16 MHz的晶体振荡器,一个USB接口,一个DC接口,一个ICSP接口,一个复位按钮,它包含了微控制器所需的一切,你只用简单地把它连接到计算机的USB接口,或者使用AC-DC适配器,再或者用电池,就可以驱动它。

"UNO"在意大利语中意思是"一",Arduino UNO是Arduino系列的一号开发板,Arduino IDE1.0是ArduinolDE的第一个正式版本,ArduinoUNO硬件和ArduinolDE软件建立了一套Arduino开发标准,此后的Arduino开发板和衍生产品都是在这个标准上建立起来的。

2)L298N电机状态控制表:

ENA,ENB分别接入Arduino PWM引脚,通过调节PWM信号的占空比,可实现电机的调速,占空比越大,电机转速越快。同时由于硬件方面的原因,导致左右电机在相同占空比下,转速不同,这时需要调节PWM占空比实现智能小车的直线运行。

三.源代码

复制代码
```c
#define ENA 6
#define inPinA1 7
#define inPinA2 8

#define ENB 5
#define inPinB1 12
#define inPinB2 13
//直线调试成功,左轮速度需快一点
// const int speedA = 115;//右轮
// const int speedB = 128;//左轮

//占空比取值:0~255
const int speedA = 95;//右轮占空比
const int speedB = 108;//左轮占空比

void setup() {
  // put your setup code here, to run once:
  pinMode(ENA, OUTPUT);
  pinMode(inPinA1,OUTPUT);
  pinMode(inPinA2,OUTPUT);
  
  pinMode(ENB,OUTPUT);
  pinMode(inPinB1,OUTPUT);
  pinMode(inPinB2,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  forwardPwm(speedA,speedB);
  delay(2000);

  stop();
  delay(2000);

  backwardPwd(speedA, speedB);
  delay(2000);

  forwardRight(speedB);
  delay(2000);

  forwardLeft(speedB);
  delay(2000);
}

//PWM调节正转速度
void forwardPwm(int valueA,int valueB)
{
  forwardPwmA(valueA);
  forwardPwmB(valueB);
}

//右轮
void forwardPwmA(int value)
{
  analogWrite(ENA, value);
  digitalWrite(inPinA1,LOW);
  digitalWrite(inPinA2,HIGH);
}
//左轮
void forwardPwmB(int value)
{
  analogWrite(ENB, value);
  digitalWrite(inPinB1,LOW);
  digitalWrite(inPinB2,HIGH);
}

//停止
void stop()
{
  stopA();
  stopB();
}

void stopA()
{
  analogWrite(ENA, HIGH);
  digitalWrite(inPinA1,LOW);
  digitalWrite(inPinA2,LOW);
}

void stopB()
{
  analogWrite(ENB, HIGH);
  digitalWrite(inPinB1,LOW);
  digitalWrite(inPinB2,LOW);
}

//value:0~255
//PWM调节反转速度
void backwardPwd(int valueA,int valueB)
{
  backwardPwdA(valueA);
  backwardPwdB(valueB);
}

void backwardPwdA(int value)
{
  analogWrite(ENA, value);
  digitalWrite(inPinA1, HIGH);
  digitalWrite(inPinA2, LOW);
}

void backwardPwdB(int value)
{
  analogWrite(ENB, value);
  digitalWrite(inPinB1, HIGH);
  digitalWrite(inPinB2, LOW);
}

//左转 A转
void forwardLeft(int value)
{
  stopB();
  forwardPwmA(value);
}

//右转 B转
void forwardRight(int value)
{
  stopA();
  forwardPwmB(value);
}

代码效果:实现智能小车前进2s,停止2s,后退2s,右转2s,左转2s

相关推荐
fie888918 小时前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
bu_shuo18 小时前
嵌入式硬件工程师VS单板硬件工程师
嵌入式硬件·电子工程师·单板硬件
llilian_1618 小时前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq1302086968219 小时前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
路溪非溪19 小时前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
Freak嵌入式19 小时前
LVGL基础知识和概念:视觉样式与资源系统
ide·驱动开发·嵌入式·lvgl·micropython·upypi
爱吃程序猿的喵19 小时前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
独小乐19 小时前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
XINVRY-FPGA20 小时前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
bubiyoushang8881 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件