3、主控芯片选型:STM32系列介绍、芯片选型依据、最小系统电路设计

好,咱们进入第三章。这一章聊的是整个电表的大脑——主控芯片选型。说白了,就是决定用哪颗MCU来干活。

我在智能电表项目里摸爬滚打了好几年,换过好几款芯片。说实话,选型这一步要是走偏了,后面整个硬件设计都得跟着遭殃。你想想看,电表要跑十几年不关机,还要在严寒酷暑里稳定计量,这可不是闹着玩的。

3.1 STM32系列介绍

STM32,意法半导体的王牌产品线。为什么智能电网行业这么偏爱它?我个人觉得,核心原因就三个字:生态好。

STM32家族非常庞大,我简单给你捋一捋常见的几个系列:

系列 内核 主频 典型应用场景
STM32F0 Cortex-M0 48MHz 低成本、简单控制
STM32F1 Cortex-M3 72MHz 通用型、性价比之王
STM32F4 Cortex-M4 168MHz 带DSP、浮点运算
STM32L4 Cortex-M4 80MHz 超低功耗、电池供电
STM32G4 Cortex-M4 170MHz 数字电源、高级定时器

对于多费率电表,我个人最推荐的是STM32F1系列STM32L4系列。F1是经典款,资料多、价格稳、够用。L4则是低功耗利器,适合对功耗有严格要求的场景。

核心观点:选STM32,不是越贵越好,也不是越新越好。关键是「够用」+「稳定」+「好买」。

3.2 芯片选型依据

好,到了关键环节。芯片选型到底看什么?我总结了五个维度,你照着这个框架去选,基本不会翻车。

3.2.1 性能需求

多费率电表要干的事其实不少:

  • 实时采集电压电流数据
  • 运行计量算法(比如FFT、功率计算)
  • 管理费率切换逻辑
  • 驱动LCD或段码屏显示
  • 处理红外、RS485通信
  • 存储冻结数据、事件记录

这些任务加起来,对MCU的主频和算力有一定要求。我建议主频不低于48MHz,Flash不低于128KB,RAM不低于20KB。STM32F103C8T6(72MHz、64KB RAM、128KB Flash)就是一个非常经典的起步配置。

3.2.2 外设接口

电表需要哪些外设?我列个清单:

  • ADC:至少2路,用于采样电压和电流。最好是12位以上。
  • UART:至少2路,一路给红外通信,一路给RS485。
  • SPI/I2C:用于连接EEPROM、LCD驱动芯片、RTC等。
  • 定时器:用于产生PWM或捕获脉冲。
  • RTC:实时时钟,费率切换全靠它。

我的经验:选型时多留1-2路UART和SPI备用。我遇到过项目后期要加一个蓝牙模块,结果发现UART口不够用,只能飞线改板子,那叫一个狼狈。

3.2.3 功耗要求

智能电表通常要求整机功耗低于2W,甚至1.5W。MCU本身功耗不能太高。STM32F1在72MHz全速运行时大约50-60mA,而STM32L4在同样频率下可以做到20-30mA,待机模式更是低到微安级。

如果你做的是单相表,F1完全够用。如果是三相表或者无线通信表,我建议上L4,省下来的功耗可以给通信模块用。

3.2.4 工作温度与可靠性

电表装在户外电表箱里,夏天暴晒能到70°C,冬天北方能到-40°C。所以芯片必须选工业级(-40°C ~ 85°C)甚至汽车级(-40°C ~ 125°C)。

警告:千万不要用商业级芯片(0°C ~ 70°C)做电表。我曾经见过一个项目,为了省几毛钱用了商业级芯片,结果夏天大批量死机,最后全部召回更换,损失惨重。

3.2.5 供货与成本

这一点容易被忽略,但非常重要。选型前一定要确认:

  • 这颗芯片是否在ST官方长期供货清单里?
  • 是否有第二货源(比如GD32、APM32等国产替代)?
  • 批量价格是否在预算范围内?

我个人习惯是:优先选STM32F103系列,因为国产替代方案成熟,万一ST缺货,可以快速切换到国产芯片,代码改动很小。

3.3 最小系统电路设计

芯片选好了,接下来就是让它跑起来。最小系统,就是让MCU能工作的最低硬件配置。我以STM32F103C8T6为例,给你拆解一下。

3.3.1 电源电路

STM32需要3.3V供电。电表内部通常有开关电源输出5V或12V,所以需要一级LDO降压到3.3V。

// 推荐LDO型号:AMS1117-3.3
// 输入:5V,输出:3.3V,最大输出电流:1A
// 电路要点:
// 1. 输入输出各加一个10uF电解电容 + 0.1uF瓷片电容
// 2. 电容尽量靠近LDO引脚
// 3. 输出端加一个LED指示灯(串1K电阻)

避坑指南:我曾经遇到过电表上电后MCU偶尔启动失败,查了半天发现是LDO输出电容离得太远,导致上电瞬间电压跌落。后来把电容焊到LDO屁股底下,问题就解决了。

3.3.2 时钟电路

STM32有两个时钟源:

  • HSE(高速外部晶振):8MHz,用于系统主时钟
  • LSE(低速外部晶振):32.768kHz,用于RTC

晶振两端各接一个20pF左右的负载电容,具体值要看晶振手册。走线要短,晶振外壳最好接地。

重要:RTC晶振一定要选低功耗型,否则待机时电池会很快耗光。我见过有人用了普通晶振,结果RTC电池一个月就没电了。

3.3.3 复位电路

STM32的NRST引脚是低电平复位。最简单的做法:

  • NRST接一个10KΩ上拉电阻到3.3V
  • 再对地接一个0.1uF电容
  • 再并联一个按键(可选)

这样上电时电容充电,NRST保持一段时间低电平,MCU完成复位。按键按下时强制拉低,实现手动复位。

3.3.4 启动模式配置

STM32的BOOT0和BOOT1引脚决定启动方式:

BOOT0 BOOT1 启动模式
0 X 主Flash启动(正常模式)
1 0 系统存储器启动(ISP下载)
1 1 SRAM启动(调试用)

正常工作时,BOOT0接10KΩ下拉电阻到GND。BOOT1可以悬空或下拉。

3.3.5 调试接口

强烈建议保留SWD接口(SWDIO + SWCLK),只需要两根线就能下载和调试程序。比JTAG省引脚,而且速度不慢。

// SWD接口引脚分配(STM32F103C8T6)
// PA13 -> SWDIO,接10KΩ上拉到3.3V
// PA14 -> SWCLK,接10KΩ下拉到GND
// 再加一个GND和3.3V,共4个引脚即可

我的习惯:每个项目我都会在PCB上留一个4针的SWD插座。哪怕量产时不用,开发调试阶段也离不开它。别省这个成本。

3.4 完整最小系统原理图要点

把上面几部分拼起来,就是一个完整的最小系统。我再强调几个容易踩坑的地方:

  • 去耦电容:每个VDD引脚旁边放一个0.1uF瓷片电容,位置越近越好。
  • VDDA:模拟电源引脚必须单独供电,不能和数字VDD共用。加一个10Ω电阻+10uF电容做滤波。
  • VREF:如果用到ADC,VREF引脚要接高精度参考电压,或者直接接VDDA。
  • 未使用的IO:建议配置为推挽输出低电平,或者外部下拉,防止悬空引入干扰。

血的教训:我做过一个项目,VDDA直接接了VDD,结果ADC采样值跳得像心电图。后来加了RC滤波,采样值才稳定下来。记住,模拟和数字供电一定要分开处理。

好了,这一章的内容就到这儿。芯片选型不是一锤子买卖,你得多看、多比、多试。下一章咱们聊聊计量芯片的选型与接口设计,那又是另一番天地了。