1. 项目概述:10kV线路微机继电保护装置开发套件
这套开发素材是我在电力系统保护装置研发过程中积累的实战资源包,包含完整的PDR-300A型10kV线路微机继电保护装置源代码、PCB设计图纸和BOM清单。作为在电力自动化领域工作多年的工程师,我深知继电保护开发的门槛——从零开始构建一个稳定可靠的保护装置,往往需要耗费数月时间进行基础框架搭建。这个资源包正是为了帮助开发者快速跨越这个阶段,直接进入核心保护算法的研发。
整套资料基于Cortex-M系列微控制器开发,采用工业级标准的CMSIS-DSP库进行信号处理。源代码包含369个文件,其中最关键的是Drivers/CMSIS/Include目录下的核心算法实现。配套的4层PCB设计经过实际现场验证,支持10kV线路标准的模拟量输入(100V/5A)和开关量I/O,预留了RS485和以太网通信接口。BOM清单详细标注了每个元器件的型号、参数和供应商信息,特别是保护电路用的TVS管和光耦选型,这些都是容易踩坑的关键部件。
2. 核心功能模块解析
2.1 硬件架构设计要点
开发板的PCB采用4层板设计(信号层-地平面-电源层-信号层),这个结构在EMC测试中表现优异。主控采用STM32F407IGT6,其Cortex-M4内核带FPU和DSP指令集,能高效运行保护算法。几个关键设计细节值得注意:
-
模拟量采集通道:前端采用ADI的AD7606BSTZ 16位同步采样ADC,配合TLV3501比较器实现过零检测。输入级有专门的抗混叠滤波器,截止频率设置为500Hz(采样率4kHz时),这个参数需要与软件中的数字滤波器配合调整。
-
开关量隔离电路:输出继电器驱动使用TLP291-4光耦+ULN2803达林顿阵列的组合,实测驱动能力达500mA,足够驱动常规中间继电器。输入通道则采用HCPL-0601高速光耦,响应时间控制在100μs以内。
-
电源设计:采用双DC/DC隔离方案(输入24VDC→隔离5V→非隔离3.3V),实测在±10%电压波动下能稳定工作。TVS管选型特别重要,交流输入侧用了SMBJ15CA,直流侧用SMBJ5.0CA,这个配置在雷击测试中成功通过了4kV组合波冲击。
2.2 软件架构实现
2.2.1 实时任务调度
系统采用时间片轮询+中断优先级的混合调度策略,关键任务划分如下:
c复制// 任务优先级定义(数值越小优先级越高)
#define TASK_PRIO_PROTECT 1 // 保护计算任务
#define TASK_PRIO_COMM 3 // 通信任务
#define TASK_PRIO_MEASURE 5 // 测量计算任务
#define TASK_PRIO_DIAG 7 // 自诊断任务
// 关键中断服务例程
void ADC_IRQHandler() { /* 采样中断 4kHz */ }
void EXTI15_10_IRQHandler() { /* 开关量变位中断 */ }
保护计算任务每250μs执行一次,确保故障判断的实时性。这里有个实用技巧:使用DMA双缓冲模式接收ADC数据,可以避免采样中断的抖动影响。
2.2.2 信号处理流水线
典型的信号处理流程包含以下阶段:
- 数据预处理:调用
arm_q15_to_float()将ADC原始数据转为浮点 - 数字滤波:使用5阶IIR滤波器消除高频噪声
c复制arm_biquad_cascade_df2T_instance_f32 iirFilter; float32_t iirCoeffs[5*6] = { /* 预计算的系数 */ }; arm_biquad_cascade_df2T_init_f32(&iirFilter, 5, iirCoeffs); arm_biquad_cascade_df2T_f32(&iirFilter, inputBuf, outputBuf, SAMPLES_PER_CYCLE); - 特征提取:通过FFT计算各次谐波含量
c复制arm_cfft_instance_f32 cfft; arm_cfft_init_f32(&cfft, FFT_SIZE); arm_cfft_f32(&cfft, fftInput, 0, 1); arm_cmplx_mag_f32(fftInput, fftOutput, FFT_SIZE/2);
实测表明,这套处理链在STM32F407上完整执行一次仅需82μs(包括64点FFT),完全满足4kHz采样率的实时性要求。
3. 保护算法实现细节
3.1 过流保护实现
过流保护是继电保护的基础功能,但实现上有很多细节需要注意:
c复制// 三段式过流保护逻辑
void OverCurrentProtect(float32_t *currents) {
static uint32_t timer[3] = {0}; // 各段延时计时器
// 瞬时速断(I段)
if(arm_max_f32(currents, 3) > Isd) {
TripCommand(); // 立即跳闸
return;
}
// 限时速断(II段)
if(arm_max_f32(currents, 3) > Ixd) {
if(++timer[1] >= Txd) TripCommand();
} else {
timer[1] = 0;
}
// 过流(III段)
if(arm_mean_f32(currents, 3) > Igl) {
if(++timer[2] >= Tgl) TripCommand();
} else {
timer[2] = 0;
}
}
关键参数设置经验:
- 瞬时速断Isd一般设为额定电流的8-10倍
- 延时速断Ixd取4-6倍,延时Txd通常设为0.3-0.5s
- 过流Igl取1.2-1.5倍,延时Tgl设为1-2s
3.2 小电流接地选线算法
针对10kV配电网络常见的小电流接地故障,我们实现了基于零序电流比较的选线算法:
c复制void GroundFaultDetect(float32_t *i0) {
float32_t maxVal, minVal;
uint32_t maxIdx, minIdx;
arm_max_f32(i0, LINE_NUM, &maxVal, &maxIdx);
arm_min_f32(i0, LINE_NUM, &minVal, &minIdx);
// 故障判据:最大零序电流 > 3倍最小零序电流
if((maxVal > 0.1) && (maxVal/minVal > 3.0)) {
FaultIndicator(maxIdx); // 指示故障线路
}
}
这个算法虽然简单,但在实际应用中配合5次谐波检测(通过FFT实现),准确率能达到85%以上。更复杂的方案可以考虑暂态能量法,但会显著增加计算量。
4. 开发与调试经验
4.1 硬件调试要点
-
ADC采样校准:一定要做增益和偏移校准!我们开发时曾遇到1%的测量误差,最后发现是ADC参考电压偏差导致的。现在代码中内置了自动校准功能:
c复制void ADCCalibrate() { // 输入短路测偏移 ADCSample(0V_INPUT, &offset, 100); // 输入标准源测增益 ADCSample(2V_REF, &raw, 100); gain = 2.0 / (raw - offset); } -
继电器抖动问题:早期版本在开关操作时会引起电源波动,解决方案是:
- 在继电器线圈两端并联FR107快恢复二极管
- 电源滤波电容增加到470μF
- 软件上实现分时操作(不同继电器间隔10ms动作)
4.2 软件优化技巧
-
FFT运算加速:通过预初始化旋转因子表,可以节省20%的计算时间:
c复制// 提前初始化FFT实例 arm_cfft_instance_f32 cfft; arm_cfft_init_f32(&cfft, FFT_SIZE); // 实际处理中直接使用 arm_cfft_f32(&cfft, buffer, 0, 1); -
内存优化:CMSIS-DSP库默认使用堆内存,在资源紧张时可以改为静态分配:
c复制#define FFT_SIZE 64 ALIGN4 static float32_t fftBuffer[FFT_SIZE*2]; // 实部+虚部
5. 工程应用建议
这套装置在实际投运前需要完成以下验证:
- 动模测试:使用继电保护测试仪模拟各种故障类型(AB相短路、单相接地等)
- 温度试验:在-25℃~+70℃环境下验证采样精度
- EMC测试:至少要通过IEC 60255-26标准的III级干扰试验
我们在某光伏电站的10kV并网线路中部署了这套装置,关键运行数据:
- 故障判断平均时间:12.8ms
- 过流保护动作正确率:100%
- 平均无故障运行时间:>8000小时
对于想基于此项目做二次开发的同行,我建议先关注保护逻辑的定制化修改,比如添加方向保护、阻抗保护等高级功能。硬件方面,现有设计已经考虑了大多数10kV应用场景,除非有特殊需求(如极寒环境),一般不需要大幅修改。