ADXL345之倾角+活动中断
1. 硬件
ADDRESS 引脚接地
所以IIC设备地址为0x53
中断INT1 的引脚为PB9
2. 测量范围
ADXL345是一款数字三轴加速度计,可以测量沿三个方向的加速度。
这里的“2g”、“4g”、“8g”和“16g”指的是加速度计可以测量的不同最大加速度范围。
这里的“g”代表地球表面的标准重力加速度,大约为9.80665 m/s²。
自由落体的加速度是指物体在仅受重力作用下自由下落时的加速度,
这个加速度被称为重力加速度,通常用符号 ( g ) 表示。在地球表面附近,
重力加速度的平均值大约是 9.8 米每秒平方(m/s²),有时为了简化计算,也会近似取为 10 m/s²。
测量范围的理解
2g:表示加速度计可以测量从-2g到+2g之间的加速度,即从-19.6133 m/s²到+19.6133 m/s²。
4g:表示加速度计可以测量从-4g到+4g之间的加速度,即从-39.2266 m/s²到+39.2266 m/s²。
8g:表示加速度计可以测量从-8g到+8g之间的加速度,即从-78.4532 m/s²到+78.4532 m/s²。
16g:表示加速度计可以测量从-16g到+16g之间的加速度,即从-156.9064 m/s²到+156.9064 m/s²。
分辨率与灵敏度
分辨率:指加速度计能够区分的最小加速度变化。对于ADXL345,它的分辨率最高可达13位,这意味着在不同的测量范围内,每个LSB(最低有效位)所代表的实际加速度值是不同的。
灵敏度:指加速度计将物理加速度转换为数字输出的能力。ADXL345的灵敏度是固定的4 mg/LSB(毫克每最低有效位),这意味着无论选择哪个测量范围,每个LSB都代表相同的加速度值(0.004 g/LSB 或者 0.0392266 m/s²/LSB)。
这意味着每个最低有效位(Least Significant Bit, LSB)代表 0.004 g 的加速度变化。这里 mg 是毫克(milli-g),1 g 相当于地球表面的标准重力加速度,大约为 9.80665 m/s²。
不同测量范围的选择
如果你的应用只需要测量较小的加速度变化,比如人体运动或轻微震动,可以选择±2g的范围,这样可以获得更高的分辨率。
对于更大的加速度变化,如车辆行驶或机器振动,可以选择±4g或±8g的范围。
对于极端情况,如碰撞测试或非常快速的动态运动,可以选择±16g的范围。
总结
±2g:适用于测量较轻的加速度变化,如人体活动。
±4g:适用于测量中等程度的加速度变化,如日常设备的运动。
±8g:适用于测量较大的加速度变化,如车辆行驶。
±16g:适用于测量极端的加速度变化,如碰撞测试或剧烈的冲击。
你可以根据自己的应用需求选择合适的测量范围。
如果不确定,通常会选择一个能够覆盖预期加速度变化范围的设置,并且尽可能保持较高的分辨率
- 选用16g 的测量范围
3. 寄存器概念
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2E,0x00); //禁用中断
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x1E,0x00); //X 偏移量 根据测试传感器的状态写入
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x1F,0x00); //Y 偏移量 根据测试传感器的状态写入
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x20,0x00); //Z 偏移量 根据测试传感器的状态写入
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x1D,0x10); //敲击阀值
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x21,0x00); //持续时间
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x22,0x00); //开始延迟
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x23,0x00); //敲击窗口
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x24,0x0A); //活动阀值
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x25,0x05); //静止阀值
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x26,0x01); //进入静止时间
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x27,0xFF); //三轴参与
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x28,0x05); //自由落体阀值
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x29,0x14); //自由落体时间
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2A,0x00); //抑制双击检测
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2C,0x0A); //标准默认速率
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2D,0x08); //测量不休眠
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x31,0x0B); //测量范围,正负16g,13位模式
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x38,0xA0); //流
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2F,0xEF); //使能中断引脚
user_write_byte_extend(&iic_ctl_triaxial, ADXL345_ADDR, 0x2E,0x93); //使能中断
重要关注的中断寄存器
详细的查看数据手册
实现功能
每次开启电源后
读取倾角数据
清空活动中断
等待一段时间比如1秒
根据上述寄存器配置
如果环境存在震动,大于设置的阀值
会触发活动中断-高电平
相应的0x30 寄存器位会为1
此时可知环境存在震动