加速度传感器ADXL345驱动程序

完整工程链接:
ADXL345工程代码

1.ADXL345简介

ADXL345是ADI公司推出的基于iMEMS技术的3轴、数字输出加速度传感器。

特点:
1.分辨率高:最高13位分辨率。
2.量程可变:具有+/-2g、+/-4g、+/-8g、+/-16g可变的测量范围。
3.灵敏度高:最高达3.9mg/LSB,能测量不到1.0的倾斜角度变化。
4.功耗低:40~145uA的超低功耗,待机模式只有0.1uA。
5.支持标准的I2C或SPI数字接口,自带32级FIFO存储,并且内部有多种运动状态检测和灵活的中断方式等特性。

芯片手册核心内容:

芯片名称 ADXL345
工作原理 ADXL345是一款完整的3轴加速度测量系统
引脚说明 SDA CLK GND VCC
工作环境电压 2.0 V 至3.6 V 宽温度范围(-40℃至+85℃)
通讯方式 SPI(3线和4线)或 I2C数字接口
量程 -0.3V至+3.9V , 10000g
精度(最小单位的偏移量) 3.9mg/LSB
数据格式 16位二进制补码

注意:

当 ADXL345 沿检测轴正向加速时,它对正加速度进行检测。在检测重力时,当检测轴的方向与重力的方向相反时检测到的是正加速度。

2.ADXL345控制程序

功能: 使用STM32F103ZET6驱动ADXL345,读取传感器三个方向的加速度值和转换后的角度值,通过串口打印显示,同时通过按键进行校准。
程序框架:
(1) 初始化ADXL345
(2) 读取ADXL345三个方向的加速度值
(3) 通过加速度的值计算角度值
(4) 主函数显示测试结果

初始化ADXL345函数

/*******************************************************************************
* 函 数 名 : ADXL345_Init
* 函数功能 : 初始化ADXL345.
* 输    入 : 无
* 输    出 : 无
* 返 回 值 :0 初始化成功,1 初始化失败
*******************************************************************************/
u8 ADXL345_Init(void)
{                 IIC_Init();                           //初始化IIC总线  if(ADXL345_RD_Reg(DEVICE_ID)==0XE5)   //读取器件ID{  ADXL345_WR_Reg(DATA_FORMAT,0X2B);     //低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 模式ADXL345_WR_Reg(BW_RATE,0x0A);         //数据输出速度为100HzADXL345_WR_Reg(POWER_CTL,0x28);      //链接使能,测量模式     (POWER_CTL寄存器选择工作模式)ADXL345_WR_Reg(INT_ENABLE,0x00);    //不使用中断      ADXL345_WR_Reg(OFSX,0x00);ADXL345_WR_Reg(OFSY,0x00);ADXL345_WR_Reg(OFSZ,0x00); return 0;}          return 1;
}

读取ADXL345三轴加速度值

/*******************************************************************************
* 函 数 名 : ADXL345_RD_XYZ
* 函数功能 : 读取3个轴的数据
* 输    入 : x,y,z:读取到的数据
* 输    出 : 无
* 返 回 值 :无
*******************************************************************************/
void ADXL345_RD_XYZ(short *x,short *y,short *z)
{u8 buf[6];u8 i;IIC_Start();                 IIC_Send_Byte(ADXL_WRITE); //发送写器件指令    IIC_Wait_Ack();       IIC_Send_Byte(0x32);           //发送寄存器地址(数据缓存的起始地址为0X32)IIC_Wait_Ack();                                                     IIC_Start();                    //重新启动IIC_Send_Byte(ADXL_READ);   //发送读器件指令IIC_Wait_Ack();for(i=0;i<6;i++)     //读6个字节,两个字节存储一个轴的数据{if(i==5)buf[i]=IIC_Read_Byte(0); //读取一个字节,不继续再读,发送NACK  else buf[i]=IIC_Read_Byte(1);      //读取一个字节,继续读,发送ACK }                IIC_Stop();                   //产生一个停止条件*x=(short)(((u16)buf[1]<<8)+buf[0]);         *y=(short)(((u16)buf[3]<<8)+buf[2]);        *z=(short)(((u16)buf[5]<<8)+buf[4]);
}

通过加速度的值计算角度值

注意:返回值角度值单位是0.1°
偏转角度计算公式:

/*******************************************************************************
* 函 数 名 : ADXL345_Get_Angle
* 函数功能 : 得到角度
* 输    入 : x,y,z:x,y,z方向的重力加速度分量(不需要单位,直接数值即可)dir:要获得的角度.0,与Z轴的角度;1,与X轴的角度;2,与Y轴的角度.
* 输    出 : 无
* 返 回 值 :返回值:角度值.单位0.1°.
*******************************************************************************/
short ADXL345_Get_Angle(float x,float y,float z,u8 dir)
{float temp;float res=0;     //res得到的是弧度值,需要将其转换为角度值也就是*180/3.14switch(dir){case 0:        //与自然Z轴的角度temp=sqrt((x*x+y*y))/z;res=atan(temp);break;case 1:       //与自然X轴的角度temp=x/sqrt((y*y+z*z));res=atan(temp);break;case 2:        //与自然Y轴的角度temp=y/sqrt((x*x+z*z));res=atan(temp);break;}return res*180/3.14*10;      //乘以10是为了取一位小数,角度精确到0.1°所以要乘以10
}

3.结果演示

演示X轴的倾斜角度和三轴的加速度值数据正确

STM32——库函数版——ADXL345驱动程序相关推荐

  1. STM32入门笔记(02):MPU6050、MPU9250、ICM20948及姿态解算(SPL库函数版)

    目录 MPU6050 什么是MPU6050? MPU6050的特点 MPU6050框图 MPU6050初始化 MPU6050寄存器 电源管理寄存器1(0X6B) 陀螺仪配置寄存器(0X1B) 加速度传 ...

  2. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  3. 野火洋桃STM32开发版学习指导完整版

    该文章是我历时一个月整理总结而成,专门针对想要通过野火&洋桃STM32开发板入门stm32的读者.由于csdn编辑限制,该学习指导只包含文字信息.如需查看含图片的完整版可进入我的博客下载页.完 ...

  4. STM32F103C6T6A USB虚拟串口调测 cubeIDE HAL库函数版一篇就够了

    STM32F103C6T6A  USB虚拟串口调测 cubeIDE HAL库函数版 原先手上有一块STM32F103RTC6测试版,但怎么弄不不出现usb设备(正常插上usb口pc应该会识别一个unk ...

  5. STM32——库函数开发小结

    STM32--库函数开发小结 宗旨:技术的学习是有限的,分享的精神是无限的. 基本上所有外设都有以下几类寄存器:[CR/DR/SR] (1)控制寄存器 xxx_CR(Control/Configura ...

  6. 正点原子STM32精英版LCD实验白屏

    最近在咸鱼上买了一块正点原子的STM32精英版,带一个2.8寸的lcd屏幕,然后下载官方的历程测试,但是到lcd实验的时候发现下载样例后屏幕仍然是白色的,这让我很疑惑,于是我直接下载最后一个综合实验, ...

  7. ## STM32F103的光照、烟雾MQ2、有毒气体MQ135的ADC配置(寄存器版与库函数版

    STM32F103的光照.烟雾MQ2.有毒气体MQ135的ADC配置(寄存器版与库函数版 //#include "adc.h"#if 0 //寄存器编程 /************ ...

  8. 基于正点原子STM32F1精英版秒表(库函数版)

    基于正点原子STM32F1精英版秒表(库函数版) 一.前期准备 二.代码实现: 1.独立按键与触摸按键 2.TFTLCD 3.定时器 4.蜂鸣器与LED灯 5.主函数设计 三. 结束语: 一.前期准备 ...

  9. 基于STM32寄存器版的嵌入式智慧仓库

    基于STM32寄存器版的嵌入式智慧仓库 1.项目背景 项目环境背景 项目运作的可行性 项目的优势分析 2.总体设计 3.外设选取和引脚连接 外设选取 引脚连接 4.系统架构 5.驱协开发 LED驱动 ...

  10. STM32入门笔记(02):MDK Keil5 开发环境搭建及新建工程模板教程(SPL库函数版)

    目录 Keil5 开发环境搭建 芯片数据手册 Mec 多功能智能小车底盘开发与使用手册 Mec 主控原理图 Mec STM32F103VET6集成主控板资源分配 Mec OLED 显示内容 如何给 S ...

最新文章

  1. linux第七章《档案与目录管理》重点回顾
  2. go语言中的big包
  3. 阿里AI大牛聂再清重返清华,加入张亚勤AIR战队,说“阿里很支持为国家培养人才”...
  4. ​搜出来的文本:从文本生成到搜索采样
  5. SpringMVC自定义视图 Excel视图和PDF视图
  6. jq上传file到php,jQuery文件上传
  7. 她穿着由自己17封拒稿信做成的裙子,通过了博士论文答辩!
  8. Theano2.1.10-基础知识之循环
  9. OSPFv3报文中Option字段变化简介
  10. 创建oracle系统dsn,timesten创建dsn
  11. 报表生成器FastReport.Net常见问题解答
  12. 基于Spatial-Temporal Transformer的城市交通流预测
  13. 计算机图形学 感想,OpenGL学习感想(一)
  14. QRCode.js 生成二维码放大后会模糊的问题
  15. usb网卡带宽测试软件,腾达AC9与网件R6220无线性能和USB速度测试
  16. CC2530 Hex文件解析
  17. unity 如何开发手机App
  18. Linux之旅 - 入⻔命令集 - 文件管理(1/2)
  19. Springboot发送手机短信验证码并且校验
  20. 16 岁少年前往腾讯总部要求解封 QQ 账号;微软发内部信辟谣:没有关闭微软苏州的相关计划;Go 1.20 发布|极客头条

热门文章

  1. flowable 清除流程本地缓存
  2. jQuery简单好用的JavaScript代码库略解使用
  3. 关于Lambda表达式的简单语法理解,有参无参,有无返回值的格式的理解,仅限编程新手
  4. 发票管理软件_企业为什么需要采购管理软件?
  5. mysql join 去重_对mysql left join 出现的重复结果去重
  6. vs中四点画矩形的算法_实战基于图割算法的木材表面缺陷图像分析
  7. python 解析模块脚本_Python HTMLParser模块解析html获取url实例
  8. windows利用iis配置反向代理实现ECS内网互通oss
  9. Java之观察者模式
  10. 《Android UI基础教程》——1.4节工具