首页 技术 正文
技术 2022年11月17日
0 收藏 866 点赞 2,372 浏览 2633 个字

Arduino I2C + 三轴加速度计LIS3DH

LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能。主要特性有:

  • 宽工作电压范围:1.71 ~ 3.6V
  • 功耗:低功耗模式2μA;正常工作模式、ODR = 50Hz时功耗11μA(要求SDO/SA0脚浮空或上拉)
  • 测量范围:+/-2g ~ +/-16g
  • 接口:I2C、三线制/四线制SPI
  • 16 bit数据输出
  • 两个可编程中断输出脚,用于自由落体和动作检测
  • 6D/4D方向检测
  • 内置AD支持3路外部信号输入
  • 内置温度传感器
  • 内置32-slot的10-bit FIFO存储器
  • 自检测功能
  • 封装:3 x 3 x 1 mm LGA-16

管脚定义

Arduino I2C + 三轴加速度计LIS3DH

  • VCC:电源
  • Vdd_IO:数字接口供电电源
  • GND:地
  • RES:连接到地
  • NC:不连接
  • CS:I2C接口选择(CS=1);或SPI接口片选脚(CS=0)
  • SCL/SPC:I2C接口或SPI接口的时钟线
  • SDA/SDI/SDO:I2C接口或SPI接口数据线
  • SDO/SA0:I2C地址选择脚;或四线制SPI接口输出脚。浮空时为1。
  • INT1:中断信号输出,触发条件可中断
  • INT2:同上
  • ADC1、ADC2、ADC3:数模转换的模拟信号输入脚

与Arduino的连接

用工作于3.3V/8MHz版本的Arduino Pro Mini进行调试,可避免用UNO时接口电平转换的麻烦。采用I2C接口进行通讯。未利用INT1、INT2和FIFO的功能。

Arduino I2C + 三轴加速度计LIS3DH

LIS3DH  Pro Mini 3.3V/8MHz

VDD <——> 3.3V

GND <——> GND

SCL <——>  A5 (SCL)

SDA <——> A4 (SDA)

功能调试

1. 根据应用手册,LIS3DH用于倾斜检测时,最好将测量范围设置为+/-2g。

2. 设备上电后,需要约5ms的启动时间,之后自动进入低功耗模式。之后不同的模式间切换也需要少许的时间,与ODR有关。

3. 存储结果的寄存器的值为有符号数(二补码)。应用笔记中“Example of acceleration data”中的示例表格,1g对应的高位寄存器值应为40h,资料应该是误写成了04h。

4. 手册中的功耗数据只适用于SDO/SA0脚接电源、或者空接的情况。若该管脚接地,功耗会增加150μA;若通过下拉电阻接地,功耗则会更大。

测试代码

 /*
Measurement of acceleration values using motion sensor LIS3DH
*/ #include <Wire.h> #define ADDRESS_LIS3DH 0x19
#define CTRL_REG1 0x20
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24
#define STATUS_REG 0x27
#define OUT_X_L 0x28 byte buffer[];
byte statusReg; boolean ready = false;
int outX, outY, outZ;
int xVal, yVal, zVal; void setup()
{
Wire.begin();
Serial.begin();
delay(); //5 ms boot procedure // reboot memory content, to make a clean start
Wire.beginTransmission(ADDRESS_LIS3DH);
Wire.write(CTRL_REG5);
Wire.write(0x80);
Wire.endTransmission(); delay(); //set ODR = 1 Hz, normal mode, x/y/z axis enabled
Wire.beginTransmission(ADDRESS_LIS3DH);
Wire.write(CTRL_REG1);
Wire.write(0x17);
Wire.endTransmission(); //set BDU= 1, scale = +/-2g, high resolution enabled
Wire.beginTransmission(ADDRESS_LIS3DH);
Wire.write(CTRL_REG4);
Wire.write(0x80);
Wire.endTransmission();
} void loop()
{
// read STATUS_REG
while(ready == false)
{
Wire.beginTransmission(ADDRESS_LIS3DH);
Wire.write(STATUS_REG);
Wire.endTransmission();
Wire.requestFrom(ADDRESS_LIS3DH, );
if (Wire.available() >= )
{
statusReg = Wire.read();
}
if (bitRead(statusReg, ) == ) //new data available
{
ready = true;
}
delay();
} if (bitRead(statusReg, ) == )
{
Serial.println("Some data have been overwritten.");
} //read the result
Wire.beginTransmission(ADDRESS_LIS3DH);
Wire.write(OUT_X_L | 0x80); //read multiple bytes
Wire.endTransmission();
Wire.requestFrom(ADDRESS_LIS3DH, );
if (Wire.available() >= )
{
for (int i = ; i < ; i++)
{
buffer[i] = Wire.read();
}
} //calculation
outX = (buffer[] << ) | buffer[];
outY = (buffer[] << ) | buffer[];
outZ = (buffer[] << ) | buffer[];
xVal = outX / ;
yVal = outY / ;
zVal = outZ / ; Serial.print("outX: "); Serial.print(xVal); Serial.print(" ");
Serial.print("outY: "); Serial.print(yVal); Serial.print(" ");
Serial.print("outZ: "); Serial.println(zVal); ready = false;
}

ODR更新频率设置为1Hz,通过串口打印三轴加速度测量结果,单位mg

Arduino I2C + 三轴加速度计LIS3DH

参考资料

LIS3DH – STMicroelectronics

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902