1. 课程导论与硬件准备:STM32与PWM基础概念、舵机与直流电机选型、开发板与工具清单
各位同学,欢迎来到《STM32 PWM驱动舵机与电机控制实战》的第一章。
我是你们这门课的主讲工程师。说实话,做嵌入式这么多年,我接触过不少控制方案。但要说最常用、最实用的,PWM(脉冲宽度调制)绝对排在前三。你想想看,从舵机打角到电机调速,从LED调光到开关电源,几乎处处都有它的影子。
这一章,我们不急着写代码。先把地基打牢——搞懂PWM到底是什么,舵机和直流电机怎么选,以及我们手头需要准备哪些家伙什。我个人习惯是:硬件没理清之前,绝不碰代码。否则出了问题,你都不知道是程序写错了,还是线接反了。
1.1 什么是PWM?为什么它能控制电机?
PWM,全称Pulse Width Modulation,中文叫脉冲宽度调制。说白了,就是通过调节一个方波信号里“高电平”占整个周期的比例,来模拟出不同的电压效果。
这个比例,我们叫它占空比(Duty Cycle)。比如一个5V的方波,如果占空比是50%,那等效电压就是2.5V;如果是100%,那就是5V。
核心公式:
占空比 = 高电平时间 / 周期 × 100%
等效电压 = 高电平电压 × 占空比
为什么会这样?因为电机和舵机内部的惯性系统,会对这种快速切换的脉冲做“平均化”处理。你给一个50%占空比的PWM信号,电机感受到的就是一半的电压,转速自然就降下来了。
我在项目中遇到过一位新手,死活调不好舵机角度。后来发现他把PWM频率设成了50kHz——舵机根本反应不过来。嗯,这里要注意:舵机通常需要50Hz的PWM频率,而直流电机可以跑到几千甚至几万赫兹。
| 参数 | 舵机控制 | 直流电机控制 |
|---|---|---|
| PWM频率 | 50Hz(周期20ms) | 1kHz ~ 20kHz |
| 占空比范围 | 2.5% ~ 12.5%(对应0°~180°) | 0% ~ 100% |
| 控制对象 | 角度位置 | 转速/转向 |
| 是否需要驱动板 | 通常可直接驱动 | 需要H桥或MOS管驱动 |
1.2 舵机与直流电机选型指南
选型这件事,我吃过不少亏。有一次为了省几块钱,买了一批杂牌舵机,结果上电就抖,角度根本稳不住。后来换成了MG996R,问题立刻解决。所以我的建议是:学习阶段,选主流型号,别贪便宜。
舵机选型要点
- SG90(9g微型舵机):最常用的学习级舵机,扭矩0.18kg·cm,5V供电。适合做机械臂小关节、摄像头云台。
- MG996R(金属齿轮舵机):扭矩大(10kg·cm),耐造。适合做机器人底盘转向、大型模型。
- 关键参数:工作电压(4.8V~6V)、堵转电流(SG90约700mA,MG996R约2.5A)、控制信号(PWM 50Hz)。
避坑指南:我曾经因为没注意舵机的堵转电流,直接用STM32的GPIO引脚驱动,结果烧了IO口。记住:舵机的电源绝对不能从STM32的3.3V或5V引脚取,必须外接独立的电源模块。
直流电机选型要点
- N20微型减速电机:带减速箱,转速适中(100~300rpm),扭矩不错。适合做小车驱动轮。
- 370/540电机:转速高(5000~10000rpm),扭矩小,需要配减速器。适合做风扇、泵类。
- 关键参数:额定电压(3V~12V)、空载电流、堵转电流、减速比。
我个人习惯是:做小车底盘,首选N20电机+编码器版本。这样后续做闭环控制时,还能用编码器测速,一举两得。
1.3 开发板与工具清单
好,接下来我们清点一下装备。这门课我推荐使用STM32F103C8T6(蓝色 pill 板)或者STM32F407VET6。F103够用,F407性能更强,带硬件定时器也更丰富。
| 硬件/工具 | 推荐型号 | 数量 | 备注 |
|---|---|---|---|
| 主控板 | STM32F103C8T6 | 1块 | 性价比之王 |
| 舵机 | SG90 + MG996R | 各1个 | 一大一小,覆盖学习场景 |
| 直流电机 | N20微型减速电机(带编码器) | 2个 | 做差速驱动 |
| 电机驱动板 | L298N 或 TB6612FNG | 1块 | TB6612更小巧高效 |
| 电源模块 | LM2596 可调降压模块 | 1块 | 输入7~12V,输出5V/3.3V |
| 面包板+杜邦线 | 830孔面包板 + 公对公/公对母杜邦线 | 各1套 | 方便快速搭电路 |
| 调试工具 | USB转TTL模块(CH340G) | 1个 | 串口打印调试信息 |
| 示波器/逻辑分析仪 | Saleae逻辑分析仪(24MHz采样) | 1个 | 强烈推荐,看PWM波形必备 |
我的小建议:如果你预算有限,逻辑分析仪可以先买一个几十块的USB版本。虽然采样率低一些,但看50Hz的舵机PWM信号完全够用。示波器嘛,等后面做高频电机控制时再升级也不迟。
1.4 本章知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当成一张地图,后面每学一个知识点,都能在这张图上找到它的位置。
这张图把本章内容分成了四个模块:PWM基础概念、舵机选型与控制、直流电机选型、开发板与工具清单。每个模块之间都有联系——PWM是控制手段,舵机和电机是被控对象,而开发板和工具是我们实现控制的物质基础。
1.5 开发环境与接线准备
最后,简单说一下开发环境。这门课我使用STM32CubeIDE(免费,官方出品,集成了CubeMX配置工具)。当然,如果你习惯Keil或者IAR,也没问题,代码逻辑是一样的。
接线方面,记住一个原则:先接电源,再接信号。具体来说:
- 舵机红线(VCC)接5V电源正极,棕线(GND)接GND,橙线(信号)接STM32的TIM通道引脚。
- 直流电机通过驱动板(如L298N)连接:驱动板IN1/IN2接STM32 GPIO,ENA接PWM引脚,电机两端接驱动板OUT1/OUT2。
- 共地!所有模块的GND必须连在一起,否则信号乱跳。
血的教训:我曾经有一次忘记共地,结果舵机乱转,逻辑分析仪抓到的波形全是毛刺。查了整整两个小时,最后发现就是一根GND线没接。所以,接线完成后,第一件事就是拿万用表测一下各模块之间的GND是否导通。