2. 硬件平台认知:典型智能电表MCU架构

好,咱们进入第二章。这一章我带你看看智能电表的核心——MCU。说白了,就是这颗芯片长什么样,它周围都挂了哪些外设。

我刚开始做电表项目时,拿到原理图一看,好家伙,SPI Flash、LCD、计量芯片……一堆东西。当时心里有点发怵。后来摸熟了才发现,其实套路很固定。今天我就把这些经验掰开揉碎讲给你。

2.1 典型MCU架构:ARM Cortex-M0+ 与 M3

智能电表里用的MCU,主流就是ARM Cortex-M0+和M3。为什么是这两兄弟?

  • Cortex-M0+:主打低功耗、低成本。适合对性能要求不高的基础型电表。我见过很多单相表就用它。
  • Cortex-M3:性能更强,带MPU(内存保护单元)。适合三相表、需要跑RTOS的复杂场景。

你想想看,一个电表要跑7x24小时,功耗必须压得死死的。M0+的待机功耗能做到微安级,这一点M3就差点意思。但M3的运算能力摆在那,处理FFT(快速傅里叶变换)这类算法时,优势明显。

核心区别速览:

特性Cortex-M0+Cortex-M3
指令集ARMv6-M(精简)ARMv7-M(完整)
性能0.9 DMIPS/MHz1.25 DMIPS/MHz
中断延迟16个周期12个周期
典型应用单相表、传感器节点三相表、网关

我个人习惯,如果项目对成本敏感、功能简单,直接上M0+。如果后续要加协议栈、跑文件系统,那就老老实实用M3。别为了省几块钱把自己坑了。

2.2 外设资源详解

MCU本身只是个大脑,要干活还得靠外设。智能电表里常见的三大件:SPI Flash、LCD、计量芯片。我一个一个说。

2.2.1 SPI Flash:存代码和数据

电表的固件一般比较大,MCU内部Flash装不下。这时候就需要外挂一颗SPI Flash。容量从1MB到16MB不等。

嗯,这里要注意:SPI Flash的读写速度比内部Flash慢不少。我遇到过一个问题——系统启动时从SPI Flash搬运代码,结果因为时序没调好,启动时间长了200ms。后来我把SPI时钟频率从20MHz降到了10MHz,反而稳定了。

避坑指南:我曾经在SPI Flash的片选信号上吃过亏。多个设备共用SPI总线时,片选信号必须严格互斥。否则数据会串扰,读出来的全是0xFF。

2.2.2 LCD:显示信息

电表前面板那块屏幕,通常是段码LCD。为什么不用点阵屏?成本啊!段码LCD便宜,功耗也低。

驱动LCD一般有两种方式:

  • 直接驱动:MCU的GPIO直接连LCD的COM和SEG引脚。适合段数少的。
  • 通过LCD驱动芯片:比如HT1621。MCU用SPI或I2C发指令,驱动芯片负责刷新屏幕。

我建议新手用第二种。直接驱动的话,你得自己算刷新时序,稍不留神屏幕就闪。我刚开始做时,为了省一个驱动芯片的钱,硬写了三天驱动代码……最后发现还是买芯片划算。

2.2.3 计量芯片:电表的核心

计量芯片负责采集电压、电流,计算功率、电能。常见的型号有RN8302、ADE7758等。

MCU和计量芯片之间通常用SPI通信。计量芯片会不断产生中断信号,告诉MCU“数据准备好了”。MCU收到中断后,去读寄存器。

这里有个关键点:计量芯片的精度和稳定性,直接决定了电表准不准。我见过一个项目,因为PCB布局没做好,计量芯片附近有高频开关电源,导致读数跳变。后来加了屏蔽罩才解决。

警告:计量芯片的SPI通信频率不要太高。我一般设置在1MHz以下。频率高了容易受干扰,导致读数错误。电表是计量器具,数据准确性是第一位的。

2.3 开发板介绍

学这个课程,你肯定需要一块开发板。我推荐用STM32F103系列(Cortex-M3)或者STM32G0系列(Cortex-M0+)的板子。这两款芯片在电表行业用得最多。

开发板上的资源一般包括:

  • 一个SPI Flash(W25Q64,8MB)
  • 一个段码LCD模块(或者128x64点阵屏)
  • 一个计量芯片插座(方便插拔)
  • 若干按键和LED

我个人习惯,拿到开发板后第一件事不是写代码,而是看原理图。把每个外设的引脚、中断号、时钟源都标出来。这样后面写驱动时,心里有底。

实战建议:如果你手头没有开发板,用STM32最小系统板+杜邦线也能搭。但要注意接线要牢固,否则SPI通信时接触不良,你会怀疑人生的。

2.4 本章小结

这一章我们看了智能电表的硬件骨架:

  • MCU选型:M0+省电,M3性能强
  • 三大外设:SPI Flash存代码、LCD显示、计量芯片算电能
  • 开发板:STM32F103或G0系列,够用

下一章,我会带你搭建开发环境,把RTOS跑起来。到时候你就知道,这些硬件资源怎么在软件里调度了。

好,今天就到这。有什么问题,咱们课程群里聊。