2. 硬件平台搭建:从最小系统到调试装备
硬件平台是咱们这堂课的地基。地基建不好,后面所有调试都是空中楼阁。我见过太多学员拿着飞线乱飞的板子来找我,说程序跑不起来——结果一看,电源纹波都快赶上信号幅值了。
这一章,咱们就把硬件平台一步步搭起来。你跟着我走,保证后面调试的时候少踩坑。
2.1 STM32最小系统板——选型与检查
我个人习惯用STM32F103C8T6或者F407VET6。为什么?便宜、资料多、社区活跃。你买个核心板,几十块钱,该有的都有。
拿到板子后,别急着上电。先做三件事:
- 目测焊接质量——看晶振、电容有没有虚焊。我遇到过一块板子,8MHz晶振一脚悬空,折腾了两天才发现。
- 测量电源对地阻抗——用万用表二极管档测3.3V和GND之间,正常值在几百欧以上。如果只有几欧,别上电,先查短路。
- 检查BOOT引脚——BOOT0必须拉低(接GND),否则芯片会进系统存储器,不跑你的程序。
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采样瞬间会抽取电流,电容可以快速补充。
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和高压侧完全电气隔离。安全第一。
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采集是否准确。
我常用的步骤:
- 万用表测ADC输入引脚电压,记下数值。
- 示波器看同一引脚的波形,确认没有异常噪声。
- 程序里读ADC值,换算成电压,和万用表对比。
如果三者一致,说明硬件没问题。如果不一致——嗯,开始查吧。
2.5 整体硬件连接图
下面这张图展示了本章搭建的硬件平台整体结构。你照着连,不会错。
2.6 上电前的最后检查
所有连线完成后,别急着上电。花5分钟做最后检查:
- 电源极性——VDD和GND有没有接反?我见过有人把3.3V和GND接反,芯片瞬间冒烟。
- 信号线有没有短路——ADC输入和PWM输出有没有碰在一起?
- 光耦方向——PC817的引脚1是LED正极,引脚4是输出。接反了信号过不去。