8.5 KiB
8.5 KiB
总结架构设计
1. 时钟功能设计
需求分析
FUN-004-03: 正常供电守时: 无外部授时信号时,依靠内部高精度时钟源(如温补晶振 TCXO)实现守时,24h 守时误差≤1s。FUN-004-03:电源中断守时: 主电源失电切换至后备电源(蓄电池 / 超级电容)期间,守时功能不中断;后备电源耗尽后,时钟芯片应保留时间信息至少 72h(可选:配置纽扣电池实现永久时钟保持)。
时钟模块选择 SD2506API-G
详见:硬件设计/元器件/时钟芯片_SD2506API-G.md
2. 网络功能设计
经过比较功能的稳定性与设计的便利性,准备采用硬件 TCP/IP 协议栈的方案:

- STM32F407ZET6 22.5
- CH395F 8.5
- RTL8305NBI-CG 7
- 带网络变压器的 RJ45 网口 HY911105AE 淘宝 8.5
3. 存储功能设计
根据 3.6 存储功能(FUN-006),计划选取 GD5F2GQ5UE SPI NAND Flash 芯片作为DTU项目的存储芯片。计算首先使用简单的 标准 SPI通信方式与主控芯片连接。
| 需求指标 | DTU 要求 | GD5F2GQ5UE 参数 | 满足度 |
|---|---|---|---|
| 接口类型 | SPI/QSPI | 支持标准 SPI、双 SPI、四路 SPI | ✅ 完全满足 |
| 最高时钟频率 | ≥50MHz | 104MHz | ✅ 超额满足 |
| 数据传输速率 | ≥100Mbits/s | Quad I/O 模式下 416Mbits/s | ✅ 超额满足 |
| 页写入时间 | ≤500μs | 典型 300μs | ✅ 完全满足 |
| 块擦除时间 | ≤5ms | 典型 3ms | ✅ 完全满足 |
| 存储空间 | ≥256MB(标准款) | 2Gb | ✅ 完全满足 |
| 擦写寿命 | ≥10 万次 | 10 万次 (SLC 架构) | ✅ 完全满足 |
| 工作温度范围 | 户外:-40℃~+70℃ | 工业级:-40℃~+85℃ | ✅ 完全满足 |
4. 模拟量采样设计
为了满足FUN-001-01:交流工频模拟量采集
需求分析
FUN-001-01:交流工频模拟量采集采样频率适配工频 50Hz,工频采样范围 45Hz~55Hz,频率测量误差≤0.02HzFUN-001-01:交流工频模拟量采集测量精度:1.2 倍标称值范围内,电压/电流引用误差≤0.5%,有功 / 无功功率、功率因数引用误差≤1%- 支持谐波分析、功率方向判断
- 满足分合闸回路录波、绝缘异常录波等扩展功能
- 准确还原短路、接地、断线等故障的暂态波形细节
- 故障录波、故障处理、事件顺序记录 (SOE) 分辨率≤2ms
电力系统标准工频$f₀=50\text{Hz}$,采样率与每周期采样点数的关系为:
N(每周期点数)= 采样率(SPS) ÷ 工频(Hz)
建议采样率为:6400SPS = 128点/周波,这是兼顾精度、算力和成本的最优平衡点。
1. 频率误差需求
测量相邻两个基波过零点的时间间隔T,频率f=1/T。误差来源于ADC离散采样的量化误差——真实过零点必然落在两个采样点之间,最大时间误差为半个采样周期。
- 采样周期:
T_s = \frac{1}{f_s} = \frac{1}{6400} \approx 156.25\ \mu s - 半周期(相邻过零点间隔):
T_{1/2} = \frac{1}{2f_0} = 10\ ms - 半周期最大量化误差:
\Delta T_{max} = \frac{T_s}{2} \approx 78.125\ \mu s - 频率绝对误差:
\Delta f = f_0 \times \frac{\Delta T_{max}}{T_{1/2}} = 50 \times \frac{78.125\ \mu s}{10\ ms} \approx 0.0039\ Hz不同采样率的过零检测误差对比:
| 采样率 (SPS) | 每周期点数 | 采样周期 (μs) | 最大频率误差 (Hz) | 是否满足≤0.02Hz |
|---|---|---|---|---|
| 6400 | 128 | 156.25 | 0.0039 | ✅ 余量充足 |
| 3200 | 64 | 312.5 | 0.0078 | ✅ 余量一般 |
| 1600 | 32 | 625 | 0.0156 | ✅ 余量极小 |
| 800 | 16 | 1250 | 0.0312 | ❌ 不满足 |
| 实际工况的误差叠加 |
- 电网谐波(3/5/7 次谐波占比可达 10%)
- 电磁干扰(电快速瞬变、浪涌等)
- ADC 非线性、温漂、噪声
- 频率波动(45Hz
55Hz) 这些因素会使实际误差放大**35 倍**:
- 1600SPS实际误差≈0.0156×4≈0.0624Hz,超过0.02Hz要求
- 6400SPS实际误差≈0.0039×4≈0.0156Hz,仍满足要求
2. 测量精度误差需求
功率因数引用误差≤1%分析:
相位检测精度直接决定功率测量精度和功率方向判断正确性。
相位误差与功率误差的关系:P = UI\cos\phi
对相位求导得相对误差:
\left| \frac{\Delta P}{P} \right| = |\tan\phi| \times \Delta\phi \quad (\Delta\phi单位:弧度)
最恶劣工况:功率因数 $\cos\phi=0.5$(感性/容性负载),此时$\tan\phi=\sqrt{3}\approx1.732$。代入得允许的最大相位误差1%:
\Delta\phi_{max} \leq \frac{0.01}{1.732} \approx 0.00577\ 弧度 \approx 0.331^\circ
终端采用同步采样 + 基波 DFT计算相位,量化噪声导致的基波相位误差标准差为:
\sigma_\phi = \frac{1}{\sqrt{12} \times N} \quad (弧度)
其中N为每周期采样点数,量化噪声均匀分布,方差为 q^2/12
| 采样率 (SPS) | 每周期点数 N | 相位误差标准差 (弧度) | 相位误差标准差 (度) | 是否满足≤0.331° |
|---|---|---|---|---|
| 6400 | 128 | 0.00226 | 0.129 | ✅ 余量充足 |
| 3200 | 64 | 0.00451 | 0.258 | ✅ 余量不足 |
| 1600 | 32 | 0.00902 | 0.517 | ❌ 不满足 |
电压/电流引用误差 ≤0.5% 分析 每周波 N 点同步采样,理想条件下:
- 电压 / 电流 RMS 误差 ∝ 1/N²
- 功率误差 ∝ 1/N 6400 SPS = 128 点 / 周波,误差远远的小于0.5%。
芯片选型
主控芯片连接方案设计 STM32F407ZGT6
ADC 引脚使用
| ADC 通道号 | ADC1 | ADC2 | ADC3 | 对应 IO 口 | 连接节点 |
|---|---|---|---|---|---|
| 0 | ✅ | ✅ | ✅ | PA0 | ADIN1 |
| 1 | ✅ | ✅ | ✅ | PA1 | ADIN2 |
| 2 | ✅ | ✅ | ✅ | PA2 | ADIN3 |
| 3 | ✅ | ✅ | ✅ | PA3 | ADIN4 |
| 4 | ✅ | ✅ | ❌ | PA4 | ADIN5 |
| 5 | ✅ | ✅ | ❌ | PA5 | ADIN6 |
| 6 | ✅ | ✅ | ❌ | PA6 | ADIN7 |
| 7 | ✅ | ✅ | ❌ | PA7 | ADIN8 |
| 8 | ✅ | ✅ | ❌ | PB0 | |
| 9 | ✅ | ✅ | ❌ | PB1 |
UART 引脚使用
| UART编号 | STM32 UART | TX | RX |
|---|---|---|---|
| ST_UART0 | USART1 | PA9 | PA10 |
| ST_UART1 | USART2 | PD5 | PD6 |
| ST_UART2 | USART3 | PB10 | PB11 |
| ST_UART3 | USART4 | PC10 | PC11 |
| ST_UART4 | USART5 | PC12 | PD2 |
SPI 引脚使用
| UART编号 | STM32 UART | SCK | MISO | MOSI |
|---|---|---|---|---|
| GD | SPI1 | PB3 | PB4 | PB5 |
| CH395F | SPI2 | PB13 | PB14 | PB15 |
IIC 引脚使用
| IIC 编号 | STM32 I2C | SCK | MISO | MOSI |
|---|---|---|---|---|
| SD | SPI1 | PB3 | PB4 | PB5 |
启动模式设置(Flash 启动)
BOOT0 和 (PB2/BOOT1) 用于设置 STM32 的启动方式,本项目选用Flash 启动 J-Link 下载程序,因此 BOOT0 直接接地就好了。
| 138 BOOT0 | 48 BOOT1 | 启动模式 | 说明 |
|---|---|---|---|
| 0 | X | Flash 启动 | 程序正常从 flash 运行 |
| 1 | 0 | 系统存储器 | 用于串口下载代码 |
| 1 | 1 | SRAM 启动 | 用于在SRAM中调试代码 |
