2025 Make Blocks阶段2 - 基于BMI270的IMU模块
该项目使用了BMI270,实现了IMU模块的设计,它的主要功能为:六轴传感器数据输出。
标签
Make Blocks
BMI270
IMU模块
Bymyself
更新2025-10-15
95

任务介绍

本次任务的核心目标是设计一款紧凑的IMU模块,其尺寸被严格限定在小于60mmx40mm的范围内,我们尽量做得小一点。该款模块要求至少三轴的数据检测,而且要求在得捷官网上可售的,我们浏览的一下IMU传感器的专栏,也对应的看了一下模块专区,最后我们将目标定在了BMI270这款传感器身上。具体的任务要求如下:

设计一款IMU模块,可实现至少三轴的数据检测,例如加速度计、陀螺仪、磁力计等

板卡尺寸:小于60mmx40mm

包含信号:信号输出口,+3.3V、GND

主要器件:需在DigiKey官网上有货且正常售卖

请注意:PCB设计工具需用KiCad(官方邮件赠送了课程),或最终提交的文件需是KiCad文件,详见大赛主页阶段1要求和项目提交内容。

模块介绍

设计思路

本次设计的IMU模块本着模块化的思想,设计一个紧凑的的而功能全面的IMU模块,本次任务的电路相对还是比较简单的,需要进行基本的外围电路的设计,最后通过2.54的排针或者qwiic的接口进行连接控制。BMI270-IMU模块是一款基于博世超低功耗BMI270的qwiic分线板,使用的主接口是Qwiic,这样的接口可以使用arduino进行快速访问,参考了SPARKFUN 6DOF IMU BREAKOUT - BMI,确实有想要功能尽可能的保留,又希望可以尽可能的简约,主要是将尺寸进行重新的优化,打造自己的传感器模块库。6轴传感器结合了一个16位三轴陀螺仪和一个16位三轴加速度计。

功能介绍

本次设计是实IMU模块集成了以下功能:

qwiic接口,可串联;

IMU数据输出;

支持多种接口连接;

连接框图如下:


0

硬件介绍

本次设计的IMU模块是基于BMI270设计的,Bosch BMI270超低功耗智能惯性测量单元 (IMU) 专门设计用于各种可穿戴应用,大大提高了加速度计性能。BMI270包含直观的手势、情景和活动识别功能,并集成了针对腕戴式设备专门进行优化的即插即用计步器。该IMU也非常适合其他类型的可穿戴设备,如耳戴式设备、智能服装、智能鞋、智能眼镜和脚踝带。
作为超低功耗IMU,BMI270通过处理多个活动跟踪、计步和手势识别功能来延长系统电池寿命,独立于主系统处理器,无需将其唤醒。这些独立于处理器的功能包括诸如在达到一定步数时发送中断,或在用户站起来并开始行走时通过地理围栏激活GPS等任务。因此,在超低功耗域运行强大而准确的手势和活动识别功能,电流消耗仅为30μA。这显著降低了功耗,用户可以从延长的电池充电时间间隔中受益。


原理图和PCB模块介绍


0

原理图


0

PCB

这次的设计主要考虑的跨级接口设计,在PCB布局上注意走线。


0

实物图

软件调试

本次设计的模块只能说是一个功能模块,用于IMU信息获取,我们需要使用一款主控单元,通过qwiic接口的线根据以下模块引脚定义进行适当的连接,任选一个就可以:

管脚属性

管脚名

管脚编号

P

GND

U2/U5-1

P

3.3V

U2/U5-2

I/O

SDA

U2/U5-3

I/O

SCL

U2/U5-4

这里我们选择了一款arduino开发板作为本次测试验证的主控单元,根据功能需求连接如下:


0

我们使用arduinoIDE作为主要的开发工具,通过库管理工具搜索BMI270,可以搜到如下的库:


0

第一个就是官方的库,下面我们就基于这个库进行模块的控制,我们简单实现如下功能功能:输出Accelerometer的信息。

主要代码介绍:

打开开发板的IIC接口和串口打印功能,实时获取数据并打印:


/*
Arduino BMI270 - Simple Accelerometer

This example reads the acceleration values from the BMI270
sensor and continuously prints them to the Serial Monitor
or Serial Plotter.

The circuit:
- Arduino Nano 33 BLE Sense Rev2

created 10 Jul 2019
by Riccardo Rizzo

This example code is in the public domain.
*/

#include "Arduino_BMI270_BMM150.h"

void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Started");

if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}

Serial.print("Accelerometer sample rate = ");
Serial.print(IMU.accelerationSampleRate());
Serial.println(" Hz");
Serial.println();
Serial.println("Acceleration in G's");
Serial.println("X\tY\tZ");
}

void loop() {
float x, y, z;

if (IMU.accelerationAvailable()) {
IMU.readAcceleration(x, y, z);

Serial.print(x);
Serial.print('\t');
Serial.print(y);
Serial.print('\t');
Serial.println(z);
}
}

模块调试效果图


image.png

心得体会

本次我们选择了一个IMU模块的设计,整体硬件电路设计还是挺简单的,软件验证选择了arduino,官方直接支持,用来验证硬件模块非常方便,注意连线一定要正确基本上对全功能进行了引出,如果想要实现更多的功能,请使用2.54mm的扩展接口。

附件下载
IMU-BMI270.zip
IMU-BMI270.kicad_sch
IMU-BMI270.kicad_pcb
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号