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


    学物联网,来万物简单IoT物联网!!在这里插入图片描述

    一、产品简介

    ADXL345是一款完整的3轴加速度测量系统,可选择的测量范围有士2g,士4g,士8g或士16g。它既能测量运动或冲击导致的动态加速度,也能测量静止加速度,例如重力加速度,这样的特性让它可作为倾斜传感器使用。该传感器还具备单击 /双击探测,自由落体探测,并允许用户设置一个加速度阀值,当加速度值超过设定阀值后可以产生一个信号输出。所有这些功能都可以映射到2个中断上。
    主控板可以通过I2C或SPI和该模块进行通信,本文中的驱动仅提供通过I2C接口和它进行通信,该传感器模组管脚定义及I2C模式下的典型电路请参考下图。
    image.png

    引脚定义

    名称说明
    GND地线
    VCC电源正极
    CSSPI模式下片选信号
    INT1中断1引脚
    INT2中断2引脚
    SDOSPI模式下数据输出引脚
    SCLI2C模式下时钟线
    SDAI2C模式下数据线

    二、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)

    • 参数说明:
    参数类型必选参数?说明
    i2cObjI2C创建I2C对象
    • 返回值:
      执行成功,返回ADXL345对象;创建失败,抛出Exception
    • 示例代码:
    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传感器对象
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 输出:
    ADXL345 inited!
    
    • 1

    getAcceleration - 创建ADXL345驱动对象

    • 函数原型:

    ADXL345.getAcceleration()

    • 参数说明:
    • 返回值:
      x,y,x三个方向的加速度值,格式:(xa, ya, za),单位:m/s²。
    参数类型说明
    xaintX轴方向的加速度
    yaintX轴方向的加速度
    zaintX轴方向的加速度
    • 示例代码:
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 输出:
      分别代表x,y,z三个方向的实际加速度测量值
    ADXL345 inited!
    acceleration:   
    
    • 1
    • 2

    五、通信协议

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

    序号寄存器功能说明命令字宏定义
    10x0读取ADC采样结果ADS1x15_POINTER_CONVERSION
    20x1设定ADC采样参数ADS1x15_POINTER_CONFIG
    30x2设定阈值的低8位ADS1x15_POINTER_LOW_THRESHOLD
    40x3设定阈值的高8位ADS1x15_POINTER_HIGH_THRESHOLD
    • 设定ADC量测的参数并读取量测结果
        通过I2C向ADS1x15_POINTER_CONFIG寄存器写入ADC量测的参数(目标通道、增益、测量模式、测量速率)
        等待ADC采样结束(时间为一个采样周期(1/采样周期)+一个很小的偏差,如0.1ms)
        通过I2C发送读取ADS11x5的ADS1x15_POINTER_CONVERSION寄存器值的指令
        将测量结果转换成实际电压
    
    • 1
    • 2
    • 3
    • 4

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

    六、工作原理

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

    参考文献及购买链接

    [1] ADXL345 ADC转换器
    [2] ADXL345 购买链接

  • 相关阅读:
    C++ Reference: Standard C++ Library reference: C Library: cstring
    2023年最新Python大数据之Python基础【七】管理系统
    计算机毕业设计之java+springboot基于vue的农机电招平台
    关于vue ui图形化界面中创建项目时卡住的问题
    Java中如何检测一个元素是否存在于HashSet对象中呢?
    GeneralUpdate20220323里程碑版本发布
    Define event types in Splunk Web
    Blender 雕刻
    Vue 路由缓存 防止路由切换数据丢失 路由的生命周期
    go锁-waitgroup
  • 原文地址:https://blog.csdn.net/weixin_39363464/article/details/133894851