加速度灵敏度轴

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

寄存器映射

寄存器定义

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. AndroidKiller简单使用:修改应用名称

    修改apk名称 软件清晰地展示了美柚的信息.(是反编译的不错选择) 切换到工程管理器,可以查看反编译的资源和smail代码等. 接下来,查看smali代码,找到你需要查看的文件,点击下图的这个图标 看 ...

  2. Hadoop记录-部署hadoop环境shell实现

    #!/bin/bash menu() { echo "---欢迎使用hadoop部署管理程序---" echo "# 1.初始化Linux环境" echo &q ...

  3. 《楞严经四种清净明诲》 (转自学佛网:http://www.xuefo.net/nr/article56/559965.html)

    <楞严经四种清净明诲> 佛告阿难:“汝常闻我毗奈耶中,宣说修行三决定义.所谓摄心为戒,因戒生定,因定发慧,是则名为三无漏学. “阿难,云何摄心,我名为戒? “若诸世界六道众生其心不淫,则不 ...

  4. 报错:java.lang.AbstractMethodError: nl.techop.kafka.KafkaHttpMetricsReporter.logger()Lcom/typesafe/scalalogging/Logger;

    报错背景: CDH启动kafka的时候出现报错情况,并且报错的节点挂掉. 报错现象: Exiting Kafka due to fatal exception java.lang.AbstractMe ...

  5. LeetCode_203. Remove Linked List Elements

    203. Remove Linked List Elements Easy Remove all elements from a linked list of integers that have v ...

  6. matplot画3d图像

    import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np fig = plt ...

  7. 【prometheus 抓取源】

    配置prometheus从prometheus爬取数据 prometheus提供了下面这个端口来让其他prometheus来抓取(scrape)自己的时序数据: http://prometheus_i ...

  8. 【ARTS】01_45_左耳听风-201900916~201900922

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. 反馈神经网络Hopfield网络

    一.前言 经过一段时间的积累,对于神经网络,已经基本掌握了感知器.BP算法及其改进.AdaLine等最为简单和基础的前馈型神经网络知识,下面开启的是基于反馈型的神经网络Hopfiled神经网络.前馈型 ...

  10. Vmware player--打开vmdk; 导出系统;

    https://www.cnblogs.com/wxdblog/p/7091496.html 用vmware player打开已经存在的VMDK的方法: https://jingyan.baidu.c ...