1. 课程概述与硬件准备:选型与接线

各位同学,欢迎来到《STM32F407电机控制PID算法调试实战》的第一章。

做电机控制,说白了就是跟硬件打交道。你算法写得再漂亮,硬件没搭对,电机就是不动。我刚开始做这个的时候,就吃过这个亏——编码器线序接反,折腾了一下午才发现。所以这一章,咱们先把家底儿盘清楚。

1.1 整体知识框架

先看一张图,把本章要讲的东西串起来。你心里有个谱,后面学起来就不乱。

第一章 知识体系与硬件链路 搭建可调试的电机控制硬件平台 ① 主控:STM32F407 ② 执行:直流减速电机 ③ 感知:编码器 ④ 驱动:L298N/DRV8833 主频 168MHz 定时器 & ADC 减速比 1:30~1:90 额定电压 6~12V AB相 / 霍尔 线数 11~1024 PWM频率 10~20kHz 逻辑电平 3.3/5V 接线 → 供电 → 下载测试程序 → 验证编码器读数 💡 本章目标:通电后能看到电机转动,串口能读到编码器数值

1.2 主控板:STM32F407

为什么选F407?说白了,它性价比高。168MHz主频,带硬件浮点,做PID运算绰绰有余。而且定时器资源丰富——高级定时器TIM1/TIM8能直接输出互补PWM,编码器接口模式也是硬件自带的。

我个人习惯用正点原子或野火的板子,资料多,原理图公开。你手头只要是F407VGT6或者F407ZGT6,都行。

💡 选型提示: 注意看板子是否引出了所有定时器通道。有些迷你板把TIM1的通道给占了,后面做双电机驱动就麻烦。

1.3 直流减速电机

电机这块,我建议你直接买带编码器的直流减速电机,淘宝上一搜一大把。常见的是JGB37-520系列,减速比1:30到1:90都有。

怎么选?看你的应用场景:

  • 1:30:转速快,扭矩小,适合小车跑速度
  • 1:90:转速慢,扭矩大,适合做位置控制

我们这门课主要练PID,我推荐用1:50左右的,折中。额定电压选6V或12V,看你驱动板能承受多少。

⚠️ 避坑: 我曾经买过一批电机,标称1:50,实际测下来只有1:42。所以到手后最好自己转一圈数一下编码器脉冲,确认真实减速比。不然PID参数怎么调都对不上。

1.4 编码器

编码器是电机的眼睛。没有它,PID就是瞎调。

常见的电机编码器分两种:

类型 输出信号 线数(常见) 特点
霍尔编码器 AB两相方波 11 ~ 64 便宜,低速时精度一般
光电编码器 AB两相方波 256 ~ 1024 精度高,价格稍贵

咱们课程里用霍尔编码器就够。11线的霍尔编码器,配合1:50减速比,转一圈能输出 11 × 50 × 4 = 2200 个脉冲(4倍频后)。做位置控制,精度到0.16度,够用了。

📌 重点: 编码器AB相必须接到STM32的定时器编码器模式引脚上。比如TIM3的CH1(PA6)和CH2(PA7)。接反了也没事,就是方向反了,软件里取个反就行。

1.5 驱动板:L298N vs DRV8833

驱动板的选择,我直接给你对比表:

项目 L298N DRV8833
工作电压 5V ~ 35V 2.7V ~ 10.8V
最大电流 2A(峰值3A) 1.5A(峰值2A)
逻辑电平 5V(需3.3V转5V) 3.3V 直连
PWM频率 建议 ≤ 10kHz 可达 50kHz
体积 大(散热片) 小(QFN封装)
价格 便宜(约5元) 稍贵(约10元)

我个人建议:初学用L298N,皮实耐操,不容易烧。但要注意,L298N的逻辑电平是5V,STM32的GPIO是3.3V,直接接可能识别不了。你需要加个电平转换模块,或者用L298N板子上的5V输出给STM32供电(不推荐,容易烧)。

DRV8833就省心多了,3.3V逻辑直接兼容,而且体积小,适合做在PCB上。我现在的项目基本都用DRV8833。

⚠️ 重要: 不管用哪个驱动板,电机电源和逻辑电源必须共地!不共地,PWM信号就是浮空的,电机要么不转,要么乱转。我见过太多人栽在这个坑里。

1.6 接线实战

好了,理论说完了,咱们直接上手接线。以L298N + 单路直流减速电机为例:

  1. 电机电源:L298N的12V输入接外部电源(比如12V锂电池),GND接电源负极。
  2. 逻辑电源:L298N的5V输出可以给STM32供电吗?不建议。STM32用USB供电或独立稳压。
  3. 共地:L298N的GND和STM32的GND用杜邦线连起来。
  4. PWM信号:STM32的TIM1_CH1(PA8)接L298N的ENA(使能A)。
  5. 方向控制:STM32的PA0接IN1,PA1接IN2。
  6. 编码器:电机编码器5V(或3.3V)接STM32的5V(或3.3V),GND接GND,A相接PA6(TIM3_CH1),B相接PA7(TIM3_CH2)。

接线图我画个简化的:

单路电机接线示意 STM32F407 PA8 → PWM PA0 → IN1 PA1 → IN2 PA6 → 编码A PA7 → 编码B GND L298N ENA → PWM IN1 IN2 OUT1 → 电机+ OUT2 → 电机- GND 直流减速电机 + 红色线 - 黑色线 编码器 A/B/GND 12V 电源输入

1.7 上电前的检查清单

接好线别急着通电。我每次都会过一遍这个清单:

  • ☐ 电源正负极:有没有接反?L298N的12V和GND有没有短路?
  • ☐ 共地:L298N的GND和STM32的GND连了吗?
  • ☐ 编码器线序:A相和B相有没有接反?接反了也能用,但方向反了。
  • ☐ PWM引脚:是不是定时器的通道?别接到普通GPIO上。
  • ☐ 电机线:OUT1和OUT2有没有短路?电机线有没有破损?
✅ 检查通过后: 先下载一个简单的PWM输出程序,给个50%占空比,看电机转不转。再读编码器数值,用手转电机,看数值变不变。这两个验证过了,硬件就没问题了。