ADXL345快速使用指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADXL345快速运用指南
作者 zagGard 2011年1月10日
描述:
ADXL345是一款体型小而轻薄的超低功耗3轴加速度计,分辨率高13位,测量范围± 16g。
数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C 数字接口访问。
ADXL345非常适合应用于移动设备。
它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。
其高分辨率为4mg/LSB,能够测量不到1.0°的倾斜角度变化。
该器件提供多种特殊检测功能。
活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。
敲击检测功能可以检测任意方向的单振和双振动作。
自由落体检测功能可以检测器件是否正在掉落。
这些功能可以独立映射到两个中断输出引脚中的一个。
正在申请专利的集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。
低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。
特征:
2.0-
3.6V直流供电
超低功耗:测量模式时40uA,待机时0.1uA@2.5V
单振/双振检测
自由落体检测
SPI和I2C数字接口
数据传输:
这部分的指南说明了如何把Arduino ADXL345连接到面包板。
下面是一个描述Arduino引脚应该连接到的加速度计引脚的表:
初学者的示例代码:
让我们看一个获得ADXL345和Arduino运行的示例。
你可以在这里下载完整的代码。
下面我们将检查该代码的不同部分。
这是代码的初始化部分,这真的非常基本,这里是正在发生的。
SPI.h库被添加到程序。
SPI是Arduino使用于传达给ADLX345的通信协议,一个名为CS的变量存储片选信号的针数,是为ADXL345寄存器创建的变量,这些变量存储的指示的寄存器的地址和用于从加速计设置和检索的值。
数据表显示所有可用的ADXL345及其地址寄存器。
创建变量,将存储已检索到的加速度信息。
代码的主要部分分为两个部分:初始化部分和循环部分。
初始化部分是用来配置Arduino与ADXL345沟通的不同方面。
在初始化部分的
末尾两个功能用于将加速度计设为我们要使用的模式(+ / - 4G的检测,测量使能模式)。
这两个功能将在下一段程序讨论。
循环部分做程序的大部分工作。
这是循环部分:
Arduino使用读取寄存器命令从ADXL3456读取6个寄存器的值。
该命令从加速度计读取x,y和z加速度值,并将其存储在一个在初始化程序中创建的名为“values”的缓冲区。
来自加速度计的值被以字节被读取。
一个字节只有8位,但加速度计加速
的报告多达10位!为了看到正确的加速度值,我们必须将两个字节连接一起。
x,y
和z的加速度值是通过来自缓冲器的字节的值来确定的。
加速度值被传送到串口终端。
程序在再次执行循环之前等待10毫秒,这将允许循环运行在大约100赫兹。
寄存器读取命令被用于读取ADXL345的值,当使用寄存器读取功能时必须使用三个变量:被读取寄存器的地址,所读取序列中寄存器的数量,以及读取值所储存的缓冲区。
当从ADXL345读取一个寄存器时地址必须被修改,以使第8位被设置为高位。
如果要读取超过1个寄存器的话第7位也必须设置为高位。
这个功能在前两行完成此任务,之后,该功能非常类似于寄存器书写功能。
将CS引脚置为低电平来启动SPI序列,地址被转移。
之后,一个循环中读取的来自加速度计的寄存器的指定数量的值被存储在指定的缓冲区。
最后,CS引脚置高,结束SPI序列,功能完成。
人如果你看上了这个关于ADXL345使用Arduino作为处理器的使用指南,下载程序,在Arduino的IDE中打开程序后,只需将其加载到您的开发板并打开Arduino 终端,你会看到的X,Y和Z加速度值开始在终端窗口滚动。
此代码已经被添加到程序的setup()部分。
这与ADXL345_Basic示例的setup()部分有点不同因为我们设置了ADXL345的单振/双振检测。
当加速度计检测到单振或双振我们让INT1引脚变为高电平,当事件被处理完毕后INT1引脚将回到低电平。
当INT1引脚在ADXL345上为高电平,我们希望到Arduino产生中断。
为了做到这一点,我们使用attachInterrupt()函数,我们设置个功能要当中断0(引脚D2)由低到高时发生中断,而我们希望Arduino执行单振功能时发生这种情况。
我们稍后来看看单振功能。
中断产生后,我们需要配置ADXL345识别单振,双振事件。
为了配置这个,我们必须改变以下寄存器的值:INT_MAP,TAP_AXES,THRESH_TAP,DURATION, LATENT and WINDOW。
您可以阅读数据表中的“振动检测”部分,看到为什么这些值分配给相应寄存器。
基本上,虽然ADXL345已配置为如果检测一个单振或双振INT1端子会从低到高的,但是一旦中断处理的INT1引脚将回到低电平。
在最后的部分,我们会想两种类型的输出。
如果一个单一的振动被检测到Arduino将输出原始加速度计值x,y和z,就像在ADXL345_Basic例子。
但是,如果ADXL345检测到一个双振,我们想要的Arduino计算出的X,Y和Z轴的实际G 值。
为了从原始加速度计数据计算出的G值计算我们必须找到数模。
为了找到数模,我们需要知道两个数值:用于表示原始值的位数和加速度值可以表示的范围。
该ADXL345设置为10位测量值。
我们设定的范围为±4g,或8g范围。
数模是通过将总的范围由可以在10位的数目中表示找到的。
一旦我们知道了数模,我们需要做的就是通过数模乘以加速度传感器的原始数据,以寻找GS的数量。
变量xg,yg和zg是浮动的变量,使他们能够用十进制数表示。
当TAP ()函数中断运行(我们将之后讨论这个)它分配一个值tagType变量。
如果检测到一个单振该变量赋值'1',如果检测到双振该变量赋值'2'。
如果检测到单振Arduino的会写单词“SINGLE”跟在x,y和z加速度值后送到终端。
如果检测到双
振Arduino将输入单词“DOUBLE”跟在x,y和z加速度值后送到终端。
在显示了
数值后,我们把中断关闭了一小会儿,这防止了Arduino从ADXL345再次检测到单
振从而再次引发中断。
因为当Arduino检测到引脚D2发生中断时attachInterrupt()函数也就是
TAP ()函数将被调用的方式。
这个功能是相当简单:Arduino的读取ADXL345的
INT_SOURCE寄存器的值并存储在'values'缓冲器。
该INT_SOURCE寄存器告诉我们,中断来自一个单振还是双振,取决于哪种我们在tapType变量分配的1或2。
下载程序和运行程序,需要在你把ADXL345连接到Arduino后,在ADXL345
的INT1引脚上连一根导线到Arduino的D2上的,将程序下载到您的板子。
然后打
开处理和运行ADXL345_Advanced窗口,您可能需要更改串口号,以反映该端口有Arduino插入。
如果一切都已经正确处理,当你轻点的ADXL345加速度计窗口将输
出“Single Tap”,的原始值,同样的当你双击的ADXL345,窗口将输出“Double Tap”。