news 2026/6/1 12:39:06

Arduino与L298N驱动直流电机:从H桥原理到PWM调速实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Arduino与L298N驱动直流电机:从H桥原理到PWM调速实战

1. 项目概述与核心思路

直流电机控制,听起来像是机器人或智能小车项目里最基础的一环,但真上手时,不少朋友会在驱动模块的选择和接线逻辑上犯迷糊。我自己在带学生做机器人项目时,发现很多人拿到L298N模块和Arduino后,要么是电机纹丝不动,要么是转动方向混乱,甚至烧坏模块。这背后的原因,往往是对H桥驱动原理和模块逻辑理解不透彻。这个教程的目的,就是帮你彻底搞懂如何用Arduino和L298N这个经典组合,稳稳当当地驱动一个直流电机,不仅让它转起来,还要理解它为什么这么转,以及如何避免那些常见的“坑”。

简单来说,Arduino是个“大脑”,负责发出指令(比如“正转”、“反转”、“加速”),但它输出的电流和电压太小,直接接电机就像让一个小孩去推卡车,根本推不动。L298N模块就是个“肌肉”或“功率放大器”,它内部集成了两套完整的H桥电路,能够接收Arduino的微弱信号,然后从外部电源“借”来强大的电流和电压去驱动电机。我们这次先聚焦于驱动一个电机,把单路H桥的工作原理吃透,后续驱动双电机或者步进电机就是举一反三的事了。整个过程会涉及硬件连线、电源管理、PWM调速和代码逻辑,我会结合我实际调试中遇到的典型问题,把每个环节的细节和注意事项掰开揉碎了讲清楚。

2. 核心硬件解析:L298N模块与H桥原理

2.1 L298N模块引脚功能详解

在你动手接线之前,花几分钟彻底搞清楚L298N模块上每一个端子的作用,能避免至少80%的接线错误。市面上常见的L298N驱动板(通常是绿色PCB)虽然外形略有差异,但核心引脚布局大同小异。我们以最常见的双排直插封装模块为例,其引脚通常分为三大部分:电机控制端、逻辑电源端和电机电源端。

首先看电机控制端,这是连接Arduino的核心。对于单个电机,我们主要关注其中一组H桥的控制引脚:

  • ENA (Enable A):A通道使能端。这个引脚是关键中的关键。它可以通过跳线帽连接到旁边的+5V引脚(模块上通常标有ENA+5V的排针),此时A通道始终处于使能(开启)状态。更常用的方式是拔掉跳线帽,将ENA连接至Arduino的一个PWM引脚(如D9, D10, D11等)。这样,我们就能通过Arduino输出PWM信号来调节电机的速度。PWM的原理我们稍后细说。
  • IN1 与 IN2 (Input 1 & 2):A通道的逻辑输入引脚。这两个引脚直接决定电机的转动方向。它们需要连接到Arduino的任意数字IO引脚(如D2, D3, D4等)。通过给IN1IN2输入不同的高低电平组合,就能控制H桥内部四个开关管的通断,从而改变电流流经电机的方向。
  • OUT1 与 OUT2 (Output 1 & 2):A通道的电机输出端。这两个端子直接连接直流电机的两根线。正反转切换就是通过改变OUT1OUT2之间的电压极性实现的。

然后是电源部分,这里最容易出错:

  • 12V / VCC / 电机电源输入:这个端子用于接入驱动电机所需的主电源。它的电压范围很宽(模块支持4.8V-46V),具体电压值取决于你的电机额定电压。比如你用一个6V的电机,这里可以接6V;用一个12V的电机,就接12V。切记:这个电源的功率要足够,最好使用专用的直流电源适配器或大容量电池组,不要试图从Arduino的5V引脚取电,绝对带不动。
  • GND:电源地。这里必须强调:整个系统需要“共地”。即驱动模块的GND、外部电源的负极以及Arduino的GND,必须连接在一起。这是保证信号正常参考的基础,很多电机乱转的问题就出在地线没接好。
  • +5V:逻辑电源输入/输出。这是一个多功能引脚,情况稍微复杂:
    • 当驱动模块的12V端子接入的电压高于7V时,模块上的稳压芯片(如78M05)会工作,从+5V引脚输出一个5V电压。此时,你可以用这个5V给Arduino或其他逻辑电路供电(通过连线接到Arduino的5V引脚),但要注意电流负载。
    • 当驱动模块的12V端子接入的电压低于或等于7V(例如你只用5V电池驱动一个小电机)时,模块上的稳压芯片可能无法正常工作或输出不足。此时,你必须拔掉+5V输出端的跳线帽(如果有的话),并从外部(如Arduino的5V引脚)向模块的+5V端子输入一个5V电压,以确保模块内部逻辑电路正常工作。

重要提示:在接线前,务必根据你的电机电压,想清楚+5V引脚的用法。对于新手,我强烈建议使用独立的9V或12V电源适配器作为电机主电源(接12V端子),并利用模块产生的5V给Arduino供电(连接+5V到Arduino的5V)。这样只需要一个电源,简化了系统。但务必确认你的Arduino型号(如Uno)允许从5V引脚输入电源。

2.2 H桥驱动原理与方向控制逻辑

为什么IN1IN2的高低电平能控制方向?这就要深入到L298N芯片内部的核心——H桥电路。你可以把H桥想象成一个由四个开关(通常是MOSFET或晶体管)组成的“桥”,电机放在桥的中间。

假设IN1=HIGH,IN2=LOW

  • 此时,H桥左上和右下的开关闭合,右上和左下的开关断开。
  • 电流从电源正极,流经左上开关,从OUT1进入电机,再从OUT2流出,经过右下开关回到电源负极。电机正转。

假设IN1=LOW,IN2=HIGH

  • 此时,H桥右上和左下的开关闭合,左上和右下的开关断开。
  • 电流路径变为:电源正极 → 右上开关 →OUT2→ 电机 →OUT1→ 左下开关 → 电源负极。电流流经电机的方向与之前相反,电机反转。

假设IN1=LOW,IN2=LOW

  • 四个开关全部断开,电机两端悬空,电机自由停止(靠惯性滑行)。

假设IN1=HIGH,IN2=HIGH

  • 左上和右上开关同时闭合(或左下和右下),这将导致电源正负极通过开关被短接!这是非常危险的状态,会在瞬间产生巨大的电流,很可能烧毁驱动芯片或电源。在代码中必须绝对避免这种状态。有些高级用法会利用这种状态实现“刹车”(让电机快速停止),但需要非常精确的时序控制,新手不建议尝试。

所以,安全的控制逻辑就非常清晰了:

目标动作ENA (PWM)IN1IN2电机状态
正转0-255HIGHLOW顺时针转动,速度由PWM值决定
反转0-255LOWHIGH逆时针转动,速度由PWM值决定
停止(滑行)0 或 LOWLOWLOW电机惯性滑行至停止
停止(刹车)*0 或 LOWHIGHHIGH电机快速制动(慎用)

*注:刹车功能并非所有情况都适用,需参考芯片手册并注意散热。

3. 硬件连接与电路搭建实操

3.1 物料清单与工具准备

除了原文提到的,我想补充一些能让实验更顺利的“非必须但很有用”的物品,以及一些明确的规格建议:

核心物料:

  1. Arduino开发板:Uno、Nano、Mega等均可。Uno最常用,引脚兼容性好。
  2. L298N电机驱动模块:建议购买集成散热片和滤波电容的成品模块,稳定性更好。
  3. 直流电机:额定电压建议在6V-12V之间。新手可以从常见的TT马达(常用于智能小车)开始,它的参数(3-6V)和L298N匹配度很好。务必知道电机的额定电压和空载电流
  4. 电源
    • 方案A(推荐):一个9V 2A以上的直流电源适配器(接口5.5*2.1mm)。这个电源既给电机供电,又通过模块给Arduino供电,最简洁。
    • 方案B:如果只有电池,建议使用6节AA(5号)电池盒(输出约7.4V-9V)或一块2S锂聚合物电池(7.4V)绝对不要只用一块9V方块电池,它的容量和内阻根本无法驱动电机,电压会瞬间被拉垮。
  5. 连接线:杜邦线(公对公、公对母)。准备至少10根,用于连接Arduino和驱动模块。

辅助工具与安全准备:

  • 万用表:用于测量电源电压、检查通断,排查故障时必不可少。
  • 面包板:虽然不是必须,但用面包板来中转连线,会让电路更整洁,也方便调试。
  • 小型螺丝刀:用于紧固驱动模块接线端子的螺丝。
  • 一个100uF以上的电解电容:并联在电机电源输入端子(12VGND之间),可以吸收电机启停时产生的电压尖峰,保护驱动芯片,强烈建议加上。

3.2 分步接线指南与原理剖析

现在,我们按照“电源先行,信号后接”的原则,一步步搭建电路。下图是接线示意图,请结合文字说明操作:

此处应有一幅清晰的接线示意图,图中显示:一个9V电源适配器正负极分别接L298N模块的12VGND;模块的+5V接Arduino的5V;模块的GND接Arduino的GND;模块的ENA接Arduino的D9IN1D8IN2D7;电机的两根线接模块的OUT1OUT2

由于无法直接嵌入图片,我将用文字详细描述每一步的连接及其背后的道理:

第一步:连接主电源与共地(最关键的一步)

  1. 将你的9V电源适配器的正极(通常为内芯)连接到L298N模块标有12V的接线端子上。
  2. 将电源适配器的负极连接到L298N模块的GND端子上。
  3. 用一根公对公杜邦线,将L298N模块的GND端子与Arduino开发板上的一个GND引脚连接起来。这一步实现了系统的“共地”,确保了Arduino和L298N有相同的电压参考点,数字信号才能被正确识别。

第二步:为Arduino供电(利用模块的5V输出)

  1. 检查L298N模块,找到标有+5V的引脚和它旁边可能存在的跳线帽。确保跳线帽已经连接+5VENA旁边的+5V输出端(不同板子标注可能为5V Output)。这表示允许模块输出5V。
  2. 用一根公对公杜邦线,将L298N模块的+5V端子连接到Arduino开发板的5V引脚。现在,你的Arduino就由驱动模块供电了。上电后,Arduino的电源指示灯应该亮起。

实操心得:很多新手会忽略共地,或者试图用Arduino的USB供电同时驱动电机,这会导致电机一动,Arduino就重启。采用“单一外部电源 -> L298N -> 同时为电机和Arduino供电”的方案,是最稳定、干扰最小的。如果遇到Arduino无法启动,首先用万用表测量+5VGND的电压是否为稳定的5V。

第三步:连接控制信号线我们将使用Arduino的D7、D8、D9这三个引脚来控制电机。

  1. 连接方向控制线:用公对母杜邦线,将Arduino的数字引脚 D8连接到L298N模块的IN1;将Arduino的数字引脚 D7连接到L298N模块的IN2
  2. 连接速度控制线:用公对母杜邦线,将Arduino的PWM引脚 D9连接到L298N模块的ENA务必拔掉ENA引脚上可能存在的跳线帽,否则PWM调速将失效。

第四步:连接电机将直流电机的两根导线,分别接入L298N模块的OUT1OUT2端子。此时不用区分正负,如果转向与预期相反,只需在代码中交换IN1IN2的逻辑,或者直接交换这两根线即可。

第五步(可选但推荐):添加保护电容将100uF电解电容的正极接到L298N模块的12V端子,负极接到GND端子。注意电容的极性不要接反。

至此,所有硬件连接完成。在给系统上电前,最后再对照检查一遍:电源极性是否正确?GND是否全部连通?ENA跳线帽是否拔除?确认无误后,再接通电源。

4. Arduino代码编写与深度解析

硬件是躯体,代码是灵魂。下面提供的代码不仅能让电机动起来,还包含了完整的注释和调试信息,方便你理解每一步在做什么,以及如何排查问题。

4.1 基础控制代码与逐行解读

/* * Arduino控制单个直流电机 via L298N * 引脚定义: * ENA - D9 (PWM速度控制) * IN1 - D8 (方向控制1) * IN2 - D7 (方向控制2) */ // 定义引脚常量,提高代码可读性和可维护性 const int PIN_ENA = 9; // 速度控制引脚 (必须支持PWM) const int PIN_IN1 = 8; const int PIN_IN2 = 7; // 电机速度变量,范围0-255,对应PWM占空比0%-100% int motorSpeed = 150; // 初始设置为中等速度 void setup() { // 初始化串口通信,用于调试输出信息 Serial.begin(9600); Serial.println("L298N 单电机控制程序启动"); // 将控制引脚设置为输出模式 pinMode(PIN_ENA, OUTPUT); pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); // 初始状态:停止电机 (IN1=LOW, IN2=LOW) digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); // 初始速度设置为0,确保电机不会意外启动 analogWrite(PIN_ENA, 0); Serial.println("初始化完成,电机处于停止状态。"); delay(1000); // 等待1秒,让系统稳定 } void loop() { Serial.println("=== 开始电机测试循环 ==="); // 1. 电机正转,加速过程 Serial.println("动作1: 电机正转,加速至设定速度"); digitalWrite(PIN_IN1, HIGH); // 设置正转逻辑 digitalWrite(PIN_IN2, LOW); // 使用循环模拟加速过程,更直观 for (int i = 0; i <= motorSpeed; i += 50) { analogWrite(PIN_ENA, i); Serial.print(" 当前PWM速度值: "); Serial.println(i); delay(200); // 每步延迟200毫秒 } Serial.print(" 正转,稳定运行在PWM: "); Serial.println(motorSpeed); delay(2000); // 保持正转2秒 // 2. 电机减速停止 Serial.println("动作2: 电机减速停止"); for (int i = motorSpeed; i >= 0; i -= 50) { analogWrite(PIN_ENA, i); Serial.print(" 当前PWM速度值: "); Serial.println(i); delay(200); } digitalWrite(PIN_IN1, LOW); // 停止后,将方向引脚也置低 digitalWrite(PIN_IN2, LOW); Serial.println(" 电机已停止"); delay(1000); // 停止1秒 // 3. 电机反转 Serial.println("动作3: 电机反转"); digitalWrite(PIN_IN1, LOW); // 设置反转逻辑 digitalWrite(PIN_IN2, HIGH); analogWrite(PIN_ENA, motorSpeed); // 直接设定到目标速度 Serial.print(" 反转,稳定运行在PWM: "); Serial.println(motorSpeed); delay(2000); // 保持反转2秒 // 4. 快速停止(滑行停止) Serial.println("动作4: 快速停止(滑行)"); analogWrite(PIN_ENA, 0); // PWM置0,电机失能 digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); Serial.println(" 电机已失能,靠惯性滑行停止"); delay(2000); // 等待2秒,观察停止过程 Serial.println("=== 测试循环结束,等待5秒后重复 ===\n"); delay(5000); }

代码关键点解析:

  1. analogWrite(pin, value)函数:这是实现PWM调速的核心。value取值0-255,对应引脚输出0V-5V的等效电压。对于L298N的ENA引脚,这个PWM信号控制的是H桥的“使能”时间比例,从而控制平均电压,实现调速。value=0即完全关闭,value=255即全功率开启。
  2. 方向控制顺序:在改变转向前,我习惯先执行analogWrite(PIN_ENA, 0)将速度设为0,然后再改变IN1/IN2的状态,最后再重新设置速度。这是一个好习惯,可以避免在方向切换的瞬间产生大的电流冲击。
  3. 串口调试:代码中大量的Serial.print()语句不是为了炫技,而是极其重要的调试工具。通过串口监视器,你可以清晰地看到程序执行到哪一步、当前的PWM值是多少,这对于排查“程序好像跑了但电机没反应”这类问题至关重要。

4.2 高级功能:通过串口实时控制电机

基础循环演示之后,我们可以做一个更有交互性的例子:通过串口监视器发送字符命令,实时控制电机。

/* * 通过串口命令控制电机 * 命令列表: * 'f' - 正转 * 'r' - 反转 * 's' - 停止 * '+' - 加速 * '-' - 减速 * '0'~'9' - 设置速度等级 (0-9 对应 0-255) */ const int PIN_ENA = 9; const int PIN_IN1 = 8; const int PIN_IN2 = 7; int motorSpeed = 150; // 当前速度 bool isRunning = false; char currentDirection = 's'; // 'f'正, 'r'反, 's'停 void setup() { Serial.begin(115200); // 使用更高的波特率以便快速响应 pinMode(PIN_ENA, OUTPUT); pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); stopMotor(); // 确保电机初始为停止状态 printHelp(); // 打印命令帮助 } void loop() { if (Serial.available() > 0) { char command = Serial.read(); // 读取一个字符命令 switch (command) { case 'f': case 'F': setDirection('f'); Serial.println("命令: 正转"); break; case 'r': case 'R': setDirection('r'); Serial.println("命令: 反转"); break; case 's': case 'S': stopMotor(); Serial.println("命令: 停止"); break; case '+': motorSpeed = min(motorSpeed + 25, 255); // 加速,不超过255 updateSpeed(); Serial.print("加速 -> 当前速度: "); Serial.println(motorSpeed); break; case '-': motorSpeed = max(motorSpeed - 25, 0); // 减速,不低于0 updateSpeed(); Serial.print("减速 -> 当前速度: "); Serial.println(motorSpeed); break; case '0'...'9': // 数字键直接设置速度等级 { int level = command - '0'; // 将字符'0'-'9'转换为数字0-9 motorSpeed = map(level, 0, 9, 0, 255); // 将0-9映射到0-255 updateSpeed(); Serial.print("设置速度等级 "); Serial.print(level); Serial.print(" -> PWM: "); Serial.println(motorSpeed); } break; case '?': case 'h': printHelp(); break; default: Serial.println("未知命令,输入 'h' 查看帮助。"); } } } // 设置方向并启动电机 void setDirection(char dir) { if (dir == 'f') { digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW); currentDirection = 'f'; } else if (dir == 'r') { digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH); currentDirection = 'r'; } isRunning = true; analogWrite(PIN_ENA, motorSpeed); } // 停止电机 void stopMotor() { analogWrite(PIN_ENA, 0); digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); isRunning = false; currentDirection = 's'; } // 更新速度(仅在电机运行时有效) void updateSpeed() { if (isRunning) { analogWrite(PIN_ENA, motorSpeed); } } // 打印帮助信息 void printHelp() { Serial.println("\n===== 串口电机控制器 ====="); Serial.println("命令列表:"); Serial.println(" f / F : 电机正转"); Serial.println(" r / R : 电机反转"); Serial.println(" s / S : 电机停止"); Serial.println(" + : 增加速度"); Serial.println(" - : 减少速度"); Serial.println(" 0-9 : 设置速度等级 (0最慢, 9最快)"); Serial.println(" h / ? : 显示此帮助信息"); Serial.println("==========================\n"); }

这个程序将控制权交给了你。打开Arduino IDE的串口监视器(波特率设为115200),输入frs+-等字符,就能实时操控电机。这模拟了在实际机器人项目中,由上位机(如树莓派、PC)通过串口发送指令控制电机运动的场景。

5. 常见问题排查与进阶技巧

即使按照教程一步步操作,也可能会遇到问题。下面是我从大量实践中总结出的问题排查清单和进阶建议。

5.1 故障排查速查表

现象可能原因排查步骤与解决方案
电机完全不转1. 电源未接通或电压不足。
2.ENA使能端未激活(跳线帽未插或PWM值为0)。
3. 逻辑电平错误(IN1IN2同为HIGH或LOW)。
4. 接线错误或接触不良。
1.查电源:用万用表测量12VGND之间电压是否正常。测量+5VGND之间是否有5V输出。
2.查使能:检查ENA跳线帽是否已拔除,并确认代码中analogWrite(PIN_ENA, value)value大于0。
3.查逻辑:用代码或手动设置IN1=HIGH, IN2=LOW或反之,并用万用表测量OUT1OUT2之间是否有电压输出。
4.查接线:逐根检查杜邦线是否插紧,特别是GND共地线。
电机只震动不转1. 电源功率不足,带载后电压暴跌。
2. PWM频率可能不匹配(极少数情况)。
3. 电机本身损坏或堵转。
1.换电源:使用额定电流更大的电源(如2A以上)。尝试用电池时,换用新的碱性电池或动力锂电池。
2.查频率:Arduino的analogWrite频率约490Hz,对于L298N是合适的。可尝试在setup()中加入analogWriteFrequency(PIN_ENA, 1000)(某些板子支持)提高频率,但非必须。
3.测电机:断开电机,直接接至额定电压的电池上,看是否能空载转动。
电机转向与预期相反IN1IN2的逻辑设置反了,或电机线接反了。解决方案:最简单的方法是在代码中交换digitalWrite(PIN_IN1, ...)digitalWrite(PIN_IN2, ...)的逻辑。或者直接交换接到OUT1OUT2上的电机线。
Arduino频繁重启或复位1. 电机工作时从电源汲取大电流,导致Arduino供电电压被拉低。
2. 电机启停产生的反电动势干扰。
1.加强电源:确保使用独立、功率足够的电源为驱动模块供电。避免使用电脑USB口或小容量电池。
2.添加电容:在驱动模块的12VGND之间并联一个大容量电解电容(如470uF-1000uF/16V),在+5VGND之间并联一个10uF陶瓷电容。
3.物理隔离:将电机电源线和信号线分开走线,避免平行缠绕。
L298N模块发热严重1. 电机工作电流接近或超过模块单路2A的极限。
2. 长时间工作在堵转或低速大扭矩状态。
3. 未安装散热片或散热条件差。
1.测电流:在电机电源回路中串联万用表测量工作电流,确保在安全范围内。
2.加散热:务必为L298N芯片安装散热片。如果发热依然严重,可以考虑使用电流能力更强的驱动模块,如TB6612FNG或DRV8833。
3.避免堵转:确保电机机械结构顺畅,不要被卡住。
PWM调速不明显或低速时抖动1. 电机有启动电压阈值,PWM值过低时不足以克服静摩擦力。
2. PWM占空比与速度并非完全线性,尤其在低速区。
1.设置死区:在代码中设置一个最小有效PWM值(如30或50),低于此值直接设为0(停止)。
2.使用映射函数:如果希望遥控器摇杆等输入与速度呈线性关系,可以使用map()函数,并对低速区进行适当补偿。int pwm = map(analogRead(potPin), 0, 1023, 60, 255);这里从60开始,避开了启动盲区。

5.2 进阶技巧与优化建议

  1. 软件刹车功能:要实现更快速的停止,而非滑行,可以在停止函数中短暂地将IN1IN2同时设为HIGH(约100毫秒),然后再设为LOW并关闭PWM。这相当于让电机两端短接,利用电磁阻尼快速制动。注意:此操作会产生较大电流和热量,不宜频繁或长时间使用。

    void brakeMotor() { digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, HIGH); analogWrite(PIN_ENA, 255); // 全速刹车效果更明显 delay(100); // 刹车持续时间,不宜过长 digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); analogWrite(PIN_ENA, 0); }
  2. 驱动更大功率电机:L298N单路2A的峰值电流对于大型电机可能不够。此时可以并联使用L298N的两个通道来驱动一个电机,将IN1IN3短接,IN2IN4短接,OUT1OUT3并联接电机一端,OUT2OUT4并联接电机另一端,ENAENB短接后接PWM。这样可以将电流能力提升近一倍,但务必加强散热。

  3. 抗干扰与稳定性

    • 电源去耦:在Arduino的5VGND引脚之间,靠近板子处并联一个0.1uF的陶瓷电容和一个10uF的电解电容。
    • 信号隔离:如果电机线很长或干扰严重,可以考虑在Arduino输出引脚和L298N输入引脚之间串联一个100-220欧姆的电阻,并在L298N输入端对地接一个0.01uF电容,组成低通滤波器。
    • 使用光耦隔离:对于非常恶劣的电气环境,可以使用光耦(如PC817)彻底隔离Arduino的控制信号和电机驱动电路。
  4. 从L298N升级到更先进的驱动芯片:当你对效率、体积、发热有更高要求时,可以考虑新一代的驱动芯片,如TB6612FNG。它的优势非常明显:

    • 效率高:采用MOSFET,导通内阻小,发热远低于L298N(晶体管方案)。
    • 电流大:连续电流1.2A,峰值3.2A,驱动能力更强。
    • 功能多:集成待机模式,功耗更低;支持更灵活的PWM控制模式。
    • 体积小:模块通常更小巧。 将L298N替换为TB6612FNG,硬件连接(IN1, IN2, PWM)和软件代码几乎可以完全兼容,是项目升级的平滑选择。

掌握了单个电机的控制,你就掌握了机器人运动最基础的单元。接下来,你可以尝试用两个L298N通道分别控制两个电机,实现差速转向,从而构建你的第一辆智能小车。或者,探索如何用L298N驱动一个两相四线步进电机,这只需要改变接线方式和代码逻辑。硬件世界的控制乐趣,才刚刚开始。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 12:39:06

基于Arduino的DIY点焊机:从焦耳定律到电池组焊接实战

1. 项目概述与核心思路想自己动手焊接18650电池组&#xff0c;或者连接一些薄金属片&#xff0c;却发现普通电烙铁要么温度不够&#xff0c;要么容易损伤电芯&#xff1f;一台专业的点焊机动辄上千元&#xff0c;对于偶尔使用的爱好者来说实在不划算。这正是我当初面临的困境。…

作者头像 李华
网站建设 2026/6/1 12:38:16

QKeyMapper深度解析:如何构建Windows平台终极按键映射方案

QKeyMapper深度解析&#xff1a;如何构建Windows平台终极按键映射方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手柄映射到键鼠&#x…

作者头像 李华
网站建设 2026/6/1 12:38:09

收藏!程序员90天进阶AI应用工程师:从Prompt到工程化实战指南

本文针对程序员在AI转型中的焦虑&#xff0c;指出训练大模型并非唯一路径。文章强调程序员应转向AI应用工程&#xff0c;通过掌握Prompt工程、RAG、Agent、Workflow及AI工程化技术&#xff0c;成为AI应用架构师或专家。文章提供了8阶段学习主线&#xff0c;涵盖AI基础知识、大模…

作者头像 李华
网站建设 2026/6/1 12:33:57

如何高效永久保存微信聊天记录?WeChatMsg让你的珍贵对话永不丢失

如何高效永久保存微信聊天记录&#xff1f;WeChatMsg让你的珍贵对话永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华