物联网AI MicroPython传感器学习 之 ADXL345 3轴加速度传感器

学物联网,来万物简单IoT物联网!!

一、产品简介

ADXL345是一款完整的3轴加速度测量系统,可选择的测量范围有士2g,士4g,士8g或士16g。它既能测量运动或冲击导致的动态加速度,也能测量静止加速度,例如重力加速度,这样的特性让它可作为倾斜传感器使用。该传感器还具备单击 /双击探测,自由落体探测,并允许用户设置一个加速度阀值,当加速度值超过设定阀值后可以产生一个信号输出。所有这些功能都可以映射到2个中断上。

主控板可以通过I2C或SPI和该模块进行通信,本文中的驱动仅提供通过I2C接口和它进行通信,该传感器模组管脚定义及I2C模式下的典型电路请参考下图。

引脚定义

名称 说明
GND 地线
VCC 电源正极
CS SPI模式下片选信号
INT1 中断1引脚
INT2 中断2引脚
SDO SPI模式下数据输出引脚
SCL I2C模式下时钟线
SDA I2C模式下数据线

二、ADXL345芯片技术参数

  • 工作电压:2.0v~3.6v
  • 功耗:40~145uA,待机模式仅0.1uA
  • 分辨率:13位
  • 三轴加速度计可编程范围:士2g,士4g,士8g或士16g可变量程
  • 工作温度:-40°C~+85°C
  • 通信接口:400KHz I2C或2MHz SPI
  • 加速度计噪声:100μg/√Hz
  • 片上16位ADC
  • 用户可编程中断
  • 封装尺寸:LGA 3mm_5mm_1mm

三、软件接口

ADXL345(i2cObj) - 创建ADXL345驱动对象

  • 函数原型:

gyroDev = ADXL345(i2cObj)

  • 参数说明:
参数 类型 必选参数? 说明
i2cObj I2C 创建I2C对象
  • 返回值:
    执行成功,返回ADXL345对象;创建失败,抛出Exception
  • 示例代码:
python 复制代码
from machine import I2C,Pin          # 驱动库
import adxl34x                       # ADXL345加速度计传感器驱动库

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ADXL345 inited!")

gyroDev = adxl34x.ADXL345(i2cObj)    # 初始化ADXL345传感器对象
  • 输出:

    ADXL345 inited!

getAcceleration - 创建ADXL345驱动对象

  • 函数原型:

ADXL345.getAcceleration()

  • 参数说明:
  • 返回值:
    x,y,x三个方向的加速度值,格式:(xa, ya, za),单位:m/s²。
参数 类型 说明
xa int X轴方向的加速度
ya int X轴方向的加速度
za int X轴方向的加速度
  • 示例代码:
python 复制代码
from machine import I2C,Pin          # 驱动库
import adxl34x                       # ADXL345加速度计传感器驱动库

# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ADXL345 inited!")

gyroDev = adxl34x.ADXL345(i2cObj)    # 初始化ADXL345传感器对象

xa, ya, za = gyroDev.getAcceleration()
print("acceleration:", xa, ya, za)
  • 输出:
    分别代表x,y,z三个方向的实际加速度测量值

    ADXL345 inited!
    acceleration: <xx> <yy> <zz>

五、通信协议

主控芯片和ADXL345传感器之间通信所用命令字如下表所示:

序号 寄存器 功能说明 命令字宏定义
1 0x0 读取ADC采样结果 ADS1x15_POINTER_CONVERSION
2 0x1 设定ADC采样参数 ADS1x15_POINTER_CONFIG
3 0x2 设定阈值的低8位 ADS1x15_POINTER_LOW_THRESHOLD
4 0x3 设定阈值的高8位 ADS1x15_POINTER_HIGH_THRESHOLD
  • 设定ADC量测的参数并读取量测结果

    复制代码
      通过I2C向ADS1x15_POINTER_CONFIG寄存器写入ADC量测的参数(目标通道、增益、测量模式、测量速率)
      等待ADC采样结束(时间为一个采样周期(1/采样周期)+一个很小的偏差,如0.1ms)
      通过I2C发送读取ADS11x5的ADS1x15_POINTER_CONVERSION寄存器值的指令
      将测量结果转换成实际电压

测量的数字结果转化为实际电压算法请参考驱动中的readVoltage函数的实现

六、工作原理

ADXL34x传感器属于微型机电系统传感器,主要由硅晶片上的微机械结构组成。该结构由多晶硅弹簧悬挂,当在X,Y和/或Z轴上受到加速度时,它可以在任何方向上平滑偏转。挠曲会导致固定板和连接到悬挂结构的板之间的电容发生变化。每个轴上的电容变化都会转换为与该轴上的加速度成比例的输出电压。该传感器便是通过对此电压进行采样从而再计算的得出每个方向上的加速度。

ADXL34x传感器的系统框图如下图所示:

参考文献及购买链接

1\] [ADXL345 ADC转换器](https://www.ti.com/product/ADXL345) \[2\] [ADXL345 购买链接](https://detail.tmall.com/item.htm?id=17949627089)

相关推荐
Trent19852 分钟前
影楼精修-智能修图Agent
图像处理·人工智能·计算机视觉·aigc
烟锁池塘柳04 分钟前
【大模型】解码策略:Greedy Search、Beam Search、Top-k/Top-p、Temperature Sampling等
人工智能·深度学习·机器学习
盼小辉丶19 分钟前
PyTorch实战(14)——条件生成对抗网络(conditional GAN,cGAN)
人工智能·pytorch·生成对抗网络
小赖同学啊24 分钟前
基于区块链的物联网(IoT)安全通信与数据共享的典型实例
物联网·安全·区块链
Allen_LVyingbo1 小时前
数智读书笔记系列035《未来医疗:医疗4.0引领第四次医疗产业变革》
人工智能·经验分享·笔记·健康医疗
zzc9211 小时前
时频图数据集更正程序,去除坐标轴白边及调整对应的标签值
人工智能·深度学习·数据集·标签·时频图·更正·白边
isNotNullX1 小时前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析
riveting1 小时前
明远智睿H618:开启多场景智慧生活新时代
人工智能·嵌入式硬件·智能硬件·lga封装·3506
菜菜why1 小时前
MSPM0G3507学习笔记(一) 重置版:适配逐飞库的ti板环境配置
笔记·学习·电赛·嵌入式软件·mspm0
夜阑卧听风吹雨,铁马冰河入梦来2 小时前
Spring AI 阿里巴巴学习
人工智能·学习·spring