找回密码
 立即注册

微信扫码登录

搜索
查看: 183|回复: 11

[硬件DIY] 磁保持继电器过零开关新风控制板

[复制链接]

4

主题

100

回帖

1324

积分

论坛DIY达人

积分
1324
金钱
1210
HASS币
30
发表于 昨天 22:51 | 显示全部楼层 |阅读模式
概述:省流版:
带过零控制的磁保持继电器底板,用于新风机控制。
配套控制板见原作者,链接:
过零检测磁保持继电器.jpg


对原控制板的改动如下:
红框处不焊接元件,0欧电阻短接。
控制板改动.png


ESPHOME配置见原作者。
gerber见附件
Gerber_过零检测磁保持继电器.zip (74.13 KB, 下载次数: 0, 售价: 10 金钱)
原理图见附件
SCH_过零检测磁保持继电器.pdf (277.12 KB, 下载次数: 6)
单片机程序见附件
EXTI_ToggleLed_IT.rar (3.93 MB, 下载次数: 0, 售价: 10 金钱)


声明
本作品仅供学习、研究和非商业用途。使用时请注意:
  • 涉及220V交流电,存在触电、火灾等风险,请谨慎操作,确保安全。
  • 不得用于商业用途。
  • 转载或引用本作品时,需注明作者及出处。
  • 作者不对使用本作品产生的任何风险和后果承担责任。

使用本作品即视为同意上述声明。


啰嗦版:
家里新风机自带的控制面板只能控制开关和风速高低,按下之后要过很久才能看到反馈,经常是听到风声了还没看到液晶屏上的变化。
另外就是不带联网功能,不方便远程控制和自动化。
考虑把它换了。
百朗.jpg


拆开面板先看下接线,一根火线,一根零线,一根风速高,一根风速低。
百朗接线.jpg


根据网上的资料和新风机接线图。控制火线接到风速高或风速低就可以,最简单的方法就是2位翘板开关。
需要注意的是,火线不能同时接到风速高和风速低,否则会烧坏电机绕组。
所以网上使用智能开关(继电器触点为单刀单掷SPST)的控制方法有上述的风险。
智能开关.jpg


在网上看到的一些成品wifi控制面板和旁边的其它面板外观差异过大。
后来看到论坛的《86开关模块V2.0,开启彩灯模式 20231220更新磁保持继电器版本》https://bbs.hassbian.com/thread-21097-1-1.html,觉得比较适合,唯独磁保持继电器是单刀单掷SPST,要改。
当时作者只发了gerber,于是根据gerber的定位尺寸,照着画了电源继电器板,发到群里,晒图说要用作控制新风。群里大佬提醒到,控制感性负载在开关时候可能会主控死机,最好在过零点开关,并发了个 GS1102过零检测芯片的应用图,说软件硬件实现都行。
过零检测电路.png


第一次失败
我“心领神会”,在脑子里飞快的运转,用有限的知识得出结论:硬件比软件好,用个啥啥触发器,串在原来的信号之间就行了。从查资料到画PCB一气呵成。
D触发器.png


PCB焊完之后,继电器可以正常开关,心想:难得比较顺利。
然后就不出意外的出意外了。
开关波形一致性很好。但是,每次都落在180V的地方,每次都落在180V的地方,每次都落在180V的地方。
RigolDS0.jpg


琢磨了下,固态继电器线圈得电到触点动作需要时间,查了下资料大概是几ms。所以得再延时一段时间,到下一个过零点才能实现过零开关。
继续增加硬件来延时超出能力范围了。硬的不行就来软的。
于是迎来了:

第二次失败
修改板子,过零信号接ESP32IO。然后开始琢磨怎样用软件来实现。
此前对ESPHOME的理解仅限于配置抄抄改改。要实现一个功能最好的方法是找现成的,翻了esphome.io没找到可用的例子,网上也没搜到具体代码的实现。
于是想到了现在很热门的Vibe Coding(氛围编程),给出需求后,会返回代码以及一段类似下面的话。

通过直接使用硬件外设,您可以实现接近其他专业单片机的性能,满足精确过零控制的需求。
此方案充分利用了ESP32的硬件能力,实现了专业级的过零控制精度,同时保持ESPHome的易用性。
这个方案在保持毫秒级精度的同时,大化系统的稳定性和可靠性,特别适合对实时性要求不高的交流负载控制应用。实际部署中,95%以上的应用场景可以满足要求。
这个方案在 ESPHome 框架允许的范围内实现了高精度的控制(±1ms)。
这是 ESPHome 框架下能实现的高精度过零控制方案,完全满足工业级应用需求。

虽然AI每次都确定它给出的代码是zui合适的,但实际测试的结果都无法满足稳定过零开关(可以说是随机开关,和不加过零检测差不多)。
AI的好处是能告诉一些你所不知道的,以及没考虑到的,并且不厌其烦。至少给出的测量1秒钟过零次数的代码是可用的。
通过几天的氛围编程,知道了ESPHOME的软件架构中,IO轮询需要时间,PCNT硬件计数的ON_VALUE触发也要时间。不直接调用底层代码很难实现精确过零开关。
而修改底层代码,超出能力范围了。

最后的方案
明明在单片机上面就是外部中断+定时器中断能搞定的事情,在ESPHOME上怎么就这么难呢。
思路打开,单片机能干的事,就让单片机干吧。ESP做好基本的控制就行了。
于是最后的方案就是外挂单片机。
单片机选了之前买了但没用过的PY32,可以利用STM32的SDK和下载器。
花了半天时间改例程。再根据实际过零点设定程序中的延时时间。
最后开关电压波形如下:
RigolDS2.png


RigolDS1.png


开到关的波形正常,关到开的波形有几个ms的波动,经过了优化继电器供电,更换继电器的尝试之后,波动依旧。
推测为继电器机械触点的弹跳,在驱动电路上无能为力。
替换新风机控制面板后,功能正常,开关时候没有掉线。

可喜可贺,可喜可贺。

软件:
MDK,需安装PY32 SDK,见下面链接

最后:
如果有ESPHOME软件实现过零检测和控制的方法,欢迎讨论。

评分

参与人数 1金钱 +10 收起 理由
adamjensen + 10 高手,这是高手!

查看全部评分

回复

使用道具 举报

0

主题

3

回帖

69

积分

注册会员

积分
69
金钱
66
HASS币
0
发表于 昨天 23:49 | 显示全部楼层
硬核技术贴,前排点赞!
回复

使用道具 举报

ZDZX 手机认证

6

主题

111

回帖

767

积分

高级会员

积分
767
金钱
650
HASS币
0
发表于 7 小时前 | 显示全部楼层
ESPHome的GPIO Binary Sensor不是默认是中断模式吗?其监测到过零脉冲后进行一个delay然后控制继电器进行动作不行吗?
回复

使用道具 举报

4

主题

100

回帖

1324

积分

论坛DIY达人

积分
1324
金钱
1210
HASS币
30
 楼主| 发表于 7 小时前 | 显示全部楼层
本帖最后由 litchiate 于 2025-10-10 10:34 编辑
ZDZX 发表于 2025-10-10 09:56
ESPHome的GPIO Binary Sensor不是默认是中断模式吗?其监测到过零脉冲后进行一个delay然后控制继电器进行动 ...

一开始就是一个 Binary Sensor , ON PRESS 执行。

实际运行情况是,发送开关指令后,有90%的几率不执行动作。 原因是漏检测过零脉冲。

用AI给的过零脉冲计数程序(Binary Sensor ,ON PRESS 时候全局变量+1,主循环每隔6秒输出计数的全局变量),只能检测不到10%的过零脉冲。
回复

使用道具 举报

4

主题

78

回帖

875

积分

高级会员

积分
875
金钱
793
HASS币
0
发表于 6 小时前 | 显示全部楼层
大佬你这个检测是否过零开关的仪器是什么?示波器吗?
我自己也在DIY一个智能开关,硬件上能给过零信号但是和你这一样需要过零信号后根据磁保持继电器关断时间计算偏移量。手头没有示波器,买一个吧仅仅作为爱好者一搜价格大几千上万的有点下不去手。
你这个多贵啊?
回复

使用道具 举报

ZDZX 手机认证

6

主题

111

回帖

767

积分

高级会员

积分
767
金钱
650
HASS币
0
发表于 6 小时前 | 显示全部楼层
litchiate 发表于 2025-10-10 10:24
一开始就是一个 Binary Sensor , ON PRESS 执行。

实际运行情况是,发送开关指令后,有90%的几率不执行 ...

能否发一下当时的yaml文件?
回复

使用道具 举报

193

主题

2897

回帖

9418

积分

元老级技术达人

积分
9418
金钱
6313
HASS币
80
发表于 5 小时前 | 显示全部楼层
yj82871002 发表于 2025-10-10 11:07
大佬你这个检测是否过零开关的仪器是什么?示波器吗?
我自己也在DIY一个智能开关,硬件上能给过零信号但是 ...

能不能科普下,你们聊的过零在该项目中的实际作用,我电路知识比较薄弱

评分

参与人数 1金钱 +1 收起 理由
litchiate + 1 如楼下所说,减少拉弧,降低电磁干扰,延长 ...

查看全部评分

回复

使用道具 举报

4

主题

78

回帖

875

积分

高级会员

积分
875
金钱
793
HASS币
0
发表于 4 小时前 | 显示全部楼层
bugensui 发表于 2025-10-10 12:08
能不能科普下,你们聊的过零在该项目中的实际作用,我电路知识比较薄弱 ...

想了解的话百度下问下AI会说的很详细。我使用主要是降低继电器开关时拉弧出现的概率,降低可能的电磁干扰,延长继电器寿命。
回复

使用道具 举报

4

主题

100

回帖

1324

积分

论坛DIY达人

积分
1324
金钱
1210
HASS币
30
 楼主| 发表于 4 小时前 | 显示全部楼层
本帖最后由 litchiate 于 2025-10-10 13:20 编辑
ZDZX 发表于 2025-10-10 11:31
能否发一下当时的yaml文件?


如果有硬件的话,可以试试能否测到正确数量的脉冲。

以下是当时的测试代码,(翻AI记录找出来的,自己测试的没留)
globals:
  - id: pulse_count
    type: int
    initial_value: "0"

on_press:
  then:
    - lambda: |-
        id(pulse_count)++;

interval:
  - interval: 60s
    then:
      - lambda: |-
          ESP_LOGI("STAT", "Pulses/min: %d", id(pulse_count)/2);
          id(pulse_count) = 0;


预期值:50Hz系统应为3000个脉冲/分钟(50×60)




直接操作的代码大概是下面的样子
globals:
- id: pulse_count
type: int
initial_value: "0"

on_press:
then:
- lambda: |-            delay(8);             if (id(target_state_1a ) == true) {              switch.turn_on: out_relay1_a            } else {              switch.turn_off: out_relay1_a            }            if (id(target_state_1b ) == true) {              switch.turn_on: out_relay1_b            } else {              switch.turn_off: out_relay1_b            }            if (id(target_state_2a ) == true) {              switch.turn_on: out_relay2_a            } else {              switch.turn_off: out_relay2_a            }            if (id(target_state_2b ) == true) {              switch.turn_on: out_relay2_b            } else {              switch.turn_off: out_relay2_b            }

回复

使用道具 举报

193

主题

2897

回帖

9418

积分

元老级技术达人

积分
9418
金钱
6313
HASS币
80
发表于 3 小时前 | 显示全部楼层
yj82871002 发表于 2025-10-10 12:58
想了解的话百度下问下AI会说的很详细。我使用主要是降低继电器开关时拉弧出现的概率,降低可能的电磁干扰 ...

好的,明白了。原来如此,谢谢科普
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-10-10 17:50 , Processed in 0.075501 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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