物联网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)

相关推荐
ONEYAC唯样4 分钟前
“在中国,为中国” 英飞凌汽车业务正式发布中国本土化战略
大数据·人工智能
mozun20209 分钟前
产业观察:哈工大机器人公司2025.4.22
大数据·人工智能·机器人·创业创新·哈尔滨·名校
-一杯为品-12 分钟前
【深度学习】#9 现代循环神经网络
人工智能·rnn·深度学习
硅谷秋水14 分钟前
ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架
人工智能·深度学习·机器学习·计算机视觉·语言模型·自动驾驶
Java中文社群36 分钟前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端
豆芽81944 分钟前
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
人工智能·深度学习·机器学习·强化学习
山北雨夜漫步1 小时前
机器学习 Day14 XGboost(极端梯度提升树)算法
人工智能·算法·机器学习
DKPT1 小时前
正则表达式
java·数据库·笔记·学习·正则表达式
yzx9910131 小时前
集成学习实际案例
人工智能·机器学习·集成学习
CodeJourney.1 小时前
DeepSeek与WPS的动态数据可视化图表构建
数据库·人工智能·信息可视化