☰
并网逆变器继电器自检全链路:粘连检测、状态机与误报排查
2026/11/3 14:13:02 网站建设 项目流程

并网逆变器的并网继电器看着就是个"开关",但真正把它做进产品里,你会发现自检逻辑的复杂度远超过大部分人的预期。我在几个并网机型上改过这块代码,最开始以为照着时序图写个 if-else 就够了,结果量产之后陆续遇到"误报粘连""真粘连却放行""自检过了但合闸失败"这三类问题,前后折腾了小半年才把逻辑理顺。这篇就把并网逆变器继电器自检的完整链路拆开讲:触点粘连到底怎么检测、状态机该怎么划分、阈值和窗口怎么取值、误报怎么一步步排查。适合正在做并网机型控制软件、或者需要接手这块遗留代码的同行参考,做储能 PCS、离并网切换装置的也能对上一部分。

1. 先想清楚自检要回答什么问题

1.1 继电器在并网回路里不是"通断"这么简单

并网逆变器的继电器串在逆变桥输出和电网之间,位置通常在 EMI 滤波器之后、并网点之前。它的作用不是给用户当开关用,而是在待机、故障、维护、孤岛保护动作时,把逆变器和电网做物理隔离。这里有个关键点:逆变器的功率器件失效时往往是短路失效,也就是说即使软件停止发波、驱动全部封锁,逆变桥仍可能通过体二极管形成通路。这时候继电器就是最后一道物理隔断,它必须"真的断开"。

也正因为如此,继电器在并网机型上通常是冗余设计:要么同一回路串两只,要么三相各一只再做互检。冗余的目的不在于提高寿命,而在于让"其中一只粘连"这个故障可以被检测出来——单只继电器粘连,在没有任何参考点的情况下,软件无从判断。冗余带来的第二个好处是分时激励:先合其中一只,用另一只的断开状态作为"隔离参考",观察电压有没有被意外引过来。这个思路后面会反复用到,它是整套自检逻辑的地基。

另外一个容易被忽略的点:继电器是有机械寿命和电气寿命的。机械寿命通常几十万到上百万次,电气寿命在额定电流下往往只有十万次量级,带载分断还会更低。所以自检本身也是消耗寿命的动作,不能做成每次上电就反复吸合十几次,时序设计要在"覆盖足够"和"少动作"之间取平衡。

1.2 粘连这个失效模式为什么必须单独处理

触点粘连是功率继电器最高发的失效形式,成因主要有三类。第一类是分断电弧:并网瞬间或带载分断时,触点间会产生电弧,电弧温度足以让触点表面局部熔融,冷却后焊在一起。第二类是机械原因:触点弹簧疲劳、衔铁卡滞、异物进入,导致释放时触点没有真正弹开。第三类是长期微电流氧化:触点表面形成氧化膜后接触电阻变大,吸合时局部发热,反复热循环后材料软化变形。

三种成因对应三种表现:电弧粘连往往在若干次大电流分断之后突然出现;机械卡滞可能从出厂就有,也可能随振动逐渐发展;氧化导致的变形则是缓慢劣化。对软件来说,它们都表现为同一个现象——下发分闸指令后,触点两侧的电气连接依然存在。

粘连的危险在于它是"隐性"的。软件认为已断开,实际还连着,此时如果维护人员以为已经隔离而去触碰接线端子,或者系统在故障状态下以为已隔离却仍有反送电通路,后果都很严重。所以行业通用的并网规范里都会要求:并网前必须确认开关器件状态正常;检测到开关失效必须锁存故障,不允许自动恢复并网。

1.3 自检逻辑必须回答的三个问题

我把整套自检拆成三个递进的问题,写代码时也是按这三层组织的。

第一个问题:现在是断开的吗。上电初始状态、故障后、待机时,都要先确认继电器确实处于分闸状态,且逆变侧没有残留电压。这一步顺带验证了采样链路本身是活的。

第二个问题:每一只继电器单独动作是否正常。这需要分时激励,逐只吸合,观察其他采样点的响应。响应"该来没来"是驱动或线圈故障,"不该来却来了"是别处的触点粘连。

第三个问题:合闸之后是否真的合上了。这一点经常被漏掉——很多实现只做合闸前的检测,不做合闸后的确认。合闸后要观察逆变侧电压与电网侧电压是否真正同步、幅值差是否在合理范围,否则继电器线圈通电但触点没闭合,逆变器会带着一个"看起来并网了"的假象去发波,结果输出电流全部灌在本地负载上。

这三个问题的检测对象、窗口长度、判定阈值都不一样,混在一起写必然乱。状态机就是用来把这三层物理隔离开的。

2. 双继电器串联下的采样点与时序预算

2.1 三个采样点的物理含义

典型的三相并网机型,常见拓扑是每相一只继电器,或者 A、B 两相用继电器、C 相直连。为了自检,至少需要两处电压采样:电网侧采样(继电器电网端,反映并网点电压)和逆变侧采样(继电器逆变端,反映逆变器输出侧电压)。有的方案还会在两只串联继电器之间加一个中间节点采样,这个点很有价值,能把故障定位到具体是哪一只。

三处采样的含义各不相同。电网侧采样正常有压,它是自检的"参考源",如果它没电压,整套自检就没法进行,只能报"电网异常"。逆变侧采样在继电器断开且母线放电完成后应该接近零,如果它跟着电网走,说明存在通路。中间节点采样则直接反映"第一只继电器是否闭合"——第一只合上、第二只断开时,中间节点应该出现电网电压;第一只断开时,中间节点应该是零。

实际产品里加中间节点采样要考虑绝缘距离和成本,很多机型省掉了。省掉之后的替代方案是利用三相之间的互相验证:只合 A 相继电器,B、C 相的逆变侧采样点如果也出现电压,说明 B 或 C 相存在粘连通路。这个手法在相间没有强耦合的前提下相当可靠,代价是自检要多跑几轮。

2.2 分闸之后为什么不能立刻判断

这是新手最容易踩的坑。继电器分闸指令下发后,触点真正断开有释放时间,典型值 4 到 8 毫秒;触点弹跳还要额外几百微秒到几毫秒。但这只是开始——逆变侧的滤波电容、X 电容、Y 电容、母线电容上残留的电荷需要泄放,这段才是大头。

以逆变侧为例,差模滤波电容和泄放电阻构成 RC 回路,时间常数 τ = R × C。假设等效电容 2.2 μF、泄放电阻 1 MΩ,τ 就是 2.2 秒,按 5τ 稳定需要 11 秒,这显然不能接受。所以工程上要么把泄放电阻取小(比如 330 kΩ,τ 降到 0.7 秒,但仍需 3 秒以上),要么在分闸后主动让逆变器工作一小段时间把电容能量抽走,要么干脆不等完全放电,而是用"电压是否跟随电网相位"来判断而不是用"电压是否为零"。

我个人更倾向最后一种:不去等电容放干净,而是在分闸后 100 到 200 毫秒时采集一段数据,看逆变侧电压的幅值和相位是否与电网侧一致。粘连时两者高度同步,残留电荷则表现为幅值逐渐衰减、相位关系不稳定的自由响应。这个判据对放电时间的依赖小得多,实测鲁棒性明显更好。

提示:泄放电阻的取值要在"放电速度"和"待机功耗"之间权衡。待机功耗是并网机型的硬指标,1 MΩ 在 230 V 下就有 50 mW 量级的持续损耗,多路加起来不容忽视。用主动放电配合相位判据是更现实的路线。

2.3 一次完整自检的时序预算

把动作和等待排开,一次完整自检的耗时并不短。下面是一组我在三相机型上用过的时序,供参考。

阶段动作等待时间判定内容
S1全部断开200 ms逆变侧无压、电网侧有压
S2合 A 相继电器60 msA 相逆变侧出现电压,B/C 相仍无压
S3断开 A 相200 msA 相逆变侧电压消失
S4合 B 相继电器60 msB 相逆变侧出现电压,A/C 相仍无压
S5断开 B 相200 msB 相逆变侧电压消失
S6重复 C 相—同上
S7三相全合60 ms三相压差在阈值内
S8确认并网40 ms电压幅值、频率、相位一致

粗算下来接近 1 秒。如果追求上电到并网的响应速度,这个耗时是要纳入开机流程考量的。压缩的办法有几个:把 S3、S5 的等待时间缩短(但要留够泄放和采样窗口);把三相合并成一轮做(同时合三只,靠相间互检判断);或者在待机过程中周期性做单相抽检,把完整自检留给冷启动。最后一种做法适合有频繁开关机需求的场景。

3. 粘连判定的四种手法与各自的盲区

3.1 电压跟随法:主力手段,但怕"假跟随"

电压跟随法的核心是比较逆变侧和电网侧电压。断开状态下,如果逆变侧电压幅值达到电网侧的 60% 以上,且频率、相位与电网一致,判定为粘连。用一个比值判据比绝对阈值稳,因为电网电压本身会波动。

盲区有两个。第一是采样串扰:逆变侧和电网侧采样回路如果走线平行、共地阻抗大,高压侧信号可能通过寄生参数耦合过来,产生一个幅值不大但相位同步的"假电压"。这种情况下比值判据会误触发,特征是幅值通常在 10% 到 30% 之间,且与采样线束的走线强相关。解决办法是加大采样回路的隔离、提高比值阈值、或者用后面说的"多相验证"交叉确认。

第二个盲区是负载侧反送:如果逆变器输出端接了本地负载或者另一台设备,断开继电器后逆变侧仍可能有电压。这时候幅值判据会失效,必须结合相位和阻抗信息。实际做法是判"电压是否被钳位在电网电压附近",而不是判"有没有电压"。

3.2 母线跌落速率法:判断"是否还在吸收能量"

继电器断开后,逆变器如果还在工作(比如做无功补偿、做电压跟踪),会持续从某个源吸收能量。粘连时,这个源是电网,母线电压会被牢牢钳住;正常断开时,母线只能靠 PV 输入或者逐渐跌落。所以观察母线电压在断开后一段时间内的变化率,可以作为辅助判据。

这个手法的盲区在于光照。有光照时 PV 侧持续给母线充电,母线电压会被顶住,跌落速率法完全失效。只有夜间或者 PV 输入被切断的工况下,这个判据才可靠。所以它只能当辅助,不能当主判据。不过它在"夜间自检"这个特定场景下很好用,成本几乎为零,不用额外硬件。

3.3 驱动侧回读:确认"指令被正确执行"

驱动侧回读检查的是线圈和驱动电路,典型做法是在线圈低端串一个采样电阻,通过线圈电流判断状态:电流近似为零说明线圈开路或驱动管没导通;电流明显超过额定说明线圈短路或驱动管直通。也有用高边驱动加分压检测的,只能判断驱动管是否动作,判断不了线圈状态,信息量少一半。

要明确一点:驱动侧回读无法判断触点状态。线圈通电、触点粘连、线圈没通电、触点正常——这四种组合里,回读只能区分"线圈有没有通电"。所以它永远只能作为"执行链路是否正常"的补充证据,粘连判定还得靠电压。

但它的价值在于快速定位。一旦自检失败,先看驱动回读:回读异常说明问题在电路,回读正常说明问题在触点或采样,排查方向立刻分岔。这个信息在售后阶段非常值钱。

3.4 多相交叉验证:用冗余换确定性

三相机型有一个天然优势:每相独立。只激励一相,观察另外两相的响应,就能构建一个矩阵式的判据。正常情况下的响应矩阵是稀疏的,只有被激励的那一相出现电压。如果非激励相也出现电压,说明那一相的触点粘连或者存在相间短路通路。

这个方法的好处是把"是否存在粘连"升级成"哪一相粘连",而且不需要中间节点采样。代价是自检轮次变多。下表把四种手法的适用性和盲区做个对照。

手法依赖硬件能判定的故障主要盲区建议定位
电压跟随法双路电压采样触点粘连采样串扰、负载反送主判据
母线跌落速率法母线采样能量通路异常有光照时失效夜间辅助
驱动侧回读采样电阻或分压线圈/驱动故障无法判断触点故障定位
多相交叉验证各相独立采样定位到具体相相间耦合冗余确认

工程上的常规组合是"电压跟随法为主 + 多相交叉验证兜底 + 驱动回读做定位",母线跌落法看具体机型和场景决定要不要加。别指望单一判据做到零误报零漏报,物理上做不到。

4. 状态机怎么划:事件、守卫与超时

4.1 状态划分要按"物理动作"而不是"功能"

我见过不少实现把状态机按业务功能划分,比如"初始化态、自检态、并网态、故障态"。这种划分粒度太粗,自检态里塞了一堆 if-else,最后变成几百行的面条代码。更好的做法是按物理动作划分:每一个"会改变继电器状态或者需要等待稳定"的动作,就是一个状态。

按这个原则,一个可用的状态集合大概是这样的:IDLE(全部断开)、CHK_OPEN(确认分离)、CLOSE_TEST_A、WAIT_A、OPEN_TEST_A、WAIT_REL_A、CLOSE_TEST_B……一直到三相循环完成、ALL_CLOSED、VERIFY_ON、RUN,失败则进FAULT_LATCH。状态多了看起来啰嗦,但每个状态的职责单一,调试时能立刻定位卡在哪一步,而且超时保护可以直接挂在状态上。

状态多了会带来一个问题:状态转移图容易画成一团。解决办法是把周期性重复的部分抽成表驱动,三相各一个表项,用一个索引变量推进,代码量立刻降下来。这个技巧后面代码里会体现。

4.2 每个状态必须配一个超时

这是硬性要求,没有例外。任何"等待某个物理量达到某个条件"的状态,如果条件永远不满足,程序就会永远卡在那里。继电器自检的所有等待都涉及机械动作和电气响应,都可能因为硬件故障不响应,所以每个状态都要有超时计数。超时后不是简单重试,而是直接进故障锁存,并记录是哪个状态超时——这个信息在售后排查时价值极高。

超时值的取法有个经验:实际响应时间的 3 到 5 倍。继电器吸合时间 8 到 15 毫秒,加弹跳,加采样滤波,一个 60 毫秒的窗口是合理的;如果你的采样是每工频周期算一次有效值,那就至少要给 2 到 3 个周期,也就是 40 到 60 毫秒,取 100 毫秒更保险。窗口给太短,低温环境下继电器动作变慢就会误报;窗口给太长,真正的故障要等很久才被发现,影响用户体验。

4.3 一段能直接用的状态机骨架

下面这段是我常用的 C 语言骨架,去掉业务细节后保留结构。它的特点是:状态函数统一签名、每步返回耗时、超时由外层的 tick 统一裁决。

typedef enum { ST_IDLE = 0, ST_CHK_OPEN, ST_CLOSE_A, ST_WAIT_A, ST_OPEN_A, ST_WAIT_REL_A, ST_CLOSE_B, ST_WAIT_B, ST_OPEN_B, ST_WAIT_REL_B, ST_CLOSE_C, ST_WAIT_C, ST_OPEN_C, ST_WAIT_REL_C, ST_ALL_CLOSED, ST_VERIFY, ST_FAULT, ST_NUM } relay_st_t; typedef struct { relay_st_t st; uint32_t tick_in_state; /* 本状态已停留的 tick 数 */ uint32_t timeout; /* 本状态超时门限 */ uint8_t ph; /* 当前相索引 0/1/2 */ uint16_t fault_code; } relay_ctx_t; /* 返回 0 继续停留,返回 1 表示本状态完成可推进 */ static int step_chk_open(relay_ctx_t *c) { if (!grid_volt_present()) return -1; /* 直接失败 */ if (inv_volt_rms(ALL_PH) > V_ABSENT) return -1; /* 分离失败 */ return 1; } static int step_wait_phase(relay_ctx_t *c) { /* 等待指定相逆变侧出现电压,且该相为当前激励相 */ if (inv_volt_rms(c->ph) < V_PRESENT) return 0; /* 非激励相必须保持无压,否则就是粘连 */ for (uint8_t i = 0; i < 3; i++) { if (i != c->ph && inv_volt_rms(i) > V_ABSENT) return -1; } return 1; }

外层调度是这样:

void relay_sm_tick(relay_ctx_t *c, uint32_t dt_ms) { int r; c->tick_in_state += dt_ms; if (c->tick_in_state > c->timeout) { c->fault_code = FAULT_TIMEOUT_BASE + c->st; c->st = ST_FAULT; return; } switch (c->st) { case ST_CHK_OPEN: r = step_chk_open(c); break; case ST_WAIT_A: r = step_wait_phase(c); break; /* ... 其余状态省略 ... */ default: r = 1; break; } if (r < 0) { c->fault_code = FAULT_STEP_BASE + c->st; c->st = ST_FAULT; } else if (r > 0) { relay_state_advance(c); } }

relay_state_advance里做的是状态推进和超时重装,三相循环通过c->ph递增来实现,避免写三份重复代码。这套结构的另一个好处是可测试:把所有采样函数做成可替换的桩,就能在 PC 上跑完整的时序仿真,不用接硬件。

4.4 故障必须锁存,不能自愈

这一条写在最前面说:检测到粘连,故障必须锁存。不允许"下一轮再试一次",不允许"重启后自动清除",不允许靠断电重启绕过。理由很直接——粘连是物理失效,不会自己好。软件自愈只会把故障藏起来,等到有人身接触或者电网侧异常时才爆发。

现实的做法是分级:首次检测到粘连,锁存故障、上报、停机、等待人工干预;如果维护人员执行了明确的复位操作,允许再跑一次完整自检,通过则恢复,不通过则再次锁存。同时维护一个故障计数,累计超过一定次数(比如 3 次)后进入永久锁定,必须更换硬件并做专门的清障流程。这个计数器要存在非易失区域,掉电不丢。

5. 阈值、窗口与采样可信度

5.1 有压/无压阈值怎么定

阈值不能拍脑袋。以 230 V 额定相电压为例,常见取法是:判"有压"用 50 V(约 22% 额定),判"无压"用 30 V,中间留 20 V 滞环。滞环的作用是防止电压在阈值附近抖动导致状态反复跳变,尤其是自检过程中电网电压本身会波动。

但比值判据比绝对阈值更实用。定义ratio = U_inv / U_grid,粘连判定用ratio > 0.6,正常分离判定用ratio < 0.25。这样在电网电压偏低(比如 180 V)或者偏高(比如 250 V)时判据自动缩放,不用改参数。要注意除零保护,U_grid小于某个下限时直接判电网异常,不进入后续流程。

三相系统还有个细节:三相电压不平衡。如果某一相电压偏低,用同一套绝对阈值可能导致该相自检失败。稳健做法是用该相自己的电网侧电压做基准,逐相计算比值。

5.2 采样链路本身也要自检

这是个容易被忽略的点:整套粘连检测建立在"采样可信"的前提上,如果采样回路本身坏了,比如运放失效、采样线断开、ADC 通道卡死,读取值可能是零也可能是满量程,两种情况下自检结果都不可信——可能是漏报(读到零,永远判"已分离"),也可能是误报(读到满量程,永远判"粘连")。

所以采样链路要有独立的合理性检查。最基础的几条:电网侧电压在自检开始时必须在合理区间(比如 180 到 270 V),否则报电网异常而不是继电器故障;三相电压之间的不平衡度要小于某个门限;ADC 原始码值不能长期贴在零或满量程;两次采样之间不能完全没有变化(完全不变说明通道卡死)。

有条件的话做注入检测:在采样前端加一个可切换的参考信号,定期注入看读数是否响应。这个成本不低,一般只在高端机型上做。

5.3 消抖窗口和滤波周期

电压有效值的计算周期直接决定了自检的响应速度和抗干扰能力。用单周期计算(20 毫秒),响应快但对谐波和瞬时扰动敏感;用 3 到 5 个周期滑动平均,稳但慢。自检场景不要求快,我一般用 5 个周期,也就是 100 毫秒一个判决点。

消抖的做法是"连续 N 次判决一致才认"。比如连续 3 个判决点都判粘连,才真正置故障;期间只要有一次判正常就清零计数。这对触点弹跳和电网瞬时跌落都有很好的抑制效果。要注意消抖计数器和状态超时的配合——消抖需要 3 个判决点就是 300 毫秒,状态超时至少得给到 400 毫秒,否则消抖还没完成就超时了。

6. 误报排查:从现象倒推的那条链路

6.1 先分清"真粘连"和"假粘连"

现场报"继电器粘连故障",第一步永远是确认故障的真实性,而不是急着改代码。确认方法很朴素:断电,用万用表测触点通断。这一步能排除掉大半的软件误报。

如果万用表测下来触点确实是断开的,那就是误报,问题在检测链路。这时候按"采样—泄放—驱动—环境"的顺序查,不要跳步。我见过的误报里,采样串扰和泄放不彻底占了七成以上。

6.2 采样串扰的典型特征和验证方法

串扰导致误报的特征很明显:故障总是出现在特定的机器上,换一块板子就好;或者在特定走线布局下高发;或者断开某根采样线后故障消失。验证方法是断开逆变侧采样线的输入端,短接到地,看读数是否归零。如果不归零,说明通道内部有串扰或者 ADC 参考有问题。

还有一种串扰来自共模干扰。三相采样如果共用一个运放的参考地,某一相的高压可能通过共模路径影响到另一相。解决方法是各相采样独立差分、独立参考,或者提高共模抑制能力。软件层面能做的是在判决时同时看多相,如果非激励相读数和激励相高度相关(相关系数接近 1),基本可以判定是串扰而不是真粘连。

6.3 泄放不彻底造成的"边界误报"

这类误报很隐蔽,因为它不是每次都出现,而是和分闸前的工况相关。比如分闸前逆变器正在满载输出,逆变侧电容储能多,泄放时间更长;或者环境温度低,泄放电阻阻值变化。表现就是"满功率运行后停机,下次启动自检失败"。

排查方法是记录自检失败时的逆变侧电压读数。如果读数在判据阈值附近徘徊(比如比值 0.5 到 0.7 之间),且随时间单调衰减,那基本就是泄放问题。解法是把判定时机往后推,或者改用相位同步判据而不是幅值判据。相位判据对衰减中的自由响应不敏感,因为自由响应的频率会偏离电网频率。

6.4 电网侧环境引起的连锁反应

有一类问题根子不在逆变器而在电网。电网电压闪变、短时跌落、谐波污染严重时,电网侧采样的有效值会剧烈波动,导致比值判据的基准不稳,进而误判。这类故障的特征是:同一台机器在实验室好好的,装到某个现场就频繁报;或者白天报夜里不报(和负载变化相关)。

应对办法是加"电网质量门槛":自检开始前先确认电网电压稳定在一定范围内、频率在范围内、谐波含量不超限,不满足就报电网异常并等待,而不是硬着头皮做自检然后报继电器故障。这个改动看起来是"把问题推给电网",实际上是正确的责任划分——电网不正常的条件下,任何自检结论都不可信。

7. 故障注入与产线验证怎么覆盖

7.1 软件层面的故障注入

自检逻辑写完,最怕的是"从来没见过故障,不知道故障路径通不通"。所以要有故障注入机制:用一个调试变量或者隐藏菜单,可以让指定的相在指定阶段"假装粘连"或者"假装不响应",用来验证状态机的故障分支、故障码上报、锁存逻辑、复位流程是否都正常工作。

注入要覆盖的分支至少包括:分离检查失败、单相激励无响应(驱动或线圈故障)、非激励相出现电压(另一相粘连)、全合后压差超限、各状态超时。每一条都要走一遍,确认故障码正确、上报正确、复位行为正确。

7.2 产线工装怎么接线

产线的继电器自检工装通常是一个可编程的交流源加一组接触器,用来模拟电网和故障。测试项一般包括:正常自检通过、单相触点短接后应报故障、线圈开路后应报故障、采样线断开后应报故障。工装的难点在于"短接触点"这个动作要在正确的时序上完成,太早会干扰正常的分离检查,太晚又抓不到。用软件注入配合工装是更现实的做法——工装只负责提供电网,故障由软件注入,这样测试节拍快、覆盖全。

7.3 一个经常被漏掉的场景

重复自检的一致性。有些产品允许在待机时周期性做自检(比如每隔 30 分钟做一次快速检查),这时候要确认多次自检的结果稳定,不能一次过一次不过。不稳定通常意味着阈值卡在边界上,需要调整滞环或者延长窗口。这个场景在实验室不容易复现,因为实验室电网太干净、温度太稳定,建议在高温老化工装和高低温箱里都跑一遍。

8. 几个真踩过才知道的细节

第一个细节:继电器释放时间在低温下会明显变长,-25 ℃ 时的释放时间可能是常温的 1.5 倍以上。如果分闸后固定等 100 毫秒就判"应该已断开",低温环境下会抓到触点还在弹跳的瞬间,读到一个忽高忽低的电压,触发误报。解决办法是把等待时间做成温度相关的,或者用"连续 N 次采样都低于阈值"代替"单次采样低于阈值"。

第二个细节:三相同时断开和逐相断开,母线上的电压响应不一样。逐相断开时,后断开的相会因为负载不对称产生过零漂移,采样到的有效值不可靠。所以判断"已分离"必须在三相全部断开之后统一做,不要在逐相断开的间隙做判决。

第三个细节:驱动侧回读的采样电阻如果取值太小,线圈电流的读数会淹没在噪声里,判断开路不可靠;取值太大,压降会影响线圈的实际电压,导致吸合不可靠。这个电阻的取法建议按"正常电流下压降不超过线圈额定电压的 5%"来算,再配合足够的放大倍数和滤波。

第四个细节:故障码的编码方式。状态机每一步失败都应该有独立的故障码,不要笼统地报"继电器故障"。售后拿到故障码就能知道卡在哪一步,省掉大量沟通。编码可以用"高位表示阶段、低位表示原因"的方式,比如 0x21 表示第一阶段(分离检查)原因是超时。

第五个细节:这套逻辑写完一定要有 PC 端的时序仿真。把采样接口抽象成桩函数,用脚本模拟各种电压曲线(正常、粘连、串扰、慢泄放、电网闪变),跑几百组用例,比在硬件上一个个试快一个数量级,而且能覆盖到边界条件。这个投入我一开始觉得麻烦,做了一次之后发现后续每次改逻辑都省事,很值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询