177 lines
10 KiB
Markdown
177 lines
10 KiB
Markdown
# SDC-ACQ&DAC 板卡工程设计思路
|
||
|
||
> 说明:本文整理的是可交付、可复核的工程设计思路和关键取舍,不记录逐步的内部思维链。依据当前目录中的网表、STM32F407VET6 引脚资料、引脚规划文档和 Altium 工程包整理。
|
||
|
||
## 交付文件
|
||
|
||
- [固件使用说明](固件使用说明.md):功能、串口/CAN 协议、编译、下载与现场排障。
|
||
- [CAN 数据库(DBC)](SDC_ACQ_DAC.dbc):CAN1/CAN2 使用的 11 位标准帧定义。
|
||
- [CAN 报文说明 PDF](output/pdf/CAN报文说明表.pdf):可直接对外发送的 CAN 协议简表。
|
||
- `A11_F407_SDC_ACQ_DAC_CubeMX/`:CubeMX 工程与应用源代码。
|
||
|
||
构建目录和 `.bin`、`.elf`、`.hex` 等编译产物不纳入版本库;请根据工程重新生成。
|
||
|
||
## 1. 设计目标
|
||
|
||
这块板子的目标是围绕 STM32F407VET6 做一块集成采集、通信和 DAC 输出的控制板。核心需求可以归纳为:
|
||
|
||
- 使用 STM32F407VET6 作为主控,封装为 LQFP100。
|
||
- 提供 15 路 SDC 电平输入采集,方便一次性读取一组外部状态信号。
|
||
- 当前固件提供 2 路轮速输入捕获:左前 `PA0`、右前 `PA6`,直接换算为 m/s。
|
||
- 提供 2 路 CAN 通信接口,面向车载或工业现场总线。
|
||
- 提供 2 路 DAC/模拟输出,网表中为 `MC_L`、`MC_R`。
|
||
- 提供 I2C 接口,并通过电平转换兼容 3.3 V MCU 侧和 5 V 外设侧。
|
||
- 提供 12 V 输入、5 V、3.3 V、模拟参考和必要的去耦滤波。
|
||
- 保留 SWD、复位、启动配置、串口调试、状态 LED 等调试和量产必需接口。
|
||
|
||
## 2. 总体架构
|
||
|
||
板卡按功能分为以下模块:
|
||
|
||
| 模块 | 主要器件/网络 | 设计意图 |
|
||
|---|---|---|
|
||
| 主控 | `U23` STM32F407VET6 | 统一处理 SDC 输入、转速捕获、CAN、I2C、DAC 控制和调试接口 |
|
||
| 电源 | `+12V`、`+5V`、`VCC`、`VCCA`、`VREF` | 由外部 12 V 进入,生成数字 5 V、MCU 3.3 V 和模拟参考 |
|
||
| SDC 输入 | `SDC_IN1`~`SDC_IN15`、`SDC1`~`SDC15` | 外部输入经电阻/三极管级进入 MCU,集中到 GPIOD |
|
||
| 转速输入 | `ZQ_OUT`、`ZH_OUT`、`YQ_OUT`、`YH_OUT` | 经限流/下拉后进入 TIM 输入捕获通道 |
|
||
| CAN | `CAN1_H/L`、`CAN2_H/L`、`CAN1_TX/RX`、`CAN2_TX/RX` | MCU 侧接 CAN 收发器,外部侧接总线并配置终端电阻 |
|
||
| DAC | `DAC1`、`DAC2`、`MC_L`、`MC_R` | 通过 I2C 控制两路 DAC 输出 |
|
||
| I2C 电平转换 | `I2C_SCL_33`、`I2C_SDA_33`、`SCL_5`、`SDA_5`、`U22` | MCU 侧 3.3 V,DAC/外设侧 5 V |
|
||
| 调试 | `SWDIO`、`SWCLK`、`NRST`、`USART1_TX/RX`、`STLED_1/2` | 下载、在线调试、日志输出和运行状态显示 |
|
||
|
||
## 3. MCU 引脚分配原则
|
||
|
||
引脚分配优先级不是单纯按外设功能堆叠,而是同时考虑 PCB 布线、调试保留、外设冲突和软件读取效率:
|
||
|
||
1. 必需接口先保留:`PA13/SWDIO`、`PA14/SWCLK`、`NRST`、`BOOT0`、`PB2/BOOT1`、HSE、`VCAP_1/2`、电源和模拟电源脚不参与普通功能分配。
|
||
2. 同类信号尽量靠近:CAN1/CAN2 放在 `PB5/PB6/PB8/PB9` 附近,便于两个 CAN 收发器并排布置。
|
||
3. 大量状态输入尽量集中到同一端口:15 路 SDC 输入集中使用 `PD0`~`PD14`,软件可以直接读取 `GPIOD->IDR` 后按位解析。
|
||
4. 当前轮速固件仅启用 `PA0/TIM5_CH1`(左前)和 `PA6/TIM3_CH1`(右前);原理图上的 `PA2/TIM9_CH1`、`PB14/TIM12_CH1` 可保留作后续扩展,但不参与当前采集和 CAN 上报。
|
||
5. I2C 使用相邻且 5 V 容忍的 `PB10/PB11`,便于布线并适配外部上拉和电平转换。
|
||
6. `PB0/PB1` 保留给 ADC 相关功能,其中 `PB0/ADC1_IN8` 用于 24 V 分压检测,`PB1/ADC1_IN9` 可作备用模拟量。
|
||
7. 调试 LED 放在 `PE0/PE1`,释放 `PB0/PB1` 给模拟输入。
|
||
|
||
## 4. 关键功能设计思路
|
||
|
||
### 4.1 SDC 输入采集
|
||
|
||
15 路输入从连接器进入后,经过电阻网络和三极管级再接入 MCU 的 `PD0`~`PD14`。这样设计的好处是:
|
||
|
||
- 外部输入和 MCU 管脚之间有基本限流与隔离。
|
||
- 所有 SDC 信号集中在 GPIOD,软件读取简单,适合周期扫描。
|
||
- `PD15` 可作为第 16 路备用,后续扩展时不需要大改软件结构。
|
||
|
||
设计时需要特别确认外部 SDC 输入电平、有效极性、三极管反相关系以及默认上下拉状态,避免上电阶段误判。
|
||
|
||
### 4.2 双路轮速采集
|
||
|
||
当前固件只使用以下两路定时器输入捕获:
|
||
|
||
| 外部信号 | MCU 网络 | MCU 引脚 |
|
||
|---|---|---|
|
||
| `ZQ_OUT` | `TIM5_CH1` | `PA0` |
|
||
| `YQ_OUT` | `TIM3_CH1` | `PA6` |
|
||
|
||
固件由相邻上升沿的时间差得到方波频率,再按每圈 49 个方波、轮周长 1414 mm 换算:`轮速(m/s) = 频率(Hz) × 1.414 / 49`。超过 1 秒没有边沿时轮速归零。`PA2/TIM9_CH1` 和 `PB14/TIM12_CH1` 当前未启用。
|
||
|
||
### 4.3 双 CAN 接口
|
||
|
||
CAN1 使用 `PB8/PB9`,CAN2 使用 `PB5/PB6`。MCU 只连接收发器逻辑侧,外部接口为 `CAN1_H/L` 和 `CAN2_H/L`。
|
||
|
||
关键取舍:
|
||
|
||
- 选择 `PB5/PB6/PB8/PB9` 是为了让两路 CAN 的 MCU 侧信号集中,收发器靠近 MCU 和连接器都更容易。
|
||
- 网表中 `R20`、`R21` 为 120 欧终端相关器件,需要根据总线拓扑决定是否常接、跳线选择或预留不焊。
|
||
- CANH/CANL 外侧应关注 ESD、共模干扰和走线差分/等长要求。
|
||
|
||
### 4.4 I2C 与 DAC 输出
|
||
|
||
MCU 侧 I2C 为 `PB10/PB11`,网络名为 `I2C_SCL_33`、`I2C_SDA_33`;5 V 侧为 `SCL_5`、`SDA_5`,经 `U22` 做电平转换后连接 DAC。
|
||
|
||
这样安排的目的:
|
||
|
||
- MCU 维持 3.3 V 逻辑,避免 5 V 直接进入非预期模式下的 MCU 引脚。
|
||
- DAC 和外设侧可以使用 5 V 供电或 5 V 上拉。
|
||
- 上拉电阻分布清楚,方便按总线速度和负载电容调整。
|
||
|
||
两路 DAC 输出网络为 `MC_L` 和 `MC_R`,需要在调试时确认 DAC 地址、I2C 上拉、电源纹波和输出负载范围。
|
||
|
||
### 4.5 电源与模拟参考
|
||
|
||
网表显示板上存在 `+12V`、`+5V`、`VCC`、`VCCA`、`VREF`、`AGND` 和 `GND` 等网络。设计意图是把输入电源、数字电源和模拟参考分层处理:
|
||
|
||
- `+12V` 作为外部输入或上级电源。
|
||
- `+5V` 给 CAN 收发器、DAC 或其他 5 V 侧器件供电。
|
||
- `VCC` 作为 MCU 数字 3.3 V 供电。
|
||
- `VCCA`、`VREF` 和 `AGND` 用于 ADC/DAC 相关模拟部分,需减少数字噪声耦合。
|
||
- `VCAP_1/2` 必须接低 ESR 电容到地,不可悬空或作外部电源使用。
|
||
|
||
### 4.6 24 V 电压检测
|
||
|
||
`PB0/ADC1_IN8` 对应网表中的 `ADC` 网络,通过分压电阻把最高输入压到 MCU ADC 安全范围内。当前固件按上臂 `100 kΩ`、下臂 `30 kΩ` 换算输入电压,并在采样点加小电容滤波。实物分压电阻值仍应以原理图/BOM 和测量结果复核;若硬件不同,必须同步更新固件标定参数。
|
||
|
||
这部分的关键不是只算分压比,还要确认:
|
||
|
||
- 最高输入电压、瞬态浪涌和误接风险。
|
||
- ADC 采样时间是否能适配较高源阻抗。
|
||
- 分压电阻精度、温漂对测量误差的影响。
|
||
- 是否需要 TVS、串联电阻或钳位保护。
|
||
|
||
### 4.7 调试与量产接口
|
||
|
||
板上保留了 SWD、串口、复位、启动配置和状态 LED:
|
||
|
||
- `SWDIO`、`SWCLK`、`NRST` 用于下载和在线调试。
|
||
- `USART1_TX/RX` 可接 USB-TTL 作为日志口。
|
||
- `BOOT0` 和 `BOOT1` 必须有确定上下拉,避免随机进入系统 Bootloader。
|
||
- `STLED_1`、`STLED_2` 作为最小运行状态反馈,适合上电自检和故障定位。
|
||
|
||
## 5. PCB 布局布线重点
|
||
|
||
1. MCU 放在板卡控制中心,SDC 输入、CAN、DAC/I2C、调试接口按功能分区引出。
|
||
2. CAN 收发器靠近外部连接器,CANH/CANL 走线短、成对、少过孔,并在接口附近布置保护器件。
|
||
3. HSE 晶振靠近 `PH0/PH1`,晶振回路短且远离高噪声开关电源和 CAN 总线。
|
||
4. MCU 每个 VDD/VDDA 就近放 100 nF 去耦,电源入口和稳压输出放足够的储能电容。
|
||
5. 模拟参考、ADC 分压和 DAC 输出尽量远离开关节点与高速边沿信号。
|
||
6. I2C 上拉、电平转换器和 DAC 尽量靠近,SCL/SDA 避免长距离并行干扰源。
|
||
7. SDC 输入通道重复结构保持一致,便于生产检查、维修和软件映射。
|
||
|
||
## 6. 软件配置映射
|
||
|
||
| 功能 | CubeMX/固件配置 |
|
||
|---|---|
|
||
| SDC 输入 | `PD0`~`PD14` 配置为 GPIO 输入,按实际硬件极性设置上下拉 |
|
||
| 左前轮速 | `PA0` 配置为 `TIM5_CH1` 输入捕获 |
|
||
| 右前轮速 | `PA6` 配置为 `TIM3_CH1` 输入捕获 |
|
||
| 预留脉冲输入 | `PA2/TIM9_CH1`、`PB14/TIM12_CH1` 当前不启用 |
|
||
| CAN1 | `PB8/PB9` 配置为 `CAN1_RX/TX` |
|
||
| CAN2 | `PB5/PB6` 配置为 `CAN2_RX/TX`,固件中同时注意 CAN1 时钟依赖 |
|
||
| I2C | `PB10/PB11` 配置为 `I2C2_SCL/SDA`,开漏,外部上拉 |
|
||
| ADC | `PB0` 配置为 `ADC1_IN8`,按分压比换算真实电压 |
|
||
| 串口 | `PA9/PA10` 配置为 `USART1_TX/RX` |
|
||
| LED | `PE0/PE1` 配置为 GPIO 输出 |
|
||
|
||
## 7. 当前 CAN 上报摘要
|
||
|
||
CAN1、CAN2 都使用 500 kbit/s、11 位标准帧,并发送相同的主动上报数据。
|
||
|
||
| ID | 内容 | 周期 / 编码 |
|
||
|---:|---|---|
|
||
| `0x6A2` | 双路轮速 | 每 20 ms;Byte0–1 左前 PA0、Byte2–3 右前 PA6;`uint16` 小端,原始单位 mm/s,物理量纲 `0.001 m/s` |
|
||
| `0x6A6` | 15 路状态 | 每 1 s;`PD0`~`PD14` 对应 bit0~bit14,随后是本秒内累积的变化掩码和 `uint32 ms` 时间戳 |
|
||
|
||
完整帧定义以 [DBC](SDC_ACQ_DAC.dbc) 为准。
|
||
|
||
## 8. 原理图复核清单
|
||
|
||
- STM32 所有 `VDD/VSS/VDDA/VSSA/VREF+/VCAP` 是否按数据手册完整连接。
|
||
- `BOOT0`、`BOOT1`、`NRST` 是否有明确默认状态。
|
||
- SWD 下载口是否包含 `SWDIO`、`SWCLK`、`GND`、`VCC`,必要时包含 `NRST`。
|
||
- HSE 晶振负载电容和器件封装是否匹配。
|
||
- CAN 收发器供电、TX/RX 方向、终端电阻和接口定义是否正确。
|
||
- I2C 电平转换方向、上拉电阻、电源域连接是否正确。
|
||
- DAC 地址冲突、输出范围、负载能力和滤波是否满足需求。
|
||
- 24 V 分压到 ADC 的最高电压是否低于 `VREF+`,并留足异常保护。
|
||
- 15 路 SDC 输入的硬件反相、上下拉和软件逻辑是否一致。
|
||
- 连接器针序是否和外部线束定义一致,特别是 CAN、12 V、电源地和 DAC 输出。
|