1. 项目背景与核心价值
微机继电保护装置是电力系统二次设备的核心组件,负责在10kV配电网中实现故障检测、隔离和保护功能。这套开源项目包含完整的源代码、PCB设计文件和物料清单(BOM),为电力自动化领域的学习者提供了难得的实践素材。我在电力保护装置研发行业工作12年,见过太多新人因缺乏真实项目练手而成长缓慢——这套资料的价值,相当于把专业厂家的开发台搬到了你的书桌上。
传统继电保护教学往往停留在理论层面,而实际开发中需要处理硬件驱动、算法实现、电磁兼容等复杂问题。这个项目特别适合电气工程专业学生、继电保护调试人员以及想转行电力自动化的开发者。通过研究工业级代码和PCB设计,你能掌握三大核心能力:保护算法(如过流、速断、重合闸)的嵌入式实现、符合电力标准的硬件设计规范、以及厂站联调的实战经验。
重要提示:虽然这是学习素材,但10kV属于高压配电系统,严禁直接用于实际电网!所有实验必须通过继电保护测试仪在实验室环境下进行。
2. 硬件架构深度解析
2.1 PCB设计关键点
主控采用STM32F407VGT6,这是电力保护装置的经典选择——168MHz主频满足4ms保护动作时限要求,内置FPU加速傅里叶运算。原理图中几个设计亮点值得注意:
- 模拟量输入通道的RC滤波电路(R12-C34组合)时间常数设为20ms,正好滤除高频噪声又不影响工频信号
- 开入量(开关位置信号)采用TLP281-4光耦隔离,驱动电阻取值2.2kΩ是经验值:既能保证可靠导通,又不会因电流过大缩短光耦寿命
- 电源模块的TVS管布局在保险丝之后,这种"先保护后滤波"的顺序是防雷击设计的黄金法则
四层板堆叠结构为:
- Top层:关键信号线(如CT/PT采样)
- 内层1:完整地平面
- 内层2:电源网络
- Bottom层:普通信号线
这种设计使采样回路拥有最短的返回路径,实测可将共模干扰降低60%以上。
2.2 BOM选型门道
电流互感器(CT)选用5A/2.5mA规格,这不是随意选的:
- 二次侧2.5mA满量程对应一次侧10kV线路的630A短路电流(CT变比计算:630A/(2.5mA/5A)=1250)
- 电阻R15取200Ω将电流信号转为电压信号,满足STM32的0-3.3V输入范围(2.5mA×200Ω=0.5V,预留6倍过载余量)
继电器输出模块用了欧姆龙G5V-2,而不是更便宜的国产型号。我在某次现场事故后发现:当环境温度超过65℃时,杂牌继电器的触点粘连概率会飙升到1/1000,而G5V-2在85℃下仍能保证10万次动作无故障。
3. 软件实现核心技术
3.1 保护算法精要
过流保护的核心代码在ProtectionLogic.c中,这段看似简单的比较背后藏着多个工程细节:
c复制void OverCurrentProtection(void) {
float I_rms = CalculateRMS(current_samples); // 采用全周傅里叶算法
if (I_rms > Iset) {
if (++trip_counter >= 3) { // 防抖动机制
TripCircuit();
StartRecloseTimer(); // 自动重合闸功能
}
} else {
trip_counter = 0;
}
}
这里有几个关键点:
- 采用全周傅里叶而非半周算法——虽然计算量翻倍,但能有效抑制非周期分量导致的暂态误差
- Iset值通过EEPROM存储,支持面板修改时自动校验(范围限制在0.2-1.5倍额定电流)
- 三次判断才出口跳闸,这个"三取二"逻辑能躲过99%的瞬时干扰
3.2 通信协议实现
MODBUS-RTU协议的实现堪称教科书级案例。在mb_slave.c中,作者用状态机处理帧间隔(3.5字符时间)的方式很巧妙:
c复制enum {IDLE, RECEIVING, WAIT_END} state;
void UART_IRQHandler() {
static uint32_t last_char_time;
uint32_t gap = GetTick() - last_char_time;
if(gap > 1750) state = IDLE; // 3.5字符时间@9600bps
if(state == IDLE && address_match) {
state = RECEIVING;
buffer_pos = 0;
}
// ...数据接收处理
}
这种实现比简单定时器更可靠,我在某水电站项目实测发现:在强电磁干扰环境下,定时器可能因时钟漂移导致帧错误,而基于实际字符间隔的判断误差不超过±0.2%。
4. 学习路线与实验方案
4.1 分阶段学习建议
第一阶段(1-2周):
- 用Keil MDK编译源码,通过ST-Link下载到开发板
- 使用继电保护测试仪(推荐昂立AT-6)注入50Hz电流信号
- 观察LCD界面显示的测量值,与测试仪输出比对误差
第二阶段(3-4周):
- 修改ProtectionLogic.c中的Iset值
- 重新编译后测试保护动作值
- 用示波器捕捉Trip继电器输出触点波形
第三阶段(5-6周):
- 在Altium Designer中修改PCB布局
- 重点优化CT采样回路走线
- 制板后测试抗干扰能力(可用电吹风模拟温升)
4.2 典型问题排查表
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 采样值跳变 | 1. 电压基准不稳 2. 模拟地线走线过长 |
1. 测量REF3030输出 2. 割断地线改飞线 |
| MODBUS通信超时 | 1. 波特率偏差>3% 2. 终端电阻未接 |
1. 用示波器测位宽 2. 在末端加120Ω电阻 |
| 继电器误动 | 1. 光耦驱动不足 2. 软件防抖失效 |
1. 测TLP281输出端电压 2. 检查trip_counter逻辑 |
5. 工程经验与进阶方向
5.1 现场调试技巧
当保护装置在实验室正常但现场误动时,按这个顺序排查:
- 先查接地:用万用表测量装置外壳与地网电阻,应<0.5Ω
- 再查屏蔽:所有电缆屏蔽层必须单端接地(控制室端)
- 最后查电源:在断路器操作时录波,看直流电源是否被拉低
某次变电站改造项目中,我们发现装置在雨天频繁误报接地故障。最终发现是柜顶照明灯的浪涌通过寄生电容耦合到了CT回路——这个案例教会我:永远要在CT二次侧并联压敏电阻。
5.2 扩展开发建议
想进一步提升的话,可以尝试:
- 增加GOOSE通信功能(需要移植以太网协议栈)
- 实现故障录波(扩展SD卡存储,注意写速度要>1MB/s)
- 添加温度补偿(在采样算法中引入PT100测量值)
我在自己实验室版本中做过一个有趣改造:把过流曲线特性改成IEEE标准反时限公式,需要解决浮点运算在STM32上的效率问题——最终采用Q16定点数格式,速度提升了4倍。