Files
SDC_ACQ_DAC/readme.md
T

169 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SDC-ACQ&DAC 板卡工程设计思路
> 说明:本文整理的是可交付、可复核的工程设计思路和关键取舍,不记录逐步的内部思维链。依据当前目录中的网表、STM32F407VET6 引脚资料、引脚规划文档和 Altium 工程包整理。
## 交付文件
- [固件使用说明](固件使用说明.md):功能、串口/CAN 协议、编译、下载与现场排障。
- [CAN 数据库(DBC)](SDC_ACQ_DAC.dbc):CAN1/CAN2 使用的 11 位标准帧定义。
- [固件交付说明 PDF](SDC-ACQ_DAC_固件交付说明.pdf):可直接对外发送的简要说明。
- `A11_F407_SDC_ACQ_DAC_CubeMX/`:CubeMX 工程与应用源代码。
构建目录和 `.bin`、`.elf`、`.hex` 等编译产物不纳入版本库;请根据工程重新生成。
## 1. 设计目标
这块板子的目标是围绕 STM32F407VET6 做一块集成采集、通信和 DAC 输出的控制板。核心需求可以归纳为:
- 使用 STM32F407VET6 作为主控,封装为 LQFP100。
- 提供 15 路 SDC 电平输入采集,方便一次性读取一组外部状态信号。
- 提供 4 路转速或脉冲输入捕获,用 MCU 定时器测频、测周期或读取 PWM。
- 提供 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`、`PA2/TIM9_CH1`、`PA6/TIM3_CH1`、`PB14/TIM12_CH1` 分别承担 4 路输入。
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` |
| `ZH_OUT` | `TIM9_CH1` | `PA2` |
| `YQ_OUT` | `TIM3_CH1` | `PA6` |
| `YH_OUT` | `TIM12_CH1` | `PB14` |
这些脚都可配置为定时器输入捕获。若只测频率,可以在捕获中断或 DMA 中记录相邻边沿时间差;若要测 PWM 高低电平宽度,应结合定时器通道和输入极性配置进一步确认。
### 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 输入,按实际硬件极性设置上下拉 |
| 转速 1 | `PA0` 配置为 `TIM5_CH1` 输入捕获 |
| 转速 2 | `PA2` 配置为 `TIM9_CH1` 输入捕获 |
| 转速 3 | `PA6` 配置为 `TIM3_CH1` 输入捕获 |
| 转速 4 | `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. 原理图复核清单
- 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 输出。