LIS3DH高通滤波器与加速度阈值中断

在地球上的物体都受到地球的引力,所以LIS3DH静止不动时,都会测量的重力加速度。使用LIS3DH内部的高通滤波器可以过滤掉重力,可以更好的检测重力外的其他力产生的加速度。

LIS3DH的高通滤波器的正常模式可以通过读取REFERENCE (26h)寄存,立即清除加速度的直流分量,实现重力加速度的过滤。如图1。

图1

使用中断时,一定要打开中断,设置中断的阈值,设置打开对应轴的阈值中断。使用中断需要获取产生中的加速度值时,不要使用fifo。初始化程序如下。

void LIS3DHInit()
{
	uint8_t flag;
	
	IICInit();
	
	ExtiInit(INT1_PORT,INT1_PIN,1,GpioIrqRising);
	ExtiInit(INT2_PORT,INT2_PIN,1,GpioIrqRising); 
	
	LIS3DH_ReadReg(LIS3DH_WHO_AM_I,&flag);
	printf("%x\r\n",flag);
	
	LIS3DH_WriteReg(LIS3DH_CTRL_REG1,0x4f); //50HZ,低功耗模式
	LIS3DH_WriteReg(LIS3DH_CTRL_REG2,0x09); //使用高通滤波器,过滤初始加速度
	LIS3DH_WriteReg(LIS3DH_CTRL_REG3,0x40); //打开INT1中断
	LIS3DH_WriteReg(LIS3DH_CTRL_REG4,0x00); //-2g~2g
	LIS3DH_WriteReg(LIS3DH_CTRL_REG5,0x08); //锁存INT1_SRC,不使用fifo
	LIS3DH_WriteReg(LIS3DH_CTRL_REG6,0x00); //中断引脚高电平有效
	
	LIS3DH_WriteReg(LIS3DH_INT1_THS,31); //设置阈值,2g单位为16mg,4g单位为32mg,8g单位为62mg,16g单位为186mg
	LIS3DH_WriteReg(LIS3DH_INT1_DURATION,0);      //设置唤醒时间,不需要进入睡眠
	LIS3DH_ReadReg(LIS3DH_REFERENCE_REG,&flag);   //读取参考值寄存器,清除直流分量
	LIS3DH_WriteReg(LIS3DH_INT1_CFG,0x2a);        //当XYZ轴加速度高于阈值,产生中断
}

 读取加速度时,可以在中断服务函数中读取,提高数据的实时性。程序如下。

void PORT2_IRQHandler(void)
{
	uint8_t flag;
	uint32_t irqSt = 0;
	irqSt = M0P_GPIO->P2STAT;
	M0P_GPIO->P2ICLR = 0;        //清除外部中断
	if(irqSt & (1<<INT1_PIN)){   //INT1产生中断
		LIS3DH_GetInt1Src(&flag);  //获取LIS3DH INT1标志
		if(flag){                  //INT1产生中断,直接读取加速度
			LIS3DH_GetAccAxesRaw(&lis3dh.acc);
			lis3dh.acc.AXIS_X >>= 4;
			lis3dh.acc.AXIS_Y >>= 4;
			lis3dh.acc.AXIS_Z >>= 4; //加速度值都是左对齐的,要右移4位
			printf("%5d%6d%6d\r\n",lis3dh.acc.AXIS_X,lis3dh.acc.AXIS_Y,lis3dh.acc.AXIS_Z);
		}
	}
	if(irqSt & (1<<INT2_PIN)){
		lis3dh.intFlag |= INT2_FLAG;
		LIS3DH_ReadReg(0x35,&flag);
	}
}

给LIS3DH施加一定的力后,数据输出如下。本文中设置的阈值为31,所以加速度阈值为31*16mg=496mg。图中每次输出都至少有一个轴的值大于496,说明配置有效。

最后发一下程序的下载链接。

https://download.csdn.net/download/qq_39306385/12258521

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值