1. LIS3DH管脚定义

PS:LIS3DH和mpu6050的X和Y方向是相反的, mpu6050如下图所示:

2.LIS3DH加速度计介绍

由于LIS3DH只可以得到XYZ加速度,无法获取角速度,所以LIS3DH是无法测出偏航角(yaw).

3. LIS3DH之转换欧拉角介绍

3.1偏航角(yaw)

如下图所示,偏航角是指机头在水平面上的投影与地轴之间的夹角,以机头右偏为正.范围为[-180,180]

PS:由于LIS3DH无法测出,跳过.

3.2俯仰角(pitch)

如下图所示, 俯仰角是指机头与水平面的夹角,当飞机平行时则为0,抬头时则为正,范围为[-180,180]

以45°为例,来解析LIS3DH

如下图所示:

转换为角度图为:

所以转换为角度为:

pitch = (short)(atan2((float)(0-y),z) * 180 / 3.14159);     //转换为度数

3.3 横滚角(roll)

如下图所示, 横滚角指飞机两翼所在的平面与平行线之间的夹角,机体向右滚为正,范围为[-180,180].

横滚角和俯仰角类似,不过变成了X与Z轴之间比例了.

所以转换为角度为:

pitch = (short)(atan2((float)(0-y),z) * 180 / 3.14159);     //转换为度数

4.初始化代码

unsigned char Lis3dh_init(void)
{
u8 val; unsigned char data; i2cInit(); data = 0x47;
if(i2cwrite(0x18, 0x20, 1, &data))return 1; //50HZ reg1 data = 0;
if(i2cwrite(0x18, 0x21, 1, &data))return 2; // reg2 data = 0x00;
if(i2cwrite(0x18, 0x22, 1, &data))return 3; // reg3 data = 0X00;
if(i2cwrite(0x18, 0x23, 1, &data))return 4; // +-2g reg4 data = 0x00;
if(i2cwrite(0x18, 0x24, 1, &data))return 5; // reg5 return 0;
}

设置为+2g量程,并且传感器刷新率为50hz,也就是说我们延时20ms左右去读一次传感器即可.

5.运行代码

void CalcXYZ(short x,short y,short z)
{
short pitch ,roll;
u16 maxG=0; pitch = (short)(atan2((float)(0-y),z) * 180 / 3.14159); //转换为度数
roll = (short)(atan2((float)(x),z) * 180 / 3.14159); //转换为度数 printf("x%03dmg y%03dmg z%03dmg pitch:%3d roll:%3d \r\n",x,y,z,pitch,roll);
} int main()
{
u8 i;
u8 buf[6];
short X,Y,Z; printf("Gsensor_init%d\r\n",Lis3dh_init()); while(1)
{
i2cread(0x18,0x27, 1,&i); //读取0x27,判断是否有数据
if((i&0x08))
{
for(i=0;i<6;i++)
i2cread(0x18,0X28+i, 1,&buf[i]); X = buf[1]*256+ buf[0]; Y = buf[3]*256 + buf[2]; Z = buf[5]*256 + buf[4]; X=(short)((float)(X)*4/65536*1000); Y=(short)((float)(Y)*4/65536*1000); Z=(short)((float)(Z)*4/65536*1000); CalcXYZ(X,Y,Z);
}
} }

6.打印截图

6.1当俯仰角pitch接近90°时

如上图可以看到,y是负的1000mg,这是因为它的y方向向下,所以计算俯仰角时,我们用的(0-y).

6.1当俯仰角pitch为0,翻滚角为45°时

如上图可以看到X值为707左右,由于物体自重力为1000,所以707/1000,刚好对应sin45°(0.707)

LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)-转载的更多相关文章

  1. LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)

    1. LIS3DH管脚定义 PS:LIS3DH和mpu6050的X和Y方向是相反的, mpu6050如下图所示: 2.LIS3DH加速度计介绍 由于LIS3DH只可以得到XYZ加速度,无法获取角速度, ...

  2. Arduino I2C + 三轴加速度计LIS3DH

    LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能.主要特性有: 宽工作电压范围:1.71 ~ 3.6V 功耗:低功耗模式2μA:正常工作模式.ODR = 50Hz时功耗11μA ...

  3. Arduino I2C + 三轴加速度计ADXL345

    ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近.主要特性有: 工作电压:2.0 ~ 3.6V 功耗:待机功耗0.1μA:工作时与数据输出频率(ODR)有关,如ODR ...

  4. [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标

    看TI的官网资料:http://www.st.com/web/en/catalog/sense_power/FM89/SC444/PF250725 一.初次接触关注的信息: 1.1.概述中的关键信息 ...

  5. [算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本

    一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...

  6. 【雕爷学编程】Arduino动手做(48)---三轴ADXL345模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  7. STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  8. 三轴陀螺仪与加速度计如何辅助 iPhone 定位的

    在所有之前解释一下陀螺仪 根据Wiki的定义:「陀螺仪是用于测量角度或维持方向的设备,基于角动量守恒原理.」 这句话的要点是测量角度或维持方向,这是 iPhone 4 为何搭载此类设备的原因.机械陀螺 ...

  9. STM32—驱动六轴MPU6050输出欧拉角

    文章目录 一.MPU6050介绍 1.MPU6050与陀螺仪.加速度计的关系: 2.整体概括 3.引脚说明 4.基本配置及相关寄存器 电源管理寄存器1 陀螺仪配置寄存器 加速度计配置寄存器 FIFO使 ...

  10. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

随机推荐

  1. Mysql数据库基础第三章:DML语言

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  2. QLineEdit CSS样式

    QLineEdit{ border:1px groove gray; border-radius:18px; padding:2px 4px } QLineEdit:!hover { border-s ...

  3. js时间转化为几天前,几小时前,几分钟前

    在前面一篇文章中,我们学习到了如何获取时间和怎么算出两者之间的时间差 今天看看怎么将时间戳转换为几个月前,几周前,几天前,几分钟前的形式.与上面类似通过JavaScript计算当前时间与定义的时间的对 ...

  4. npm设置和取消代理的方法

    设置代理 npm config set proxy=http://server:port npm config set https-proxy https://server:port // https ...

  5. 几款Android 应用自动化测试工具

    本文转自:https://blog.csdn.net/hebbely/article/details/78901466 简述: 本文介绍几款流行的 Android应用自动化测试工具. Monkey测试 ...

  6. Ubuntu18.04 右上角网络连接消失问题记录

    问题记录 因为一块板子要访问远程桌面,需要联网才行,然后发现桌面右上角的网络连接标志不见了,而且无论用usb共享网路,或者是无线网卡,都连不上网. 首先想是不是硬件的问题,给系统重新装了一个ubunt ...

  7. Unity异步加载场景与加载进度条

    先上效果图 需要三个场景 1,2, 3 从场景1跳转到场景3,场景2是加载场景 场景1按钮的代码如下 using System.Collections; using System.Collection ...

  8. 同一系统开启两个ftp进程

    1.正常情况是yum 安装vsftpd服务 ,在/etc/vsftpd目录更改配置,起服务.这样启动是一个服务. 2.启动第二个vsftpd服务 #创建虚拟用户 useradd -d /home/vi ...

  9. 记一次前端ajax禁止使用异步async的操作

    环境: 前端layui  jquery 情况: 页面在iframe里面, 然后点击按钮,弹出输入框.点击确认,弹出框发送内容到后台, 传送数据到后台后,然后根据返回一个map给前端.前端解析数据,返回 ...

  10. Object.assign合并多个对象

    语法: Object.assign(target, ...sources) target, 目标对象 sources, 源对象 assign函数用来合并多个对象. 该方法会修改第一个对象,函数在最后r ...