三轴加速度传感器LIS3DH使用心得

LIS3DH是ST公司推出的一块三轴加速度计芯片,使用它能实现很多有趣的应用。接下来笔者通过例程分享下LIS3DH的一些开发心得。

首先请出我们使用的开发板:UFUN, 这是块小巧精致的开发板,内核为STM32,搭载了多种传感器,包括LIS3DH,其价格也很亲民~
三轴加速度传感器LIS3DH使用心得_第1张图片
先给出LSI3DH官方文档下载地址:

https://www.st.com/zh/mems-and-sensors/lis3dh.html#

然后演示下例程运行结果,PC端通过串口接收到了计算后得出的加速度和角度

三轴加速度传感器LIS3DH使用心得_第2张图片
要想得到加速度和角度这两个值首先要对加速度计进行一些配置,这里我们主要讨论LIS3DH,STM32的IIC等配置就不提啦。需要我们配置的有采样率、工作模式、量程、XYZ轴的使能。

采样率单位为HZ,意义是每秒采样次数,我们可配置的采样率如下图所示(来自官方文档),例程选用100HZ。
三轴加速度传感器LIS3DH使用心得_第3张图片
工作模式分掉电模式、正常模式、低功耗模式。掉电模式LIS3DH的全部内部块几乎都会关闭,低功耗模式下相比正常模式有更低的功耗,但是分辨率也会变低。我们选择正常模式。

量程分为±2、±4、±8、±16(如下图所示)。量程决定LIS3DH读出的加速度的极限值。也会影响我们之后的计算。
三轴加速度传感器LIS3DH使用心得_第4张图片
在正常模式和低功耗模式下我们可以决定X、Y、Z轴是否使能,非使能的轴生会的数据为00h。

代码如下。本例程使用的是ST官方提供的LIS3DH驱动,可以直接调用其中的函数进行操作。当然如果想用寄存器操作的话可以对照官方文档进行编写。

配置好之后就可以读取数据了,我们可以读取到的每个轴加速度数据都分为高8位和低8位分别存在两个地址里,该值为左对齐的二进制补码。
三轴加速度传感器LIS3DH使用心得_第5张图片
我们可以直接调用官方驱动中的LIS3DH_GetAccAxesRaw()函数得到一个高位低位已经组合好的值。现在这个值还不是我们最后想要的加速度值,还需要做一下计算。
以X轴为例,我们称刚刚读取到的值为axis_x,因axis_x由高8位和低8位组成,所以我们可以测量到最多2的16次方(65536)种不同的值,再由之前配置好的量程(±2g)可知总量程为4g。计算得出结果单位是g,要转换为mg再乘以1000。综上可得出X轴加速度计算公式如下,其他两轴同理。

acc_x=axis_x*(4/65536)*1000。

于是我们得到了X、Y、Z轴的加速度矢量,通过反三角函数计算可得:

angle_x= [arctan(acc_x / squr(acc_yacc_y +acc_zacc_z))] 180/3.14
angle_y= [arctan(acc_y / squr(acc_x
acc_x +acc_zacc_z))] 180/3.14
angle_z= [arctan(acc_z / squr(acc_x
acc_x +acc_y
acc_y))] *180/3.14

角度的计算可以按自己的需求进行改动,这里的公式计算得出的为X、Y、Z轴和水平线的角度。在LSI3DH水平放置时理论上x、y=0°,z=90°,实际有误差。三轴的正方向如下图所示。
三轴加速度传感器LIS3DH使用心得_第6张图片
如有问题欢迎一同讨论,如有错误务必指正~
文中源码为ufun例程《基础例程7 - 三轴加速度传感器》,可到“ufun学习板分享”公众号下载,为书写方便,文中变量名与例程稍有不同。公众号会定期更新硬件开发相关的技术文章,欢迎关注。

你可能感兴趣的:(ufun开发)