STM32 智能小车项目 L298N 电机驱动模块

news2025/6/5 19:06:17

今天开始着手做智能小车的项目了

在智能小车或机器人项目中,我们经常会听到一个词叫 “H 桥电机驱动”,尤其是常见的 L298N 模块,就是基于“双 H 桥”原理设计的。那么,“H 桥”到底是什么?为什么要用“双 H 桥”来驱动电机?。今天,我们就来深入讲解一种应用极为广泛的电机驱动模块——L298N,了解它的工作原理、引脚功能、接线方式及实际应用。

一、什么是 L298N?

L298N 是一款 双 H 桥电机驱动芯片,内部集成了两个全桥驱动器,能同时控制两个直流电机或一个步进电机。由于其稳定性好、价格低、接线方便,成为 Arduino、STM32、51 单片机等平台中最常见的电机驱动解决方案之一。

二.模块引脚与结构详解

L298N 模块通常包括如下接口:

1. 电源接口

引脚

功能描述

VCC

给电机供电(5~35V)

GND

地线(逻辑地与电源地共用)

5V

给控制逻辑供电,或供外部单片机使用(视跳帽而定)

注意:VCC 是电机电源输入,不是控制电压!

2. 控制引脚

引脚

功能

IN1/IN2

控制电机 A 正反转

IN3/IN4

控制电机 B 正反转

ENA

使能电机 A,同时用于 PWM 调速

ENB

使能电机 B,同时用于 PWM 调速

3. 输出接口

引脚

功能说明

OUT1/OUT2

电机 A 输出

OUT3/OUT4

电机 B 输出

三, H 桥原理简要回顾

H 桥是一种电路结构,用于改变电流方向以实现直流电机的正转、反转、刹车、停止等控制。

一个 H 桥控制一个电机的两个方向,两组 H 桥可控制两个电机,因此称为“双 H 桥”。

IN1

IN2

电机状态

正转

反转

刹车

停止(断电)

ENA 和 ENB 输入 PWM 信号可以调节电机转速。

四,接线实例:L298N + STM32F103

一、硬件连接说明(以 STM32F103 为例)

L298N 引脚

功能

STM32 引脚

说明

IN1

电机A控制

PA0

GPIO 输出

IN2

电机A控制

PA1

GPIO 输出

ENA

电机A调速

PA2 (TIM2_CH3)

PWM 输出

IN3

电机B控制

PA3

GPIO 输出

IN4

电机B控制

PA4

GPIO 输出

ENB

电机B调速

PA5 (TIM2_CH1)

PWM 输出

GND

GND

必须共地

二、GPIO 初始化代码

 

void L298N_GPIO_Init(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    GPIO_InitTypeDef GPIO_InitStructure;    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOA, &GPIO_InitStructure);}


 


三、PWM 初始化(使用 TIM2)

 
void PWM_Init(void){    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    GPIO_InitTypeDef GPIO_InitStructure;    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_5; // PA2 - CH3, PA5 - CH1    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOA, &GPIO_InitStructure);    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;    TIM_OCInitTypeDef TIM_OCInitStructure;// 设置计数频率为 1MHz,PWM频率为1KHz    TIM_TimeBaseStructure.TIM_Period = 1000 - 1;           // ARR    TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;          // PSC (72MHz/72=1MHz)    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// CH1 -> PA5 -> ENB    TIM_OC1Init(TIM2, &TIM_OCInitStructure);    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);// CH3 -> PA2 -> ENA    TIM_OC3Init(TIM2, &TIM_OCInitStructure);    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);    TIM_Cmd(TIM2, ENABLE);}


 


四、电机控制函数

 
// 电机A方向控制void MotorA_Dir(uint8_t dir){if (dir)    {        GPIO_SetBits(GPIOA, GPIO_Pin_0);        GPIO_ResetBits(GPIOA, GPIO_Pin_1);    }else    {        GPIO_ResetBits(GPIOA, GPIO_Pin_0);        GPIO_SetBits(GPIOA, GPIO_Pin_1);    }}// 电机B方向控制void MotorB_Dir(uint8_t dir){if (dir)    {        GPIO_SetBits(GPIOA, GPIO_Pin_3);        GPIO_ResetBits(GPIOA, GPIO_Pin_4);    }else    {        GPIO_ResetBits(GPIOA, GPIO_Pin_3);        GPIO_SetBits(GPIOA, GPIO_Pin_4);    }}// 电机A设置速度(0~1000)void MotorA_SetSpeed(uint16_t speed){    TIM_SetCompare3(TIM2, speed); // TIM2_CH3 -> ENA}// 电机B设置速度(0~1000)void MotorB_SetSpeed(uint16_t speed){    TIM_SetCompare1(TIM2, speed); // TIM2_CH1 -> ENB}


 


五、主函数调用示例

 
int main(void){    L298N_GPIO_Init();    PWM_Init();    while (1)    {        // 电机A正转,速度800        MotorA_Dir(1);        MotorA_SetSpeed(800);        // 电机B反转,速度500        MotorB_Dir(0);        MotorB_SetSpeed(500);        Delay_ms(2000);        // 停止        MotorA_SetSpeed(0);        MotorB_SetSpeed(0);        Delay_ms(1000);    }}


 

五、总结

L298N 电机驱动模块是嵌入式开发中最经典的驱动方案之一,尤其适用于智能小车、遥控车、迷你机械臂等项目。虽然存在一定局限,但其稳定性、易用性和教学价值依旧使它成为初学者和高校课程中的首选模块。

如果你正在使用 STM32、Arduino、51 单片机等平台进行小车开发,掌握 L298N 模块的使用,将为你打下坚实的控制基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2397495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Transactions(事务)、隔离机制

目录 Why Transactions? Example: Bad Interaction Transactions ACID Transactions COMMIT ROLLBACK How the Transaction Log Works How Data Is Stored Example: Interacting Processes Interleaving of Statements Example: Strange Interleaving Fixing the…

【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation) 一、算法逻辑Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理与数学推导1. Jaccard相…

QT之头像剪裁效果实现

文章目录 源码地址,环境:QT5.15,MinGW32位效果演示导入图片设置剪裁区域创建剪裁小窗口重写剪裁小窗口的鼠标事件mousePressEventmouseMoveEventmouseReleaseEvent 小窗口移动触发父窗口的重绘事件剪裁效果实现 源码地址,环境&…

【GPT入门】第40课 vllm与ollama特性对比,与模型部署

【GPT入门】第40课 vllm与ollama特性对比,与模型部署 1.两种部署1.1 vllm与ollama特性对比2. vllm部署2.1 服务器准备2.1 下载模型2.2 提供模型服务 1.两种部署 1.1 vllm与ollama特性对比 2. vllm部署 2.1 服务器准备 在autodl 等大模型服务器提供商,…

unity开发棋牌游戏

使用unity开发的棋牌游戏,目前包含麻将、斗地主、比鸡、牛牛四种玩法游戏。 相关技术 客户端:unity 热更新:xlua 服务器:c Web服务器:ruoyi 游戏视频 unity开发棋牌游戏 游戏截图

Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制

今年2月份发表在《Nature Communications》(IF14.4)的“TaTCP6 is required for efficientand balanced utilization of nitrate and phosphorus in wheat”揭示了TaTCP6在小麦氮磷利用中的关键调控作用,为优化肥料利用和提高作物产量提供了理…

C 语言开发中常见的开发环境

目录 1.Dev-C 2.Visual Studio Code 3.虚拟机 Linux 环境 4.嵌入式 MCU 专用开发环境 1.Dev-C 使用集成的 C/C 开发环境(适合基础学习),下载链接Dev-C下载 - 官方正版 - 极客应用 2.Visual Studio Code 结合 C/C 扩展 GCC/MinGW 编译器&#xff0c…

vscode命令行debug

vscode命令行debug 一般命令行debug会在远程连服务器的时候用上,命令行debug的本质是在执行时暴露一个监听端口,通过进入这个端口,像本地调试一样进行。 这里提供两种方式: 直接在命令行中添加debugpy,适用于python…

Matlab作图之 subplot

1. subplot(m, n, p) 将当前图形划分为m*n的网格,在 p 指定的位置创建坐标轴 matlab 按照行号对子图的位置进行编号 第一个子图是第一行第一列,第二个子图是第二行第二列......... 如果指定 p 位置存在坐标轴, 此命令会将已存在的坐标轴设…

【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)

机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法) 一、算法逻辑二、算法原理与数学推导1. 距离度量2. 簇间距离计算(连接标准)3. 算法伪代码(凝聚式) 三、模型评估1. 内部评估指标2. …

Google Play的最新安全变更可能会让一些高级用户无法使用App

喜欢Root或刷机的Android用户要注意了,Google最近全面启用了新版Play Integrity API,可能会导致部分用户面临无法使用某些App的窘境。Play Integrity API是Google提供给开发者的工具,用于验证App是否在“未修改”的设备上运行。 许多重要应用…

React---day5

4、React的组件化 组件的分类: 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和…

Java开发之定时器学习

面试 一、线程池实现定时器 核心代码: public static void main(String[] args) {ScheduledExecutorService scheduledExecutorService Executors.newScheduledThreadPool(5);Runnable runnable () -> System.out.println("当前线程"Thread.current…

HealthBench医疗AI评估基准:技术路径与核心价值深度分析(上)

引言:医疗AI评估的新范式 在人工智能技术迅猛发展的当下,医疗AI系统已逐渐从实验室走向临床应用。然而,医疗领域的特殊性要求这些系统不仅需要在技术指标上表现出色,更需要在实际临床场景中展现出可靠、安全且有效的性能。长期以来,医疗AI评估领域面临着三个核心挑战:评…

Windows+VSCode搭建小智(xiaozhi)开发环境

作为一名DIY达人,肯定不会错过最近很火的“小智AI聊天机器人”,网上教程非常丰富,初级玩家可以直接在乐鑫官方下载ESP-IDF安装包并经过简单的菜单式配置后,即可进行代码编译和烧录(详见:Docs)。…

VueScan Pro v9.8.45.08 一款图像扫描软件,中文绿色便携版

VueScan是著名的第三方底片扫描仪驱动程序,支持市场可见绝大多数型号的底片扫描仪,可以更为灵活地控制扫描过程,更深入地发掘硬件潜力,获取色彩 完美的高质量扫描结果。VueScan支持200种以上的底片类型,在剪取图像时制…

FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验

RTOS 基础概念 想象一下,你是一个忙碌的厨师,在厨房里同时要完成煎牛排和煮意大利面两项任务。 1.传统单线程模式(没有RTOS) 如果你只能按顺序一项一项地做,就会是这样的过程: 先煎一会儿牛排然后去看看…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块

房屋租赁系统 JavaVue.jsSpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接:https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码:smk4 摘 要 房屋是人类生活栖息的重要…

ASP.NET MVC添加视图示例

ASP.NET MVC高效构建Web应用- 商品搜索 - 京东 视图(V)是一个动态生成HTML页面的模板,它负责通过用户界面展示内容。本节将修改HelloWorldController类,并使用视图模板文件,以干净地封装生成对客户端的HTML响应的过程…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Form Wave(表单label波动效果)

📅 我们继续 50 个小项目挑战!—— FormWave组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ 🎯 组件目标 构建一个美观、动态的登录表单&#xff0…