第09课 电机的驱动和调速#

9.1 项目介绍:#

想要让智能小车跑起来,光有电机是不够的,我们还需要一个“大力士”来帮Arduino控制电机。这个“大力士”就是电机驱动模块。

在本课中,我们将学习如何使用 L298P 电机驱动扩展板。L298P 是一款非常经典且强大的电机驱动芯片,它可以同时驱动两个直流电机,最大电流可达 2A。通过它,我们可以轻松控制小车的前进、后退、转弯以及速度。

9.2 元件知识:#

为了简化接线,我们使用了一款基于 L298P 设计的电机驱动扩展板。这块板子可以直接插接在 Arduino 开发板上(就像戴帽子一样),这种设计叫做 “Shield(盾板)” 或 “扩展板”。

9.3 驱动原理与控制逻辑:#

1. 引脚定义

根据扩展板的电路设计,Arduino 与电机的连接关系如下:

电机通道

方向控制引脚 (Digital)

速度控制引脚 (PWM)

对应物理电机

电机 A

D2

D6

M3, M4 (右侧电机)

电机 B

D4

D5

M1, M2 (左侧电机)

注意: 不同批次的小车电机编号可能不同,请以实际接线为准。通常 A 组(A1/A2)控制一侧的两个电机并联,B 组(B1/B2)控制另一侧的两个电机并联。

2. 运动逻辑表

通过组合方向引脚的高低电平和速度引脚的 PWM 值,我们可以实现各种动作。PWM 值的范围是 0-255,数值越大,电机转速越快。

动作

D2(方向A)

D6 (速度A)

电机A状态

D4 (方向B)

D5(速度B)

电机B状态

前进

HIGH

200

正转

HIGH

200

正转

后退

LOW

200

反转

LOW

200

反转

左旋转

HIGH

200

正转

LOW

200

反转

右旋转

LOW

200

反转

HIGH

200

正转

停止

/

0

停止

/

0

停止

  • 右旋转原理:左侧电机正转,右侧电机反转,车身向右原地旋转。

  • 左旋转原理:左侧电机反转,右侧电机正转,车身向左原地旋转。

9.4 项目组件:#

组装好的智能车(未插上蓝牙模块) *1

USB线 *1

5号(1.5V)电池 *6(电池自备)

9.5 接线图:#

⚠️ 特别注意:4WD智能车已经组装好了,这里不需要把4个电机拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

电机

电机驱动扩展板

左侧电机(M1)

B2

左侧电机(M2)

B1

右侧电机(M3)

A1

右侧电机(M4)

A2

⚠️ 特别注意:

  • 接线时请确保电源断开(拔掉Arduino主控板上的USB线或将电机驱动扩展板上的拨码开关拨到 “OFF” 端),避免短路。

  • 电源连接:电池盒电源接到电机驱动扩展板的 BAT 接口(注意正负极不要接反),端口正反面,请勿反插,否则会损坏端口。

  • 电池正负极切勿接反,否则可能烧毁电机驱动扩展板。

  • 电机驱动扩展板上的拨码开关拨到 “ON” 端。

  • 电机线如果接反导致方向不对,可以通过交换电机两根线的位置,或者修改代码中的高低电平来修正。

9.6 示例代码1:基础运动控制#

基础运动:以固定速度(PWM 200)测试前进、后退、左转、右转。

⚠️ 重要提示:

  • 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。

9.7 项目结果1:#

⚠️ 重要提示:

  • 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。

外接电源,将电机驱动扩展板上的拨码开关拨到 “ON” 端,上电后。选择好正确的开发板板型(Arduino/Genuino Uno)和 适当的串口端口(COMxx),然后单击 upload2 按钮上传示例代码1至Arduino控制板。

代码上传成功后,小车将按照 “前进 -> 后退 -> 左转 -> 右转 -> 停止” 的顺序循环动作,每个动作持续 1 秒,速度较快且均匀。

9.8 代码说明:#

电机的旋转方向取决于电流的方向。L298P 芯片通过改变内部开关的状态来改变电流方向。我们只需要向方向引脚(D2, D4)发送高电平(HIGH)或低电平(LOW)即可控制正反转。

Arduino 的数字引脚只能输出 0V 或 5V,无法直接输出中间电压。但是,通过 PWM(脉冲宽度调制) 技术,我们可以快速地在 0V 和 5V 之间切换。

  • PWM 值范围:0 ~ 255。

  • 0:相当于始终为 0V,电机停止。

  • 255:相当于始终为 5V(逻辑电平,实际驱动电压取决于外部电源),电机全速运转。

  • 中间值:数值越大,高电平占比越高,电机平均电压越高,转速越快。

注意: 只有标有波浪号 “~” 的引脚(如: D3、D5、D6、D9、D10、D11)才支持 PWM 功能。本课使用的 D5 和 D6 正好具备此功能。

9.9 示例代码2:变速运动控制#

在这个代码中,我们降低了 PWM 值,并让转弯时的速度与直行不同,体验速度控制的效果。同时,电机的接线不变。

⚠️ 重要提示:

  • 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。

9.10 项目结果2:#

⚠️ 重要提示:

  • 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。

外接电源,将电机驱动扩展板上的拨码开关拨到 “ON” 端,上电后。选择好正确的开发板板型(Arduino/Genuino Uno)和 适当的串口端口(COMxx),然后单击 upload2 按钮上传示例代码2至Arduino控制板。

代码上传成功后,小车将按照 “前进 -> 后退 -> 左转 -> 右转 -> 停止” 的顺序循环动作,每个动作持续 1 秒,你会发现小车的整体速度变慢了。

这是因为我们将 PWM 值从 200 降低到了 100 和 150。PWM 值越小,电机获得的平均电压越低,转速也就越慢。

9.11 注意事项与常见问题:#

1. 电机不动?

  • 检查电池是否有电,电压是否在 7-9V 之间。

  • 检查电机驱动扩展板是否牢固地插在 Arduino 上。

  • 检查电机接线是否接触良好。

2. 小车走不直?

由于电机个体差异,即使给相同的 PWM 值,两边转速也可能不同。后续课程我们将学习如何通过软件调整左右电机的 PWM 差值来校正直线行驶。

3. 发热问题

L298P芯片在大电流工作时会产生热量,这是正常现象。如果长时间堵转(车轮被卡住),芯片会过热保护甚至损坏,请避免长时间堵转。