ADXL366——嵌入式低功耗设计中的实用加速度计

描述

在做电池供电的可穿戴设备和 IoT 节点时,加速度计的功耗经常被忽略,但它可能是系统待机电流的大头。

Analog Devices 的 ADXL366 是我用过的功耗最低的三轴加速度计之一,集成了很多能替 MCU 干活的功能,能在硬件层面帮我们做功耗管理。
*附件:adxl366.pdf


核心特性

  • 供电电压: 1.1V–3.6V (单节纽扣电池直接驱动)
  • 功耗:
    • 测量模式:0.96 µA @ 100Hz ODR
    • 唤醒模式:191 nA
    • 待机模式:47 nA
  • 范围:±2g / ±4g / ±8g(14 位分辨率,±2g 时 0.25 mg/LSB)
  • 接口:SPI / I²C(4 线 SPI,I²C 支持高速模式)
  • 封装:2.2 × 2.3 × 0.87 mm,12 引脚 LGA

功耗优化手段

ADXL366 的低功耗不仅在传感器本身,还体现在它能替 MCU 做预处理,减少唤醒次数:

  1. 三种模式
    • 测量模式:连续采样,全带宽,无欠采样混叠
    • 唤醒模式:周期采样(1.5~12.5 SPS),中间关掉电路
    • 待机模式:配置保留,最低 47 nA
  2. 硬件运动检测
    • 支持绝对阈值参考模式 (滤掉 1g 重力影响)
    • 活动 / 静止检测可配置持续时间,减少误触发
  3. 硬件计步器
    • 功耗仅 +120 nA
    • 步数达到一定数量才计入,降低误报
  4. 512 样本 FIFO
    • 缓存超过 13 秒数据,MCU 批量读取
    • 触发模式可保存事件前后的加速度数据
  5. AWAKE 信号
    • 可直接驱动电源开关,实现传感器做系统唤醒控制

寄存器配置示例(SPI)

假设要实现“静止时低功耗,检测到运动后切到高精度测量”:

// SPI 写寄存器函数
void adxl366_write(uint8_t reg, uint8_t val) {
    uint8_t buf[2] = { reg | 0x0A, val }; // 写指令 + 寄存器地址
    spi_transfer(buf, NULL, 2);
}

// 进入参考模式活动检测
void adxl366_init(void) {
    // 待机模式修改配置
    adxl366_write(0x2D, 0x00); // POWER_CTL: standby

    // 活动检测阈值: 250 mg
    adxl366_write(0x20, 0x00);
    adxl366_write(0x21, 0xFA);

    // 活动检测时间: 1 sec @ 100Hz
    adxl366_write(0x22, 100);

    // 启用活动检测(参考模式),Loop 模式,活动/静止切换
    adxl366_write(0x27, 0x3F);

    // 切到测量模式
    adxl366_write(0x2D, 0x07); // POWER_CTL: measurement + autosleep
}

硬件接口注意事项

  • SPI 接线 :SCLK、MOSI、MISO、CS 全部带上 10k 上拉/下拉防止悬空
  • I²C 地址选择 :MISO/ASEL 引脚拉高/拉低可切换
  • 电源去耦VREG_OUT 需接 0.2 µF 电容到 GND,否则会有异常复位

调试经验

  • 参考模式初始化 :先设置活动阈值 >1g 进入测量模式,再改到实际值,否则阈值会被 1g 偏置干扰
  • FIFO 读取 :必须一次性按 X/Y/Z 顺序读取,否则会数据错位
  • 计步器调优 :默认灵敏度(400 LSB)适合正常步行,跑步或特殊步态需要调整 PEDOMETER_SENS_H/L
  • 唤醒模式下不支持 FIFO ,需要直接从数据寄存器读

应用方向

  • 健康手环、手表
  • BLE 运动传感节点
  • 运动触发的智能开关
  • 便携医疗监测设备

在我们最近的一个可穿戴项目里,用 ADXL366 + Loop 模式的活动/静止检测,把 MCU 唤醒频率从每秒几十次降到几分钟一次,CR2032 电池寿命直接翻倍。

如果你的设计目标是 超低功耗 + 运动检测 ,ADXL366 值得优先考虑。

附录 1:ADXL366 SPI 典型连接电路

markdown
复制编辑
+3.0V (或纽扣电池) │ ┌─┴──────────────┐ │ ADXL366 │ │ │ VDDIO──┤12 10 ├──VS (+3.0V) GND───┤ 7 11├──GND VREG_OUT─┤ 9 8├──ADC_IN (NC 或接GND) SCLK─────┤ 1 5├──INT1 (接MCU中断输入) MOSI/SDA─┤ 2 6├──INT2 (可选) MISO/ASEL┤ 3 4├──CS/SCL └────────────────┘

注意要点

  • VREG_OUT → GND 加 0.2 µF 去耦电容(必须,否则可能复位不稳定)
  • 所有数字 IO(SCLK、MOSI、MISO、CS)建议串联 33~100 Ω 电阻以减小 EMI
  • INT1 建议直接接 MCU 外部中断口,用于活动/静止事件唤醒 MCU

附录 2:Loop 模式活动/静止检测时序示意

makefile
复制编辑
时间轴 → ────────────────────────────────────────────────────────────── 状态: [活动检测]------------------->[静止检测]-----------------> AWAKE: ──────────────1─────────────┐ 0INT1: ____↑_______________________↓_________↑__________________ 活动中断 静止中断 再次活动中断

说明

  • Loop 模式下,活动检测和静止检测交替运行
  • 检测到活动 → 进入静止检测,直到检测到静止事件
  • 检测到静止 → 切回活动检测
  • INT1 每次事件都会拉高/拉低,MCU 可选择响应或忽略
  • AWAKE 信号可直接用作系统电源控制信号,实现硬件级节能
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分