3. 硬件平台搭建:STM32最小系统、电机驱动电路(MOS管/H桥)、电源滤波设计
好,咱们进入实战环节的第一个硬骨头——硬件平台搭建。
说实话,很多做PWM控制的工程师,最后波形调不出来,问题往往不在软件,而在硬件。我见过太多人拿着示波器,盯着毛刺满满的波形发呆,结果发现是电源没处理好。
这一章,咱们就把底子打牢。你想想看,地基不稳,楼盖得再高也是危房。
3.1 STM32最小系统——控制核心
STM32最小系统,说白了就是让芯片能跑起来的最小电路。我习惯用STM32F103C8T6,性价比高,资源够用。
核心元件就这几样:
- 主控芯片:STM32F103C8T6,48脚,LQFP封装
- 晶振电路:8MHz主晶振 + 32.768kHz RTC晶振
- 复位电路:10kΩ上拉电阻 + 0.1μF电容
- 电源去耦:每个VDD引脚配一个0.1μF陶瓷电容
- BOOT配置:BOOT0接地,BOOT1悬空
重点提醒:晶振的负载电容一定要匹配。我遇到过新手用20pF的电容配8MHz晶振,结果起振都困难。一般用12pF~22pF,具体看晶振手册。
这里有个小技巧——去耦电容的布局。我曾经在一个项目里,因为去耦电容离芯片引脚太远,导致PWM输出有高频抖动。后来我把电容紧贴引脚放置,问题立刻解决。
3.2 电机驱动电路——MOS管与H桥
按摩仪的核心是电机,电机靠PWM驱动。驱动电路我推荐用N沟道MOS管搭建H桥。
为什么用N沟道?因为导通电阻小,发热低。P沟道虽然控制简单,但大电流下压降大,效率不行。
3.2.1 单路MOS管驱动(低端驱动)
最简单的方案,适合小型直流电机:
// 典型电路参数
MOS管:IRLZ44N (N沟道,逻辑电平)
栅极电阻:10Ω
栅源下拉电阻:10kΩ
续流二极管:1N5819 (肖特基)
嗯,这里要注意——栅极电阻不能省。我见过有人直接拿IO口驱动MOS管栅极,结果PWM频率一高,波形就变形了。10Ω电阻能限制充放电电流,保护IO口。
3.2.2 H桥电路(正反转控制)
按摩仪需要正反转,那就得上H桥。我常用的结构:
- Q1、Q2:上管,P沟道MOS管(如IRF9540)
- Q3、Q4:下管,N沟道MOS管(如IRLZ44N)
- 驱动芯片:IR2104(半桥驱动)或L298N(集成H桥)
我的经验:如果追求效率,用分立元件搭H桥。如果追求省事,用集成驱动芯片。我个人偏好IR2104,死区时间可调,不容易烧管子。
为什么会烧管子?说白了就是直通。上下管同时导通,电流直接短路。所以PWM控制时,必须加死区时间。我一般设1μs,够用。
3.3 电源滤波设计——波形干净的秘诀
电源滤波,这是最容易忽略的环节。你想想看,PWM信号再完美,电源纹波一大,输出波形就全是毛刺。
3.3.1 电源架构
按摩仪一般用锂电池供电(3.7V~4.2V),需要升压到12V给电机用。我的方案:
| 电压轨 | 用途 | 电源芯片 |
|---|---|---|
| 3.3V | STM32供电 | AMS1117-3.3 |
| 12V | 电机驱动 | MT3608 (升压) |
| 5V | 传感器/运放 | 78M05 |
3.3.2 滤波设计要点
我总结了三步走:
- 输入滤波:电池端加100μF电解电容 + 0.1μF陶瓷电容
- 输出滤波:12V输出加220μF电解电容 + 10μF陶瓷电容
- 局部去耦:每个芯片VCC引脚加0.1μF陶瓷电容
避坑指南:我曾经在一个项目里,电机一启动,STM32就复位。查了两天,发现是电机启动瞬间拉低了电源电压。后来在电机电源输入端加了一个470μF的大电容,问题解决。
还有一个细节——地线处理。大电流回路和小信号回路要分开走线,最后单点接地。否则PWM的开关噪声会串到控制电路里。
3.4 实战电路图示例
给你一个我常用的电路结构:
// 电源部分
电池+ → 保险丝(1A) → 开关 → 100μF电解 → MT3608升压 → 220μF电解 → 12V输出
↓
AMS1117-3.3 → 3.3V输出
// H桥部分 (单路)
STM32 PA0 → 10Ω → IR2104 IN → HO → Q1栅极 (P沟道)
LO → Q2栅极 (N沟道)
电机两端接Q1漏极和Q2漏极
嗯,这个结构我用了很多年,稳定可靠。你照着搭,基本不会出大问题。
3.5 调试要点
板子焊好后,别急着上电。先做这几步:
- 目测:检查有没有虚焊、短路。我习惯用放大镜看一遍
- 测电阻:电源对地电阻,确保没有短路
- 上电测电压:3.3V、12V是否正常
- 测波形:用示波器看PWM输出,频率和占空比对不对
小技巧:第一次上电时,串一个100Ω电阻在电源输入端。万一有短路,电阻会限流,不会烧板子。等确认没问题了,再去掉电阻。
好了,硬件平台搭建就讲到这里。下一章咱们开始写PWM控制代码,让电机转起来。