第四章 硬件架构设计:主控芯片选型与外设接口
硬件架构设计,说白了就是给嵌入式系统选一个「大脑」,再搭好它的「手脚」和「感官」。我做了十几年项目,见过太多因为芯片选型失误导致返工的情况。这一章咱们就聊聊主控芯片怎么选、外设接口怎么配、电源怎么管。
4.1 主控芯片选型:MCU vs MPU vs FPGA
选芯片之前,先搞清楚三者的本质区别。我习惯用一个比喻:
- MCU(微控制器)——像一把瑞士军刀,功能集成度高,功耗低,适合控制类任务。
- MPU(微处理器)——像一台笔记本电脑,算力强,能跑操作系统,适合复杂数据处理。
- FPGA(现场可编程门阵列)——像一堆积木,硬件逻辑可以重配,适合高速并行处理。
你可能会问:「那我到底该用哪个?」嗯,这里有个判断标准:
| 维度 | MCU | MPU | FPGA |
|---|---|---|---|
| 典型频率 | 8 MHz ~ 200 MHz | 400 MHz ~ 2 GHz | 50 MHz ~ 500 MHz(逻辑) |
| 功耗 | mW 级 | W 级 | W 级(视规模) |
| 实时性 | 硬实时(中断响应 us 级) | 软实时(依赖 OS) | 硬实时(硬件级) |
| 开发难度 | 低 | 中 | 高 |
| 典型场景 | 传感器采集、电机控制 | 网关、HMI、边缘计算 | 高速信号处理、协议桥接 |
我的经验法则:如果项目只需要跑裸机或 RTOS,且外设数量少于 20 个,优先选 MCU。需要跑 Linux 或复杂协议栈,上 MPU。需要处理 100 MHz 以上的数据流,考虑 FPGA。
我记得有一次做工业相机项目,团队一开始选了 MPU 跑 Linux,结果发现图像预处理延迟太大。后来换成 FPGA + MCU 的组合,FPGA 做像素级处理,MCU 做控制,问题就解决了。说白了,没有最好的芯片,只有最合适的组合。
4.2 外设接口设计:I2C、SPI、UART、USB
接口选型这件事,我踩过不少坑。先看一张对比表:
| 接口 | 通信方式 | 最大速率 | 线数 | 典型用途 |
|---|---|---|---|---|
| I2C | 同步、半双工 | 3.4 MHz(高速模式) | 2(SCL + SDA) | 传感器、EEPROM、RTC |
| SPI | 同步、全双工 | 50 MHz+ | 4(SCK + MOSI + MISO + CS) | ADC/DAC、显示屏、SD卡 |
| UART | 异步、全双工 | ~1 Mbps(典型) | 2(TX + RX) | 调试日志、GPS、蓝牙模块 |
| USB | 异步、主从 | 480 Mbps(USB 2.0) | 4(D+ + D- + VBUS + GND) | 数据存储、固件升级、人机交互 |
4.2.1 I2C 选型要点
I2C 的优势是线少,但速度慢、抗干扰差。我曾经在一个电机驱动板上用 I2C 接温度传感器,结果电机一启动,I2C 总线就卡死。后来查出来是长线引入的噪声导致时钟拉伸失败。
避坑指南:I2C 总线长度不要超过 30 cm,超过的话加电平转换或改用差分 I2C。上拉电阻选 4.7 kΩ ~ 10 kΩ,总线电容控制在 400 pF 以内。
4.2.2 SPI 选型要点
SPI 速度快,但片选信号多。如果外设超过 3 个,我建议用 SPI 总线扩展器或改用 QSPI。另外,SPI 的时钟极性和相位(CPOL/CPHA)一定要和外设匹配,不然数据全是乱的。
4.2.3 UART 选型要点
UART 最简单,但波特率误差不能超过 ±2%。我习惯用 115200 bps 作为默认调试口,因为大部分 MCU 在这个速率下误差最小。如果接蓝牙模块,注意流控(RTS/CTS)要不要开。
4.2.4 USB 选型要点
USB 设计最麻烦。如果你用 MCU 内置的 USB 外设,注意要加 ESD 保护芯片(比如 USBLC6-2)。另外,USB 的差分走线要等长,阻抗控制在 90 Ω ± 15%。
小技巧:调试阶段,我习惯在 UART 口上留一个 0 Ω 电阻位。万一 USB 不通,还能用 UART 看打印信息。这个习惯救过我好几次。
4.3 电源管理与功耗估算
电源设计是硬件架构里最容易出问题的地方。我见过一个项目,所有功能都调通了,结果整机功耗超标 30%,不得不重新改板。
4.3.1 电源架构设计
典型的嵌入式系统电源树如下:
外部电源(5V / 12V)
├── LDO(3.3V)→ MCU、传感器
├── DCDC(1.8V)→ DDR、FPGA 内核
└── DCDC(1.2V)→ FPGA 逻辑、高速 SerDes
选 LDO 还是 DCDC?我的原则是:
- 压差小(< 1V)、电流小(< 200 mA)→ LDO,噪声低、成本低
- 压差大、电流大 → DCDC,效率高(85% ~ 95%)
4.3.2 功耗估算方法
功耗估算分三步走:
- 静态功耗:芯片数据手册里的典型功耗值,加上 20% 余量
- 动态功耗:P = C × V² × f,每个外设单独算
- 峰值功耗:所有外设同时工作时的最大电流
举个例子,一个 STM32F4 项目:
| 模块 | 典型电流 | 峰值电流 |
|---|---|---|
| MCU(168 MHz) | 80 mA | 120 mA |
| WiFi 模块 | 150 mA | 350 mA(发射时) |
| 传感器 × 3 | 15 mA | 20 mA |
| LED 指示灯 × 4 | 20 mA | 20 mA |
| 总计 | 265 mA | 510 mA |
注意:电源芯片的额定电流要按峰值电流的 1.5 倍选。上面这个例子,至少选 800 mA 的 DCDC。我曾经因为只按典型值选,结果 WiFi 一发射就掉电重启。
4.3.3 低功耗设计技巧
- 时钟门控:不用的外设模块关掉时钟,MCU 进入睡眠模式
- 动态调压:负载轻时降低 DCDC 输出电压
- 电源域分割:用 MOSFET 开关独立控制传感器供电
嗯,这里要注意:低功耗设计不是最后才考虑的。我建议在原理图阶段就把功耗预算表做出来,每个模块标清楚工作模式、休眠模式下的电流。这样板子回来一测,心里就有底。
这张图概括了硬件架构设计的四个核心步骤。我每次做新项目,都会先画这么一张流程图,贴在白板上。团队开会时对着图聊,不容易漏项。