使用 Arduino 分线板启动基于 MEMS 的运动和方向传感器设计

作者:Clive "Max" Maxfield

投稿人:DigiKey 北美编辑

设计人员越来越需要为其系统提供方向和运动感应能力。幸运的是,基于固态(半导体)和微机电系统 (MEMS) 技术的传感器已经可以帮助他们做到这一点。这些传感器体积小、成本低,可以将运动和方向感应功能部署在广泛的系统中,包括无人机、机器人,当然还有智能手机和平板电脑等手持产品。这些传感器还可用于工业物联网 (IIoT) 的预测性维护系统,用于提供数据,供人工智能 (AI) 和机器学习 (ML) 在边缘进行分析。

用于检测运动和方向的 MEMS 传感器主要类型有加速计、陀螺仪、磁力仪及其各种组合。虽然许多设计人员都有兴趣将运动和方向传感器融入其设计,但他们往往不知道该从何处着手。

一种选择是使用 MEMS 传感器厂商提供的评估和开发套件来支持其解决方案。如果支持度非常高,那么这将一种很好的方法。但是,这会要求设计人员要么限制自己只能使用单一厂商的传感器,要么学习多个传感器厂商的软件工具。

另一种选择是针对不习惯使用运动和方向传感器的设计人员,他们可以使用 Arduino 提供的低成本开源微控制器开发板及其单一集成开发环境 (IDE),并结合使用其带有多个厂商传感器的低成本开源传感器分线板 (BOB) 进行实验和原型设计。

为了帮助设计人员快速上手,本文解释了几个传感器术语,并简要讨论了运动和方向传感器的作用。然后介绍了 Adafruit 提供的一些此类传感器 BOB 及其用途。

传感器术语介绍

人们在提到运动和方向传感器时,通常使用的两个术语是“轴数”和“自由度”(DOF) 。不幸的是,这些术语经常被同义使用,可能会导致混淆。

一般来说,轴数这个术语可以用来描述系统所采用的数据的维度。在运动和方向方面,有三个相关轴:X、Y 和 Z。

这些轴的可视化方式取决于相关的系统。以直板智能手机为例,X 轴相对于屏幕是水平的,指向右侧,Y 轴相对于屏幕是垂直的,指向上方,而与这两个轴垂直的则是 Z 轴,指向屏幕外(图 1)。

物理系统最多只能有 6 个 DOF 示意图图 1:一个物理系统最多只能有 6 个 DOF,因为它在三维空间中的运动方式只有 6 种:3 种线性和 3 种角度。(图片来源:Max Maxfield)

关于智能手机这样的设备,有两种相关的运动类型:线性和角度。在直线运动的情况下,系统可以在 X 轴上左右移动,在 Y 轴上上下移动,在 Z 轴上向前和向后移动。在角运动的情况下,系统可以围绕三个轴中的一个或多个轴旋转。

在运动背景下,DOF 指的是可以发生独立运动的任何方向。在此基础上,一个物理系统最多只能有 6 个 DOF (6DOF),因为它在三维空间中的运动方式只有 6 种(3 种线性和 3 种角度)。

“方向”一词是指某个事物相对于其它事物的物理位置或方位。以智能手机为例,方向决定了手机是背面平躺,还是立在一边(可以是竖着或横着) ,还是介于两者之间。

一种看待这种情形方法是,用某些时间点 tX 所有可能的 DOF 值确定设备的方向。通过比较,设备的运动由时间 t0t1 之间所有可能的 DOF 值的差异决定。

加速计、陀螺仪和磁力仪等传感器有单轴、双轴或三轴之分。例如,单轴加速计只能检测到它所对准的三个轴中的一个轴的变化;双轴传感器将检测三个轴中的两个轴的变化;而三轴传感器则将检测所有三个轴的变化。

如果一个传感器平台被描述成跟踪六个以上的轴,这表明它通过沿着(或围绕)X、Y 和 Z 轴跟踪多个数据点来提供更高的精度。例如一个 12 轴加速计套件,它利用四个 3 轴加速计进行线性加速度测量。

遗憾的是,人们通常会将 DOF 与轴数混淆。例如,3 轴加速计、3 轴陀螺仪和 3 轴磁力仪的组合可能被一些厂商描述成 9DOF 传感器,尽管更正确的描述应该是 6DOF 9 轴传感器。

传感器融合

除了测量加速度,加速计还可以测量重力。以智能手机为例,即使用户站立不动且设备也不动,三轴加速计也能确定哪个方向是向下的。

3 轴加速计还可以用来确定设备的垂直和水平方向,它可以利用这些信息以纵向或横向模式来呈现其显示内容。然而,单靠加速计,无法确定智能手机与地球磁场有关的方向。这种功能对于像“行星仪”这样的 APP 来说是必要的,用户只需将设备指向感兴趣的区域,就能识别和定位夜空中的恒星、行星和星座。在这种情况下,需要一个磁力仪。如果智能手机总是平放在桌子上,那么一个 1 轴磁力仪就足够了。然而,由于智能手机可能要在任何方向上使用,因此有必要采用 3 轴磁力仪。

加速计不受周围磁场的影响,但它们会受到运动和振动的影响。相比之下,磁力仪本身不受运动和振动的影响,但会受到附近磁性材料和电磁场的影响。

虽然 3 轴加速计也可以用来得出旋转数据,但 3 轴陀螺仪提供的角动量数据更准确。陀螺仪在测量转速时效果很好,它们不受直线方向的加速度或磁场的影响。然而,即使处于静止状态,陀螺仪确实仍有产生小的“残余”转速的倾向。这就是所谓的“零漂移”。如果用户试图使用陀螺仪确定一个绝对角度,那么问题就会出现,在这种情况下,必需对转速求积分来获得角度位置。在这种情况下,积分带来的问题是,误差会不断累积。例如,第一次测量时只有 0.01 度的小误差,经过 100 次测量后,可能会增长到整整一度。这就是所谓的“陀螺漂移”。

术语“传感器融合”是指将来自不同来源的感知数据结合起来,使所产生信息的不确定性小于单独使用这些来源的数据所能达到的程度。

例如,在由 3 轴加速计、3 轴陀螺仪和 3 轴磁力仪组成的传感器阵列中,用加速计和磁力仪提供的数据可消除陀螺仪漂移。同时,来自陀螺仪的数据可以用来补偿任何来自加速计的振动引起的噪声以及来自磁力仪的磁性材料/磁场引起的噪声。

使用传感器融合的结果是,输出的精度超过了单个传感器的精度。

介绍一些有代表性的传感器

根据不同的应用,设计人员可以决定只采用加速计、陀螺仪或磁力仪等单一类型的运动/方向传感器。

我们先介绍 Adafruit 提供的 2019 BOB,它带有一个 3 轴加速计与一个14 位模数转换器 (ADC)(图 2)。

Adafruit 提供的 2019 BOB 图片图 2:Adafruit 的 2019 BOB 带有一个 3 轴加速计,可用于检测运动、倾斜和基本方向。(图片来源:Adafruit)

这个高精度 3 轴传感器具有 ±2g 到 ±8g 的宽量程,可用于检测运动、倾斜和基本方向。该传感器需要 3.3 伏的电源,而该 BOB 包括了一个低压差 3.3 伏稳压器和电平位移电路,因此它可以安全地与 3 伏或 5 伏电源和逻辑电路一起使用。该 BOB 与 Arduino(或另一个微控制器)之间的通信通过 I2C 进行。

对于只需要陀螺仪传感器来检测扭转和转动的应用来说,Adafruit 带有 STMicroelectronics L3GD20H 三轴陀螺仪的 1032 BOB 就是一个很好的入门开发板。L3GD20H 同时支持可与 Arduino(或另一个微控制器)连接的 I2C 和 SPI 接口,可以设置为 ±250、±500 或 ±2000 度/秒比例,以实现大灵敏度范围。再次,该传感器需要一个 3.3 伏的电源,而该 BOB 包括了一个 3.3 伏的稳压器和电平位移电路,使之能够与 3 伏或 5 伏电源和逻辑电路一起使用。

同样,对于只需要磁传感器的应用来说,Adafruit 的 4479 BOB 是一个不错的评估选择,它采用了 STMicroelectronics 的 LIS3MDL 三轴磁力仪。LIS3MDL 的感应范围从 ±4 高斯(±400 微特斯拉 (µT))到 ±16 高斯(±1600 微特斯拉或 1.6 毫特斯拉 (mT))。该 BOB 与 Arduino(或另一个微控制器)之间的通信通过 I2C 进行。同样,该 BOB 包括了一个 3.3 伏稳压器和电平位移电路,因此它可以安全地与 3 伏或 5 伏电源和逻辑电路一起使用。

多个传感器相互配合使用很常见。例如,加速计可与陀螺仪一起使用,以执行像 3D 运动捕捉和惯性测量这样的任务;也就是说,允许用户确定物体在 3D 空间中的移动方式。这种组合的一个实例是 Adafruit 的 4480 BOB(图 3),它采用了 STMicroelectronics 的 LSM6DS33 传感器芯片。

Adafruit 提供的 4480 BOB 图片图 3:Adafruit 的 4480 BOB 带有 LSM6DS33TR 三轴加速计和三轴陀螺仪,可用于执行像 3D 运动捕捉和惯性测量这样的任务。(图片来源:Adafruit)

三轴加速计可以通过测量重力提供哪个方向朝向地面的数据,以及电路板在三维空间中的加速度。同时,三轴陀螺仪可以测量自旋和扭转。与前面介绍的其他传感器 BOB 一样,4480 BOB 也包括了一个 3.3 伏稳压器和电平位移电路,因此它可以安全地与 3 伏或 5 伏电源和逻辑电路一起使用。此外,传感器数据可以使用 I2C 或 SPI 接口进行访问,无需任何复杂的硬件设置,即可与 Arduino(或其它微控制器)一起使用。

另一个双传感器 BOB 实例是 Adafruit 的 1120,它采用 STMicroelectronics 的LSM303 传感器芯片,而该芯片则组合了三轴加速计和三轴磁力仪。微控制器与 1120 之间的通信是通过 I2C 接口进行的,且该 BOB 包括了一个 3.3 伏稳压器和电平位移电路,因此它可以安全地与 3 伏或 5 伏电源和逻辑电路一起使用。

有些应用需要使用加速计、陀螺仪和磁力仪。在这种情况下,一个有用的入门 BOB 是 Adafruit 的 3463,它带有两个传感器芯片:一个是 3 轴陀螺仪,一个是 3 轴加速计与 3 轴磁力仪的组合。该 BOB 与微控制器之间的通信是通过 SPI 接口实现的。此外,该 BOB 还包括了一个 3.3 伏稳压器和电平位移电路,因此它可以安全地与 3 伏或 5 伏电源和逻辑电路一起使用。

3463 BOB 的一个优点是,设计人员可以从三个传感器获得原始数据。相应的缺点是,使用这种传感器(操作和处理其数据)将需要约 15 千字节 (Kb) 的微控制器闪存,并且将消耗大量的时钟周期。

作为备选方案,Adafruit 的 2472 BOB 采用了 BoschBNO055 传感器芯片。BNO055 包括一个三轴加速计、一个三轴陀螺仪和一个三轴磁力仪,所有这些都提供在一个单一封装中(图 4)。

Adafruit 的 2472 BOB 上的 BNO055 传感器图片图 4:除了 3 轴加速计、3 轴陀螺仪和 3 轴磁力仪外,Adafruit 的 2472 BOB上的 BNO055 传感器还包括一个 Arm Cortex-M0 处理器,用于执行传感器融合。(图片来源:Adafruit)

此外,BNO055 还包括一个 32 位 Arm Cortex-M0 处理器,该处理器从三个传感器获取原始数据,执行复杂的传感器融合,并以它们可以使用的形式为设计人员提供处理后的信息:四元数、欧拉角和矢量。具体来说,通过 2472 BOB 的 I2C 接口,设计人员可以快速、方便地获取以下数据:

  • 绝对方向(欧拉矢量,100 赫兹 (Hz)):基于 360° 球体的三轴方向数据。
  • 绝对方向(四元数,100Hz):四点四元数输出,用于更精确的数据处理。
  • 角速度矢量 (100 Hz):三轴“转速”,单位为 rad/s。
  • 加速度矢量 (100 Hz):三轴加速度(重力 + 直线运动),单位为米/秒平方 (m/s2)。
  • 磁场强度矢量 (20 Hz):三轴磁场感应(单位:μT)。
  • 线性加速度矢量 (100 Hz):三轴直线加速度数据(加速度减重力),单位为 m/s2
  • 重力矢量 (100 Hz):三轴重力加速度(减去任何运动),单位为 m/s2
  • 温度 (1 Hz):环境温度,单位为摄氏度。

片上执行传感器融合可以释放主微控制器的存储空间和计算周期,这对于设计人员构建低成本、实时系统是非常理想的。此外,传感器融合算法很难掌握,也很耗时。将传感器融合放在片上执行,能够让系统开发人员在几分钟内就上手并启动,而不需要花费几天或几周时间从头开始实现算法。

结语

许多设计人员都有兴趣将运动和方向传感器融入其设计,但往往不知道该从何处着手。对于不习惯使用这些器件的设计人员来说,熟悉来自不同厂家的传感器也会是一个挑战。一种启动实验和原型设计的方法是,使用像 Arduino 这样的厂家提供的低成本、开源微控制器开发板,以及带有多个厂家传感器的低成本开源 BOB。

延伸阅读:

  1. 使用 Arduino BOB 快速评估传感器和外设
  2. IoT、IIoT、AIoT 及其成为工业自动化未来的原因
  3. 轻松将人工智能植入任何工业系统

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Clive "Max" Maxfield

Clive "Max" Maxfield 于 1980 年在英国谢菲尔德哈兰大学获得控制工程理学学士学位,并开始了他的大型计算机中央处理器 (CPU) 设计职业生涯。多年来,Max 从事过从硅芯片到电路板,从脑电波放大器到蒸汽朋克幻想引擎(不要问)等各种产品的设计。同时,他还在电子设计自动化 (EDA) 的前沿领域浸淫 30 余载。

Max 是多本书籍的作者和/或合作者,包括《Designus Maximus Unleashed》(在阿拉巴马州被禁止)、《Bebop to the Boolean Boogie》(非常规电子指南)、《EDA: Where Electronics Begins》、《FPGAs: Instant Access》和《How Computers Do Math》。浏览他的“Max’s Cool Beans” 博客

关于此出版商

DigiKey 北美编辑