LIS3DH
LIS3DH 是属于 “nano” 系列的超低功耗高性能 3 轴线性加速度计,具有数字 I2C、 SPI 串行接口标准输出。器件具有超低功耗工作模式,可实现高级节能、智能睡眠唤醒以及恢复睡眠功能。LIS3DH 具有 ±2g/±4g/±8g/±16g 的动态用户可选满量程,并能通过 1 Hz 到 5 kHz 的输出数据速率测量加速度。
LIS3DH初始化
我使用的是模拟SPI接口,由于需要低功耗,不使用中断模式。
void Lis3dh_Init(void)
{
whoami = read_dis3dh(LIS3DH_WHO_AM_I);
write_dis3dh(LIS3DH_CTRL_REG0,0x90);//SDO禁止上拉 低功耗调试此处有漏电流
write_dis3dh(LIS3DH_CTRL_REG1,0x27);//10hz 正常模式
write_dis3dh(LIS3DH_CTRL_REG2,0);//绕过高通滤波器
// write_dis3dh(LIS3DH_CTRL_REG3,0x00);//中断不被驱动到INT1
write_dis3dh(LIS3DH_CTRL_REG4,0x80);//FS = 2g
// write_dis3dh(LIS3DH_CTRL_REG5,0x00);//不锁存中断
write_dis3dh(LIS3DH_INT1_DURATION, 0x00);//设置最小持续中断时间,ODR;
}
利用X\Y\Z轴的加速度计算倾角
LIS3DH传感器是平置初始位置,我需要计算传感器与水平面的夹角:
//获取角度值 横滚角和俯仰角
uint8 get_Angle_value(void)
{
short x,y,z;
float value=0;
uint8 analevalue = 0;
if((read_dis3dh(LIS3DH_STATUS_REG)&0x08)==0x08)
{
regvalue[0] = read_dis3dh(LIS3DH_OUT_X_L);
regvalue[1] = read_dis3dh(LIS3DH_OUT_X_H);
regvalue[2] = read_dis3dh(LIS3DH_OUT_Y_L);
regvalue[3] = read_dis3dh(LIS3DH_OUT_Y_H);
regvalue[4] = read_dis3dh(LIS3DH_OUT_Z_L);
regvalue[5] = read_dis3dh(LIS3DH_OUT_Z_H);
x = regvalue[1]*256 +regvalue[0];
y = regvalue[3]*256 +regvalue[2];
z = regvalue[5]*256 +regvalue[4];
x=(short)((float)(x)/16);//换算为mg
y=(short)((float)(y)/16);
z=(short)((float)(z)/16);
value = atan((sqrt((float)x*(float)x+(float)y*(float)y))/(float)(-z))*57.29578;
if(value==0 &&z>0)
{
value=180;
}
else if(value<0)
{
value = 180+value;
}
}
analevalue=(uint8)(abs(value));
return analevalue;
}
最开始采用单轴加速度计算角度,所采用的计算公式为:
但是这种单轴计算法的灵敏度不是线性的,如下图所示,这样计算角度在某个角度会误差较大,而且抗干扰能力也不强。
所以我采用了三轴倾斜计算的方法。
文章来源:https://www.toymoban.com/news/detail-606153.html
实际应用也证明了三轴倾斜计算的结果优于单轴计算法。文章来源地址https://www.toymoban.com/news/detail-606153.html
到了这里,关于LIS3DH(3轴加速度计)使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!