【ADXL357Z高精度3轴加速度传感器模块】模块通信测试

【ADXL357Z高精度3轴加速度传感器模块】模块通信测试

本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块的通信相关信息,包括原理图、IIC和SPI的通信原理、模块驱动测试等。

模块原理

包括 ADXL357Z 模块的原理图、引脚定义等。

原理图

包装盒内部附有产品(传感器模块)的纸质原理图。

电子版原理图详见:EVAL-ADXL357Z Analog Devices Inc. | DigiKey .

引脚定义

ADXL357Z 传感器管脚定义表格见数据手册。

模块排针输出定义

可结合原理图与引脚定义表格判断

通信方式

包括数据采集与通信传输原理、应用电路、IIC 与 SPI 通信时序等。

应用电路

详见数据手册。

SPI 通信

接线方式见数据手册。

时序图

单字节读出、单字节写入、SPI 通信时序图见数据手册。

IIC 通信

  • MISO/ASEL pin = 0, device address = 0x1D
  • MISO/ASEL pin = 1, device address = 0x53

时序图

单字节读取、单字节写入、IIC 通信时序图见数据手册。

接线方式

根据 ADXL357 数据手册中给出的应用电路图可知,IIC 通信的接线方式为

ADXL357 MCU
SCL (Pin 1) SCL
SDA (Pin 3) SDA
VSS GND
VDD 3V3

工程调试

采用 IIC 通信方式与 RP2350 接线

ADXL357 RP2350
SCL (P2 - 2) GP05
SDA (P2 - 6) GP04
VSS (P1 - 5) GND
VDD (P1 - 3) 3V3

使用树莓派 Pico2 主控 RP2350A ,对 ADXL357Z 传感器的地址进行扫描;

'''
Name: I2C Scanner MicroPython
Version: v1.0
Date: 2025.06
Author: ljl
Other: I2C Scanner and print address on shell.
'''

from machine import Pin, I2C
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
devices = i2c.scan()
if len(devices) == 0:
    print("No i2c device !")
else:
    print('i2c devices found:', len(devices))
# print(hex(devices[0]))
for device in devices:
    print("I2C hexadecimal address: ", hex(device))

运行结果,设备地址为 0x1D 与数据手册给出的参数符合,设备运行正常。

数据读取

通过读取传感器寄存器的方式实现数据采集,并启用零点偏移校准,提高采集数据的精确度。

MicroPython 代码
'''
Name: Shell Print ADXL357Z Sensor Data 
Version: v1.0
Date: 2025.06
Author: ljl
Other: I2C bus drive ADXL357Z sensor and print XYZ-axis acceleration on shell.
'''
from machine import Pin, I2C
import time

# 初始化 I2C
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=100000)  # 100kHz
ADXL357_ADDR = 0x1D

# 写入寄存器
def write_reg(reg, value):
    i2c.writeto_mem(ADXL357_ADDR, reg, bytes([value]))

# 读取寄存器
def read_reg(reg):
    return i2c.readfrom_mem(ADXL357_ADDR, reg, 1)[0]

# 初始化传感器
def init_adxl357():
    # 启用测量模式
    write_reg(0x2D, 0x08)  # POWER_CTL = 0x08 (Measure mode)
    # 设置量程 ±10g,全分辨率
    write_reg(0x31, 0x03)  # DATA_FORMAT = 0x03
    # 设置带宽 100Hz
    write_reg(0x2C, 0x0A)  # BW_RATE = 0x0A

# 读取加速度数据(带符号转换)
def read_accel():
    data = i2c.readfrom_mem(ADXL357_ADDR, 0x08, 6)  # 读取 6 字节
    def to_signed16(v):
        return (v & 0x7FFF) - (v & 0x8000)
    x = to_signed16(data[1] << 8 | data[0]) * 0.00025  # ±10g 灵敏度
    y = to_signed16(data[3] << 8 | data[2]) * 0.00025
    z = to_signed16(data[5] << 8 | data[4]) * 0.00025
    return x, y, z

# 校准零点偏移
def calibrate_zero_offset():
    x_sum, y_sum, z_sum = 0, 0, 0
    samples = 10
    print("校准中...请保持传感器静止")
    for _ in range(samples):
        x, y, z = read_accel()
        x_sum += x
        y_sum += y
        z_sum += z
        time.sleep(0.1)
    offset_x = -x_sum / samples
    offset_y = -y_sum / samples
    offset_z = 1.0 - (z_sum / samples)  # Z轴理论静止值=1g
    return offset_x, offset_y, offset_z

# 主程序
print("I2C设备地址:", [hex(addr) for addr in i2c.scan()])
init_adxl357()

# 校准零点
offset_x, offset_y, offset_z = calibrate_zero_offset()
print(f"零点偏移: X={offset_x:.4f}g, Y={offset_y:.4f}g, Z={offset_z:.4f}g")

# 主循环
while True:
    x, y, z = read_accel()
    x_cal = x + offset_x
    y_cal = y + offset_y
    z_cal = z + offset_z
    print(f"X: {x_cal:.4f}g, Y: {y_cal:.4f}g, Z: {z_cal:.4f}g")
    time.sleep(0.5)

运行代码,可获取设备 ID 与实时加速度数据

通过 Shell 终端读取 X、Y、Z 三轴加速度数据,并实现零点偏移校准

ADXL357Z_read_XYZ

总结

本文介绍了 DigiKey 购物平台所售 ADXL357Z 高精度三轴加速度传感器的原理图、通信原理介绍等,通过 MicroPython 编程实现传感器驱动与数据读取,为后续开发和探索奠定基础,也为相关精密设备研发和高精度传感器的应用提供了参考。