ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近。主要特性有:

  • 工作电压:2.0 ~ 3.6V
  • 功耗:待机功耗0.1μA;工作时与数据输出频率(ODR)有关,如ODR<10 Hz时30μA
  • 接口:I2C;三线/四线制SPI
  • 分辨率:可选择,最大13-bit
  • 内置FIFO
  • single tap/double tap检测
  • 自由落体检测
  • 两个可编程中断输出脚
  • 封装:3 x 5 x 1 mm LGA

管脚定义

与Arduino的连接

用工作于3.3V/8MHz版本的Arduino Pro Mini进行调试。管脚定义、连接方法与调试LIS3DH时类似。采用I2C接口进行通讯,未利用FIFO和INT1、INT2中断引脚。

ADXL345       Pro Mini (3.3V)

VDD <------> 3.3V

GND <------> GND

SCL <------>  A5 (SCL)

SDA <------> A4 (SDA)

功能调试

1. 操作方法亦和LIS3DH类似。但ADXL345似乎没有与LIS3DH的STATUS_REG寄存器,而是设定DATA_READY中断,然后利用INT_SOURCE寄存器判断是否有中断事件发生,从而判断是否有新的测量值。

2. 留意设置的ODR频率不要超出I2C总线的数据读取速率。如Arduino的I2C总线时钟频率为100kHz,则可设置的最大ODR为200Hz。

测试代码

 /*
Measurement of acceleration values using motion sensor ADXL345
*/
#include <Wire.h> #define ADDRESS_ADXL345 0x53
#define DATA_FORMAT 0x31
#define BW_RATE 0x2C
#define POWER_CTL 0x2D
#define INT_ENABLE 0x2E
#define INT_SOURCE 0x30
#define DATAX0 0x32 byte buffer[];
byte intSource; boolean ready = false; int outX, outY, outZ;
float xVal, yVal, zVal; void setup()
{
Wire.begin();
Serial.begin(); delay(); // set scale = +/- 2g, 13-bit mode
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(DATA_FORMAT);
Wire.write(0x08);
Wire.endTransmission();
// set ODR = 1.56 Hz
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(BW_RATE);
Wire.write(0x04);
Wire.endTransmission(); // start measurement
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(POWER_CTL);
Wire.write(0x08);
Wire.endTransmission(); // enable DATA_READY interrupt
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(INT_ENABLE);
Wire.write(0x80);
Wire.endTransmission();
} void loop()
{
// check data ready
while(ready == false)
{
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(INT_SOURCE);
Wire.endTransmission();
Wire.requestFrom(ADDRESS_ADXL345, );
if (Wire.available() >= )
{
intSource = Wire.read();
}
if (bitRead(intSource, ) == ) //new data available
{
ready = true;
}
}
if (bitRead(intSource, ) == )
{
Serial.println("Some data have been overwritten.");
} //read the result
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(DATAX0); //read multiple bytes
Wire.endTransmission();
Wire.requestFrom(ADDRESS_ADXL345, );
if (Wire.available() >= )
{
for (int i = ; i < ; i++)
{
buffer[i] = Wire.read();
}
} //calculation
outX = (buffer[] << ) | buffer[];
outY = (buffer[] << ) | buffer[];
outZ = (buffer[] << ) | buffer[];
xVal = outX *3.9;
yVal = outY *3.9;
zVal = outZ *3.9; Serial.print("outX: "); Serial.print(xVal); Serial.print(" ");
Serial.print("outY: "); Serial.print(yVal); Serial.print(" ");
Serial.print("outZ: "); Serial.println(zVal); ready = false;
}

ODR设定为1.56Hz,通过串口打印三个维度的加速度值,单位为mg

参考资料

ADXL345 - Analog Devices

Arduino I2C + 三轴加速度计ADXL345的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 开源三轴云台EVVGC(simple BGC)分析

    一. 主程序分析 主程序结构清晰,流程如图所示,下面将对每个部分做详细分析 二. 系统初始化 系统初始化部分的流程如上图所示,下面对每部分做具体分析 1. 时钟初始化 该部分主要是使能DWT,用DWT ...

  9. 单片机实验: 三轴磁场模块 GY-271

    最近买了一块三轴磁场模块进行实验 名称:HMC5883L模块(三轴磁场模块) 型号:GY-271 使用芯片:HMC5883L 供电电源:3-5v 通信方式:IIC通信协议 测量范围:±1.3-8 高斯 ...

随机推荐

  1. libaco: 一个极速的轻量级 C 非对称协程库 🚀 (10 ns/ctxsw + 一千万协程并发仅耗内存 2.8GB + Github Trending)

    0 Name 简介 libaco - 一个极速的.轻量级.C语言非对称协程库. 这个项目的代号是Arkenstone 

  2. 「小程序JAVA实战」小程序的组件(23)

    转自:https://idig8.com/2018/08/11/xiaochengxu-chuji-23/ 开始了解下小程序的组件.源码:https://github.com/limingios/wx ...

  3. ActionMQ5.8.0 JMS实例 手把手详细图解

    出自:http://blog.csdn.net/tongjie008/article/details/40687087 ActionMQ 是开源的JMS实现 1.下载ActiveMQ 去官方网站下载: ...

  4. Spring Boot启动流程详解

    注:本文转自http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow 环境 本文基于Spring Boot版本1.3.3, 使用了sp ...

  5. nginx实现多个域名共享80端口

    server { listen 80; server_name server8085.duchong.cn; location / { proxy_pass http://127.0.0.1:8085 ...

  6. select sum也会返回null值

    SELECT  SUM(detail.VAL)  FROM   AI_SDP_ORDER_MONTH_DETAIL_201706    detail 如果所有的VAL都是null的话,或者根本就不存在 ...

  7. Linux Debian 下LNMP服务器——nginx+mysql+php环境搭建及配置

    昨天刚给公司服务器装了LNMP服务器环境,在这里简单记录一下过程备忘. 这里我在安装的时候是用的Dotdeb源,仅供参考. 1.导入Dotdeb源,据说Dotdeb源里的软件版本比较新. 在向源中导入 ...

  8. UISprite

    [UISprite] UISprite用于引用一个UIAtlas中的sprite. 此脚本最强大的功能是Sprite Type,主要指定在需拉伸图片时的行为,它有以下几种值: 1)Simple:普通拉 ...

  9. 小程序开发运营必看:微信小程序平台运营规范

    一.原则及相关说明 ​ 微信最核心的价值,就是连接——提供一对一.一对多和多对多的连接方式,从而实现人与人.人与智能终端.人与社交化娱乐.人与硬件设备的连接,同时连接服务.资讯.商业. ​ 微信团队一 ...

  10. Python之多进程和多线程

    目标: 1.os.fork简单示例 2.使用os.fork多进程测试IP是否在线 3.使用os.fork多进程解决tcpserver多客户端连接问题 4.多线程测试IP地址是否在线 1.os.fork ...