LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)-转载
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三轴加速度计-实现欧拉角(俯仰角,横滚角)-转载的更多相关文章
- LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)
1. LIS3DH管脚定义 PS:LIS3DH和mpu6050的X和Y方向是相反的, mpu6050如下图所示: 2.LIS3DH加速度计介绍 由于LIS3DH只可以得到XYZ加速度,无法获取角速度, ...
- Arduino I2C + 三轴加速度计LIS3DH
LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能.主要特性有: 宽工作电压范围:1.71 ~ 3.6V 功耗:低功耗模式2μA:正常工作模式.ODR = 50Hz时功耗11μA ...
- Arduino I2C + 三轴加速度计ADXL345
ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近.主要特性有: 工作电压:2.0 ~ 3.6V 功耗:待机功耗0.1μA:工作时与数据输出频率(ODR)有关,如ODR ...
- [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标
看TI的官网资料:http://www.st.com/web/en/catalog/sense_power/FM89/SC444/PF250725 一.初次接触关注的信息: 1.1.概述中的关键信息 ...
- [算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本
一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...
- 【雕爷学编程】Arduino动手做(48)---三轴ADXL345模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 三轴陀螺仪与加速度计如何辅助 iPhone 定位的
在所有之前解释一下陀螺仪 根据Wiki的定义:「陀螺仪是用于测量角度或维持方向的设备,基于角动量守恒原理.」 这句话的要点是测量角度或维持方向,这是 iPhone 4 为何搭载此类设备的原因.机械陀螺 ...
- STM32—驱动六轴MPU6050输出欧拉角
文章目录 一.MPU6050介绍 1.MPU6050与陀螺仪.加速度计的关系: 2.整体概括 3.引脚说明 4.基本配置及相关寄存器 电源管理寄存器1 陀螺仪配置寄存器 加速度计配置寄存器 FIFO使 ...
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
随机推荐
- redis之缓存穿透、缓存击穿、缓存雪崩
一.缓存穿透 1 什么是缓存穿透 缓存穿透是指查询一个在redis和DB中都不存在的数据,redis中查不到去DB查,DB查不到则不写入redis,导致每次查询这个数据都要穿过redis穿透到DB 2 ...
- 拓展django-haystack全文检索的样式和搜索频率限制
一.样式: django-haystack在utils模块中封装了HighHighlighter用于配置搜索结果的样式展示.想要更改结果的样式,可以写个子类重写相应的方法达到效果 1.关键字高亮: H ...
- sqlmap-1.6.12.11
Usage: sqlmap.py [options] 选项: -h, --help 显示基本帮助信息并退出 -hh 显示高级帮助信息并退出 --version 显示程序的版本号并退出 -v VERBO ...
- spider_使用urllib库 提交post请求,有道翻译案例
"""使用urllib库 提交post请求, 有道翻译"""from urllib import requestfrom urllib im ...
- Java执行cmd命令工具类
工具类: public class CmdTask implements Runnable { private String command; private String dirPath; publ ...
- 我眼中的Serverless
https://cloud.tencent.com/document/product/583 摆脱服务器.存储等底层设备,只上传代码,由云服务器提供服务的触发,维护,调用.
- 【RTOS】《多任务抢占式调度器》笔记
<多任务抢占式调度器>读书笔记 1.多任务系统 在多任务调度器的作用下,多个任务轮流使用cpu,实现多任务相互独立并发运行的效果,能够充分利用硬件资源,提高cpu效率 2.任务特性 a.动 ...
- Linux 使用Squid部署代理缓存服务
代理缓存服务 Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存.简单来说,Squid服务程序会按照收到的用 ...
- ubuntu上安装meson & 如何使用meson编译C代码
一· 搭建meson环境并简单编译: 1. 什么是meson Meson 旨在开发最具可用性和快速的构建系统.提供简单但强大的声明式语言用来描述构建.原生支持最新的工具和框架,如 Qt5 .代码覆盖率 ...
- WinCC插件制作教程
目录 插件的编写 插件的使用 参考资料 Creation of .NET Controls 109759944_Prepare.NetControls_DOC_en.pdf 插件的编写 创建插件项目, ...