我在用ADXL362 做自由落体检测来触发ADXL372的测量流程;
用ADI的网站上的代码资源写了驱动,ID读写、测量模式开关、温度读写、XYZ轴值的读写、静止运动链接检测模式均没有问题且结果基本准确;
但自由落体检测功能一直难以实现。设置阈值远小于1g时仍然能触发。
按照datasheet上建议的步骤为:
1. 写入0x96(150个代码)到寄存器0x23:将自由落体阈值设置为600 mg。
2. 写入0x03到寄存器0x25:将自由落体时间设置为30 ms。
3. 写入0x0C到寄存器0x27:使能绝对静止检测。
4. 写入0x20到寄存器0x2A,以将静止中断映射到INT1。
5. 写入0x83到寄存器0x2C:配置加速度计为±8 g范围和100 HzODR(输出数据速率)。
6. 写入0x02到寄存器0x2D以开始测量。
写入后,传感器平放时,从status寄存器(0x0B)上读值就一直为0x61;无法实现低于阈值则判断为自由落体功能;
我之后尝试把 量程改为 2g,阈值设为 10(即0.01g),触发时间改为10,100ODR(即100ms);依然读出来0x61的值;
然后使用静止运动检测里面的代码调整了阈值,仍然误触发;
附上按照datasheet设置触发后读出的各寄存器值:(DEC)
ADXL362_REG_THRESH_INACT_H: 0
ADXL362_REG_THRESH_INACT_L: 150
ADXL362_REG_THRESH_ACT_H: 0
ADXL362_REG_THRESH_ACT_L: 0
ADXL362_REG_
tiME_INACT_L: 3
ADXL362_REG_ACT_INACT_CTL: 12
ADXL362_REG_FILTER_CTL: 131
ADXL362_REG_POWER_CTL: 2
ADXL362_REG_STATUS: 97
请教一下各位这种情况该怎么继续排查?有没有其他可以实现自由落体检测的代码我可以拿来验证一下的?