第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最核心的——电流采样电路。