3. 系统架构设计:模块划分原则、接口定义、电源树与时钟树规划、系统框图绘制

好,咱们进入第三讲。系统架构设计,说白了就是给电路画“骨架”。很多新手一上来就画原理图,结果画到一半发现引脚不够用,或者电源走线绕成蜘蛛网。我个人的习惯是,先花 30% 的时间把架构想清楚,后面 70% 的活儿才能顺风顺水。

3.1 模块划分:别把鸡蛋放一个篮子里

模块划分,核心就四个字:高内聚,低耦合。什么意思?

  • 高内聚:一个模块只干一件事,而且干得漂亮。比如电源管理模块,就别把 MCU 的 GPIO 也塞进去。
  • 低耦合:模块之间通过标准接口通信,别搞“你中有我,我中有你”的纠缠。

我在项目中遇到过最典型的反面教材:有人把 LED 驱动和温度传感器放在同一个模块里,结果换了个 LED 型号,整个温度采集逻辑都得重写。你想想看,这多折腾?

具体怎么分?我一般按功能域来切:

  1. 电源域:DC-DC、LDO、电池管理、上电时序控制。
  2. 主控域:MCU/MPU、DDR、Flash、时钟源。
  3. 模拟域:ADC、DAC、运放、传感器接口。
  4. 通信域:UART、I2C、SPI、CAN、以太网。
  5. 人机交互域:按键、LED、显示屏、触摸。
小技巧:每个模块的引脚数尽量留 20% 的余量。别问我为什么,等你改版三次就懂了。

3.2 接口定义:定好规矩,少吵架

模块之间怎么握手?接口定义就是“法律条文”。我建议用一张表格把接口说清楚:

接口名称 类型 电平标准 速率 备注
SPI_CLK 输出 3.3V CMOS 10MHz 主控→外设
I2C_SDA 双向 开漏,上拉到3.3V 400kHz 需加4.7kΩ上拉
UART_TX 输出 3.3V CMOS 115200bps MCU→调试口
PWR_EN 输出 3.3V CMOS DC 使能信号,低有效

嗯,这里要注意:接口定义里一定要写清楚“谁做主,谁做从”。我曾经吃过一次亏,两个模块都以为自己是主设备,结果 I2C 总线直接锁死,排查了整整两天。

3.3 电源树与时钟树:电路的“血管”和“脉搏”

3.4 电源树规划

电源树,就是给每个模块分配“口粮”。你得搞清楚:

  • 每个模块需要几伏电压?
  • 电流多大?
  • 上电顺序有没有要求?
  • 纹波噪声容忍度是多少?

举个例子,一个典型的物联网设备电源树:

电池 (3.7V)
  ├── DC-DC (3.3V) → MCU、传感器、WiFi模块
  ├── LDO (1.8V) → 模拟电路、ADC参考
  └── LDO (1.2V) → 核心电压(如果MCU需要)

我个人的习惯是:先粗后细。先估算总功耗,再逐级分配。比如总电流 500mA,那 DC-DC 至少要选 800mA 的型号,留足余量。

避坑指南:我曾经在电源树上犯过一个低级错误——把模拟 LDO 放在数字 DC-DC 后面,结果数字噪声全耦合到模拟电源上,ADC 读数跳得像心电图。后来才明白:模拟和数字电源必须物理隔离,最好用磁珠或 π 型滤波。

3.5 时钟树规划

时钟是电路的“心跳”。时钟树规划不好,整个系统就像得了心律不齐。

关键点:

  1. 时钟源选择:晶振、有源振荡器、PLL 倍频。精度要求高的用温补晶振(TCXO)。
  2. 时钟分配:一个时钟源能不能带多个负载?要看驱动能力。一般晶振只能带 1-2 个负载,多了得加时钟缓冲器。
  3. 时钟域隔离:不同频率的时钟域之间,一定要用异步 FIFO 或双口 RAM 做同步处理。否则亚稳态会让你怀疑人生。

举个例子:

主晶振 (16MHz)
  ├── MCU 主时钟 (16MHz)
  ├── PLL 倍频 (80MHz) → 定时器、PWM
  └── 分频 (32.768kHz) → RTC 实时时钟

你想想看,如果 RTC 的 32.768kHz 是从 16MHz 分频得来的,那精度完全取决于主晶振。而主晶振一般误差在 ±50ppm,一天下来可能差好几秒。所以高精度 RTC 必须用独立的 32.768kHz 晶振。

3.6 系统框图绘制:一图胜千言

系统框图,是给所有人看的“地图”。画图时我遵循三个原则:

  • 从左到右:信号流向从左到右,电源从上到下。
  • 模块化:每个模块用方框表示,框内写功能名称。
  • 标注关键信号:比如 SPI、I2C、中断线、电源轨。

我一般用 Draw.io 或 Visio 画,但如果你手头只有纸笔,也完全够用。关键是逻辑清晰。

核心要点:系统框图不是原理图,不需要画出每个电阻电容。它只表达“谁和谁连,用什么连,为什么连”。

举个例子,一个温湿度采集器的系统框图:

[传感器] --I2C--> [MCU] --UART--> [WiFi模块]
   |                |                 |
 3.3V             3.3V              3.3V
   |                |                 |
 [LDO] <-- [DC-DC] <-- [电池]

嗯,画完框图后,我建议你拿着它去跟软件工程师、结构工程师对一遍。很多时候,硬件觉得没问题的地方,软件那边可能跑不通。比如中断引脚分配,硬件觉得随便一个 GPIO 就行,但软件可能要求固定引脚以优化中断响应时间。

好了,这一讲的核心就是:先想清楚再动手。模块划分、接口定义、电源时钟、系统框图,这四步走扎实了,后面的原理图设计就是“填空”而已。下一讲咱们聊原理图设计规范,到时候见。