加速度灵敏度轴

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

寄存器映射

寄存器定义

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. pytorch如何先初始化变量,然后再赋值

    下面是定义初始化 #初始化输入的张量 - torch.empty是返回一个包含未初始化数据的张量 self.input = torch.empty(size=(self.opt.batchsize, ...

  2. flutter的 图片组件基本使用

    import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends Statele ...

  3. Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)

    token的有效期 会出现一种情况session有效期还没到.但是token过期了. 用户登陆着,但是token失效了 没法访问服务了. 刷新令牌要和clientId和ClientSecret一起用, ...

  4. 将PCM格式存储成WAV格式文件

    将PCM格式存储成WAV格式文件 WAV比PCM多44个字节(在文件头位置多) 摘自:https://blog.csdn.net/u012173922/article/details/78849076 ...

  5. ISCSI多路径配置(二)

    搭建iscsi存储系统(一) (1).配置ISCSI多路径实现磁盘挂载高可用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出现故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 ...

  6. Shenzhen Wanze Technology Co., Ltd.隐私协议

    本隐私权政策详细说明了Shenzhen Wanze Technology Co., Ltd.团队(“我们”或“我们的”)通过我们的应用程序和网站收集的信息,以及我们将如何使用这些信息. 1.我们不会通 ...

  7. vmware安装gho系统(win10上安装虚拟机然后在vmware上安装win7)

    用ghost直接将gho转成vmdk将ghost32, gho文件放到同一目录, cmd里进入对应目录,输入以下命令ghost32 -clone,mode=restore,src=example.gh ...

  8. 基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 下面小编就为大家分享一篇基于Python中numpy数组的合并实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python中n ...

  9. SERVER_ADDR

    $_SERVER["SERVER_ADDR"]  当前运行脚本的服务器的ip地址

  10. LODOP中table自动分页补线加border

    LODOP中可以用ADD_PRINT_TABLE.ADD_PRINT_HTM.ADD_PRINT_HTML.ADD_PRINT_TBURL等可以输出超文本的表格,超文有超过打印项高度或纸张高度自动分页 ...