当前位置: 首页 > news >正文

0基础 | L298N电机驱动模块 | 使用指南

引言

在嵌入式系统开发中,电机驱动是一个常见且重要的功能。L298N是一款高电压、大电流电机驱动芯片,广泛应用于各种电机控制场景,如直流电机的正反转、调速,以及步进电机的驱动等。本文将详细介绍如何使用51单片机来控制L298N电机驱动模块,帮助大家快速上手相关项目开发。

L298N电机驱动模块简介

L298N内部包含4通道逻辑驱动电路,可以方便地驱动两个直流电机或者一个两相步进电机。它具有以下主要特点:

  • 高电压、大电流:能够提供高达46V的电压和2A的电流,满足大多数电机的驱动需求。
  • 逻辑兼容性好:可以直接与5V逻辑电平的微控制器(如51单片机)连接。
  • 控制灵活:通过控制输入引脚的电平状态,可以方便地实现电机的正反转、制动和使能等功能。

从外观上看,L298N模块通常由红色的电路板、黑色的散热片以及多个引脚和接线端子组成,如图所示:

(此处可替换为实际图片链接)

模块上的引脚功能如下:

  • 12V供电:为L298N内部电路提供工作电源,一般接12V直流电源。
  • 供电GND:电源地,与12V供电的地相连。
  • 5V供电:为L298N的逻辑电路提供5V电源,也可为5V单片机供电(注意电流限制)。
  • 板载5V使能:当该引脚接高电平时,5V供电输出有效;接低电平时,5V输出被切断。
  • 通道A使能(ENA):控制通道A(输出A)电机的使能状态,高电平有效。
  • 逻辑输入(IN1、IN2):控制通道A电机的正反转,通过不同的电平组合实现。
  • 通道B使能(ENB):控制通道B(输出B)电机的使能状态,高电平有效。
  • 逻辑输入(IN3、IN4):控制通道B电机的正反转,通过不同的电平组合实现。
  • 输出A:连接直流电机的一端或步进电机的一相。
  • 输出B:连接直流电机的另一端或步进电机的另一相。

硬件连接

电源连接

  1. 将12V直流电源的正极连接到L298N模块的12V供电引脚。
  2. 将12V直流电源的负极连接到L298N模块的供电GND引脚。
  3. 如果51单片机的工作电压为5V,可以将L298N模块的5V供电引脚连接到51单片机的5V电源引脚,同时将L298N模块的供电GND引脚也连接到51单片机的GND引脚。注意,L298N的5V供电能力有限,若同时驱动多个大电流设备,可能需要额外为51单片机提供独立的5V电源。
注意
“板载5V” 的短接口连上时,12v和GND为电源接入,5V为电源输出
通道A和通道B的使能引脚短接:可以控制两个电机的正反转
逻辑输入IN1和IN2控制OUT1和OUT2;逻辑输入IN3和IN4控制OUT3和OUT4;

电机连接

假设我们要驱动一个直流电机,将电机的两端分别连接到L298N模块的Output 1(输出A)和Output 2(输出B)引脚。

51单片机连接

  1. 使能引脚连接
    • 将51单片机的一个GPIO引脚(例如P1.0)连接到L298N模块的通道A使能引脚(ENA)。
    • 将51单片机的另一个GPIO引脚(例如P1.1)连接到L298N模块的通道B使能引脚(ENB)。
  2. 逻辑输入引脚连接
    • 将51单片机的一个GPIO引脚(例如P1.2)连接到L298N模块的逻辑输入引脚IN1。
    • 将51单片机的一个GPIO引脚(例如P1.3)连接到L298N模块的逻辑输入引脚IN2。
    • 将51单片机的一个GPIO引脚(例如P1.4)连接到L298N模块的逻辑输入引脚IN3。
    • 将51单片机的一个GPIO引脚(例如P1.5)连接到L298N模块的逻辑输入引脚IN4。

板载5V使能连接(可选)

如果需要使用L298N模块的板载5V供电功能,可以将51单片机的一个GPIO引脚连接到板载5V使能引脚,并在程序中进行控制。

软件编程

电机正反转

下面以51单片机C语言为例,给出控制直流电机正反转的代码示例:

#include <reg51.h>
#include < intrins.h>// 定义引脚
sbit ENA = P1^0;  // 通道A使能引脚
sbit ENB = P1^1;  // 通道B使能引脚
sbit IN1 = P1^2;  // 通道A逻辑输入引脚1
sbit IN2 = P1^3;  // 通道A逻辑输入引脚2
sbit IN3 = P1^4;  // 通道B逻辑输入引脚1
sbit IN4 = P1^5;  // 通道B逻辑输入引脚2// 延时函数
void delay(unsigned int time)
{unsigned int i, j;for(i = 0; i < time; i++)for(j = 0; j < 1275; j++);
}void main()
{while(1){// 电机正转ENA = 1;  // 使能通道AIN1 = 1;IN2 = 0;delay(5000);  // 延时一段时间// 电机反转ENA = 1;  // 保持通道A使能IN1 = 0;IN2 = 1;delay(5000);  // 延时一段时间// 电机停止ENA = 0;  // 失能通道Adelay(5000);  // 延时一段时间}
}

在上述代码中:

  1. 首先定义了与L298N模块连接的51单片机引脚。
  2. delay函数用于实现简单的延时功能,通过嵌套循环来消耗一定的时间。
  3. main函数中,通过改变ENAIN1IN2的电平状态来控制电机的正转、反转和停止。

电机调速

如果要实现电机的调速功能,可以使用PWM(脉冲宽度调制)技术。以定时器T0产生PWM信号控制ENA引脚为例,代码如下:

#include <reg51.h>
#include < intrins.h>// 定义引脚
sbit ENA = P1^0;  // 通道A使能引脚
sbit ENB = P1^1;  // 通道B使能引脚
sbit IN1 = P1^2;  // 通道A逻辑输入引脚1
sbit IN2 = P1^3;  // 通道A逻辑输入引脚2
sbit IN3 = P1^4;  // 通道B逻辑输入引脚1
sbit IN4 = P1^5;  // 通道B逻辑输入引脚2// 定义PWM相关变量
unsigned char PWM_Count;
unsigned char PWM_Duty;// 初始化定时器T0为PWM模式
void Timer0_Init()
{TMOD = 0x01;  // 设置定时器T0为工作方式1TH0 = 0xFE;   // 设置定时器初值,产生1ms的定时周期(假设晶振为12MHz)TL0 = 0x33;ET0 = 1;      // 使能定时器T0中断EA = 1;       // 使能总中断TR0 = 1;      // 启动定时器T0
}// 定时器T0中断服务程序
void Timer0_ISR(void) interrupt 1
{TH0 = 0xFE;   // 重新赋初值TL0 = 0x33;PWM_Count++;if (PWM_Count >= PWM_Duty){ENA = 0;  // 低电平,电机减速}else{ENA = 1;  // 高电平,电机加速}if (PWM_Count >= 100)  // PWM周期为100ms{PWM_Count = 0;}
}// 设置PWM占空比
void Set_PWM_Duty(unsigned char duty)
{PWM_Duty = duty;
}void main()
{Timer0_Init();while(1){// 电机正转并设置PWM占空比为50%

相关文章:

  • C语言常见的文件操作函数总结
  • QSS样式表的选择器
  • iVX 图形化编程平台:结合 AI 原生开发的革新与实践
  • 模块化编程
  • 【问题】Watt加速github访问速度:好用[特殊字符]
  • ACM模式手动构建二叉树
  • 精读计算机体系结构基础 第三章 特权指令系统
  • 使用 SHAP 进行特征交互检测:揭示变量之间的复杂依赖关系
  • 豆包:国内 web 辅助开发的领头羊
  • 以党建网为例,深入分析IT技术栈,实战经验
  • 基于多层权重博弈与广播机制的仿生类脑 AI 决策框架
  • 文件(分片)并行上传时计算总的上传进度
  • Linux基础开发工具一(yum/apt ,vim)
  • C++内存管理详解
  • ES 面试题系列「二」
  • HTML难点小记:一些简单标签的使用逻辑和实用化
  • 49.EFT测试与静电测试环境和干扰特征分析
  • RS485和RS232 通信配置
  • 【Linux高级全栈开发】2.1高性能网络-网络编程——2.1.1 网络IO与IO多路复用——select/poll/epoll
  • Kubernetes排错(十四):Pod状态异常排查手册
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号
  • 中国潜水救捞行业协会发布《呵护潜水员职业健康安全宣言》
  • 网信部门曝光网络谣言典型案例,“AI预测彩票号码百分百中奖”等在列