加速度灵敏度轴

沿敏感轴加速时相应输出电压增加

寄存器映射

寄存器定义

0x31—DATA_FORMAT

SELF_TEST位:设置为1,自测力应用至传感器,造成输出数据转换。值为0时,禁用自测力

SPI位:值为1,设置器件为3线式SPI模式,值为0,则设置为4线式SPI模式

INT_INVERT位:值为0,设置中断至高电平有效,值为1,则设置至低电平有效

FULL_RES位:设置为1,该器件为全分辨率模式,输出分辨率随着范围位设置的g范围,以4 mg/LSB的比例因子而增加。 FULL_RES位设置为0时,该器件为10位模式,范围位决定最大g范围和比例因子

对齐位:设置为1,选择左对齐(MSB)模式,设置为0,选择右对齐模式,并带有符号扩展功能

范围位:设置g范围

0x2C—BW_RATE

LOW_POWER位:设置为0,选择正常操作,设置为1,选择低功率操作,而此时噪声有所增加

速率位:选择器件带宽和输出数据速率。默认值为0x0A,转换为100Hz的输出数据速率

0x2D—POWER_CTL

链接位:活动和静止功能的链接位设置为1,延迟活动功能开始,直到检测到静止。检测到活动后,静止检测开始,活动检测停止。该位串行链接活动和静止功能。此位设置为0时,静止功能和活动功能同时进行

AUTO_SLEEP位:设置链接位, AUTO_SLEEP位设置为1,自动休眠功能使能

测量位:测量位设置为0,将器件置于待机模式,设置为1,置于测量模式

休眠位:休眠位设置为0,将器件置于普通工作模式,设置为1,置于休眠模式

唤醒位:控制休眠模式下的读取频率

0x2E—INT_ENABLE

设置位值为1,使能相应功能,生成中断,设置为0时,阻止这些功能产生中断

寄存器0x1E、0x1F、0x20 — OFSX、OFSY、OFSZ。提供用户设置偏移调整

寄存器0x32至0x37 — DATAX0、DATAX1、DATAY0、DATAY1、DATAZ0和DATAZ1。保存各轴的输出数据

举例

#define DEVICE_ID       0X00 //器件ID
#define THRESH_TAP 0X1D
#define OFSX 0X1E
#define OFSY 0X1F
#define OFSZ 0X20
#define DUR 0X21
#define Latent 0X22
#define Window 0X23
#define THRESH_ACK 0X24
#define THRESH_INACT 0X25
#define TIME_INACT 0X26
#define ACT_INACT_CTL 0X27
#define THRESH_FF 0X28
#define TIME_FF 0X29
#define TAP_AXES 0X2A
#define ACT_TAP_STATUS 0X2B
#define BW_RATE 0X2C
#define POWER_CTL 0X2D #define INT_ENABLE 0X2E
#define INT_MAP 0X2F
#define INT_SOURCE 0X30
#define DATA_FORMAT 0X31
#define DATA_X0 0X32
#define DATA_X1 0X33
#define DATA_Y0 0X34
#define DATA_Y1 0X35
#define DATA_Z0 0X36
#define DATA_Z1 0X37
#define FIFO_CTL 0X38
#define FIFO_STATUS 0X39 #define ADXL_READ 0X3B //读指令
#define ADXL_WRITE 0X3A //写指令 typedef enum
{
X, //与x轴的角度
Y, //与y轴的角度
Z //与z轴的角度
}DIR_t; void ADXL345_write(u8 addr, u8 data)
{
I2C_start();
I2C_send_byte(ADXL_WRITE);
I2C_wait_ack();
I2C_send_byte(addr);
I2C_wait_ack();
I2C_send_byte(data);
I2C_wait_ack();
I2C_stop(); delay_ms(10);
} u8 ADXL345_read(u8 addr)
{
u8 d = 0; I2C_start();
I2C_send_byte(ADXL_WRITE);
I2C_wait_ack();
I2C_send_byte(addr);
I2C_wait_ack();
I2C_start();
I2C_send_byte(ADXL_READ);
I2C_wait_ack();
d = I2C_recv_byte();
I2C_ack(1);
I2C_stop(); return d;
} void ADXL345_init()
{
u8 d; I2C_init(); d = ADXL345_read(DEVICE_ID); printf("ADXL345_read %d\n", d); if(d == 0xE5)
{
ADXL345_write(DATA_FORMAT, 0x2B); //中断低电平有效,13位全分辨率模式,16g量程
ADXL345_write(POWER_CTL, 0x28); //链接使能,测量模式
ADXL345_write(INT_ENABLE, 0x00); //不使用中断
ADXL345_write(OFSX, 0x00);
ADXL345_write(OFSY, 0x00);
ADXL345_write(OFSZ, 0x00);
}
} void ADXL345_read_XYZ(short *x, short *y, short *z)
{
u8 i = 0;
u16 buf[6] = {0}; I2C_start();
I2C_send_byte(ADXL_WRITE);
I2C_wait_ack();
I2C_send_byte(0x32); //数据首地址
I2C_wait_ack();
I2C_start();
I2C_send_byte(ADXL_READ);
I2C_wait_ack(); for(i = 0; i < 6; i++) //总共6个
{
buf[i] = I2C_recv_byte();
// printf("I2C_recv_byte [%d] %d\r\n", i, buf[i]);
if(i == 5)
{
I2C_ack(1);
}
else
{
I2C_ack(0);
}
} I2C_stop(); *x = (short)((buf[1]<<8) + buf[0]);
*y = (short)((buf[3]<<8) + buf[2]);
*z = (short)((buf[5]<<8) + buf[4]);
} void ADXL345_read_times(short *x, short *y, short *z, u8 times)
{
u8 i = 0;
short tx, ty, tz; *x = *y = *z = 0; for(i = 0; i < times; i++) //读取times次
{
ADXL345_read_XYZ(&tx, &ty, &tz); *x += tx;
*y += ty;
*z += tz; delay_ms(5);
} *x /= times; //求平均
*y /= times;
*z /= times;
} short ADXL345_get_result(float x, float y, float z, u8 dir) //计算角度
{
float t;
float res; switch(dir)
{
case X:
t = x / sqrt(y*y + z*z);
res = atan(t); //求出弧度
break;
case Y:
t = y / sqrt(x*x + z*z);
res = atan(t);
break;
case Z:
t = sqrt(x*x + y*y) / z;
res = atan(t);
break;
default:
break;
} return (res * 180 / 3.14); //求出角度
} void ADXL345_main()
{
short x, y, z;
short rx, ry, rz; ADXL345_read_times(&x, &y, &z, 10); //读出x,y,z方向加速度值
printf("x %d\n", x);
printf("y %d\n", y);
printf("z %d\n", z); rx = ADXL345_get_result(x, y, z, X);
ry = ADXL345_get_result(x, y, z, Y);
rz = ADXL345_get_result(x, y, z, Z);
printf("rx %d\n", rx);
printf("ry %d\n", ry);
printf("rz %d\n", rz);
}

stm32 ADXL345传感器的更多相关文章

  1. STM32 磁场传感器HMC5883

    一.IIC协议 默认(出厂) HMC5883LL 7 位从机地址为0x3C 的写入操作,或0x3D 的读出操作. 要改变测量模式到连续测量模式,在通电时间后传送三个字节:0x3C 0x02 0x00 ...

  2. OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据

    由于数据采集站基本都安装在野外或者楼顶,安装位置以及震动对检测数据的准确性有一定影响.所以想要有一个位置状态数据,正好发现麒麟作上有ADXL345,这样一个数字输出的加速度传感器.如图中红框所示: 1 ...

  3. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)

    嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...

  4. (四)HXDZ-30102-ACC检测心率血氧数据并通过串口助手显示

    主要参考模块说明书 写在前面的话 硬件原理我是真的搞不明白,所以心率血氧传感器数据检测就是模块卖家自带的代码... 我使用HXDZ-30102-ACC传感器也是偶然在网上检索到的,集成心率血氧和三轴加 ...

  5. stm32软件模拟IIC读取PX4FLOW光流传感器数据

    这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...

  6. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  7. stm32与HC-SR04超声波传感器测距

    首先,先来看一下这个模块的基本功能和原理. HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm:模块包括超声波发射器.接收器与控制电路.像智能小车的测距 ...

  8. STM32之光敏电阻传感器模块的使用

    本实验配合2.2寸TFT液晶屏显示,当光弱的时候显示“昏暗”,光强时显示“明亮”. 实验使用的是下图所示的3线光敏电阻传感器模块,用途:光线亮度检测,光线亮度传感器,智能小车寻光模块.模块特色:比较器 ...

  9. stm32与地磁传感器HMC5883L

    1.简介 霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域.HMC5883L 包括最先进的高分辨率 HMC118X 系列磁阻传感器 ...

随机推荐

  1. Xilinx Zynq-7000 嵌入式系统设计与实现

    Xilinx Zynq-7000 嵌入式系统设计与实现 基于ARM Cortex-A9双核处理器和Vivado的设计方法 目录 第1章Zynq-7000 SoC设计导论 1.1全可编程片上系统基础知识 ...

  2. Python环境的导入导出

    有很多情况下,需要做Python环境的迁移,比如在本地开发环境搭建了某套架构,并安装了需要依赖模块,那么就需要将原有的环境导出到目的机器上,可以使用pip freeze导出. 导出环境,在开发机器上设 ...

  3. SAP RFC和BAPI

    RFC和BAPI都是SAP提供的接口技术.RFC全称Remote Function Call,就是允许远程调用的函数模块. BAPI则是基于RFC的新技术,全称Business Application ...

  4. WAV相关:从PCM16 Little Endian数据转WAV文件

    数据格式 [0.0, -0.0, -0.0, 0.0, 0.0, 0.0, 5.960464477539063e-08, 5.960464477539063e-08, 1.19209289550781 ...

  5. 【计算机视觉】车牌识别开源框架EasyPR介绍

    之前学习了一个GitHub开源的框架,GitHub地址为: https://github.com/liuruoze/EasyPR  希望通过此篇博客详细阐述如何一步步实现车牌的识别过程.  车牌识别分 ...

  6. Django时区导致的datetime时间比较报错

    我们使用python 的datetime模块比较Django数据库Datetime字段的时候,可能会出现报错: TypeError: can't compare offset-naive and of ...

  7. ubuntu安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1

    最近学习大数据,涉及到hive的部分需要安装mysql,于是就在linux环境下尝试安装,对于我这个linux小白来说,中间遇到很多坑爹问题,在这里做一个记录. 我参考的mysql安装博客: http ...

  8. js控制数量包含截取

    <div class="usermes_index_line"> 进行中的单 <div id="usermes_index_line_i2"& ...

  9. 034 Android NavigationView和DrawerLayout实现抽屉式导航设计(侧边栏效果)

    1.创建带侧滑效果的activity 右击,new---->activity---->选择NavgationDrawer Activity 2.xml文件布局 (1)activity_ma ...

  10. 031 Android 自定义控件

    1.自定义控件的优点 Android自身带的控件不能满足需求, 需要根据自己的需求定义控件. 2.自定义控件的分类: (1)组合已有的控件实现 (2)继承已有的控件实现(扩展已有的功能) (3)完全自 ...