设计思路
控制板围绕 STM32F103ZETx(LQFP-144)设计,核心需求来自固件层面的引脚分配:
- USART1(PA9/PA10):调试串口,通过 CH340C 转 USB-C
- USART2(PA2/PA3/PD7):现场 RS485 总线,连接传感器和继电器
- USART3(PB10/PB11/PA5):维护/上行 RS485 总线,连接 G780S 通信模块
两条 RS485 总线独立隔离,互不干扰。现场总线负责日常数据采集,维护总线负责远程配置和固件升级。
PCB 参数
| 参数 | 值 |
|---|---|
| 尺寸 | 100mm × 100mm(双层板) |
| 板厚 | 1.6mm |
| 铜厚 | 1oz |
| 最小线宽/间距 | 0.25mm / 0.2mm |
| 安装孔 | 4 × M3(四角) |
| 设计工具 | KiCad 10.0 + Python API |
核心器件
| 位号 | 型号 | 封装 | 用途 |
|---|---|---|---|
| U1 | STM32F103ZETx | LQFP-144 | 主控 MCU |
| U2 | CH340C | SOP-16 | USB 转 UART 调试串口 |
| U3 | AMS1117-3.3V | SOT-223 | 5V → 3.3V LDO 稳压 |
| U4 | MAX485E | SOIC-8 | 现场 RS485 收发器 |
| U5 | MAX485E | SOIC-8 | 上行 RS485 收发器 |
| J1 | USB-C | GCT USB4105 | 供电 + 调试 |
| J2/J3 | 三位螺丝端子 | Phoenix MKDS 5.08mm | 现场/上行 RS485(A/B/GND) |
| J4 | SWD 排针 | 2×5 Pin 2.54mm | 调试/烧录接口 |
| J5 | UART1 排针 | 1×4 Pin 2.54mm | 独立串口引出 |
| J6 | BOOT0 排针 | 1×3 Pin 2.54mm | 启动模式选择 |
封装约束
| 类型 | 封装 | 说明 |
|---|---|---|
| 电阻、电容 | 0805(2012M) | 通用阻容,便于手工焊接 |
| 钽电容 | 3216(EIA 3216-18) | 10μF 输入/输出滤波 |
| LED | 0603(1608M) | 红/绿状态指示 |
| 晶振 | 3225 4Pin | 8MHz HSE |
电源设计
USB-C 的 VBUS(5V)分两路:
- AMS1117-3.3V:5V → 3.3V,供 MCU 和数字电路
- 直供 5V:给两路 MAX485E 供电,同时为 CH340C 的 VCC 供电
LDO 输入输出各配 10μF 钽电容 + 100nF 陶瓷电容,MCU 的每个 VDD/VDDA 引脚就近放置 100nF 去耦电容。
RS485 电路设计
两路 MAX485E 采用完全相同的电路拓扑:
MAX485E 引脚分配(以现场总线为例):
RO (1) ── 10KΩ 上拉到 5V ── 20KΩ 下拉到 GND ── STM32 RX
RE (2) ──┐
DE (3) ──┴── STM32 DE 控制引脚(方向切换)
DI (4) ── STM32 TX
GND (5) ── GND
A (6) ── 680Ω 上拉到 5V ── 120Ω 终端电阻(DNP)── 接线端子 A
B (7) ── 680Ω 下拉到 GND ── 同上 ── 接线端子 B
VCC (8) ── 5V
偏置电阻(680Ω)确保总线空闲时 A > B,避免接收器输出不确定状态。120Ω 终端电阻默认不焊接(DNP),现场需要时再补。
引脚分配
| 总线 | TX | RX | DE(方向控制) |
|---|---|---|---|
| 现场 RS485(USART2) | PA2 | PA3 | PD7 |
| 上行 RS485(USART3) | PB10 | PB11 | PA5 |
Python 脚本生成 PCB
整个 PCB 文件由 generate_mill_controller_board.py 通过 KiCad Python API 生成,而非手工绘制。脚本完成:
- 器件摆放:根据功能分区布局(MCU 居中,USB-C 右上,两路 485 左右分列,LDO 右侧)
- 网络分配:按固件引脚定义自动分配网络(
+3V3、+5V、GND、各信号线) - 电源走线:3V3 环绕 MCU 形成供电环,各去耦电容就近接入
- 信号走线:USB/CH340C、RS485 现场总线、RS485 上行链路、SWD/LED/BOOT0/NRST 辅助线路
- 铺铜:顶层和底层整板铺 GND,由 KiCad GUI 或 DRC 阶段填充
- 丝印标注:功能分区文字标注
重新生成:
cd D:\Project\Mill\KiCad
& "C:\Program Files\KiCad\10.0\bin\python.exe" .\generate_mill_controller_board.py
运行 DRC 检查:
& "C:\Program Files\KiCad\10.0\bin\kicad-cli.exe" pcb drc .\mill_controller.kicad_pcb
布局分区
┌──────────────────────────────────────────────┐
│ J2 现场RS485 U4 MAX485E U5 MAX485E J3 上行RS485 │
│ [A B GND] (SOIC-8) (SOIC-8) [A B GND] │
│ │
│ U1 STM32F103ZETx (LQFP-144) │
│ 居中 │
│ │
│ X1 8MHz J6 BOOT0 SW1 RESET U2 CH340C J1 USB-C │
│ 晶振 USB转串口 │
│ U3 AMS1117 LDO │
│ J4 SWD J5 UART1 D1 LED_R D2 LED_G │
└──────────────────────────────────────────────┘
当前状态
PCB 已完成器件摆放和网络分配,飞线可见,尚未完成手工布线和铺铜。板卡为 KiCad 10.0 格式,使用 Python API 生成,可随时从固件引脚定义重新生成网络和摆件。
后续工作:在 KiCad GUI 中完成差分对布线(USB DP/DM)、优化电源走线宽度、填充铜皮、运行 DRC 并修正违规。