当前位置: 首页 > 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%

http://www.xdnf.cn/news/391825.html

相关文章:

  • 【基于 LangChain 的异步天气查询5】多轮对话天气智能助手
  • js的基本数据类型
  • opencascade.js stp vite 调试笔记
  • 使用 Java 反射动态加载和操作类
  • Ollama部署使用以及模型微调和本地部署
  • go语言对Cookie的支持
  • el-date-picker的type为daterange时仅对开始日期做限制
  • 【Java】线程实例化 线程状态 线程属性
  • AUTOSAR图解==>AUTOSAR_TR_HWTestManagementIntegrationGuide
  • REST/SOAP 协议介绍及开发示例
  • web animation API 锋利的css动画控制器 (更新中)
  • Python高级爬虫之JS逆向+安卓逆向2.1节: 网络爬虫核心原理
  • 【c++】【数据结构】二叉搜索树详解
  • InnoDB引擎
  • JVM规范之运行时数据区域
  • 【沉浸式求职学习day36】【初识Maven】
  • 低功耗蓝牙BLE之发射功率(mW/dBm)对应关系
  • jna总结1
  • 26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)
  • 在C++中,符号位是否参与位运算
  • BUUCTF——Ezpop
  • [Java实战]Spring Boot 静态资源配置(十三)
  • Appium-OppoA92S-真机记坑
  • ARP协议的工作原理
  • Linux `uname` 指令终极指南
  • 无需大规模重训练!GraspCorrect:VLM赋能机器人抓取校正,抓取成功率提升18.3%
  • 如何使用 Netstat 查看监听端口
  • 环形链表(简单)
  • 谈程序的地址空间
  • 智能座舱开发工程师面试题