STM32——库函数版——ADXL345驱动程序

加速度传感器ADXL345驱动程序

完整工程链接:
ADXL345工程代码

1.ADXL345简介

ADXL345是ADI公司推出的基于iMEMS技术的3轴、数字输出加速度传感器。

特点:
1.分辨率高:最高13位分辨率。
2.量程可变:具有+/-2g、+/-4g、+/-8g、+/-16g可变的测量范围。
3.灵敏度高:最高达3.9mg/LSB,能测量不到1.0的倾斜角度变化。
4.功耗低:40~145uA的超低功耗,待机模式只有0.1uA。
5.支持标准的I2C或SPI数字接口,自带32级FIFO存储,并且内部有多种运动状态检测和灵活的中断方式等特性。

芯片手册核心内容:

芯片名称ADXL345
工作原理ADXL345是一款完整的3轴加速度测量系统
引脚说明SDA CLK GND VCC
工作环境电压2.0 V 至3.6 V 宽温度范围(-40℃至+85℃)
通讯方式SPI(3线和4线)或 I2C数字接口
量程-0.3V至+3.9V , 10000g
精度(最小单位的偏移量)3.9mg/LSB
数据格式16位二进制补码

注意:

当 ADXL345 沿检测轴正向加速时,它对正加速度进行检测。在检测重力时,当检测轴的方向与重力的方向相反时检测到的是正加速度。

2.ADXL345控制程序

功能: 使用STM32F103ZET6驱动ADXL345,读取传感器三个方向的加速度值和转换后的角度值,通过串口打印显示,同时通过按键进行校准。
程序框架:
(1) 初始化ADXL345
(2) 读取ADXL345三个方向的加速度值
(3) 通过加速度的值计算角度值
(4) 主函数显示测试结果

初始化ADXL345函数

/*******************************************************************************
* 函 数 名 : ADXL345_Init
* 函数功能 : 初始化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);	    //链接使能,测量模式     (POWER_CTL寄存器选择工作模式)
		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三轴加速度值

/*******************************************************************************
* 函 数 名 : ADXL345_RD_XYZ
* 函数功能 : 读取3个轴的数据
* 输    入 : x,y,z:读取到的数据
* 输    出 : 无
* 返 回 值 :无
*******************************************************************************/
void ADXL345_RD_XYZ(short *x,short *y,short *z)
{
	u8 buf[6];
	u8 i;
	IIC_Start();  				 
	IIC_Send_Byte(ADXL_WRITE);	//发送写器件指令	 
	IIC_Wait_Ack();	   
  IIC_Send_Byte(0x32);   		  //发送寄存器地址(数据缓存的起始地址为0X32)
	IIC_Wait_Ack(); 	 										  		   
 
 	IIC_Start();  	 	   		   //重新启动
	IIC_Send_Byte(ADXL_READ);	 //发送读器件指令
	IIC_Wait_Ack();
	for(i=0;i<6;i++)     //读6个字节,两个字节存储一个轴的数据
	{
		if(i==5)buf[i]=IIC_Read_Byte(0); //读取一个字节,不继续再读,发送NACK  
		else buf[i]=IIC_Read_Byte(1);	   //读取一个字节,继续读,发送ACK 
 	}	        	   
  IIC_Stop();					 //产生一个停止条件
	*x=(short)(((u16)buf[1]<<8)+buf[0]); 	    
	*y=(short)(((u16)buf[3]<<8)+buf[2]); 	    
	*z=(short)(((u16)buf[5]<<8)+buf[4]); 	   
}

通过加速度的值计算角度值

注意:返回值角度值单位是0.1°
偏转角度计算公式:
在这里插入图片描述

/*******************************************************************************
* 函 数 名 : ADXL345_Get_Angle
* 函数功能 : 得到角度
* 输    入 : x,y,z:x,y,z方向的重力加速度分量(不需要单位,直接数值即可)
             dir:要获得的角度.0,与Z轴的角度;1,与X轴的角度;2,与Y轴的角度.
* 输    出 : 无
* 返 回 值 :返回值:角度值.单位0.1°.
*******************************************************************************/
short ADXL345_Get_Angle(float x,float y,float z,u8 dir)
{
	float temp;
 	float res=0;     //res得到的是弧度值,需要将其转换为角度值也就是*180/3.14
	switch(dir)
	{
		case 0:        //与自然Z轴的角度
 			temp=sqrt((x*x+y*y))/z;
 			res=atan(temp);
 			break;
		case 1:       //与自然X轴的角度
 			temp=x/sqrt((y*y+z*z));
 			res=atan(temp);
 			break;
 		case 2:        //与自然Y轴的角度
 			temp=y/sqrt((x*x+z*z));
 			res=atan(temp);
 			break;
 	}
	return res*180/3.14*10;      //乘以10是为了取一位小数,角度精确到0.1°所以要乘以10
}
3.结果演示

演示X轴的倾斜角度和三轴的加速度值数据正确
在这里插入图片描述

  • 9
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
ADXL345是ADI公司推出的基于iMEMS技术的3轴、数字输出加速度传感器。它具有最高13位的分辨率、可变的测量范围、能测量不到1.0°的倾斜角度变化等特点。ADXL345支持标准的I2C或SPI数字接口,自带32级FIFO存储,并且内部有多种状态检测和灵活的中断方式等特性。在STM32驱动ADXL345的过程中,可以按照以下步骤进行操作: 1. 初始化ADXL345传感器,可以使用ADXL345_Init函数进行初始化。该函数会初始化IIC总线,并设置ADXL345的一些参数,如数据格式、数据输出速度、工作模式等。 2. 读取ADXL345三个方向的加速度值,可以使用ADXL345_RD_Reg函数读取传感器的寄存器值。 3. 通过加速度的值计算角度值,可以根据加速度值的变化来计算传感器的倾斜角度。 4. 在主函数中显示测试结果,可以通过串口打印显示传感器的加速度值和转换后的角度值。 需要注意的是,以上是一个简单的程序框架,具体的实现还需要根据具体的硬件平台和编程语言进行适配。可以参考引用\[2\]中提供的程序框架进行具体的驱动开发。 #### 引用[.reference_title] - *1* [STM32CubeMX系列|ADXL345传感器](https://blog.csdn.net/Chuangke_Andy/article/details/108987310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32——库函数——ADXL345驱动程序](https://blog.csdn.net/qq_45844792/article/details/118565633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜籽@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值