四电机控制器实战(五):异常检测的六道防线 电子说
升降桌是承重设备,一旦某条腿堵转、掉线或超行程,桌面就可能倾斜甚至倾覆。这一篇讲怎么用"电流 × 霍尔 × 占空比"三个信号,把真故障和误报区分开,构建六道安全防线。
一、三个信号,六道防线
所有故障判定都基于三个原始信号:电流 I(IPROPI + ADC)、霍尔位移(位置脉冲增量)、CCR(MCU 施加的占空比)。三者交叉,构成六道防线:
| 防线 | 判据 | 动作 |
| ① 到顶/到底 | UP 时 pos≥total−5,DOWN 时 pos≤5 | 谁先到谁先停,组停后归位 |
| ② 越界兜底 | 电流>2× 且转速几乎不变 | 全组进校准(处理"物理顶死但脉冲没到端点") |
| ③ 堵转 | 电流骤增(1.5×~2×) + 霍尔骤减 | 停组,只允许反方向 |
| ④ 掉线 | 电流<15mA + 霍尔无位移 + CCR满速 | 停组,报"未连接" |
| ⑤ 霍尔异常 | 电流正常 + 霍尔不动 + CCR满速 | 停组,报"霍尔错误" |
| ⑥ 脉冲越界 | pos 超出 0..total ±25 | 位置跟踪异常 → 校准 |
判定优先级严格排序:
二、核心:用 CCR 区分"主动减速"和"真故障"
这是整个检测体系里最关键的设计。掉线、霍尔异常、堵转的判据都要求"霍尔不动",但霍尔不动有两种完全不同的原因:
真故障:MCU 满速驱动(CCR≈4800),电机却无响应——开路/霍尔断线。
主动减速:同步补偿把超前电机压到低 CCR(40~67%)停转——这是有意的,不是故障。
如果只看"霍尔不动"就报故障,就会把同步补偿的正常减速误判成掉线/霍尔异常。解法是引入 CCR 作为"MCU 驱动意图"的判据:
只有"CCR 满速 + 霍尔不动"才可能是真故障;"CCR 低 + 霍尔停"是主动减速,跳过判定。
三、一个经典误报:伪掉线
掉线判据是"电流 < 15mA"。但实测发现一个现象:电机接近停转时,反电动势 ≈ 平均电压,电流会骤降到 24~78mA 的临界值——看起来很像"掉线"(电流骤降),其实是正常的减速过程。
区分要点:
| 场景 | CCR | 电流 | 霍尔 | 本质 |
| 真掉线(开路) | 满速(4800) | ≈0mA | 永久停 | 无回路 |
| 伪掉线(减速) | 低(40~67%) | 24~78mA | 短暂停 | 主动减速,反电动势顶住 |
所以掉线判据要求三条件同时满足:电流<15mA + 霍尔无位移 + CCR满速,用 CCR 满速把"伪掉线"排除掉。
四、启动保护期
电机启动有特殊时序:GPIO 直驱满压冲静摩擦 + HT8251A 方向反转后约 800ms 的保护恢复期。这段时间里电机可能还没转出霍尔脉冲,若立即判堵转/掉线会误报。因此设置 1s 启动保护期:
但注意:越界兜底(②)和到顶/到底(①)不受保护期限制——因为端点顶死恰恰发生在启动保护期内,必须立即截断,否则电流爬升会拉低电源导致 MCU 复位。
五、判定窗口与确认机制
为了抗抖动,霍尔位移采用"窗口结算"而非逐 tick 判断:
窗口结算:每 5 个 tick 算一次霍尔位移 Δpos,moved = (Δpos != 0)。
连续确认:掉线/霍尔异常要连续 3 个窗口都无位移才判,避免"同步补偿短暂压停(几百 ms)"被误判。
六、整体流程
flowchart TD
TICK[每 tick 检测] -- > A{到顶/到底?}
A --是-- > STOP1[谁先到谁先停]
A --否-- > B{电流 >2× 且转速不变?}
B --是-- > CAL[越界兜底: 全组校准]
B --否-- > G{启动保护期内?}
G --是-- > SKIP[跳过掉线/堵转/霍尔异常]
G --否-- > D{电流< 15mA + 霍尔停 + CCR满速?}
D --是-- > ERR1[掉线: 停组+报错]
D --否-- > E{电流骤增 + 霍尔停?}
E --是-- > ERR2[堵转: 停组+只许反向]
E --否-- > F{电流正常 + 霍尔停 + CCR满速?}
F --是-- > ERR3[霍尔异常: 停组+报错]
F --否-- > OK[正常]
七、小结
异常检测的精髓是多维交叉判定 + 引入驱动意图:
单靠"电流"或单靠"霍尔"都会误报,必须 电流 × 霍尔 × CCR 三信号交叉。
CCR 满速是区分"主动减速"和"真故障"的钥匙——这是把误报从几十次降到 1 次的关键。
启动保护期挡住启动阶段的误报,但越界/限位不受保护(端点顶死必须立即截断)。
窗口结算 + 连续确认抗抖动,避免瞬时信号误触发。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !