【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 三轴加速度数据,并实现零点偏移校准

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

