1、问题表象
通过标定数据查看超声波雷达实时的距离大小,发现距离并没有实时更新,而是在实际值与默认值之间跳变,更新十分缓慢。
泊车功能必须依赖超声波雷达测距来实现,当雷达数据更新缓慢时,会导致泊车失败。
2、超声波雷达测距实现原理
MCU给超声波雷达发送一个400us/580us的低电平,超声波雷达接收到之后会回复当前距离的波形。MCU在TASK中启动发波,然后再定时400us的中断中拉高IO,等待超声波雷达回波。
超声波雷达发波时间要求:
3、原因查找
实车测试发现,该问题在实车测试时百分百出现。因此直接抓取超声波雷达的通信波形,确认MCU发波是否正常。
波形结果:
- 单发多收实测波形:610~620us左右。——MCU发波最大会超过657us。
- 单发单收实测波形:430~440us左右。——MCU发波最大会超过472us。
通过测试通信波形确认,当前导致故障的原因是MCU发送的电脉冲时间超出最大的误差范围,导致雷达认为当前接收的波形无效因此没有回波。MCU接收不到回波则认为雷达距离为默认值。
4、问题排查
MCU发送给雷达的低脉冲的时间长短,取决于定时中断函数执行时间的影响,因为MCU IO拉高是在中断中执行的。当中断函数执行时间过长时,会导致MCU IO不会立马拉高,导致低脉冲时间增长。
测试中断函数的执行时间,确认该问题是否是因为中断执行时间过长导致的。
测试函数执行的函数接口及使用方法:
//函数执行时间测试接口:
#include "IfxStm_reg.h"
uint32 s_Stm1[100];
uint32 s_Stm2[100];
float32 s_stm[100];
uint8 s_i = <