3、异常类型概述:详细分析机器人常见的异常类型(卡死、碰撞、低电量、急停)及其触发条件

在STM32机器人控制系统中,异常保护机制的设计前提是准确识别“何时需要保护”以及“保护什么”。如果连异常类型都无法清晰界定,后续的保护策略、恢复流程和故障记录都将失去依据。本章围绕机器人运行中最常见的四类异常——卡死(机械堵转)、碰撞(外部冲击)、低电量(能源枯竭)和急停(人为干预),从触发条件、物理特征、信号表现和工程判定逻辑四个维度展开分析。理解这些异常的本质差异,是编写健壮异常处理代码的前提。

STM32机器人四类异常触发条件与判定链路 STM32 主控 异常仲裁与保护决策 ① 卡死(机械堵转) 触发:电流突增 + 转速骤降 判定:I > 1.5×I_nom 且 RPM < 10% 时间窗:持续 200ms 以上 ② 碰撞(外部冲击) 触发:加速度突变 + 电流尖峰 判定:IMU 加速度 > 2g 或 电流 > 2.5×I_nom 时间窗:瞬时(<50ms) ③ 低电量(能源枯竭) 触发:电池电压低于阈值 判定:Vbat < 3.3V/节(锂电) 时间窗:持续 1s 以上 ④ 急停(人为干预) 触发:急停按钮按下 / 遥控指令 判定:GPIO 电平跳变 / 串口指令 时间窗:立即生效(<10ms) 保护动作输出 PWM封锁 / 刹车 / 报警 关键判定原则: • 卡死与碰撞均表现为电流异常,区别在于时间窗与转速变化率:卡死是持续堵转,碰撞是瞬时冲击。 • 低电量是缓变异常,需软件滤波防止误触发;急停是最高优先级,必须硬件中断响应。

上图展示了四类异常在STM32系统中的触发链路与判定维度。可以看到,卡死和碰撞在电流信号上存在重叠区域,但时间特征截然不同;低电量属于缓变信号,需要软件滤波;急停则属于外部事件,必须通过硬件中断或独立GPIO通道快速响应。下面逐一展开分析。

3.1 卡死异常:机械堵转的识别与判定

核心原理

卡死是指机器人运动机构(如轮子、关节、丝杠)因外部障碍物、机械故障或内部齿轮卡滞而无法转动。此时电机仍然通电,但转子被锁定,反电动势(Back-EMF)降为零,导致电枢电流急剧上升。从电气角度看,电机等效为纯电阻负载,电流由母线电压和绕组电阻决定:I_stall = V_bus / R_winding。正常运行时电流约为额定电流的20%~60%,而堵转电流可达额定电流的3~8倍。

判断方法

在STM32控制系统中,卡死检测通常采用电流-转速联合判定法,具体流程如下:

  1. 电流采样:通过采样电阻或霍尔电流传感器,以1kHz~10kHz的采样率获取电机相电流或母线电流。
  2. 转速监测:使用编码器(增量式或式)获取实际转速,或通过反电动势估算转速(无感方案)。
  3. 阈值比较:当电流持续超过额定电流的150%且转速低于额定转速的10%时,判定为卡死。
  4. 时间窗确认:为避免瞬时电流尖峰(如启动瞬间)造成误判,需持续检测200ms~500ms。时间窗过短会误报,过长则可能烧毁电机。
工程经验:对于带减速箱的直流电机,建议将卡死检测时间窗设为300ms。减速比越大,机械惯性越大,允许的检测时间越长。例如,1:30减速比的电机,堵转后300ms内电流即可稳定在堵转值,此时封锁PWM不会造成电机过热损伤。

案例拆解:AGV小车轮子卡死

某AGV小车在运行中左前轮被地面凸起卡住,STM32F407主控通过INA240电流传感器采样母线电流。正常行驶电流为1.2A,堵转后电流在80ms内上升至4.8A(约4倍额定)。同时编码器反馈转速从3000rpm骤降至120rpm。程序在检测到电流>1.8A且转速<300rpm持续200ms后,立即封锁左前轮PWM输出,并触发蜂鸣器报警。从卡死发生到保护动作,总耗时约280ms,电机绕组温度仅上升12℃,未造成永久损伤。

常见误区

  • 仅依赖电流判断:启动瞬间电流同样会超过额定值,但转速正常上升,需结合转速信号区分。
  • 时间窗设置过短:50ms的检测窗口在电机启动时极易误触发,导致机器人频繁停机。
  • 忽略温度补偿:电机绕组温度升高时电阻增大,堵转电流会下降,固定阈值可能失效。建议根据NTC温度传感器做阈值修正。

3.2 碰撞异常:外部冲击的快速响应

核心原理

碰撞是机器人与环境物体发生非预期接触时产生的瞬时冲击。与卡死不同,碰撞发生时电机可能仍在转动,但外部力矩突然施加在机器人本体上,导致加速度突变、电流尖峰以及姿态变化。碰撞检测的关键在于“快”——必须在几毫秒内识别并响应,否则冲击力会传递到减速箱或结构件,造成机械损伤。

判断方法

碰撞检测通常融合多传感器信号,形成冗余判定:

信号源特征表现判定阈值响应时间
IMU加速度计三轴加速度合成值突变合成加速度 > 2g(约19.6m/s²)<5ms
电机电流电流尖峰(持续时间短)电流 > 2.5×额定电流,持续<50ms<10ms
陀螺仪角速度角速度突变(旋转冲击)角速度变化率 > 500°/s²<5ms
力传感器(可选)接触力超过安全阈值根据机械结构设定<2ms

在STM32中,碰撞检测建议使用外部中断+定时器捕获的方式。IMU数据通过SPI/I2C接口以1kHz速率读取,当加速度超过阈值时触发中断,主控立即进入碰撞处理流程。

风险提示:碰撞检测的误报率与漏报率需要平衡。阈值设置过低(如1.2g)会导致机器人经过减速带或颠簸路面时频繁误触发;阈值过高(如3g)则可能漏检低速碰撞。建议根据实际应用场景标定,并加入“碰撞后速度变化率”作为辅助判据。

案例拆解:服务机器人撞到玻璃门

某服务机器人在走廊中行进,前方玻璃门未检测到(反光导致激光雷达失效),以0.8m/s速度撞上。碰撞瞬间,MPU6050检测到Z轴加速度从1g突变为2.8g,同时左驱动电机电流从1.5A跳变至3.9A。STM32在3ms内响应,立即封锁两个驱动电机的PWM输出,并启动反向制动(施加20%反向占空比持续100ms)。机器人停止后,通过串口向上位机发送碰撞事件,记录碰撞角度和速度。事后检查,机器人前保险杠轻微变形,但内部电路和电机完好。

常见误区

  • 只依赖电流检测碰撞:碰撞时如果电机处于轻载状态,电流尖峰可能不明显,容易漏检。
  • 忽略碰撞后的姿态恢复:碰撞可能导致机器人倾斜或侧翻,保护流程中应包含姿态检测和自动恢复逻辑。
  • 未区分碰撞方向:正面碰撞和侧面碰撞对机器人的危害不同,建议根据IMU数据判断碰撞方向,采取差异化响应。

3.3 低电量异常:能源枯竭的预警与保护

核心原理

低电量异常是电池供电机器人的特有风险。当电池电压低于安全阈值时,电机可能无法输出足够功率,控制电路可能复位,甚至电池过放导致永久损坏。低电量检测的核心在于“准确测量+分级预警”。由于电池电压在负载变化时会有明显波动(内阻压降),不能简单地将瞬时电压与阈值比较,需要采用滤波和滞回比较。

判断方法

低电量检测流程如下:

  1. 电压采样:通过STM32的ADC通道采集电池电压,采样率建议100Hz以上,使用均值滤波(窗口长度10~20个样本)。
  2. 分级阈值设定:设置两级阈值——预警阈值(如3.5V/节)和保护阈值(如3.2V/节)。预警时降低机器人速度并提示充电;保护时立即停止运动并保存关键数据。
  3. 滞回比较:为避免电压在阈值附近反复穿越导致频繁切换,设置滞回区间(如0.1V)。当电压低于保护阈值时触发保护,需电压回升至保护阈值+0.1V以上才能解除。
  4. 负载补偿:在电机大电流运行时,电池电压会瞬时跌落。可通过采样电流计算内阻压降,修正实际开路电压:V_ocv = V_measured + I_load × R_battery。
经验数据:对于3S锂聚合物电池(11.1V标称),建议设置:预警阈值10.5V(3.5V/节),保护阈值9.6V(3.2V/节),滞回0.3V。当电压低于9.6V持续1秒以上,STM32执行低电量保护流程:封锁PWM、保存运行日志、LED闪烁提示。

案例拆解:巡检机器人电量误判问题

某户外巡检机器人采用4S锂电池(14.8V),在爬坡时频繁触发低电量保护。排查发现,爬坡电流达8A,电池内阻约80mΩ,瞬时压降达0.64V。实际开路电压为13.8V,但ADC采样到的端电压仅13.16V,低于保护阈值13.2V。解决方案:在ADC采样后加入负载补偿算法,根据当前电流动态修正电压值。修改后,爬坡时不再误触发,同时将保护阈值调整为12.8V(3.2V/节),确保真正低电量时仍能可靠保护。

常见误区

  • 阈值设置过高:导致电池容量未完全释放就停机,缩短续航时间。
  • 未做滤波处理:电机启动瞬间电压跌落可能触发误保护。
  • 忽略温度影响:低温环境下电池内阻增大,相同电流下压降更大,需根据温度调整阈值或补偿系数。

3.4 急停异常:人为干预的最高优先级

核心原理

急停是唯一由外部人为触发的异常类型,具有最高优先级。无论机器人处于何种状态,急停信号必须立即生效,切断动力输出。急停的物理实现通常包括:独立急停按钮(常闭触点)、遥控器急停指令、上位机紧急停止命令。在STM32系统中,急停信号应接入外部中断引脚或独立看门狗通道,确保即使主程序死循环也能响应。

判断方法

急停的触发条件相对简单,但工程实现需注意以下几点:

触发源信号类型STM32接入方式响应要求
物理急停按钮数字量(常闭→断开)GPIO外部中断(下降沿)<10ms
遥控器急停串口指令 / 2.4G信号丢失UART接收中断 + 超时检测<20ms
上位机指令CAN / 以太网指令CAN接收中断 / 网络回调<50ms
看门狗超时程序跑飞检测独立看门狗(IWDG)复位时间可配置

急停处理流程应包含:立即封锁PWM输出 → 启动机械刹车(如有)→ 记录急停原因和时间 → 进入待机状态等待人工复位。注意,急停后不能自动恢复运行,必须由操作人员手动解除。

安全规范:急停按钮必须使用常闭触点串联在电机电源回路中,即使STM32完全失效,也能通过硬件切断电机电源。软件急停只能作为辅助手段,不能替代硬件急停回路。

案例拆解:遥控器信号丢失触发急停

某排爆机器人使用2.4G遥控器控制,在复杂电磁环境中遥控信号丢失。STM32通过UART接收遥控数据,设定200ms超时检测。当连续200ms未收到有效数据帧时,判定为遥控信号丢失,自动执行急停流程:封锁所有电机PWM、放下机械臂、开启警示灯。同时,程序进入安全模式,等待遥控信号恢复后,操作员需按下遥控器上的“解除急停”按钮才能重新控制。该设计避免了信号丢失后机器人失控的风险。

常见误区

  • 急停信号未使用硬件中断:如果通过轮询方式检测急停按钮,主程序卡死时急停将失效。
  • 急停后未切断动力电源:仅封锁PWM但电机驱动芯片仍通电,可能因故障导致意外输出。
  • 忽略急停后的状态恢复:急停后机器人可能处于不稳定姿态,恢复运行前需重新初始化并检查各传感器状态。

3.5 异常类型对比与综合判定策略

在实际系统中,四类异常并非完全独立。例如,碰撞可能导致电机堵转,低电量可能加剧堵转风险。因此,STM32的异常管理模块应采用优先级仲裁机制:急停 > 碰撞 > 卡死 > 低电量。当多个异常同时发生时,优先响应高优先级异常,并记录所有异常标志供后续分析。

异常类型信号特征时间特性典型响应恢复方式
卡死电流持续高 + 转速低持续(200ms+)封锁PWM、反转尝试人工排除障碍后复位
碰撞加速度突变 + 电流尖峰瞬时(<50ms)立即停机、反向制动自动检测姿态后恢复
低电量电压缓降缓慢(秒级)降速、保存数据、停机充电后自动恢复
急停外部信号跳变立即(<10ms)切断动力、锁存状态人工手动复位

综合判定策略建议采用状态机模型:正常运行态 → 异常检测态 → 保护动作态 → 恢复判断态。每个状态定义清晰的进入条件和退出条件,避免异常处理逻辑混乱。同时,所有异常事件应记录到Flash或EEPROM中,形成故障日志,便于事后分析和系统优化。

设计建议:在STM32工程中,建议将异常检测模块独立成文件(如fault_detect.c),通过结构体统一管理各异常标志位和阈值参数。这样既便于调试时修改阈值,也方便后续扩展新的异常类型(如过温、通信超时等)。