手把手教你用L298n驱动模块控制直流电机(附完整接线图)

张开发
2026/4/17 9:15:39 15 分钟阅读

分享文章

手把手教你用L298n驱动模块控制直流电机(附完整接线图)
从零玩转L298N电机驱动模块硬件小白的实战指南第一次拿到L298N模块时那些密密麻麻的接线端子确实让人头皮发麻——12V、GND、5V、ENA、IN1...这堆名词对新手来说简直就是天书。但别担心这个火柴盒大小的板子其实比想象中友好得多。作为电子爱好者入门电机控制的必修课L298N以其不足20元的价格和强悍的驱动能力单路2A持续电流成为了创客项目中最经济实惠的肌肉担当。无论是自制智能小车、机械臂还是自动窗帘只要涉及到直流电机控制这个绿色的小板子总能派上用场。1. 认识你的L298N模块解剖图鉴1.1 模块物理结构解析拆开静电袋你会看到一块约5cm×4cm的绿色PCB板中央凸起的是带散热片的L298N芯片——这是整个模块的大脑。模块两侧各有一组蓝绿色的接线端子电机接口左右各一组左侧OUT1、OUT2控制电机A右侧OUT3、OUT4控制电机B电源区模块中部12V ──── 接7-12V直流电源正极 GND ──── 电源负极与单片机共地 5V ──── 可输出5V需使能跳帽控制信号区ENA/ENB使能跳帽插针插上启用IN1-IN4逻辑控制输入接单片机IO口1.2 芯片参数速查表参数项L298N规格驱动类型双H桥工作电压4.5V-46V单路持续电流2A峰值3A逻辑电压5V最大功耗25W保护功能过热关断、短路保护注意当驱动电压超过12V时建议额外加装散热风扇。我曾用这个模块驱动24V电机十分钟后芯片表面温度就能煎鸡蛋——这可不是夸张2. 接线实战从电源到电机的完整连接2.1 基础供电方案推荐使用这种分层接法避免干扰[12V电池] → [L298N的12V端子] ↓ [L298N的5V] → [Arduino的Vin]可选 [共地连接] ← [电池-] ↔ [L298N的GND] ↔ [Arduino的GND]2.2 电机连接技巧直流电机接线没有极性要求但建议做好标记红线接OUT1黑线接OUT2电机A实际转向与预期相反只需调换两条线位置2.3 控制信号连接示范以Arduino UNO为例Arduino D5 → ENAPWM调速 Arduino D6 → IN1 Arduino D7 → IN2 电机B同理使用D8-D10常见坑点忘记插使能跳帽会导致电机不转。有次调试两小时才发现是这个小塑料帽没插想砸桌子的心都有了...3. 编程控制从基础运动到精准调速3.1 基础驱动代码框架// Arduino基础控制示例 const int ENA 5; // PWM引脚 const int IN1 6; const int IN2 7; void setup() { pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); } void loop() { // 正转全速 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 255); delay(2000); // 刹车 digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); delay(500); }3.2 PWM调速进阶技巧通过map函数实现速度百分比控制void setSpeed(int percent) { int pwmValue map(percent, 0, 100, 0, 255); analogWrite(ENA, pwmValue); // 低速时启用缓启动防堵转 if(percent 30) { for(int i0; ipwmValue; i5){ analogWrite(ENA, i); delay(50); } } }3.3 运动控制真值表IN1IN2电机状态00自由停止10正转01反转11急刹短接制动4. 高手进阶性能优化与故障排查4.1 提升驱动效率的硬件方案续流二极管在电机两端并联1N4007二极管阴极接正极滤波电容电源端加装1000μF电解电容0.1μF陶瓷电容散热方案涂抹导热硅脂加装散热风扇可用PWM控制转速4.2 常见问题排查指南电机抖动不转检查使能跳帽测量电源电压是否≥7V尝试降低PWM频率默认490Hz可能偏高模块异常发热# 简易温度监控需DS18B20传感器 import onewire, ds18x20 ds_pin machine.Pin(4) ds_sensor ds18x20.DS18X20(onewire.OneWire(ds_pin)) roms ds_sensor.scan() while True: ds_sensor.convert_temp() temp ds_sensor.read_temp(roms[0]) print(f芯片温度: {temp}°C) if temp 80: shutdown_motors()干扰导致单片机复位增加光耦隔离推荐PC817电机电源与逻辑电源完全分离4.3 多模块协同工作当需要驱动四个电机时比如麦克纳姆轮小车graph LR Arduino--|PWM|L298N_1 Arduino--|PWM|L298N_2 L298N_1--电机AB L298N_2--电机CD注实际接线需确保电源功率足够5. 创意项目拓展从模块到智能装置5.1 智能小车速度闭环控制通过编码器反馈实现精准测速// 编码器计数中断服务 volatile long encoderPos 0; void encoderISR() { encoderPos; } void setup() { attachInterrupt(digitalPinToInterrupt(2), encoderISR, RISING); } void loop() { static unsigned long lastTime 0; if(millis()-lastTime 100) { float rpm (encoderPos/12.0)*600.0/100.0; // 12PPR编码器 Serial.print(当前转速: ); Serial.println(rpm); encoderPos 0; lastTime millis(); } }5.2 机械臂关节控制方案使用电位器作为位置反馈# MicroPython角度控制示例 from machine import ADC, Pin, PWM adc ADC(Pin(34)) motor_pwm PWM(Pin(23), freq1000) def set_angle(target_angle): current adc.read() * 300 / 4095 # 0-300°电位器 error target_angle - current pwm_val max(0, min(1023, error * 3)) # 简单比例控制 motor_pwm.duty(pwm_val)5.3 能耗监控系统利用INA219模块监测电机功耗#include Adafruit_INA219.h Adafruit_INA219 ina219; void setup() { ina219.begin(); Serial.begin(9600); } void loop() { float current_mA ina219.getCurrent_mA(); float power_mW ina219.getPower_mW(); Serial.printf(电流: %.1fmA 功率: %.1fmW\n, current_mA, power_mW); delay(500); }当电机堵转时电流会突然增大到正常值的3-5倍。去年参加机器人比赛时我们通过实时监测这个数值成功预防了三次电机烧毁事故。

更多文章