第1章:主控芯片最小系统——让芯片“活”起来
做FOC电机控制,第一步不是画功率板,也不是选MOS管。
而是先把主控芯片伺候好。
芯片都跑不起来,后面全是白搭。
我见过不少新手,上来就画电机驱动电路,结果芯片下载不了程序,或者跑着跑着就复位。查了半天,发现是晶振没起振,或者复位电路有问题。
嗯,咱们先把地基打牢。
1.1 晶振电路——芯片的“心跳”
晶振就是芯片的心脏。它不跳,芯片就睡大觉。
我个人习惯,给STM32这类MCU配一个8MHz的外部晶振。为什么是8MHz?因为内部PLL可以倍频到72MHz甚至更高,够用。
典型电路参数:
- 晶振:8MHz,贴片3225封装,精度±10ppm
- 负载电容:两个18pF~22pF的MLCC电容
- 反馈电阻:1MΩ(有些芯片内部集成了,可以省掉)
这里有个坑,我踩过。
晶振的负载电容不是随便选的。你得看晶振手册,它标的是“12pF负载”,那你配两个22pF电容,实际等效负载大概就是11pF左右。算错了,频率会偏。
// 晶振配置示例(HAL库)
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 8MHz * 9 = 72MHz
HAL_RCC_OscConfig(&RCC_OscInitStruct);
我的小技巧:
画PCB时,晶振尽量靠近芯片的OSC_IN和OSC_OUT引脚。走线越短越好,别在底下走其他信号线。不然干扰来了,频率会抖。
1.2 复位电路——让芯片“重启”
复位电路说白了,就是给芯片一个“从头再来”的信号。
STM32的复位引脚是NRST,低电平有效。你拉低它,芯片就复位。
最简单的复位电路:一个10kΩ上拉电阻到3.3V,再加一个100nF电容到地。
为什么?
上电瞬间,电容充电,NRST引脚是低电平,芯片复位。电容充满后,引脚被拉到高电平,芯片开始跑程序。
注意:
别把复位引脚直接接地!我见过有人这么干,结果芯片永远在复位状态,程序根本跑不起来。
另外,如果要用外部按键复位,记得串一个100Ω电阻,防止按键按下时电流过大。
我在一个项目里遇到过,电机运行时偶尔会莫名其妙复位。查了半天,发现是复位引脚走线太长,被功率管的开关噪声耦合到了。后来把走线缩短,加了个100nF滤波电容,问题解决。
1.3 BOOT模式选择——程序从哪启动
BOOT模式,就是告诉芯片:你醒来后,第一段代码去哪找。
STM32有3种启动模式:
| BOOT0 | BOOT1 | 启动区域 |
|---|---|---|
| 0 | X | 主Flash(正常模式) |
| 1 | 0 | 系统存储器(ISP下载模式) |
| 1 | 1 | SRAM(调试模式) |
平时我们用的最多的是BOOT0=0,从Flash启动。
需要烧录程序时,把BOOT0拉高,BOOT1拉低,进入ISP模式,用串口下载。
我个人习惯,在板子上留一个2pin的排针,一个接BOOT0,一个接GND。需要时用跳线帽短接一下,方便切换。
避坑指南:
我曾经在一个量产项目中,忘了给BOOT0加下拉电阻。结果有些板子能下载程序,有些不行。后来发现是BOOT0引脚悬空,电平不确定。加了个10kΩ下拉电阻,问题解决。
1.4 SWD/JTAG调试接口——和芯片“对话”
调试接口,就是你和芯片沟通的桥梁。
你要下载程序、看变量、设断点,都得靠它。
我个人更推荐SWD接口,只需要4根线:
- SWDIO:数据线
- SWCLK:时钟线
- GND:地
- VCC:3.3V(可选,给调试器供电)
JTAG需要5根线,占用的引脚更多。对于FOC这种引脚紧张的场合,SWD更实用。
// SWD接口引脚定义(以STM32F103为例)
// PA13 -> SWDIO
// PA14 -> SWCLK
// 这两个引脚默认就是SWD功能,不需要额外配置
硬件设计要点:
- SWDIO和SWCLK各加一个10kΩ上拉电阻到3.3V
- 走线尽量短,不要超过10cm
- 如果调试器线太长,可以降低SWD时钟频率(比如从4MHz降到1MHz)
我遇到过最奇葩的问题:SWD能识别芯片,但下载到一半就失败。后来发现是调试接口的GND没和板子共地。你想想看,信号都没回路,能正常工作才怪。
1.5 电源引脚滤波——给芯片“喝干净的水”
芯片的电源引脚,就像人的血管。电压不稳,芯片就闹脾气。
STM32每个VDD引脚旁边,都要放一个100nF的MLCC电容。这个电容要尽量靠近引脚,走线越短越好。
为什么是100nF?
因为100nF的谐振频率在几十MHz,正好滤除芯片内部高速开关产生的噪声。
另外,在板子的电源入口,还要放一个10μF~100μF的电解电容或钽电容,用来滤除低频纹波。
千万别省电容!
我见过一个项目,为了省成本,把每个VDD的100nF电容减到只放一个。结果芯片运行时偶尔会死机,ADC采样值也跳来跳去。加上电容后,一切正常。
省几个电容的钱,换来的是产品的不稳定,不值当。
总结一下电源滤波的黄金法则:
- 每个VDD引脚:1个100nF MLCC,紧贴引脚放置
- 板级入口:1个10μF~100μF电解电容
- 模拟电源VDDA:再加一个10μF+100nF的组合
- 地平面要完整,别让电源走线绕大圈
好了,主控芯片的最小系统就这些。
晶振给它心跳,复位给它重启的能力,BOOT模式告诉它去哪找程序,SWD让我们能和它沟通,电源滤波保证它稳定工作。
这五样东西做好了,芯片就能稳稳地跑起来。
下一章,咱们聊聊FOC最核心的——电流采样电路。