打印
[STM32F1]

STM32基础篇——ADXL345 加速度传感器实验

[复制链接]
9297|51
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
实验目标
1. 复习 I2C 协议的操作
2. 学习 ADXL345 加速度传感器的使用
沙发
aizaixiyuanqian|  楼主 | 2018-3-17 17:42 | 只看该作者
ADXL345 是一款完整的 3 轴加速度测量系统,可选择的测量范围有±2 g,
±4 g,±8 g 或±16 g。既能测量运动或冲击导致的动态加速度,也能测量静止
加速度,例如重力加速度,使得器件可作为倾斜传感器使用。

使用特权

评论回复
板凳
aizaixiyuanqian|  楼主 | 2018-3-17 17:45 | 只看该作者
它的分辨率为 13 位,测量范围达± 16g。数字输出数据为 16 位二进制补码
格式,可通过 SPI(3 线或 4 线)或 I2C 数字接口访问。这次实验我们讲述的是使用
I2C 操作的方式。

使用特权

评论回复
地板
小灵通2018| | 2018-3-17 17:52 | 只看该作者
ADXL345是一种三轴加速度计。

具有+/-2g,+/-4g,+/-8g,+/-16g可变的测量范围;最高13bit分辨率;固定的4mg/LSB灵敏度;3mm*5mm*1mm超小封装;40-145uA超低功耗;标准的I2C或SPI数字接口;32级FIFO存储;以及内部多种运动状态检测和灵活的中断方式等特性。

使用特权

评论回复
5
小灵通2018| | 2018-3-17 17:52 | 只看该作者
I2C是32单片机最难用的接口。

使用特权

评论回复
6
zhuotuzi| | 2018-3-17 17:57 | 只看该作者
这个I2C接口好配置不

使用特权

评论回复
7
aizaixiyuanqian|  楼主 | 2018-3-17 18:08 | 只看该作者
ADXL345 传感器的检测轴如下


使用特权

评论回复
8
aizaixiyuanqian|  楼主 | 2018-3-17 18:09 | 只看该作者
当 ADXL345 沿检测轴正向加速时,它对正加速度进行检测。在检测重力时
用户需要注意,当检测轴的方向与重力的方向相反时检测到的是正加速度。

使用特权

评论回复
9
aizaixiyuanqian|  楼主 | 2018-3-17 18:29 | 只看该作者
ADXL345 原理图

使用特权

评论回复
10
aizaixiyuanqian|  楼主 | 2018-3-17 18:31 | 只看该作者
ADXL345 写寄存器操作
上节课我们已经讲述过 I2C 的操作方式了,这里就不详细讲了。在这里,
我们主要讲述的是使用 IO 口模拟 I2C 的操作方式,因为 STM32 的硬件 I2C
太复杂,操作起来有时候有出现 GUG。

使用特权

评论回复
11
aizaixiyuanqian|  楼主 | 2018-3-17 18:31 | 只看该作者
写寄存器的操作步骤为:
1) 发送起始信号
2) 发送 I2C 写器件地址
3) 等待应答
4) 发送要写入的寄存器地址
5) 等待应答
6) 发送要写入的数据
7) 等待应答
8) 发送结束信号

使用特权

评论回复
12
aizaixiyuanqian|  楼主 | 2018-3-17 18:34 | 只看该作者
设置 ADX345 寄存器
static int8_t ADX345_WriteReg(uint8_t addr, uint8_t dat)
{
IIC_Start();
IIC_SendData(ADX345_ADDR); //24C02 写地址
if(IIC_WaitAck()) //如果无应答,表示发送失败
{
return 0xFF;
}
IIC_SendData(addr);
if(IIC_WaitAck()) //如果无应答,表示发送失败
{
return 0xFF;
}
IIC_SendData(dat);
if(IIC_WaitAck())
{
return 0xFF;
}
IIC_Stop();
return 0;
}

使用特权

评论回复
13
aizaixiyuanqian|  楼主 | 2018-3-17 18:38 | 只看该作者
ADXL345 的读寄存器操作
ADXL345 的读寄存器操作步骤如下:
1) 发送起始信号
2) 发送 I2C 写器件地址
3) 等待应答
4) 发送 I2C 要读的寄存器地址
5) 等待应答
6) 发送起始信号
7) 发送 I2C 读器件地址
8) 等待应答
9) 接收返回数据
10) 发送结束信号


使用特权

评论回复
14
aizaixiyuanqian|  楼主 | 2018-3-17 18:39 | 只看该作者
读取 ADX345 寄存器
static uint8_t ADX345_ReadReg(uint8_t addr)
{
uint8_t readValue = 0xFF;
IIC_Start();
IIC_SendData(ADX345_ADDR); //24C02 写地址
if(IIC_WaitAck())
{
return readValue;
}
IIC_SendData(addr);
if(IIC_WaitAck())
{
return readValue;
}
IIC_Start();
IIC_SendData(ADX345_ADDR + 1); //24C02 读地址
if(IIC_WaitAck())
{
return readValue;
}
readValue = IIC_ReceiveData(0);
IIC_Stop();
return readValue;
}

使用特权

评论回复
15
aizaixiyuanqian|  楼主 | 2018-3-17 19:18 | 只看该作者
ADXL345 初始化
在使用 ADXL345 之前,我们要对其寄存器进行一定的设置。首先我们来看一下它的寄存器命令。

使用特权

评论回复
16
aizaixiyuanqian|  楼主 | 2018-3-17 19:25 | 只看该作者
查看器件 ID。ADXL345 的 ID 寄存器为 0x00,它的 ID 为:

使用特权

评论回复
17
aizaixiyuanqian|  楼主 | 2018-3-17 19:26 | 只看该作者
设置 ADXL345 存储数据的方式和通信方式。这里我们设置寄存器地址为:0x31。


使用特权

评论回复
18
aizaixiyuanqian|  楼主 | 2018-3-17 19:26 | 只看该作者
这里我们主要看一下我们要设置的位的意义,详细的数据大家可以
查看数据手册。
D6:是设置是否使用 SPI。
D7:设置数据的存储方式,我们知道,ADXL345 的分辨率为 13
位,那么当它用 16 位寄存器保存的时候,就会空 3 位。这里是
设置数据存储的时候是选择数据保存左对齐还是右对齐。

使用特权

评论回复
19
aizaixiyuanqian|  楼主 | 2018-3-17 19:44 | 只看该作者
设置数据的输出速率
这里我们设置的是 BW_RATE 寄存器,地址为:0x2C。我们这里设置为正
常模式,传输速率 100HZ。

使用特权

评论回复
20
aizaixiyuanqian|  楼主 | 2018-3-17 19:47 | 只看该作者
设置测量模式和链接模式
设置 POWER_CTL 寄存器。这里设置使用测量模式,不使用中断模式。
而且链接模式也是设置为 1。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

1353

帖子

6

粉丝