前言
本项目基于STM32F103C8T6平台驱动ADXL345模块,主要用于三轴加速度的测量,也可用于平衡性检测,跌倒检测,PID控制等领域。
大多数博客的代码带入都不能使用,经过一上午调试,终于可以获取数据了。目前可通过IIC方式驱动(当然自己可以修改成SPI驱动,因为感觉IIC驱动节约一些引脚,当然有利有弊)获取x,y,z三个方向的变化量。现在将程序工程分享出来大家一起交流学习。
温馨提示:若存在表述错误或知识性错误望海涵指出,仅供学习交流,非作者同意不可转载,感谢支持吖~
一、介绍ADXL345传感器
ADXL345是三轴加速度传感器,根据官方网站以及官方手册(https://www.analog.com/cn/products/adxl345.html#product-overview)上的描述,它具有以下特性:
1、超低功耗:VS = 2.5 V时(典型值),测量模式下低至23μA,待机模式下为0.1 μA
2、功耗随带宽自动按比例变化
3、用户可选的分辨率:10位固定分辨率/全分辨率
分辨率随g范围提高而提高,±16 g时达到最高分辨率13位(在所有g范围内保持4 mg/LSB的比例系数)
使用的模块如下图:ADXL345(GY-291)
根据参考手册可知,引脚号分配:
根据官方手册可知,通信方式可参考下表:
说明:CS接入高电平则选择IIC通信,反之则SPI通信。SDO(地址引脚)接入高电平,根据手册器件的7位I2C地址是0x1D,后面跟上读取/写入位(R/W),则写寄存器为0x3A,读寄存器为0x3B;接入低电平,则7位I2C地址是0x53,同理,跟上读写标志位后写寄存器为0xA6,读寄存器为0xA7;
那么就简要介绍以下寄存器,它的寄存器很多,但是我们只需要先关注以下三个即可
只需要配置好这三个寄存器就可以开始工作,其余寄存器如下图(读取数据关注0x32开始的6个寄存器即可):
二、STM32驱动使用步骤
1.配置IIC通信协议
可以使用硬件iic也可使用软件iic,我这里为了方便就用硬件配置了:
//配置GPIO的复用模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//配置IIC的外设工作条件
I2C_DeInit(I2C2);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x30;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 200000;
2.寄存器初始化配置
void adxl345_init(void)
{
iic_rw(0x0d, 1, BW_RATE, ADXL345_ADDR, WRITE);//数据速率以及功率模式配置
iic_rw(0x08, 1, POWER_CTL, ADXL345_ADDR, WRITE);//省电特性配置
iic_rw(0x09, 1, DATA_FORMAT, ADXL345_ADDR, WRITE);//数据格式控制
}
3.读入数据串口打印
通过读寄存器的值来读取此时三轴加速度三方位的状态(这里是通过16位的数据格式获取,大家可配置,最大值为65535,将读取的数值转化为16位整型数据):
void adxl345_get_data(u16 *aax, u16 *aay, u16 *aaz)
{
u8 data_rev[6];
iic_rw(&data_buf[0], 6, ADXL345_BURST_ADDR, ADXL345_ADDR, READ);
*aax = data_rev[1] * 0x100 + data_rev[0];
*aay = data_rev[3] * 0x100 + data_rev[2];
*aaz = data_rev[5] * 0x100 + data_rev[4];
}
adxl345_get_data(x_temp, y_temp,z_temp);
printf("x is %d,y is %d,z is %d \r\n",*x_temp,*y_temp,*z_temp);
获取x,y,z的值将其串口打印。
三、成果输出
通过更改ADXL345模块方位,摇晃等,可以明显看出xyz发送了改变,说明我们已经驱动ADXL345模块,同时能获取相关数据。可后期对该数据进行采集,平均值,卡尔曼滤波等处理,使得更加稳定。
CSDN工程下载链接(已调试通过):https://download.csdn.net/download/qq_40249327/16822565
版权声明:本文为CSDN博主「wizard-ly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40249327/article/details/116021624
暂无评论