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。

测试代码

  1 /*
  2     Measurement of acceleration values using motion sensor ADXL345
  3 */
  4 #include <Wire.h>
  5
  6 #define ADDRESS_ADXL345 0x53
  7 #define DATA_FORMAT 0x31
  8 #define BW_RATE 0x2C
  9 #define POWER_CTL 0x2D
 10 #define INT_ENABLE 0x2E
 11 #define INT_SOURCE 0x30
 12 #define DATAX0 0x32
 13
 14 byte buffer[6];
 15 byte intSource;
 16
 17 boolean ready = false;
 18
 19 int outX, outY, outZ;
 20 float xVal, yVal, zVal;
 21
 22 void setup()
 23 {
 24     Wire.begin();
 25     Serial.begin(9600);
 26
 27     delay(2);
 28
 29     // set scale = +/- 2g, 13-bit mode
 30     Wire.beginTransmission(ADDRESS_ADXL345);
 31     Wire.write(DATA_FORMAT);
 32     Wire.write(0x08);
 33     Wire.endTransmission();
 34     // set ODR = 1.56 Hz
 35     Wire.beginTransmission(ADDRESS_ADXL345);
 36     Wire.write(BW_RATE);
 37     Wire.write(0x04);
 38     Wire.endTransmission();
 39
 40     // start measurement
 41     Wire.beginTransmission(ADDRESS_ADXL345);
 42     Wire.write(POWER_CTL);
 43     Wire.write(0x08);
 44     Wire.endTransmission();
 45
 46     // enable DATA_READY interrupt
 47     Wire.beginTransmission(ADDRESS_ADXL345);
 48     Wire.write(INT_ENABLE);
 49     Wire.write(0x80);
 50     Wire.endTransmission();
 51 }
 52
 53 void loop()
 54 {
 55     // check data ready
 56     while(ready == false)
 57     {
 58         Wire.beginTransmission(ADDRESS_ADXL345);
 59         Wire.write(INT_SOURCE);
 60         Wire.endTransmission();
 61         Wire.requestFrom(ADDRESS_ADXL345, 1);
 62         if (Wire.available() >= 1)
 63         {
 64             intSource = Wire.read();
 65         }
 66         if (bitRead(intSource, 7) == 1) //new data available
 67         {
 68             ready = true;
 69         }
 70     }
 71     if (bitRead(intSource, 0) == 1)
 72     {
 73         Serial.println("Some data have been overwritten.");
 74     }
 75
 76     //read the result
 77     Wire.beginTransmission(ADDRESS_ADXL345);
 78     Wire.write(DATAX0); //read multiple bytes
 79     Wire.endTransmission();
 80     Wire.requestFrom(ADDRESS_ADXL345, 6);
 81     if (Wire.available() >= 6)
 82     {
 83         for (int i = 0; i < 6; i++)
 84         {
 85             buffer[i] = Wire.read();
 86         }
 87     }
 88
 89     //calculation
 90     outX = (buffer[1] << 8) | buffer[0];
 91     outY = (buffer[3] << 8) | buffer[2];
 92     outZ = (buffer[5] << 8) | buffer[4];
 93     xVal = outX *3.9;
 94     yVal = outY *3.9;
 95     zVal = outZ *3.9;
 96
 97     Serial.print("outX: "); Serial.print(xVal); Serial.print("  ");
 98     Serial.print("outY: "); Serial.print(yVal); Serial.print("  ");
 99     Serial.print("outZ: "); Serial.println(zVal);
100
101     ready = false;
102 }

View Code

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

参考资料

ADXL345 - Analog Devices

转载于:https://www.cnblogs.com/zlbg/p/4248572.html

Arduino I2C + 三轴加速度计ADXL345相关推荐

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

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

  2. STM32开发 -- LIS3DH三轴加速度计开发详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/87096085 这次要讲一下LIS3DH三轴加速度计的开发使用,之前是有讲过 ...

  3. 三轴加速度计Triaxial accelerometer

    产品介绍 ACC356T是咏为传感针对震动.撞击测试.汽车电子等多个领域开发的一款三轴加速度计,ACC356T为单晶硅电容式传感器,由一片经过微机械处理的硅芯片,用于信号调整的低功率ASIC,用于存储 ...

  4. 三轴加速度计、三轴陀螺仪、三轴磁力计

    1.今天要做的事情 列出:可能影响因素,对影响因素做实验.如何设置对比实验? 如何设置对比实验? 三轴加速度计 1.加速度计的原理 三轴加速度:输出的速度是去掉重力后的整体加速度,因此,三轴加速度计可 ...

  5. 基于51单片机3轴加速度计ADXL345计步器卡路里系统设计

    摘要 计步器是一种颇受欢迎的日常锻炼进度监控器,可以激励人们挑战自己,增强体质,帮助瘦身.早期设计利用加重的机械开关检测步伐,并带有一个简单的计数器.晃动这些装置时,可以听到有一个金属球来回滑动,或者 ...

  6. 三轴加速度计的原理和方法

    现如今,很多现代人都非常注重自己的日常锻炼,计步作为一种有效记录监控锻炼的监控手段,被广泛应用在移动终端的应用中. 目前,大部分的计步都是通过GPS信号来测算运动距离,再反推行走步数实现的.这种方法很 ...

  7. 三轴加速度计解算姿态(四元数)

    原理 当传感器载体静止时,加速度计只会输出重力加速度,可以凭此来计算载体的俯仰角和滚转角. 方法 假设导航坐标系为东北天,载体坐标系为右前上. 初始载体坐标系和导航坐标系重合,对应的四元数为q=[1, ...

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

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

  9. 三轴加速度计得到角度值原理

    1.如果芯片水平静置,X.Y方向的重力分量为0g,而Z轴方向的重力分量为g.如下图所示,X=0:Y=0:Z=g. 2.如果两边各有一些夹角则如图二所示 基于图2中的夹角概念,他们的关系为α=90°-ɑ ...

最新文章

  1. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇
  2. React Native之AppRegistry模块
  3. 《深入浅出MFC》第六章 MFC程序的生死因果
  4. libuv / 编译 libuv 1.30 过程说明(静态库)
  5. intern_充分利用Outreachy Intern申请流程
  6. [react] useState和this.state的区别是什么?
  7. Transformer太大了,我要把它微调成RNN
  8. Linux学习 - sed使用
  9. Date java 1614619219
  10. mysql行转列sql函数_(转)行变列SQL语句(MSSQL) - jack - 博客园
  11. Matlab画图教程
  12. Cinema 4D R25 for mac三维动画设计
  13. 12.凤凰架构:构建可靠的大型分布式系统 --- 容器间网络
  14. win8/8.1改win7原版系统全部教程之先把驱动精灵万能网卡版存到U盘(2)
  15. mac 修改hosts 文件的方法
  16. android actionbar setCustomView时布局整体右移解决方案
  17. vue使用talkIngData统计
  18. 第十届蓝桥杯(国赛)——大胖子走迷宫
  19. Z(zombie)僵尸进程和孤儿进程
  20. Python 基于霍夫变换寻找正弦曲线

热门文章

  1. 【转载】机器学习算法基础概念学习总结
  2. python类中的内置函数
  3. java狗具有特别的接飞盘的方法_怎么训练狗玩飞盘?接飞盘的技术及要领分析...
  4. mongodb未授权漏洞
  5. 一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下的问题
  6. 七牛云解析CNAME
  7. pytesseract 中文识别错误解决
  8. Apace Doris基本操作测试
  9. 小学生html模板,HTML网页模板,中文的,不需要太大,学生作业?小学生免费学习网站?...
  10. 计算机网络实验5以太网链路帧实验,山东农业大学XF067011-计算机网络实验