2. 硬件平台搭建:从最小系统到调试装备

硬件平台是咱们这堂课的地基。地基建不好,后面所有调试都是空中楼阁。我见过太多学员拿着飞线乱飞的板子来找我,说程序跑不起来——结果一看,电源纹波都快赶上信号幅值了。

这一章,咱们就把硬件平台一步步搭起来。你跟着我走,保证后面调试的时候少踩坑。

2.1 STM32最小系统板——选型与检查

我个人习惯用STM32F103C8T6或者F407VET6。为什么?便宜、资料多、社区活跃。你买个核心板,几十块钱,该有的都有。

拿到板子后,别急着上电。先做三件事:

  • 目测焊接质量——看晶振、电容有没有虚焊。我遇到过一块板子,8MHz晶振一脚悬空,折腾了两天才发现。
  • 测量电源对地阻抗——用万用表二极管档测3.3V和GND之间,正常值在几百欧以上。如果只有几欧,别上电,先查短路。
  • 检查BOOT引脚——BOOT0必须拉低(接GND),否则芯片会进系统存储器,不跑你的程序。
我的习惯: 每次拿到新板子,先焊排针,再用万用表逐针测量——VDD、VSS、NRST、PA0、PA1……确保每个引脚都连通。这一步花10分钟,能省后面10小时。

2.2 ADC输入电路——分压与滤波

ADC采集,说白了就是把模拟电压转成数字量。但模拟信号很娇气,稍微有点噪声,采集结果就飘。

2.2.1 分压电路

STM32的ADC输入范围是0~3.3V。如果你要测0~10V的信号,必须分压。

最简单的分压:两个电阻串联。比如R1=10kΩ,R2=3.3kΩ,输入10V时,ADC引脚得到:

Vout = Vin × R2 / (R1 + R2) = 10 × 3.3 / (10 + 3.3) ≈ 2.48V

嗯,安全了。但要注意:

  • 电阻精度——用1%精度的电阻,别用5%的。我吃过亏,5%电阻分压后,误差直接超2%。
  • 输入阻抗——STM32的ADC采样电容会从分压网络抽取电流。如果分压电阻太大(比如100kΩ+33kΩ),采样值会偏低。建议总阻抗不超过10kΩ。

2.2.2 滤波电容

ADC引脚对地加一个100nF电容。为什么?

  • 滤除高频噪声——电机、开关电源都会耦合噪声进来。
  • 提供瞬时电荷——ADC采样瞬间会抽取电流,电容可以快速补充。
注意: 电容不能太大。如果超过1μF,ADC采样时间不够,结果会偏小。我曾经用10μF电容,采样值一直偏低,查了半天才发现是电容把信号拉慢了。

2.3 PWM输出电路——驱动与隔离

PWM信号从STM32出来,一般是3.3V。但你要驱动电机、LED灯带或者功率管,3.3V不够用。

2.3.1 驱动电路

最简单的驱动:用NPN三极管(比如2N2222)做开关。基极串1kΩ电阻,集电极接负载,发射极接地。

但如果你要驱动大电流负载(比如电机),建议用MOS管:

  • IRF520——N沟道,Vgs阈值2~4V,3.3V勉强能驱动。
  • AO3400——更现代,Vgs阈值1.5V,3.3V轻松驱动。

我个人习惯用AO3400,SOT-23封装,小、便宜、好用。记得在栅极对地加一个10kΩ下拉电阻,防止上电瞬间MOS管误导通。

2.3.2 隔离电路

如果PWM控制的是高压设备(比如220V交流电机),必须隔离。光耦是首选。

推荐PC817:

  • 输入侧:STM32的PWM引脚串330Ω电阻接光耦的LED正极。
  • 输出侧:光耦的集电极接上拉电阻(4.7kΩ)到5V,发射极接地。

这样,STM32和高压侧完全电气隔离。安全第一。

关键参数: 光耦的开关速度有限。PC817的上升/下降时间约4μs,PWM频率超过10kHz时波形会变形。高频PWM(比如20kHz以上)建议用6N137或HCPL0630。

2.4 示波器与万用表——调试的“眼睛”

没有仪器,调试就是盲人摸象。我见过有人用LED灯闪烁频率来判断PWM占空比——嗯,也不是不行,但精度嘛……

2.4.1 示波器

示波器是调试ADC和PWM的核心工具。你需要看什么?

  • ADC输入波形——有没有噪声?纹波多大?信号是否稳定?
  • PWM输出波形——频率对不对?占空比准不准?上升沿有没有过冲?
  • 时序关系——ADC采样和PWM输出有没有冲突?

选示波器时,注意两点:

参数 最低要求 推荐
带宽 20MHz 100MHz
采样率 100MSa/s 1GSa/s
通道数 2 4

100MHz带宽的示波器,二手也就几百块。别省这个钱。

2.4.2 万用表

万用表用来测静态电压、电阻、通断。调试ADC时,用万用表测分压后的电压,和示波器读数对比,可以快速判断ADC采集是否准确。

我常用的步骤:

  1. 万用表测ADC输入引脚电压,记下数值。
  2. 示波器看同一引脚的波形,确认没有异常噪声。
  3. 程序里读ADC值,换算成电压,和万用表对比。

如果三者一致,说明硬件没问题。如果不一致——嗯,开始查吧。

小技巧: 示波器探头的地线夹子要尽量短。长地线会引入噪声,尤其在高频PWM测量时。我习惯用探头自带的弹簧地线,直接勾在引脚旁边的GND上。

2.5 整体硬件连接图

下面这张图展示了本章搭建的硬件平台整体结构。你照着连,不会错。

硬件平台整体结构图 STM32最小系统 F103C8T6 / F407VET6 ADC输入电路 分压 + 滤波 PWM输出电路 驱动 + 隔离 示波器 波形观察 万用表 电压测量 PA0~PA3 PA6~PA7 探头 探头 表笔 调试流程 万用表测静态 → 示波器看动态 → 对比ADC读数

2.6 上电前的最后检查

所有连线完成后,别急着上电。花5分钟做最后检查:

  • 电源极性——VDD和GND有没有接反?我见过有人把3.3V和GND接反,芯片瞬间冒烟。
  • 信号线有没有短路——ADC输入和PWM输出有没有碰在一起?
  • 光耦方向——PC817的引脚1是LED正极,引脚4是输出。接反了信号过不去。
血的教训: 我曾经在一块板子上,把PWM输出直接连到了ADC输入——嗯,3.3V的PWM信号直接灌进了ADC引脚。结果ADC通道烧了,换芯片才修好。所以,输入和输出一定要分开,中间加隔离或者至少加个缓冲。