学习嵌入式硬件开发(四):原理图与PCB设计入门 —— 从芯片到板子
设计流程全景:从需求到板子的五个阶段
嵌入式硬件设计的完整链路,可以用五个阶段来概括:
- 需求分析 → 确定功能列表、性能指标、成本预算
- 芯片选型 → 主控MCU + 外围器件(传感器、通信模块、电源芯片)
- 原理图设计 → 用EDA工具绘制所有元件的电气连接关系
- PCB布局布线 → 将原理图转化为物理电路板,决定每个元件的实际位置和走线
- 打样验证 → 制造样板、焊接调试、发现问题、迭代修改
本文以一款智能温湿度计为实战案例,手把手带你走完全流程。从一颗芯片到一个能用的板子,每一步都有真实数据和实操要点。我们选用的是嵌入式开发中最经典的组合:STM32F103C8T6 + DHT22温湿度传感器 + 0.96寸OLED显示屏。
芯片选型的五个维度
芯片选型不是"挑最贵的"或者"选最流行的",而是要在性能、功耗、成本、生态、供货五个维度之间找到最优平衡点。以下是我们为智能温湿度计做的选型分析:
| 维度 | 考量要点 | 本例选择 | 数据来源 |
|---|---|---|---|
| 性能 | 主频、Flash/RAM容量、外设数量 | STM32F103C8T6:72MHz Cortex-M3,64KB Flash + 20KB SRAM,含I²C、SPI、USART、12位ADC | ST官方Datasheet (DocID13587 Rev 17) |
| 功耗 | 工作电流、休眠模式电流 | 正常运行≈36mA(72MHz全速),睡眠模式≈2.4mA,待机模式≈5μA | ST AN2834应用笔记实测数据 |
| 成本 | MCU单价 + 总BOM成本 | MCU≈6-8元(2026年批量价),整板BOM≈35元 | 立创商城 & 华秋商城实时报价 |
| 生态 | 开发工具链、社区支持、教程资源 | STM32CubeIDE免费、HAL库成熟、全球最大ARM MCU社区 | ST官网 & GitHub活跃度 |
| 供货 | 交期稳定性、Pin-to-Pin替代方案 | 国产替代:GD32F103C8T6(兆易创新)、AT32F403ACGT7(雅特力),引脚完全兼容 | 各厂商官网交叉参考 |
国产替代的现实考量
2026年的MCU供应链已经相当成熟。ST的STM32F103C8T6虽然是行业标杆,但在交期紧张时,GD32F103C8T6可以做到Pin-to-Pin无缝替换。两者的差异主要在:GD32主频可到108MHz(超频),但Flash等待周期策略不同,部分时序敏感代码需要适配。我们的建议是:硬件设计时保留兼容焊盘,固件层面用宏定义区分。
原理图设计的三大关键电路
1. 电源电路——板子的"心脏"
电源电路是整个硬件系统中最容易被忽视、但出问题后果最严重的部分。一个不稳定的电源会导致ADC读数跳动、通信间歇性失败、MCU随机复位——这些问题极难排查,因为你很难把"偶发性Bug"和"电源纹波"联系起来。
我们的电源链路设计如下:
USB 5V → [自恢复保险丝 500mA] → [TVS管 SMBJ5.0A] → [AMS1117-3.3V LDO] → 稳定3.3V输出
↓
输入电容 100μF电解 输出电容 10μF钽 + 0.1μF陶瓷
AMS1117-3.3V 关键参数(来源:AMS1117 Datasheet):
- 最大输出电流:1A(但800mA以上需要良好散热)
- 压差电压(Dropout):典型值1.1V@800mA(即输入至少需要4.4V才能稳定输出3.3V)
- 输出电压精度:±2%(即3.234V~3.366V)
- 线性调整率:0.2%(输入电压变化对输出的影响极小)
- 负载调整率:0.4%(负载电流变化对输出的影响)
我们一个客户的第一版PCB,上电瞬间AMS1117直接冒烟烧毁。排查发现:输出端接了一个470μF大电容。上电瞬间,电容等效于短路,充电浪涌电流 I = C × dV/dt 可达数安培,远超AMS1117的电流限制,触发了芯片内部的热保护——但保护来不及响应,芯片已经烧了。
修正方案:输出端只用10μF钽电容 + 0.1μF陶瓷电容做高频去耦,大容量储能电容(100μF)放在输入端。输入端的大电容是"水库"(应对输入电压跌落),输出端只需要"高频滤波"——电容的位置比容量更重要。
2. 晶振电路——系统的心跳
STM32F103C8T6使用8MHz外部高速晶振(HSE),通过内部PLL倍频到72MHz系统时钟。晶振电路看似只有三个元件(晶振 + 两个负载电容),但布局布线对起振的可靠性影响极大。
晶振电路设计要点:
- 负载电容计算:CL = (C1 × C2) / (C1 + C2) + Cstray。8MHz晶振通常标称负载电容12-20pF,我们选择两个22pF陶瓷电容(考虑PCB走线约5pF寄生电容后,等效负载约16pF)
- 走线要求:晶振和两个电容必须紧靠MCU的OSC_IN(PD0)和OSC_OUT(PD1)引脚,走线长度不超过10mm
- 地线包围:晶振电路周围用地线环绕(Guard Ring),隔离外部数字信号的干扰
- 禁止铺铜:晶振正下方的PCB各层禁止铺地铜——铜箔会增加寄生电容,改变晶振的负载特性,严重时导致不起振
3. BOOT引脚——被遗忘的关键设计
STM32的启动模式由BOOT0和BOOT1两个引脚在上电复位时的电平决定:
| BOOT0 | BOOT1 | 启动模式 | 启动地址 | 用途 |
|---|---|---|---|---|
| 0 | X(任意) | 主闪存存储器(Flash) | 0x08000000 | 正常运行模式,用户程序从这里启动 |
| 1 | 0 | 系统存储器(System Memory) | 0x1FFFF000 | 串口ISP下载模式,ST出厂预置的Bootloader |
| 1 | 1 | 内置SRAM | 0x20000000 | 调试用,从RAM启动(极少使用) |
绝大多数时间,BOOT0通过一个10KΩ下拉电阻接地,系统从Flash正常启动。当需要通过串口烧录程序时,用跳线帽将BOOT0接到3.3V,然后复位MCU即可进入ISP模式。
PCB布局的黄金法则
原理图是"逻辑正确",PCB是"物理可靠"。一个好的PCB布局能让电路稳定工作,一个糟糕的布局则会让"原理上完美"的电路在实际中问题百出。
分区布局策略
按功能将PCB划分为四个区域,彼此之间用地线隔离:
┌─────────────────────────────────────┐
│ 电源区(左上角) │
│ USB口 → 保险丝 → TVS → LDO → 电容 │
│ 大电流走线,远离敏感信号 │
├────────────────┬────────────────────┤
│ MCU + 晶振 │ 传感器接口区 │
│ (中心偏左) │ DHT22 (I²C/单总线) │
│ 去耦电容紧贴 │ OLED (I²C) │
│ 每个VDD引脚 │ │
├────────────────┴────────────────────┤
│ 显示屏接口区(底部) │
│ 0.96寸 OLED 排针 │
└─────────────────────────────────────┘
走线规则与数据
| 信号类型 | 推荐线宽 | 推荐间距 | 说明 |
|---|---|---|---|
| 电源线(<500mA) | 0.5mm (20mil) | ≥0.5mm | 1oz铜厚,温升<10℃ |
| 电源线(500mA~1A) | 1.0mm (40mil) | ≥0.8mm | 关键大电流路径 |
| 通用数字信号 | 0.254mm (10mil) | ≥0.2mm (8mil) | 满足绝大多数场景 |
| 晶振信号线 | 0.3mm (12mil) | ≥1.0mm | 远离数字信号,用地线包围 |
| 模拟信号(ADC) | 0.3mm (12mil) | ≥1.0mm | 远离数字和电源线 |
去耦电容——PCB上最重要的0.1元元件
每颗STM32F103C8T6有5个VDD引脚(VDD_1到VDD_5),每个VDD引脚旁必须就近放置一颗0.1μF陶瓷电容到地,距离不超过5mm。
为什么需要去耦电容?MCU内部的数百万个晶体管以72MHz频率高速开关,每次开关都产生瞬时电流尖峰(di/dt可达数百mA/ns)。PCB走线有寄生电感(约1nH/mm),根据公式 V = L × di/dt,10mm走线在100mA/ns的电流变化下可产生1V的电压尖峰——足以让3.3V供电的MCU工作异常。
去耦电容充当"本地电荷仓库",在晶体管开关瞬间就近提供电荷,避免电流从远处的电源芯片绕一大圈过来。0.1μF这个值的选择也有讲究:陶瓷电容的谐振频率通常在10-50MHz范围,恰好覆盖MCU的主要开关噪声频段。
覆铜策略
整板铺地铜(Ground Plane)是最简单有效的降低EMI的手段。地铜提供低阻抗回流路径,减小信号回路面积,降低电磁辐射。但需要注意:
- 顶层和底层都铺地铜,并通过大量过孔(Stitching Via)连接,形成完整的接地网络
- 晶振下方禁止铺铜(如前所述)
- 天线区域(如果有无线模块)下方所有层禁止铺铜
- 模拟地和数字地分开铺铜,在电源入口处单点汇接(用0Ω电阻或磁珠)
从原理图到Gerber文件:实操步骤
以KiCad 8为例(开源免费,功能对标Altium Designer),完整的设计流程:
- 创建项目 → 新建工程,设置图纸尺寸(推荐A3,方便放置所有电路)
- 绘制符号库 → 如果没有现成的元件符号,需要手动创建。STM32F103C8T6通常从网上下载官方库
- 放置元件 → 将MCU、电源芯片、传感器、接插件等按功能分区放置
- 连线 → 用网络标号(Net Label)连接各元件引脚。注意:电源网络统一用VCC、+3.3V等全局标号
- ERC检查 → 电气规则检查,确保没有短路、开路、引脚悬空
- 分配封装 → 给每个原理图符号绑定实际的PCB封装(Footprint),这是新手最容易出错的环节——封装引脚编号必须与原理图符号一致
- 生成网表 → 导入PCB编辑器
- PCB布局 → 按分区策略放置元件,先大后小,先固定接插件位置
- 设置设计规则 → 线宽、间距、过孔大小(推荐过孔:0.6mm孔径/1.0mm外径)
- 自动布线 + 手动调整 → KiCad的自动布线器可以处理80%的连线,关键信号(晶振、差分对)必须手动布线
- DRC检查 → 设计规则检查,确保没有违规
- 覆铜 → 顶层和底层铺GND铜
- 生成Gerber文件 → 发给PCB厂家打样
打样的成本与选择
2026年,PCB打样的成本已经降到历史最低。以下是主流厂家的参考价格(10cm×10cm以内,5片,FR-4,1.6mm板厚,1oz铜厚):
| 厂家 | 双面板 | 四层板 | 交期 | 特点 |
|---|---|---|---|---|
| 嘉立创 | 5元 | 约50元 | 24-48小时 | 国内最大,支持在线下单,官网 |
| 捷配 | 约30元 | 约80元 | 48小时 | 品质稳定,适合批量 |
| 华秋 | 约20元 | 约60元 | 48-72小时 | 一站式(PCB+元器件+SMT) |
| PCBWay | $5 | $30 | 3-5天 | 国际客户首选,支持英文 |
实际踩坑:第一版板子最容易犯的5个错误
总结了我们在数十个PCBA项目中反复遇到的问题,按出现频率排序:
错误1:去耦电容距离MCU太远(出现率≈70%)
新手经常把去耦电容放在"方便焊接"的位置而不是"紧贴VDD引脚"。结果MCU工作不稳定,偶尔死机。排查时示波器一量,VDD引脚上有300mV的噪声纹波——正常的板子应该低于50mV。
错误2:BOOT0引脚悬空(出现率≈50%)
前面已经详细讲过。补充一点:即使加了10KΩ下拉电阻,如果电阻焊接不良(冷焊),效果等同于悬空。
错误3:电源走线太细(出现率≈40%)
用0.254mm走电源线,结果带负载后电压跌落严重。从AMS1117输出端到MCU的VDD引脚,如果走线电阻0.1Ω,100mA电流就产生10mV压降——看起来不大,但加上其他因素(连接器接触电阻、焊点电阻),总压降可能超过100mV,已经影响ADC精度。
错误4:忘记引出SWD调试接口(出现率≈35%)
SWD只需要4根线(VCC、GND、SWDIO、SWCLK),占PCB面积不到1cm²。但忘记引出的话,调试时只能通过串口ISP反复烧录,效率极低。我们的标准做法是:所有板子默认留4Pin 1.27mm间距的SWD排针焊盘。
错误5:丝印方向不一致(出现率≈30%)
这个问题不致命但很烦人——板子上有的元件丝印朝上、有的朝下、有的朝左。焊接时需要不停旋转板子。建议所有IC和极性元件的丝印统一朝向板子上方或左方,方便批量生产时的目检。
工具推荐
| 工具 | 用途 | 费用 | 推荐理由 |
|---|---|---|---|
| KiCad 8 | 原理图+PCB设计 | 免费开源 | 功能接近商业软件,3D预览强大,社区活跃,官网 |
| 立创EDA | 在线设计+一键打样 | 免费 | 与嘉立创深度集成,元件库丰富,适合快速验证 |
| LCSC(立创商城) | 元器件采购 | 按需 | 国内最大元器件电商,价格透明 |
| DigiKey / Mouser | 国际元器件采购 | 按需 | 正品保证,数据手册齐全 |
PCB设计检查清单(Checklist)
这是我们内部使用的PCB设计检查清单,每次提交打样前逐项核对:
- ✅ 所有VDD引脚旁有0.1μF去耦电容,距离<5mm
- ✅ BOOT0有10KΩ下拉电阻,BOOT1有10KΩ下拉(或接地)
- ✅ SWD调试接口已引出(至少SWDIO + SWCLK + GND)
- ✅ 电源线宽≥0.5mm(<500mA)或≥1.0mm(<1A)
- ✅ 晶振紧靠MCU,下方无铺铜,周围有地线环绕
- ✅ 所有IC的第1脚有明确标记(丝印圆点)
- ✅ 电解电容/钽电容正负极丝印正确
- ✅ 板子外形、安装孔位置与结构工程师确认
- ✅ DRC检查无错误
- ✅ Gerber文件已用在线查看器预览确认