设计思路

控制板围绕 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

核心器件

位号型号封装用途
U1STM32F103ZETxLQFP-144主控 MCU
U2CH340CSOP-16USB 转 UART 调试串口
U3AMS1117-3.3VSOT-2235V → 3.3V LDO 稳压
U4MAX485ESOIC-8现场 RS485 收发器
U5MAX485ESOIC-8上行 RS485 收发器
J1USB-CGCT USB4105供电 + 调试
J2/J3三位螺丝端子Phoenix MKDS 5.08mm现场/上行 RS485(A/B/GND)
J4SWD 排针2×5 Pin 2.54mm调试/烧录接口
J5UART1 排针1×4 Pin 2.54mm独立串口引出
J6BOOT0 排针1×3 Pin 2.54mm启动模式选择

封装约束

类型封装说明
电阻、电容0805(2012M)通用阻容,便于手工焊接
钽电容3216(EIA 3216-18)10μF 输入/输出滤波
LED0603(1608M)红/绿状态指示
晶振3225 4Pin8MHz HSE

电源设计

USB-C 的 VBUS(5V)分两路:

  1. AMS1117-3.3V:5V → 3.3V,供 MCU 和数字电路
  2. 直供 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),现场需要时再补。

引脚分配

总线TXRXDE(方向控制)
现场 RS485(USART2)PA2PA3PD7
上行 RS485(USART3)PB10PB11PA5

Python 脚本生成 PCB

整个 PCB 文件由 generate_mill_controller_board.py 通过 KiCad Python API 生成,而非手工绘制。脚本完成:

  1. 器件摆放:根据功能分区布局(MCU 居中,USB-C 右上,两路 485 左右分列,LDO 右侧)
  2. 网络分配:按固件引脚定义自动分配网络(+3V3+5VGND、各信号线)
  3. 电源走线:3V3 环绕 MCU 形成供电环,各去耦电容就近接入
  4. 信号走线:USB/CH340C、RS485 现场总线、RS485 上行链路、SWD/LED/BOOT0/NRST 辅助线路
  5. 铺铜:顶层和底层整板铺 GND,由 KiCad GUI 或 DRC 阶段填充
  6. 丝印标注:功能分区文字标注

重新生成:

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 并修正违规。