电赛的C题“线路负载及故障检测装置”,在备赛群里被大家戏称为“电工题”和“原理题”的结合体。这道题表面看是检测,本质其实是测量精度和系统标定能力的比拼——前几年不少队伍栽在硬件上,不是因为单片机性能不够,而是因为前端采样电路和校准逻辑做糊了。这篇文章我会从题目拆解、硬件前端、数字测量、负载识别、故障判定到现场调试,完整复盘一套能稳定拿分的方案思路,给正在备赛的你和队友一个可以直接参考的工程化路径。
1. 题目解构——分清“负载检测”和“故障检测”两条主线
拿到C题的第一件事不是画原理图,而是把题目的需求拆成两条主线:一条是负载检测,另一条是故障检测。这两者在电路结构上共用一套采样前端,但在算法逻辑上几乎是两条独立的通路。
1.1 负载检测的本质是阻抗测量
题目要求“检测线路负载”,说白了就是让装置识别出线路末端接的是什么类型的元件,以及它的参数是多少。最常见的考核方式是:给被测线路施加一个已知的激励信号,通过测量线路上的电压和电流,反推负载的等效阻抗——包括阻抗的幅值和相位角。
这里要建立一个基本认知:纯电阻负载的电压电流同相,感性负载电流滞后电压,容性负载电流超前电压。相位差的正负和大小,直接决定了负载是阻性、感性还是容性,进而决定负载的具体类型。比如一个散热风扇是感性负载,一个开关电源是容性负载,而加热电阻、白炽灯则是典型阻性负载。
阻抗幅值的计算公式也很基础:
R = U_eff / I_eff
但在实际装置中你不可能直接用万用表去读数,而是要通过ADC采样配合数字信号处理来完成整个测量,这就涉及后面第2章和第3章的内容。
1.2 故障检测的四类基本场景
故障检测比负载检测多了一个维度——它不仅要知道负载是什么,还要判断线路是否处于异常状态。题目里常见的故障场景包括:
- 断路:线路断开,电流为零或接近零,但电压可能异常偏高。
- 短路:负载端被直接短接,阻抗趋近于零,电流瞬间增大。
- 过载:电流超过额定值,属于缓慢恶化型故障。
- 漏电或绝缘下降:地线或外壳出现非预期电流通路,这类故障在进阶题里经常出现。
需要特别强调的是,故障检测的关键指标不是“准”而是“快”。负载检测允许你有几十毫秒的采样时间,但短路故障如果不能在几个毫秒内被识别并切断,后级电路可能已经烧毁。所以我在方案设计时把这两条主线从硬件上做了隔离——采样前端共用,但ADC的采样策略和中断响应逻辑是分开的。
1.3 从题目要求倒推技术指标
把题目翻译成技术指标,大概有这么几条:
- 输入电压范围:常见为AC 220V或者低压安全电压,取决于题目指定。
- 电流检测范围:从毫安级(待机负载)到安培级(满载),这决定了采样电阻和运放增益的设计。
- 相位测量精度:至少要分辨到±1~2度,否则无法可靠区分感性和容性。
- 响应时间:故障判断需要在5毫秒以内响应,而负载参数更新可以有100毫秒的周期。
这些指标相互制约,尤其是相位精度和响应时间这对矛盾。想提高相位精度,就得增加采样点数、延长FFT窗口;想缩短响应时间,就得缩短窗口,但精度会下降。我的思路是:用两套FFT窗口并行工作——短窗口用于故障快速判定,长窗口用于负载参数精确测量。这在STM32F4或者更高级别的M7上完全跑得动,但如果你用的是M0级别的芯片,就得在代码层面做更精细的调度。
2. 采样前端电路——决定测量上限的关键环节
很多队伍在C题上翻车,翻的不是算法,而是前端电路。ADC的位数再高,如果前端把信号搞脏了,后面全是白搭。我在这里分享一套经过验证的前端设计方案,以及每个环节为什么要这么设计。
2.1 电压采样:电阻分压加运放跟随
电压采样相对简单,用高阻值电阻分压把220V降到ADC能接受的范围。但有几个魔鬼细节:
第一,分压电阻必须用高精度金属膜电阻,误差尽量在0.1%以内,而且要选温漂小的。竞赛环境中温度变化不大,但长时间上电后分压点会漂移,影响校准稳定性。
第二,分压比例不是简单的“220V降到3.3V”。因为ADC输入范围是0到3.3V,而你采集的是交流信号,必须先把信号抬高到1.65V左右的直流偏置上。典型做法是先分压到±1.2V以内,再经过一个加法电路叠加1.65V偏置。
第三,运放必须选轨到轨、单电源供电的型号,比如某型号的J-FET输入运放。你不可能在板子上再做一个负电源,所以单电源轨到轨运放是唯一选择。
2.2 电流采样:采样电阻加仪表放大器
电流采样是前端电路的重头戏。低频、低压交流线路里最常用的是采样电阻法——在负载回路中串联一个毫欧级精密电阻,通过测量电阻两端的压降来计算电流。
这里有两个选择要做:
- 采样电阻阻值:阻值越大,信号越大,但功率损耗也越大。我的经验是待测电流峰值10A以内选10毫欧,20A以上选5毫欧,再配合后级的可编程增益放大器来解决小电流信号不足的问题。
- 放大器拓扑:用仪表放大器或者差分放大器。千万不能用地线参考型的普通放大器,因为你不知道负载端的共模电压跑到哪里。仪表放大器能有效抑制共模干扰,这对于测量精度至关重要。
采样电阻还有一个容易忽略的坑——走线必须走开尔文四线制接法。也就是从采样电阻的两端直接引线到放大器输入端,不要和功率走线共用铜箔路径,否则铜箔上的微小压降会被放大器“看到”并放大,造成严重的测量误差。
2.3 抗混叠滤波器设计
ADC采样前必须加抗混叠滤波器,这个不是可选项。我的做法是二阶巴特沃斯低通滤波器,截止频率设为信号频率的10倍。比如信号是50Hz工频,那采样率至少要做到5kHz~10kHz,滤波器截止频率设在500Hz~1kHz。
巴特沃斯滤波器的好处是通带内平坦,不会影响50Hz信号的幅值精度,而二阶的衰减斜率已经足够把高频噪声压到ADC分辨率以下。注意这个滤波器必须放在运放后面,不能放在分压电阻和ADC之间,因为运放的输出阻抗很低,可以直接驱动滤波器,而分压电阻的网络是高阻节点,接电容会引入额外的RC截止效应。
2.4 隔离问题的取舍
实验室环境下做C题,很多队伍为了安全会选择隔离方案——用隔离变压器给被测电路供电,用线性光耦隔离采样信号。但我的实际经验是:如果题目允许,尽量采用共地方案,只在软件里做浮点保护。隔离方案看着安全,但线性光耦的一致性非常差,幅值能校准回来,相位却很难校准,一个光耦就能引入好几度的相位误差,这对负载识别是致命的。
如果必须隔离,我建议采用调制解调式隔离放大器而不是线性光耦。精度高一个数量级,贵一点但竞赛完全值得投入。
3. 数字测量与阻抗换算——从波形数据到负载参数
前端电路把模拟信号调理好之后,接下来是数字域的活儿。这部分的核心任务是从采样得到的离散点中提取两个关键信息:被测信号的幅值和相对于激励信号的相位差。
3.1 采样策略:整周期采样加过采样
C题测量的是周期性信号,所以采样策略不需要复杂。我的方案是每次采样严格采集整数个周期,用软件定时器控制采样率,采完一整批再开始处理。为什么必须整周期?因为FFT或者相关性运算都假设信号是周期的,如果采样窗口包含非整周期,就会引入频谱泄漏,造成幅值和相位的系统性偏差。
关于采样率,我建议至少做到10倍信号频率以上。比如激励信号用1kHz(高于工频以避免和现场电磁干扰重叠),采样率就设10kHz。每个周期采10个点用于FFT其实偏少,所以我会采用过采样+滑动平均的方法,每个周期采100个点,连续采50个周期,然后在频域做相干累积。
3.2 FFT与相位提取的细节
对电压信号和电流信号分别做FFT,得到各自的复数值,然后就能算出幅值比和相位差。但这里有一个关键细节:FFT的频点必须严格对准信号频率。如果你的采样时钟和激励信号时钟不是同一个源,FFT的峰值会偏出正对着的bin,导致计算结果不准确。
解决方案有两种:
- 硬件上:激励信号的DDS时钟和ADC采样时钟由同一颗晶振分频产生,从根源上保证整周期采样。
- 软件上:先对电压信号做FFT找到实际峰值频率,然后用该频率下的复数系数计算。
我强烈建议用第一种方案——硬件锁相。做竞赛装置不是做科研,稳定性和确定性永远优先。只要采样时钟和信号时钟同源,FFT的幅值和相位计算就非常干净。
3.3 从幅值相位到R、L、C参数
得到了阻抗的幅值Z和相位角φ,接下来就可以反推等效电路参数。
对于串联等效模型Z = R + jX:
- R = Z * cos(φ)
- X = Z * sin(φ),其中感性时X > 0,容性时X < 0
- 电感L = X / (2πf)
- 电容C = 1 / (2πf|X|)
这个计算本身不复杂,难的是怎么处理测量噪声。我建议在代码里加入重复测量一致性校验:连续测5次,如果最大最小偏差超过1%,就判为测量不信任,重新采样。竞赛环境虽然不算恶劣,但接触电阻、插座弹片松动这些问题都会让测量值跳变,做一致性校验可以过滤掉大部分异常。
3.4 自校准流程的重要性
装置第一次上电,绝对不能直接开始测量。必须跑一遍自校准流程:把装置的输出端接一个高精度的纯电阻负载,测出系统的增益误差和相位偏置,然后存入校准参数表。之后每次测量都对原始计算结果做校正。
这个自校准流程是C题拿高分的分水岭。很多队伍在实验室里测电阻负载时很准,是因为实验室的陶瓷电阻参数漂移极小;但到了作品测试现场,测试人员可能用的是绕线电阻或者滑线变阻器,高频下这些负载会有明显的寄生电感。自校准解决不了负载本身的寄生参数问题,但能解决系统自身的增益和相位偏移问题。
我也吃过这个亏。第一次做样机时,负载识别率只有六成,后来查了两天才发现,问题出在电流互感器的相位延迟上——后级电容的存在让电流信号比电压信号晚了近乎3度。而自校准只会修正固定偏置,对这种会随负载电流大小变化的相位漂移无能为力。后来我在校准配置里增加了多电流点校准,相当于建了一张相位误差查表,按电流幅值去查对应的相位修正值。这个经验值得所有做C题的人记住。
3.5 不要迷信ADS1256等高分辨率ADC
C题群里经常有人问“要不要上24位ADC”,我的意见是:16位ADC完全够用,24位ADC反而可能给你带来麻烦。
高分辨率ADC的采样率通常较低,采样率上去了分辨率又掉下来,而且它们对参考电压的要求非常苛刻,普通板子的电源纹波就能让低位数据全是噪声。我实测过的结论是,真正限制测量精度的不是你有多大分辨率的ADC,而是你前端放大器的噪声水平和地平面完整性。与其纠结换高分辨率芯片,不如把时间花在屏蔽地线布局和电源滤波上。
4. 负载识别与故障判定——让装置“看懂”线路状态
测量得到阻抗参数之后,真正的“智能”部分才开始。这部分我分成负载识别和故障判定两块来讲,因为它们的目标函数完全不同。
4.1 负载类型识别的三大判定维度
我的负载识别算法基于三个维度:阻性比例、电抗方向、功率大小。
首先是阻性比例。通过相位角cos(φ)数值来判定,相位角越接近0,阻性程度越高。我设定±2度以内为“纯阻性”,超过就进入电抗判定分支。
其次是电抗方向。前面已经说了,电流超前是容性,电流滞后是感性。需要结合频率考虑:同样是感性的线圈负载,工频下的电感和1kHz激励下的电感表现完全不一样,因为线圈在不同频率下的阻抗特性会变化。所以我的测试噪声识别库里,不允许直接用相位角数值做绝对阈值,而是按负载类型分别建阈值区间。
第三是功率大小。题目经常要求识别出负载是什么具体器件,比如“识别出是一个白炽灯还是一个电风扇”。光靠阻抗幅值不够,因为一个100W的白炽灯和一个60W的烙铁在阻抗上可能很接近,但功耗明显不同。加上功率维度之后,识别的鲁棒性显著提升。
4.2 基于阻抗测量的负载判定流程
我采用的判定流程是一个分级决策树:
- 检测阻抗幅值是否小于短路阈值,如果是,直接报“短路故障”。
- 检测电流是否接近零,如果是,报“断路/空载”。
- 计算相位角,判断负载为阻性、感性、容性。
- 根据功率大小和阻抗幅值,在对应类型的候选列表里匹配最接近的负载种类。
这里必须说一下阈值的选取原则。阈值不能是固定值,一定要能根据实际测量到的电压自动调整。比如装置设定的激励电压是12V,但负载很重导致电压被拉低到10V,那么同样一个“100W白炽灯”的电流值就会偏差不少。所以我把所有判定阈值都做了归一化处理——电流除以当前电压,变成等效导纳后再比较,这样对电压波动就完全不敏感了。
4.3 短路与断路的快速识别逻辑
短路和断路是两种极端状态,但都可能遇到“临界”场景——比如短路点有接触电弧,电流时大时小;或者断路器半接触,电阻在几百毫欧到几欧之间跳变。
我的方案是在FPGA或者MCU的中断引脚上直接挂一个硬件比较器。电流采样放大器的输出,除了进ADC之外,还同时送到一个比较器,比较器阈值设定为额定电流的1.5倍。电流一旦超过阈值,硬件上马上拉一个中断信号,不需要等ADC采样周期,这个响应是微秒级的。MCU收到中断后先关闭输出驱动,再做故障确认和处理。
这种硬件和软件结合的双通道设计,是对“故障检测必须快”这个要求的最佳回应。软件再怎么优化也不如硬件触发来得及时。
4.4 过载的持续监测策略
过载不像短路那样瞬时发生,它的识别需要一个时间窗口。我设置的策略是:在连续100个周期内,如果电流的有效值超过额定值的120%超过5秒,就判定为过载;如果超过200%,则判定时间缩短到0.5秒。
这个逻辑用滑动窗口实现非常方便。每个周期计算一次电流有效值,压入一个环形缓冲区,同时维护一个“过载积分器”变量——电流超标就加,正常就减,类似PID里的积分分离。积分器的值超过阈值就触发保护动作。这种积分型判定比简单阈值判定靠谱得多,不会因为瞬时噪声误触发,也不会放过缓慢升高的过载电流。
4.5 故障定位——进阶题的加分项
有些年份的C题会要求“定位故障点位置”,也就是判断线路哪一段断了或者短路了。这就要用到反射法或者阻抗分段法。
阻抗分段法的思路是:在线路已知单位长度阻抗参数的前提下,通过测量故障状态下的输入阻抗来推算出故障点位置。如果用的是直流法,断路时输入阻抗趋于无穷,无法直接测距离;但短路时输入阻抗约等于故障点到测量端的线路电阻,用这个电阻除以单位长度电阻就是距离。
这个方法实现起来不复杂,但有一个大前提:你必须在赛前就把线路的单位长度电阻、电感参数标定好。建议在作品文档里附上一张“线路参数标定记录表”,这也是评委会看重的工程规范性体现。
5. 现场调试与抗干扰——那些手册上没有的细节
实验室样机跑通了不等于现场能拿分。C题测试现场往往有多支队伍同时在跑,电磁环境比实验室脏得多。我在几次带队伍参赛的过程里总结了一些调试心得和抗干扰经验,这里集中分享。
5.1 地线噪声是相位测量的天敌
前面一直在强调相位测量精度,但现场最常见的相位误差来源不是电路设计,而是地线噪声。测试台上如果有多台设备共用一个插线板,每台设备的地线电位并不完全相等,它们之间会有几十毫伏的噪声电压。这个噪声电压叠加在采样信号上,FFT之后直接反映为相位抖动。
我的应对方案是:给采样前端单独供电,并通过磁珠在单点接地。系统的主电源流入MCU和驱动部分,另一路经过LC滤波后给模拟前端。在PCB上,模拟地和数字地在ADC芯片的正下方单点汇合。这样的设计可以把地噪声对采样的影响降到很低。
5.2 样品接触电阻与重复性测试
现场测试的负载连接方式通常不是焊死的,而是接线夹、香蕉头或者插拔端子。这些连接方式在低频下问题不大,但在1kHz激励下,一个氧化了的接线夹可能就是几欧姆的电阻,而且还不稳定——碰一碰,阻值就变了。
我以前遇到过很恶心的情况:同一个负载,第一次测量时阻抗幅值是100.3欧,第二次变成了98.7欧,第三次又变回99.8欧。每次测量都在合理范围内,但互相不一致,导致识别结果在负载类型边缘反复横跳。
解决方案分两层。第一层是软件上的多次测量取中值,不用平均值,用中位数——中位数对离群值完全不敏感,可以自动滤掉接触不良造成的偶尔跳变。第二层是向测试人员建议更换接线方式,如果现场条件允许,用螺丝端子比香蕉头稳定得多。
5.3 温漂与长时间稳定性的处理
竞赛测试通常会持续一整天,装置可能会反复上电、掉电。我遇到过的情况是:早上刚开机时测量精度很好,到下午连续工作三个小时后,空载电压偏了将近2%。排查下来发现是分压电阻的温漂导致的。
处理这个问题的办法有两个,一个是双管齐下:
- 选用温漂系数更低的电阻,比如100ppm/°C降到25ppm/°C。
- 在固件里增加每30秒一次的零漂自校准——测量前先短接输入,记录当前零点,之后的所有测量值都减去这个零点值。
零点自校准的开销很小,但对长期稳定性的提升非常明显,属于“投入极小、收益极大”的经典操作。
5.4 示波器判断时的“第三视角”
调试中经常会碰到一个情况:用示波器看信号波形是干净的,但装置测量值就是不对。这时候不要盯着波形看了,直接把FFT结果打印出来看。
我在UART调试输出里会实时打印电压、电流两个通道的FFT主频点实部/虚部值,以及计算出的幅值、相位。这些原始数据比只看最后阻抗结果有用得多。比如相位差始终带一个固定的偏移量,一看FFT的实部虚部就能判断是电压通道还是电流通道的相移;如果是幅值不对,看是实部还是虚部的偏差更大,就能判断是增益问题还是正交误差问题。
这条经验的价值在于:永远不要把算法当成一个只输出最终结果的“黑盒”。把中间量暴露出来,调试效率和成功率完全不在一个量级。
6. 时间规划与团队分工——拿奖是系统工程问题
最后聊一点可能不太算“技术”但对拿奖至关重要的事情:备赛节奏和团队分工。
6.1 两周备赛的黄金时间轴
电赛从题目发布到完成作品通常只有四天三夜,但C题的准备一定不能临时抱佛脚。我的经验是提前两个月确定方案,提前一个月把核心代码跑通,然后就进入“换着法子折腾系统稳定性”的阶段。
真正上考场那几天,分配大概是这样的:
- 第一天上午拆题,把关键测量项和指标列成任务清单。
- 第一天下午到第二天上午,硬件组布线打样,软件组写测量帧和通信协议。
- 第二天下午开始联调,先跑通“能测准”的版本。
- 第三天全天做负载识别精度校准和故障响应演练。
- 第四天上午留白,专门用来做系统稳定性压力测试和文档整理。
最怕的就是第二天晚上还在改前端电路,第三天还在调FFT窗口长度——这种“边打仗边造武器”的状态基本与高奖项无缘。
6.2 三个人的队伍,角色怎么切
C题不像控制题那样需要大量机械结构和运动控制调试,它的工程量主要集中在硬件前端和测量算法上。三个人比较合理的分工是:一人负责模拟前端设计和调试,一人负责MCU固件和信号处理算法,一人负责文档、测试工装和负载样本库准备。
这样做的好处是每个模块都有明确的“责任人”,排查问题时不会互相甩锅。同时,三人对测量算法的基本原理都必须有共识,至少能在讨论FFT结果时达成有效沟通。
6.3 赛前必须建立的测试负载样本库
这是一个特别容易被忽略但回报率极高的准备工作。提前准备一批不同类型的负载样本:阻性的用6.8欧、47欧、100欧、1k欧的功率电阻;感性的用小电机、继电器线圈、电感;容性的用不同功率的开关电源、LED驱动、电容串联电阻。给每一个样本做标记,写明它的标称参数和实测参数。
到了比赛现场,当测试人员拿出一个不明负载时,你能迅速在样本库里找到最接近的类型和参数范围,大大缩短识别调试时间。而且这套样本库还能用来做阈值优化——用样本库里的100多组数据去跑一遍你的判定算法,如果识别成功率接近100%,那说明判定逻辑是可靠的。
我个人在带队伍时还会做一个额外的操作:把样本库数据按“阻性、感性、容性”三个纬度做成散点图,每个负载在图上都有自己的坐标区域。这样一旦识别结果落在某个区域的边缘,我就能立刻判断是不是阈值需要微调,而不是一头雾水地瞎试。
6.4 输出端过流保护的冗余设计
不管前期的故障检测做得再完善,硬件上都要有兜底保护。很多队伍在测试中烧毁装置,都不是因为没检测到故障,而是因为故障检测那一瞬间的冲击电流已经超过了前端元件的极限。
我的建议是在输出端增加一个自恢复保险丝再加一个MOSFET开关。MOSFET由硬件比较器直接控制——过流时硬件关断,不用等软件介入。软件处理完故障状态后,可以手动解除MOSFET的锁定状态。这套“软件确认+硬件兜底”的设计在测试中屡屡保住装置的性命。
7. 最后再划几个重点
回顾整个C题的备战历程,我想把最值得反复咀嚼的几个点再拎出来强调一下。
校准比测量重要。前端电路有误差不可怕,怕的是你不知道误差是多少。只要校准流程完备,哪怕采样电阻偏了3%,也能通过校准表把最终结果拉回1%以内。但如果你没有校准意识,再好的硬件也拿不到稳定分。
尽可能去做数据回放和记录。赛前调试时把所有关键参数通过串口或文件存储下来,赛后复盘时这些数据是最宝贵的财富。我曾经在一次调试中发现,某个负载的相位角在白天和晚上差了1.5度,第一反应是仪器坏了,后来才发现是晚上测试环境里的工频谐波分量发生了变化——如果当时没有数据回放,这个现象很难被定位到原因。
把“完成”的节点提前。宁可第三天晚上就把所有功能冻结,也不要在第四天下午还在改代码。作品的功能上限是由第四天的状态决定的,而不是由你脑子里那套未上机的“完美方案”决定的。我在多次备赛中最深的体会是:真正拉开差距的,往往不是谁竞赛积分更高,而是谁更早进入“系统稳定、随时能测”的收尾状态。
C题线路负载及故障检测装置,说到底考的是基本功——模拟前端、数字信号处理、仪器校准与系统调试。这些能力没有捷径,只能靠一块板子一块板子地调试、一组数据一组数据地分析去积累。希望这篇复盘能给你一些启发,少走几个我当年走过的弯路。