3、异常类型概述:详细分析机器人常见的异常类型(卡死、碰撞、低电量、急停)及其触发条件
在STM32机器人控制系统中,异常保护机制的设计前提是准确识别“何时需要保护”以及“保护什么”。如果连异常类型都无法清晰界定,后续的保护策略、恢复流程和故障记录都将失去依据。本章围绕机器人运行中最常见的四类异常——卡死(机械堵转)、碰撞(外部冲击)、低电量(能源枯竭)和急停(人为干预),从触发条件、物理特征、信号表现和工程判定逻辑四个维度展开分析。理解这些异常的本质差异,是编写健壮异常处理代码的前提。
上图展示了四类异常在STM32系统中的触发链路与判定维度。可以看到,卡死和碰撞在电流信号上存在重叠区域,但时间特征截然不同;低电量属于缓变信号,需要软件滤波;急停则属于外部事件,必须通过硬件中断或独立GPIO通道快速响应。下面逐一展开分析。
3.1 卡死异常:机械堵转的识别与判定
核心原理
卡死是指机器人运动机构(如轮子、关节、丝杠)因外部障碍物、机械故障或内部齿轮卡滞而无法转动。此时电机仍然通电,但转子被锁定,反电动势(Back-EMF)降为零,导致电枢电流急剧上升。从电气角度看,电机等效为纯电阻负载,电流由母线电压和绕组电阻决定:I_stall = V_bus / R_winding。正常运行时电流约为额定电流的20%~60%,而堵转电流可达额定电流的3~8倍。
判断方法
在STM32控制系统中,卡死检测通常采用电流-转速联合判定法,具体流程如下:
- 电流采样:通过采样电阻或霍尔电流传感器,以1kHz~10kHz的采样率获取电机相电流或母线电流。
- 转速监测:使用编码器(增量式或式)获取实际转速,或通过反电动势估算转速(无感方案)。
- 阈值比较:当电流持续超过额定电流的150%且转速低于额定转速的10%时,判定为卡死。
- 时间窗确认:为避免瞬时电流尖峰(如启动瞬间)造成误判,需持续检测200ms~500ms。时间窗过短会误报,过长则可能烧毁电机。
案例拆解: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速率读取,当加速度超过阈值时触发中断,主控立即进入碰撞处理流程。
案例拆解:服务机器人撞到玻璃门
某服务机器人在走廊中行进,前方玻璃门未检测到(反光导致激光雷达失效),以0.8m/s速度撞上。碰撞瞬间,MPU6050检测到Z轴加速度从1g突变为2.8g,同时左驱动电机电流从1.5A跳变至3.9A。STM32在3ms内响应,立即封锁两个驱动电机的PWM输出,并启动反向制动(施加20%反向占空比持续100ms)。机器人停止后,通过串口向上位机发送碰撞事件,记录碰撞角度和速度。事后检查,机器人前保险杠轻微变形,但内部电路和电机完好。
常见误区
- 只依赖电流检测碰撞:碰撞时如果电机处于轻载状态,电流尖峰可能不明显,容易漏检。
- 忽略碰撞后的姿态恢复:碰撞可能导致机器人倾斜或侧翻,保护流程中应包含姿态检测和自动恢复逻辑。
- 未区分碰撞方向:正面碰撞和侧面碰撞对机器人的危害不同,建议根据IMU数据判断碰撞方向,采取差异化响应。
3.3 低电量异常:能源枯竭的预警与保护
核心原理
低电量异常是电池供电机器人的特有风险。当电池电压低于安全阈值时,电机可能无法输出足够功率,控制电路可能复位,甚至电池过放导致永久损坏。低电量检测的核心在于“准确测量+分级预警”。由于电池电压在负载变化时会有明显波动(内阻压降),不能简单地将瞬时电压与阈值比较,需要采用滤波和滞回比较。
判断方法
低电量检测流程如下:
- 电压采样:通过STM32的ADC通道采集电池电压,采样率建议100Hz以上,使用均值滤波(窗口长度10~20个样本)。
- 分级阈值设定:设置两级阈值——预警阈值(如3.5V/节)和保护阈值(如3.2V/节)。预警时降低机器人速度并提示充电;保护时立即停止运动并保存关键数据。
- 滞回比较:为避免电压在阈值附近反复穿越导致频繁切换,设置滞回区间(如0.1V)。当电压低于保护阈值时触发保护,需电压回升至保护阈值+0.1V以上才能解除。
- 负载补偿:在电机大电流运行时,电池电压会瞬时跌落。可通过采样电流计算内阻压降,修正实际开路电压:V_ocv = V_measured + I_load × R_battery。
案例拆解:巡检机器人电量误判问题
某户外巡检机器人采用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输出 → 启动机械刹车(如有)→ 记录急停原因和时间 → 进入待机状态等待人工复位。注意,急停后不能自动恢复运行,必须由操作人员手动解除。
案例拆解:遥控器信号丢失触发急停
某排爆机器人使用2.4G遥控器控制,在复杂电磁环境中遥控信号丢失。STM32通过UART接收遥控数据,设定200ms超时检测。当连续200ms未收到有效数据帧时,判定为遥控信号丢失,自动执行急停流程:封锁所有电机PWM、放下机械臂、开启警示灯。同时,程序进入安全模式,等待遥控信号恢复后,操作员需按下遥控器上的“解除急停”按钮才能重新控制。该设计避免了信号丢失后机器人失控的风险。
常见误区
- 急停信号未使用硬件中断:如果通过轮询方式检测急停按钮,主程序卡死时急停将失效。
- 急停后未切断动力电源:仅封锁PWM但电机驱动芯片仍通电,可能因故障导致意外输出。
- 忽略急停后的状态恢复:急停后机器人可能处于不稳定姿态,恢复运行前需重新初始化并检查各传感器状态。
3.5 异常类型对比与综合判定策略
在实际系统中,四类异常并非完全独立。例如,碰撞可能导致电机堵转,低电量可能加剧堵转风险。因此,STM32的异常管理模块应采用优先级仲裁机制:急停 > 碰撞 > 卡死 > 低电量。当多个异常同时发生时,优先响应高优先级异常,并记录所有异常标志供后续分析。
| 异常类型 | 信号特征 | 时间特性 | 典型响应 | 恢复方式 |
|---|---|---|---|---|
| 卡死 | 电流持续高 + 转速低 | 持续(200ms+) | 封锁PWM、反转尝试 | 人工排除障碍后复位 |
| 碰撞 | 加速度突变 + 电流尖峰 | 瞬时(<50ms) | 立即停机、反向制动 | 自动检测姿态后恢复 |
| 低电量 | 电压缓降 | 缓慢(秒级) | 降速、保存数据、停机 | 充电后自动恢复 |
| 急停 | 外部信号跳变 | 立即(<10ms) | 切断动力、锁存状态 | 人工手动复位 |
综合判定策略建议采用状态机模型:正常运行态 → 异常检测态 → 保护动作态 → 恢复判断态。每个状态定义清晰的进入条件和退出条件,避免异常处理逻辑混乱。同时,所有异常事件应记录到Flash或EEPROM中,形成故障日志,便于事后分析和系统优化。
fault_detect.c),通过结构体统一管理各异常标志位和阈值参数。这样既便于调试时修改阈值,也方便后续扩展新的异常类型(如过温、通信超时等)。