你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 9995|回复: 10

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十四章 ADXL345三轴加速度传感器实验

[复制链接]

50

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-3-22 23:46:04 | 显示全部楼层 |阅读模式
  
第三十四章三轴加速度传感器实验

 
自从有了Iphone,各种新技术的普及程度越来越快,人们喜欢的不再是摔不坏的诺基亚,而是用户体验极佳的Iphone。
本章,我们介绍一种当今智能手机普遍具有的传感器:加速度传感器。在手机上,这个功能可以用来:自动切换横竖屏、玩游戏和切歌等。ALIENTEK战舰STM32开发板自带了加速度传感器:ADXL345。本章我们将使用STM32来驱动ADXL345,读取3个方向的重力加速度值,并转换为角度,显示在TFTLCD模块上。本章分为如下几个部分:
34.1 ADXL345简介
34.2 硬件设计
34.3 软件设计
34.4 下载验证



34.1 ADXL345简介
ADXL345是ADI公司的一款3轴、数字输出的加速度传感器。ADXL345是ADI公司推出的基于iMEMS技术的3轴、数字输出加速度传感器。该加速度传感器的特点有:
l 分辨率高。最高13位分辨率。
l 量程可变。具有+/-2g,+/-4g,+/-8g,+/-16g可变的测量范围。
l 灵敏度高。最高达3.9mg/LSB,能测量不到1.0°的倾斜角度变化。
l 功耗低。40~145uA的超低功耗,待机模式只有0.1uA。
l 尺寸小。整个IC尺寸只有3mm*5mm*1mm,LGA封装。
ADXL支持标准的I2C或SPI数字接口,自带32级FIFO存储,并且内部有多种运动状态检测和灵活的中断方式等特性。ADXL345传感器的检测轴如图34.1.1所示:
 

图34.1.1 ADXL345的三个检测轴当ADXL345沿检测轴正向加速时,它对正加速度进行检测。在检测重力时用户需要注意,当检测轴的方向与重力的方向相反时检测到的是正加速度。图33.1.2所示为输出对重力的响应。

图34.1.2 ADXL345输出对重力的响应

       图34.1.2列出了ADXL345在不同摆放方式时的输出,以便后续分析。接下来我们看看ADXL345的引脚图,如图34.1.3所示:

图34.1.3 ADXL345引脚图

       ADXL345支持SPI和IIC两种通信方式,为了节省IO口,战舰STM32开发板采用的是IIC方式连接,官方推荐的IIC连接电路如图34.1.4所示:

图34.1.4 ADXL345 IIC模式连接电路

       从上图可看出,ADXL345的连接十分简单,外围需要的器件也极少(就2个电容),如上连接(SDO/ALT ADDRESS接地),则ADXL345的地址为0X53(不含最低位),如果SDO/ALT ADDRESS接高,那么ADXL345的地址将变为0X1D(不含最低位)。IIC通信的时序我们在之前已经介绍过(第二十七章,IIC实验),这里就不再细说了。
       最后,我们介绍一下ADXL345的初始化步骤。ADXL345的初始化步骤如下:
1)上电
2)等待1.1ms
3)初始化命令序列
4)结束
其中上电这个动作发生在开发板第一次上电的时候,在上电之后,等待1.1ms左右,就可以开始发送初始化序列了,初始化序列一结束,ADXL345就开始正常工作了。这里的初始化序列,最简单的只需要配置3个寄存器,如表34.1.1所示:
 
            
步骤

            
            
寄存器地址

            
            
寄存器名字

            
            
寄存器值

            
            
功能描述

            
            
1

            
            
0X31

            
            
DATA_FORMAT

            
            
0X0B

            
            
±16g,13位模式

            
            
2

            
            
0X2D

            
            
POWER_CTL

            
            
0X08

            
            
测量模式

            
            
3

            
            
0X2E

            
            
INT_ENABLE

            
            
0X80

            
            
使能DATA_READY中断

            

34.1.1 ADXL345最简单的初始化命令序列

       发送以上序列给ADXL345以后,ADXL345即开始正常工作。
       ADXL345我们就介绍到这里,详细的介绍,请参考ADXL345的数据手册。
34.2硬件设计
本实验采用STM32的3个普通IO连接ADXL345,本章实验功能简介:主函数不停的查询ADXL345的转换结果,得到xyz三个方向的加速度值(读数值),然后将其转换为与自然系坐标的角度,并将结果在LCD模块上显示出来。DS0来指示程序正在运行,通过按下WK_UP按键,可以进行ADXL345的自动校准(DS1用于提示正在校准)。
所要用到的硬件资源如下:
1) 指示灯DS0、DS1
2) WK_UP按键
3)TFTLCD模块
4) ADXL345
    前3个,在之前的实例已经介绍过了,这里我们仅介绍ADXL345与战舰STM32开发板的连接。该接口与MCU的连接原理图如34.2.1所示:

                  图34.2.1 ADXL345与STM32的连接电路图从上图可以看出,ADXL345通过三根线与STM32开发板连接,其中IIC总线时和24C02以及RDA5820共用,接在PB10和PB11上面。ADXL345的两个中断输出,这里我们只用了一个,连接在STM32的PF11脚,另外这里的地址线是接3.3V,所以ADXL345的地址是0X1D,转换为0X3A写入,0X3B读取。
  



<div style="layout-grid:  15.6pt none">34.3软件设计
打开上一章的工程,首先在HARDWARE文件夹下新建一个ADXL345的文件夹。然后新建一个adxl345.c和adxl345.h的文件保存在JOYPAD文件夹下,并将这个文件夹加入头文件包含路径。
打开adxl345.c文件,输入如下代码:
#include "adxl345.h"
#include "sys.h"
#include "delay.h"
#include "math.h"  
//初始化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);             //数据输出速度为100Hz
              ADXL345_WR_Reg(POWER_CTL,0x28);       //链接使能,测量模式
              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寄存器
//addr:寄存器地址
//val:要写入的值
//返回值:无
void ADXL345_WR_Reg(u8 addr,u8 val)
{
       IIC_Start();                         
       IIC_Send_Byte(ADXL_WRITE);     //发送写器件指令
       IIC_Wait_Ack();      
    IIC_Send_Byte(addr);                      //发送寄存器地址
       IIC_Wait_Ack();                                                                                        
       IIC_Send_Byte(val);                       //发送值                                
       IIC_Wait_Ack();                        
    IIC_Stop();                                        //产生一个停止条件       
}
//读ADXL345寄存器
//addr:寄存器地址
//返回值:读到的值
u8 ADXL345_RD_Reg(u8 addr)        
{
       u8 temp=0;           
       IIC_Start();                         
       IIC_Send_Byte(ADXL_WRITE);  //发送写器件指令 
       temp=IIC_Wait_Ack();    
    IIC_Send_Byte(addr);               //发送寄存器地址
       temp=IIC_Wait_Ack();                                                                                             
       IIC_Start();                    //重新启动
       IIC_Send_Byte(ADXL_READ);   //发送读器件指令 
       temp=IIC_Wait_Ack();    
    temp=IIC_Read_Byte(0);             //读取一个字节,不继续再读,发送NAK                   
    IIC_Stop();                                 //产生一个停止条件        
       return temp;                         //返回读到的值

//读取ADXL的平均值
//x,y,z:读取10次后取平均值
void ADXL345_RD_Avval(short *x,short *y,short *z)
{
       short tx=0,ty=0,tz=0;       
       u8 i; 
       for(i=0;i

《STM32开发指南》第三十四章 ADXL345三轴加速度传感器实验.rar

下载

660.12 KB, 下载次数: 753, 下载积分: ST金币 -1

实验29 三轴加速度传感器实验.rar

下载

153.39 KB, 下载次数: 681, 下载积分: ST金币 -1

<
回复

使用道具 举报

24

主题

317

回帖

0

蝴蝶豆

高级会员

最后登录
2020-10-10
发表于 2013-3-23 07:43:56 | 显示全部楼层

RE:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十四章 ADXL345三轴加速度传感器实验

回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-9-2 21:40:29 | 显示全部楼层

回复:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十四章 ADXL345三轴加速度传感器实验

谢谢奉献,学习学习
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-9-17 17:09:50 | 显示全部楼层

回复:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十四章 ADXL345三轴加速度传感器实验

 好东西啊,需要其他章节的!
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

初级会员

最后登录
2020-9-25
发表于 2013-9-17 22:55:13 | 显示全部楼层

RE:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十四章 ADXL345三轴加速度传感器实验

牛逼,灰常!!!
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2018-12-20
发表于 2015-7-17 14:17:47 | 显示全部楼层
正在做这个项目,很需要,谢谢楼主分享,大家一起学习啊
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
2018-2-19
发表于 2018-2-17 16:22:33 | 显示全部楼层
不错
回复 支持 反对

使用道具 举报

0

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
2019-4-29
发表于 2018-5-23 22:44:46 | 显示全部楼层
好东西,受教。
回复 支持 反对

使用道具 举报

0

主题

7

回帖

0

蝴蝶豆

初级会员

最后登录
2020-11-23
发表于 2018-9-17 09:18:10 | 显示全部楼层
哪里有SPI接口的啊
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
2019-7-4
发表于 2018-12-10 14:43:34 | 显示全部楼层

牛逼,特别!!!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版