概述:省流版: 带过零控制的磁保持继电器底板,用于新风机控制。 配套控制板见原作者,链接:
对原控制板的改动如下: 红框处不焊接元件,0欧电阻短接。
ESPHOME配置见原作者。 gerber见附件 原理图见附件 单片机程序见附件
声明本作品仅供学习、研究和非商业用途。使用时请注意: 使用本作品即视为同意上述声明。
啰嗦版:家里新风机自带的控制面板只能控制开关和风速高低,按下之后要过很久才能看到反馈,经常是听到风声了还没看到液晶屏上的变化。 另外就是不带联网功能,不方便远程控制和自动化。 考虑把它换了。
拆开面板先看下接线,一根火线,一根零线,一根风速高,一根风速低。
根据网上的资料和新风机接线图。控制火线接到风速高或风速低就可以,最简单的方法就是2位翘板开关。 需要注意的是,火线不能同时接到风速高和风速低,否则会烧坏电机绕组。 所以网上使用智能开关(继电器触点为单刀单掷SPST)的控制方法有上述的风险。
在网上看到的一些成品wifi控制面板和旁边的其它面板外观差异过大。 当时作者只发了gerber,于是根据gerber的定位尺寸,照着画了电源继电器板,发到群里,晒图说要用作控制新风。群里大佬提醒到,控制感性负载在开关时候可能会主控死机,最好在过零点开关,并发了个 GS1102过零检测芯片的应用图,说软件硬件实现都行。
第一次失败我“心领神会”,在脑子里飞快的运转,用有限的知识得出结论:硬件比软件好,用个啥啥触发器,串在原来的信号之间就行了。从查资料到画PCB一气呵成。
PCB焊完之后,继电器可以正常开关,心想:难得比较顺利。 然后就不出意外的出意外了。 开关波形一致性很好。但是,每次都落在180V的地方,每次都落在180V的地方,每次都落在180V的地方。
琢磨了下,固态继电器线圈得电到触点动作需要时间,查了下资料大概是几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和下载器。 花了半天时间改例程。再根据实际过零点设定程序中的延时时间。 最后开关电压波形如下:
开到关的波形正常,关到开的波形有几个ms的波动,经过了优化继电器供电,更换继电器的尝试之后,波动依旧。 推测为继电器机械触点的弹跳,在驱动电路上无能为力。 替换新风机控制面板后,功能正常,开关时候没有掉线。
可喜可贺,可喜可贺。
软件:MDK,需安装PY32 SDK,见下面链接
最后:如果有ESPHOME软件实现过零检测和控制的方法,欢迎讨论。
|