资源描述
概述:
ADXL345 是一款小而薄的超低功耗3 轴加速度计,分辨率高(13 位),测量范围达± 16g。数字输出数据为16 位二进制补码格式,可通过SPI(3 线或4 线)或I2C 数字接口访问。ADXL345 非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。该器件提供多种特殊检测功能。
活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。正在申请专利的集成式存储器管理系统采用一个32 级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。ADXL345 采用3 mm × 5 mm × 1 mm,14 引脚小型超薄塑料封装。
对比常用的飞思卡尔的MMZ7260三轴加速度传感器,ADXL345,具有测量精度高、可以通过SPI或I2C直接和单片机通讯等优点。
特性:
超低功耗:VS= 2.5 V 时(典型值),测量模式下低至23uA,
待机模式下为0.1μA 功耗随带宽自动按比例变化
用户可选的分辨率10 位固定分辨率全分辨率,分辨率随g 范围提高而提高,
±16g 时高达13 位(在所有g 范围内保持4 mg/LSB 的比例系数)
正在申请专利的嵌入式存储器管理系统采用FIFO 技术,可将主机处理器负荷
降至最低。单振/双振检测,活动/非活动监控,自由落体检测
电源电压范围:2.0 V 至3.6 V
I / O 电压范围:1.7 V 至VS
SPI(3 线和4 线)和I2C 数字接口
灵活的中断模式,可映射到任一中断引脚
通过串行命令可选测量范围
通过串行命令可选带宽
宽温度范围(-40°C 至+85℃)
抗冲击能力:10,000 g
无铅/符合RoHS 标准
小而薄:3 mm× 5 mm× 1 mm,LGA 封装
模组尺寸:23*18*11mm(高度含插针高度
应用:
机器人控制、运动检测
过程控制,电池供电系统
硬盘驱动器(HDD)保护,单电源数据采集系统
手机,医疗仪器,游戏和定点设备,工业仪器仪表,个人导航设备
电路功能与优势
ADXL345是一款小巧纤薄的低功耗三轴加速度计,可以对高达±16 g的加速度进行高分辨率(13位)测量。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或者I2C 数字接口访问。
ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。它具有高分辨率(4 mg/LSB),能够测量约0.25°的倾角变化。使用ADXL345等数字输出加速度计时,无需进行模数转换,从而可以节省系统成本和电路板面积。此外,ADXL345内置多种功能。活动/非活动检测、单击/双击检测以及自由落体检测均在内部完成,无需主机处理器执行任何计算。内置32级FIFO存储缓冲器可以减轻主机处理器的负担,起到简化算法和省电的作用。利用内置的活动/非活动检测功能,将ADXL345用作“运动开关”(无活动时关闭整个系统,检测到活动时才开启),系统可以实现进一步省电。
ADXL345通过I2或SPI接口进行通信。本文所述电路演示如何通过这些协议实现通信
图. ADXL345和ADuC7024的I2C配置(原理示意图,未显示去耦和所有连接)
电路描述
本电路将精密模拟微控制器ADuC7024和数字加速度计ADXL345配合使用。两款器件均支持I2C和SPI接口。图1显示ADXL345和ADuC7024的SPI配置,图2显示这些器件的I2C配置。CS引脚(ADXL345的引脚7)用来选择所需的接口。如果CS引脚连接高电平(VDD I/O),则I2C 模式使能。在SPI模式下,每次传输开始和结束时,CS电平均会切换。如果CS被拉高,则表示没有SPI传输发生,或者I2C 传输可能发生。
所示原理图均为示意图,但显示了必需的连接(电源、接地等)。在这些原理图中,ADuC7024通过UART进行编程(连接到引脚49和引脚50)。SW2和SW3分别是复位和下载按钮,用于微控制器编程。SW1是电源开关。
常见变化
图1显示了ADXL345的4线式SPI配置,但它也能通过3线式SPI进行通信。图3显示了这种配置。
上述电路采用ADuC7024微控制器。同样的配置可以适用于任何支持SPI或I2C的微控制器,如图4所示,其中采用标准I2C和SPI连接。表1列出了两种协议的引脚功能。
ADXL345引脚编号
引脚名称
功能
I2C
SPI
7
CS
(连接到VDD以支持I2C)
片选
12
SDO/ALT ADDRESS
备选地址选择
串行数据输出
13
SDA/SDI/SDIO
串行数据
串行数据输入(4线式SPI)/
串行数据输入和输出(2线式SPI)
14
SCL/SCLK
串行通信时钟
串行通信时钟
表1. SPI和I2C通信模式下ADXL345的引脚功能
图4. SPI(左)和I2C(右)连接图
测试程序
#include <SPI.h>
int CS=10;
char POWER_CTL = 0x2D;
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32;
char DATAX1 = 0x33;
char DATAY0 = 0x34;
char DATAY1 = 0x35;
char DATAZ0 = 0x36;
char DATAZ1 = 0x37;
char values[10];
int x,y,z;
void setup(){
SPI.begin();
SPI.setDataMode(SPI_MODE3);
Serial.begin(9600);
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
writeRegister(DATA_FORMAT, 0x01);
writeRegister(POWER_CTL, 0x08);
}
void loop(){
readRegister(DATAX0, 6, values);
x = ((int)values[1]<<8)|(int)values[0];
y = ((int)values[3]<<8)|(int)values[2];
z = ((int)values[5]<<8)|(int)values[4];
Serial.print(x, DEC);
Serial.print(',');
Serial.print(y, DEC);
Serial.print(',');
Serial.println(z, DEC);
delay(10);
}
void writeRegister(char registerAddress, char value){
digitalWrite(CS, LOW);
SPI.transfer(registerAddress);
SPI.transfer(value);
digitalWrite(CS, HIGH);
}
void readRegister(char registerAddress, int numBytes, char * values){
char address = 0x80 | registerAddress;
if(numBytes > 1)address = address | 0x40;
digitalWrite(CS, LOW);
SPI.transfer(address);
for(int i=0; i<numBytes; i++){
values[i] = SPI.transfer(0x00);
}
digitalWrite(CS, HIGH);
}
这里还是用到了串口调试的方法
程序:
int x, y, z;
int a1 = A0;
int a2 = A1;
int a3 = A2;
void setup()
{
pinMode(a1,INPUT);
pinMode(a2,INPUT);
pinMode(a3,INPUT);
Serial.begin(9600);
}
void loop()
{
x = analogRead(a1);
y = analogRead(a2);
z = analogRead(a3);
Serial.print("x: ");
Serial.print(x, DEC);
Serial.print(" ");
Serial.print("y: ");
Serial.print(y, DEC);
Serial.print(" ");
Serial.print("z: ");
Serial.println(z, DEC);
delay(100);
}
因为ADXL335输出的是模拟电压值,所以我们编写程序的时候只要采集输出电压就可以了,当然要做一些工程项目,准确地测出具体数字的话还需要看一看相关的数据手册进行一些编写。
下载完程序以后,我们打开串口调试窗口,可以看到窗口上显示我们测试到的数据。当加速度改变的时候,相应的数字也会发生变化
流程图
通过传感器获取飞行器状态数据
将数据传输到中枢控制系统
Artmeg328对数据进行处理
传送命令到电调控制电机转速
改变飞行器状态
展开阅读全文