数码之家

 找回密码
 立即注册
搜索
查看: 4046|回复: 173

[Arduino] 使用 Arduino 监测电网 50Hz 工频,实现人类活动观察与预警(原创)

    [复制链接]
发表于 2023-12-8 13:46:58 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先感谢大家的支持和版主的悉心维护,坛子才能有今天的热闹。

这次还是从原理讲起,写一个旁门左道的测试,并推导出很不专业的结论,供大家参考。


【背景】

在各种自然意外发生以前,生活在城市的人们并不习惯于基础资源的防灾备份:电力。

可能是一场夏天的暴雨,就能让全城停电停水停运停摆好几天;
也可能是一次冬日的冻雨,你就不得不在室内翻出尘封多年的蜡烛,苦等来电或是解封。

冰城小区普遍老旧,有阵子停水停电简直家常便饭:夏天太热超负荷停电,冬天供暖前太冷超负荷停电。
虽有锂电护体,但完全没征兆的停电还是很不让人省心,因而迫切需要一套停电预警系统。


【交流输电】

停电预警,在明面上的 APP 就不用奢望了。
一来根本就是公益投入,回报率不高;二来电厂能预警的,早就不算意外停电。

索性就得自己干,先大致铺垫下电网工作原理。以单相交流为例,三相类似:

img1a.png

发电机一端,蒸汽叶轮、水利涡轮等原动机带着磁体以 ω 速度旋转;
磁体旁边的线圈 L 捕获不停变化方向的磁场,产生交流感应电动势,频率 f=ω/2π.
在用户一端,直接将负载 R 接入供电回路,实现电力利用与消耗。

所谓停电,除人为拉闸检修外,基本可以简化为供电回路上某保险 F 爆了,如图:

img1b.png

能否正确识别 F 爆掉的前兆,成为预测突发停电事件的关键。
对于上图,最为直观的思路就是检测 R 中电流,电流太大则认为容易爆保险,即跳闸。


【电网故障预测】

然而电厂不是给一家用的,实际供电结构更类似下图:

img1c.png

发电机 L 的输出经过总保险 F0 后,由多台变压器 T1-T3 分配给多个用户 R1-R3,
并且每个用户都有自己的保险 F1-F3.

以用户 R1 为例,单纯监测 R1 自身用电负荷,并不能准确反映用户 R2、R3 状态。
到头来就算能预警,监测范围也只停留在 F1 回路,无法预测更为严重的 F0 回路故障。

常规的交流电压测试,如下图所示在 R1 处测量交流电压 Vpp(1):

img1d.png

Vpp(1) 虽在一定程度上可以反映电网的整体负荷,但需要图中红色回路负载近似恒定。
在城市中则要求 R1 及附近并联住户负载恒定,可操作性不高。到头来对远端 F0 故障预测还是不准。

既然竖着测电压不灵敏,索性横过来测时间,如图所示:

img1e.png

这回敞亮了,只是在 R1 房间里测了个角频率 ω,能一路追回到电厂转子转数,
物理时间的穿透力,果然比电压电流啥的强太多。

当然本文仅考虑电网中不存在变频站的情况。
对于用上了变频站这种等级的电网,也没必要三天两头担心停电了。

回到主线任务,测试 ω 怎么就能预测电网故障了? 做个动图示意下:

img2.gif

依据能量守恒,不同的负载状态,会一直反馈到电厂发电机一端。
当负载较轻时(例如R2、R3离线),发电机转子电磁阻力下降,转速 ω 略微提升,所谓转更溜;
当负载较重时(例如R2、R3在线),发电机转子电磁阻力上升,转速 ω 略微下降,所谓转不动。

虽然国标规定我国交流电频率 50Hz,即要求发电机转子有一定的恒速机制,
但实际不可能也没必要做到 50.00000 这样的频率精度,性价比不高。

通过适当的方法,在 R1 处测得足够精确的频率数值,是可以观测到 R2、R3 这些周边负载工作情况的。

当频率明显低于 50Hz 额定数值,可以认为电网负载过重,爆保险跳闸的几率上升;反之下降。


【Arduino可行性分析】

按照国标 GB/T 15945-2008《电能质量 电力系统频率偏差》的要求,我国电网频率偏差不超过 ±0.2Hz .
对于 50Hz 标称频率而言,相当于 ±0.4% 的相对误差:

https://openstd.samr.gov.cn/bzgk ... 431859BC6A83B2E7F45

img3.png

感谢科技的发展,手头几毛钱的石英晶振就可以有 ppm 等级的时间精度。
最最不济情况下达到 ±100ppm 也仅相当于 ±0.01%,仍远胜于 50Hz 测频所需。

从时基的角度,Arduino 精度足够测量 50Hz ±0.2Hz 工频所需。

img4.png

实际操作过程中应注意 Arduino 晶振有两种版本,如上图所示:
长条铁壳的是石英晶振,有着 ppm 精度,可用于测量;
迷你小壳的是陶瓷晶振,精度只有千分之几,达不到测量要求。

对比左侧 USB 通信芯片可以看到,USB 基本全是铁壳石英晶振,就是时序精度要求高所致。

至此,已从电网原理、时间基准上验证了 50Hz 测频的可行性。


【硬件搭建】

使用 Arduino 测量电网频率,第一步就是过零采样。对多个交变零点进行间隔计时,即可换算频率。

然直接拿电路板往插座里怼,左零右火雷公助我,显然不是什么好办法。请出核心科技:

img5.JPG

没错,看过我早期帖子的朋友大致能认出这个玩意:剃须刀交流变压器。
写作 AC/DC ADAPTOR,实际却是 AC 交流输出,整流+恒流单元被做进了剃须刀内部。

将市电进行隔离降压,再行测量交变零点,安全性蹭蹭往上涨。
一来变压器隔离了火线高压危险,二来光耦二次隔离电路可以简化很多。

低压部分直接上 PC817 进行隔离,输出丢给 UNO 的中断脚 D3 即可:

img6a.png

理论上低压整流、光耦延迟、上拉延迟都会造成零点测量滞后;
但实际测量的是零点间隔,只要滞后量恒定或者缓慢变化,并不会对测量结果造成太大影响。

CAD 稍微走个线,UNO 专用洞洞板焊起来:

img6b.png

和 UNO 以及一众堆叠板连接好,功能互不干扰:

img6c.JPG

至此,已完成 50Hz 工频测量平台的硬件搭建。


【软件编写】

测量零点间隔有两种算法:对零点间高频时基计数,或对窗口内零点计数。

前者只要固定数目零点,就可以测得频率,测试响应快,但要求时基频率远高于工频;
后者不需要高频时基,但为了精度就需要长测量窗口,测试响应很慢。

考虑到被测频率 50Hz 远低于 Arduino 工作主频 16MHz,
即使在 Arduino 套壳下仍然有 micros( ) 这种精度达到 ±4us (250kHz) 的时基接口,
果断选择高频时基计数法进行测量。

img7.png

实际测量采用 5T 方式,即对第1个到第6个交变零点,进行时间采样。
按照 micros( ) 的 4us 误差计算,采样引入的量化误差不超过 ±4us/100ms = ±0.004% .

至此,已有完整的 50Hz 测试平台及固件,只等上电默默记录。


【人类观察】

市电电网的 50Hz 工频频率在 49.8~50.2Hz 区间内缓慢波动。
因此测试系统适合丢角落里,由串口助手一连几天不间断存储,并同步记录样本时刻以备查阅。

原始的串口文件大致长这样:

img8a.png

经过正则表达式抽取、EXCEL排版,可以很方便生成一条频率波动曲线:

img8b.png

从纵轴来看,频率基本集中在 49.90 - 50.10Hz 区间,说明即使在大东北的冰城,电网也严格按标准运行。

但如果结合了横轴时刻数据,图表立即升级为有趣的人类观察:

img9a.png

这张图表来自于某工作日(2021-9-29)凌晨到下午的数据,可以很明显看到电网轻载(频率高)、重载(频率低)的周期变化与人类活动密切相关。

选择该测试时间段的另一个好处是,可以连续测到 10-1 当天,三段图线对比下:

img9b.png

在每天 7:00-19:00 时间段内,9-29 与 9-30 两天走势接近,而 10-1 当天走势风格突变。
显然人类在 10-1 当天活动规律发生了巨大的变化,以至于电网频率测试都能看出区别。


【结论展望】

以电网频率作为切入口,测试结果与已知的人类活动高度相关,从侧面证实了频率评估电网状态的有效性。

实际在电力维护领域,过低的频率就是预示着电网负载过重,发电机出力不足。
参考这里的讨论:https://www.zhihu.com/question/493683079

一般当频率低于 49.7Hz 时,预示着主备发电机都已马力全开;
如果继续下降到 49.5Hz 甚至更低,基本就是电网崩溃:
电压严重不稳、变压器感抗下降发热上升,变电站冒烟、用电器冒烟。

从这个角度,如果监测到频率过低(<49.8Hz),就是明显的电网恶化信号,应提升备用电源蓄电量;
同理如果监测到频率快速大幅波动,提示电网调功不稳,考虑断开部分贵重电器以对抗风险。

----------------------------------------------------------------------------------------

以上,从电网供电原理出发,分析了 Arduino 监测 50Hz 工频的可行性。
连续的测试记录表明,电网工频与人类活动高度相关,证实了以频率评估电网状态的有效性。

通过精确测试电网频率,在实现人类活动观察的同时,建立了电网危险状态预警机制,自行预报停电风险。

最后祝大家永不停电!


打赏

参与人数 12家元 +281 收起 理由
cat_li + 30
微醉 + 30 優秀文章
a2432061667 + 12 優秀文章
sunnyquan + 30
aping365 + 30 優秀文章
vip2128 + 10 優秀文章
cushion + 30 優秀文章
jf201006 + 30 原創內容
nokia5320 + 15
闻太师 + 30 原創內容

查看全部打赏

 楼主| 发表于 2023-12-8 13:51:58 | 显示全部楼层
坛子暂时还不太稳定,不过能传图已经很好了。


附上完整的测试代码: GetAcFreq.rar (510 Bytes, 下载次数: 8)
回复 支持 反对

使用道具 举报

发表于 2023-12-8 14:45:11 | 显示全部楼层
哈哈,这么准吗,给电厂把脉,能看出喜脉来吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-8 15:34:55 | 显示全部楼层
人艰不拆了 发表于 2023-12-8 14:45
哈哈,这么准吗,给电厂把脉,能看出喜脉来吗

测之前也没想到,测出来发现真精细,连人类活动节律都对上了。

The devil is in the details...
回复 支持 反对

使用道具 举报

发表于 2023-12-8 19:14:34 | 显示全部楼层
楼主的分析过程太牛了。。。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-8 21:47:43 来自手机浏览器 | 显示全部楼层
这个厉害了,楼主功底深厚,看帖给我补了很多电力相关的课,感谢分享
回复 支持 反对

使用道具 举报

发表于 2023-12-8 22:07:02 | 显示全部楼层
t3486784401 发表于 2023-12-8 15:34
测之前也没想到,测出来发现真精细,连人类活动节律都对上了。

The devil is in the details... ...

电网频率真神奇,只要一个电源插座,足不出户,即可顺着电线一路观察到整个电网的发电机运转负载情况
回复 支持 反对

使用道具 举报

发表于 2023-12-8 22:15:46 | 显示全部楼层
t3486784401 发表于 2023-12-8 13:51
坛子暂时还不太稳定,不过能传图已经很好了。

能把代码直接贴出来吗,下载要55M币
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-8 22:29:44 | 显示全部楼层
tomyluo 发表于 2023-12-8 22:07
电网频率真神奇,只要一个电源插座,足不出户,即可顺着电线一路观察到整个电网的发电机运转负载情况{:01 ...

是的,信息以一种不可思议的方式,在整个城市间传播。
想起了星际穿越里边的情节,信息借助引力(载波),直接跨越维度来到了过去。

偶尔中二,就得思考些这样事儿的,不然太碌碌无为
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-12-8 22:30:54 | 显示全部楼层
tomyluo 发表于 2023-12-8 22:15
能把代码直接贴出来吗,下载要55M币

稍等啊,坛子相当不稳定,我这开的各种乱码

  1. float GetAcFreq(void)
  2. {
  3.         // Measure AC-Freq. with Module "AcFreq"
  4.         // Ret= Freq(Hz) / -1:AC-Offline

  5.         // Algorithm:
  6.         // a. Check L-H-L-H level, if not exist, then RET(-1)
  7.         // b. Measure time during 5-cycles
  8.         // c. Calc Freq in Hertz

  9.         // a. Check L-H-L-H level, Tovf= 50ms+50ms
  10.         if(pulseIn(ACFQ_PIN, HIGH, 50000)==0)
  11.         {
  12.                 return -1.0f;
  13.         }
  14.         if(pulseIn(ACFQ_PIN, LOW, 50000)==0)
  15.         {
  16.                 return -1.0f;
  17.         }

  18.         // b. Measure time of 5-cycles
  19.         uint32_t tm[6]= {0};
  20.         for(uint8_t i=0; i<=5; i++)
  21.         {
  22.                 // Wait for (L)-H-L
  23.                 while(ACFQ_ISL);                // Wait for L-H
  24.                 while(ACFQ_ISH);                // Wait for H-L

  25.                 // Save Timestamp [url=home.php?mod=space&uid=3057940]@[/url] H-L
  26.                 tm[i]= micros();
  27.         }
  28.        
  29.         // c. Do calc
  30.         uint32_t dur= tm[5]-tm[0];
  31.         return dur>0? 5e6f/dur : -1.0f;
  32. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2023-12-8 22:40:23 | 显示全部楼层
t3486784401 发表于 2023-12-8 22:29
是的,信息以一种不可思议的方式,在整个城市间传播。
想起了星际穿越里边的情节,信息借助引力(载波) ...

我又想到,如果大家一起测量同一个时间段的电网频率并上传分享,是不是还能发现,哪些人是在一起距离比较近的,因为整个电网不是全部用交流线路连接的,也有直流线路,把电网分成了彼此不同步的区域,如果几个人分享的频率是一模一样的变化规律,就可以判断他们在同一个“区域”里面了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-8 23:04:34 | 显示全部楼层
tomyluo 发表于 2023-12-8 22:40
我又想到,如果大家一起测量同一个时间段的电网频率并上传分享,是不是还能发现,哪些人是在一起距离比较 ...

是的,都同时测量的话(或者相差不久),是可以判定能否在同一片供电区域的。
传统数学上可以用 “协方差” 或者 “余弦相似度” 评估两个序列的相似度,进而自动判定 “是否在一起”;
现代数学上,有专门的神经网络算法可以识别相似度,类似于手写字形识别。

比起这种,我倒想起了另一种广播式应用:电厂将需要广播的信息,调频式的加载在电网上,
接收端只要有插座,都可以收到这种信息。也算是个应急系统了。
回复 支持 反对

使用道具 举报

发表于 2023-12-8 23:23:55 | 显示全部楼层
t3486784401 发表于 2023-12-8 23:04
是的,都同时测量的话(或者相差不久),是可以判定能否在同一片供电区域的。
传统数学上可以用 “协方差 ...

电网可以载波通讯,但范围不大(百度百科上看到的)

image.png

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-9 00:01:00 | 显示全部楼层
tomyluo 发表于 2023-12-8 23:23
电网可以载波通讯,但范围不大(百度百科上看到的)

载波通信还是往幅值上加电压信号,并且范围有限;

如果从电厂直接调制频率,那就差不多是全域广播了。
回复 支持 反对

使用道具 举报

发表于 2023-12-9 07:51:06 | 显示全部楼层
看来通过电网频率也能预测GDP走势
回复 支持 反对

使用道具 举报

发表于 2023-12-9 08:08:25 | 显示全部楼层
bboroo 发表于 2023-12-9 07:51
看来通过电网频率也能预测GDP走势

这个可能要测电力负载
回复 支持 反对

使用道具 举报

发表于 2023-12-9 09:33:42 | 显示全部楼层
又是你,老特务了哈哈。
玩笑开大莫怪哈。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-9 09:43:46 | 显示全部楼层
附近的变压器,是否准确
回复 支持 反对

使用道具 举报

发表于 2023-12-9 10:33:14 | 显示全部楼层
电网频率下降,会不会是蒸汽轮机的轴承缺油了?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 13:31 , Processed in 0.202800 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表