简介:这份PDF是2021年全国大学生电子设计竞赛本科组H题「用电器分析识别装置」的完整赛题文档,面向备战电赛的高校学生与指导教师,帮助读者准确掌握题目任务、指标边界与评分细则。资源包共1个PDF文件,约315KB,内容为官方试题原文,涵盖任务描述、基本要求、发挥部分、说明与评分标准等模块,可直接用于方案论证与分工规划。题目要求设计具备学习与分析识别两种模式的装置,依据电源线电流的电参量判别在用电器类别,电流范围5mA至10.0A,可识别电器不少于7种,并涉及电流互感器、特征参量筛选、微控制器编程与无线传输等知识点。发挥部分进一步要求学习功能、大小电流共用时的识别能力及低功耗设计。目前已有1890人学习下载,适合作为赛题解读、指标拆解与设计报告撰写的参考依据。
1. 从一份赛题 PDF 说起:用电器分析识别装置到底在做什么
第一次拿到「用电器分析识别装置」这个题目的人,八成会先愣一下:是要我做一个能认出插在插座上的是什么电器的设备?答案基本就是它。核心思路是——在供电入口处采集电压和电流波形,通过分析电流的谐波、功率因数、有功无功比例、启动冲击等特征,反推出后面挂的是什么负载。它解决的是「非侵入式负载监测」问题:不用给每个电器装传感器,只在总闸处装一个采集点,就能分辨出当前开了哪些电器。
这套东西适合谁?做电力监测产品的、搞智能家居能耗分析的、参加电子设计竞赛的学生,以及想用一块 ADC 加一个 MCU 做出点真东西的嵌入式工程师。它不需要昂贵的专用芯片,但对采样同步、特征提取和分类逻辑的要求不低。下面我按「先能采到干净数据、再能提出可区分特征、最后能稳定分类」这条线,把整个方案拆开讲。
2. 硬件选型与采样链路:先把电流波形采干净
2.1 电压电流双通道的传感器怎么选
用电器识别的第一道坎不是算法,是采样。电流波形里那些能区分电器的信息,全在高次谐波和暂态里,采不干净后面全白搭。
常见做法是电压通道用电阻分压,电流通道用互感器或霍尔传感器。这里有个选型分水岭:互感器(CT)只能测交流,且低频响应差,测不到直流分量和很低的次谐波;霍尔传感器能测交直流,但零漂和温漂明显。如果题目要求识别开关电源类负载(这类负载电流波形畸变严重,是识别的重点和难点),我一般会选开环霍尔加后级运放调理,带宽至少覆盖到 2kHz 以上。
分流电阻方案也常用,成本低、线性好,但不隔离,共模电压处理不好会直接烧 ADC。用分流电阻时,前端一定要加隔离运放或差分运放,把共模压到 ADC 能接受的范围。
| 方案 | 带宽 | 隔离 | 直流 | 成本 | 适用场景 |
|---|---|---|---|---|---|
| 分流电阻+差分运放 | 高 | 否 | 可测 | 低 | 低压小功率、实验台 |
| 电流互感器 | 中 | 是 | 不可测 | 中 | 纯交流负载 |
| 开环霍尔 | 中高 | 是 | 可测 | 中高 | 交直流混合、开关电源 |
| 闭环霍尔 | 高 | 是 | 可测 | 高 | 高精度要求 |
2.2 采样率、分辨率与同步的三个硬指标
采样链路定下来后,三个参数必须一起定,不能单独拍脑袋。
采样率:要覆盖到 2kHz 以上的谐波,按奈奎斯特至少 4kSPS,但实际做谐波分析我建议每周期采 128 点以上。50Hz 工频下,128 点对应 6.4kSPS,256 点对应 12.8kSPS。采样率越高,高次谐波越准,但数据量和算力也上去了。
分辨率:ADC 至少 12 位。电流动态范围大——待机几十毫安,满载十几安,12 位在满载时够用,但小电流细节会丢。条件允许上 16 位外置 ADC,或者用可编程增益放大器(PGA)分档。
同步:电压和电流必须同时采样,否则功率因数算出来是错的。用双通道同步采样的 ADC,或者两个采样保持器同时触发。软件上分时采样再对齐,在谐波分析里误差会很大。
// 双通道同步采样触发配置(以常见 MCU 的 ADC 为例) // 关键:用同一个触发源同时启动电压、电流通道转换 void adc_sync_init(void) { ADC->CR1 |= ADC_CR1_SCAN; // 扫描模式,多通道 ADC->CR2 |= ADC_CR2_DMA; // DMA 搬运,避免 CPU 干预丢点 ADC->CR2 |= ADC_CR2_EXTTRIG; // 外部触发 ADC->CR2 |= ADC_CR2_SWSTART; // 软件触发作为同步源 // 两个通道放在同一规则组,一次触发顺序转换 // 若 MCU 支持双 ADC 同步模式,优先用双 ADC 交替/同步 ADC->SQR1 = (1 << 20); // 规则组长度 2 ADC->SQR3 = (0 << 0) | (1 << 5); // 通道0电压,通道1电流 }这段配置的核心是让电压和电流落在同一个规则组里,由同一次触发启动。DMA 负责把转换结果搬到缓冲区,CPU 不参与搬运,避免采样间隔抖动。参数上,SQR1的低 4 位是规则组长度减一,这里写 1 表示 2 个转换;SQR3每 5 位放一个通道号。如果 MCU 有双 ADC 同步模式,用两个 ADC 分别采电压电流、由同一边沿触发,同步性更好。
2.3 前端调理电路的两个易错点
调理电路决定了信号能不能进 ADC 的「甜区」。两个坑最常见:
一是偏置电压没加对。交流信号有正有负,ADC 一般只能采 0 到 VREF,所以要把信号抬到 VREF/2。偏置用电阻分压加跟随器,别直接用两个电阻分压就接进去,输出阻抗太大会被 ADC 采样电容拉偏。
二是抗混叠滤波缺失。采样率 6.4kSPS 时,高于 3.2kHz 的成分会混叠回来,污染低次谐波。加一个截止频率略低于采样率一半的二阶低通,用运放搭 Sallen-Key 就行。截止频率别压太低,否则 2kHz 附近的谐波会被衰减,反而丢了识别特征。
3. 特征提取:从波形到能区分电器的数字
3.1 有功、无功、功率因数为什么不够用
最直觉的特征是有功功率。但纯电阻负载(电热壶)和整流负载(充电器)可能有功功率差不多,功率因数却差很远。所以功率因数要一起用。可即便如此,两个不同品牌的开关电源,有功和功率因数都可能撞车。
真正拉开区分度的是电流波形的形状。电阻负载电流是正弦;感性负载电流滞后;开关电源电流是尖峰脉冲,集中在电压峰值附近;调光类负载可能只有半波。这些形状差异,用谐波含量和波形因子能定量描述。
3.2 谐波、波形因子与启动冲击的提取代码
我一般提取这几类特征:总谐波畸变率(THD)、各次谐波相对幅值、波峰因数(峰值/有效值)、波形因子(有效值/平均值)、有功无功、以及启动瞬间的冲击电流峰值和持续时间。
import numpy as np def extract_features(v, i, fs): """ v, i: 同步采样的电压、电流数组(已去偏置) fs: 采样率 Hz 返回特征字典 """ N = len(v) # 1. 有效值 v_rms = np.sqrt(np.mean(v**2)) i_rms = np.sqrt(np.mean(i**2)) # 2. 有功功率(瞬时功率平均) p = np.mean(v * i) # 3. 视在功率与功率因数 s = v_rms * i_rms pf = p / s if s > 1e-9 else 0.0 # 4. FFT 求谐波(只取整数周期,减少频谱泄漏) I = np.fft.rfft(i) / N * 2 mag = np.abs(I) fundamental = mag[1] if len(mag) > 1 else 1e-9 # 2~15 次谐波相对幅值 harmonics = [mag[k] / fundamental for k in range(2, 16) if k < len(mag)] # 5. 总谐波畸变率 thd = np.sqrt(np.sum(np.array(harmonics)**2)) # 6. 波峰因数与波形因子 crest = np.max(np.abs(i)) / i_rms if i_rms > 1e-9 else 0 form = i_rms / (np.mean(np.abs(i)) + 1e-9) return { "p": p, "s": s, "pf": pf, "thd": thd, "harmonics": harmonics, "crest": crest, "form": form, "i_rms": i_rms, "v_rms": v_rms }逻辑上,先算功率类特征,再做 FFT 拿谐波。FFT 前要保证采样窗口是整数个工频周期,否则频谱泄漏会让谐波幅值不准。做法是先用过零检测找到电压过零点,截取整数周期再送 FFT。harmonics取 2 到 15 次,是因为再高的次数在 6.4kSPS 下已经接近奈奎斯特,可信度低。crest和form对开关电源和电阻负载的区分很有效——开关电源波峰因数通常大于 1.8,电阻负载接近 1.414。
3.3 启动冲击:被低估的识别维度
很多电器在开机瞬间有一个独特的冲击电流。电机类启动电流可达额定 5 到 8 倍,持续几百毫秒;开关电源有电容充电的短促尖峰;白炽灯冷态电阻小,冲击也明显。这个暂态特征和稳态特征组合起来,识别率能上一个台阶。
采集启动冲击要注意:采样窗口要覆盖开机前后各一秒以上,并且用较高的采样率(比如 12.8kSPS)才能抓住尖峰的上升沿。稳态分析可以用低采样率省算力,启动分析单独开一个高采样率通道,两者分时切换。
4. 分类决策:规则、模板还是轻量模型
4.1 规则阈值法的边界在哪
最简单的做法是给每个特征设阈值区间,落在哪个区间就算哪类。比如功率因数小于 0.6 且 THD 大于 0.8 判为开关电源类,功率因数大于 0.95 且波峰因数接近 1.414 判为电阻类。
规则法在负载种类少、工况稳定时够用,调试直观,算力几乎为零。但它的边界很脆:同一类电器不同功率档位,特征会漂;多个电器同时开,总特征是两个负载的叠加,规则直接失效。所以规则法适合做第一层粗分类,或者作为兜底逻辑。
4.2 模板匹配与最近邻的实操
比规则法稳一点的是模板匹配:预先采集每类电器的特征向量存成模板,识别时算当前特征和每个模板的距离,取最近的。距离用加权欧氏距离,权重按特征的可区分度调。
def classify_nn(feat, templates, weights): """ feat: 当前特征向量(按固定顺序) templates: {类别名: 特征向量} weights: 各维权重 返回最近类别和距离 """ best, best_d = None, float("inf") fv = np.array(feat) w = np.array(weights) for name, tv in templates.items(): d = np.sqrt(np.sum(w * (fv - np.array(tv))**2)) if d < best_d: best, best_d = name, d return best, best_d权重是关键。功率因数、THD、波峰因数这几维区分度高,权重给大;有功功率受档位影响大,权重给小。模板要在同一采集链路下录,换硬件就得重录,这是模板法最容易被忽视的坑。
4.3 轻量分类器上 MCU 的取舍
如果 MCU 有富余算力,可以上一个小型分类器,比如决策树或极小的神经网络。决策树推理就是几个 if-else,几十个字节的模型,比模板法更能处理非线性边界。训练在 PC 上用 sklearn 做,导出成 C 数组,推理函数手写。
取舍点在于:模型再小,也需要足够的训练数据。自己采几百组样本,覆盖各类电器的不同档位和组合,比调模型结构重要得多。数据不够时,模板法加规则兜底反而更稳。
5. 避坑与排查:那些让识别率突然掉下去的细节
5.1 现象:同一电器换档位就认不出
原因:特征向量里功率类特征占比过大,档位一变,距离就超阈值。解决:把功率类特征做归一化,或者分类时只用形状类特征(THD、波峰因数、谐波比例),功率单独做档位估计。
5.2 现象:两个电器同时开,识别结果乱跳
原因:总电流是叠加的,谐波和功率因数都不是简单相加,模板法直接失效。解决:先做负载分解再识别,或者退一步,只做「是否新增负载」的检测,用有功功率的阶跃来触发,再对新增部分做特征分析。多负载分解是这类装置的难点,别指望单点特征能直接分开。
5.3 现象:采样数据看着正常,功率因数却算错
原因:电压电流通道有相位差,可能来自传感器本身、调理电路或采样不同步。解决:用一个纯电阻负载做校准,理论上功率因数应为 1,测出来偏离多少,就在软件里做相位补偿。补偿量按频率微调,因为相位差随频率变化。
5.4 现象:小功率负载完全测不到
原因:ADC 分辨率不够,或者前端增益固定,小信号落在量化噪声里。解决:加 PGA 分档,小电流时切高增益档;或者用 16 位外置 ADC。软件上可以做滑动平均降噪,但会牺牲暂态响应,启动冲击分析时不能开。
5.5 现象:识别结果在临界点反复横跳
原因:特征值刚好落在两个模板中间,噪声一扰动就换类。解决:加迟滞,连续 N 次判定为同一类才输出;或者输出置信度,低于阈值时保持上一状态。别小看这个,现场体验差很多时候就是横跳造成的。
6. 把识别率再往上推:几个我常用的进阶技巧
第一个技巧是用电压波形做参考相位。所有谐波特征都相对于电压基波相位来算,而不是相对于电流自身。这样不同时间采的数据才有可比性,模板不会因为开机时刻不同而漂。
第二个技巧是分段建模。把负载分成「阻性」「感性」「整流」「开关电源」「调光」几个大类,先粗分大类,再在大类内细分。粗分用规则,细分用模板或决策树。这样每层的特征维度少,样本需求也少。
第三个技巧是在线更新模板。识别确认后,把当前特征以很小的学习率并入对应模板,让模板慢慢适应这个具体电器的老化、温漂。学习率要小,否则一次误判就把模板带偏。
验证方法上,我习惯做一个混淆矩阵,把每类电器的识别结果统计出来,看错分集中在哪两类之间。如果两类总是互相错分,说明现有特征区分不了它们,得回去找新特征,而不是调分类器参数。这个习惯帮我省了很多瞎调的时间。
最后一个具体技巧:采集时给电压通道留一个标记位。用一个 GPIO 在电压过零时翻转,和 ADC 数据一起存下来。后处理时靠这个标记对齐周期,比纯软件过零检测稳得多,尤其是在波形畸变严重时。这个标记不占多少资源,但省下的对齐调试时间很值。
我自己踩过最深的坑,是早期没做相位校准,功率因数一直偏,导致所有依赖它的特征都不可信,调了两周分类器都没用。后来用纯电阻负载一校准,问题立刻现形。所以每次换硬件或改调理电路,第一件事就是拿电阻负载验一遍功率因数和 THD,确认采样链路没问题再往下做。希望帮到你。
本文还有配套的精品资源,点击获取