当开发人员希望构建机器人系统、智能电动工具、资产跟踪设备及其他基于运动的工业产品时,惯性测量装置 (IMU) 发挥了相当关键的作用,可提供所需的数据以便对性能、安全等方面进行管理。这些长寿命工业产品的制造商所依赖的不仅仅只是 IMU 器件的性能,还有其长期可用性。如今,市面上新推出了一类具有长期可用性的工业 IMU,可为开发人员提供相应的解决方案,从而同时满足对性能和可用性两方面的要求。
本文介绍了 Bosch Sensortec 和 STMicroelectronics 推出的 IMU。这些产品作为这两家制造商 10 年长寿命计划的一部分,所采用的设计可确保产品在恶劣工业环境中仍能准确地测量。此外,本文还介绍了这两家工业 IMU 器件制造商以及 Adafruit Industries 推出的软件开发板,有助于实现基于 IMU 设计的快速开发。
什么是 IMU?
IMU 是结合了加速计和陀螺仪的感测器件,可提供检测六个自由度的线性和旋转运动所需的数据。Bosch Sensortec 的 BMI088 等高端 IMU 中,加速计和陀螺仪传感器采用微机电系统 (MEMS) 技术,集成了专用信号链、模数转换器 (ADC) 和逻辑,仅凭单个器件就能提供功能完善的运动检测系统(图 1)。
图 1:Bosch Sensortec 的 BMI088 等高端 IMU 集成了传感器、信号链和逻辑,以提供功能完善的运动检测系统,可通过标准串行接口与主机处理器轻松集成。(图片来源:Bosch Sensortec)
凭借丰富的集成功能,IMU 可以轻松整合至系统设计中,通常只需通过 I2C 或 SPI 连接,即可将数字结果传输至主机处理器。工业 IMU 的性能和稳定性
对于耐久性较差的器件而言,在恶劣环境中运行时,持续的热应力和机械振动或冲击会降低器件性能。不过,Bosch 的 BMI088 等工业 IMU 专为这类环境而设计,可提供所需的温度稳定性和振动鲁棒性。BMI088 集成了 16 位三轴加速计和 16 位三轴陀螺仪,分辨率分别为 0.09 mg 和 0.004°/s。该器件的陀螺仪测量支持多个角速度量程,从 125°/s 到 2,000°/s。与同类产品中的大多数器件一样,BMI088 支持在 -40℃ 至 +85℃ 的工业温度范围内运行。但是,BMI088 加速计支持的最大测量量程可达 24 g,远远超过了同类产品中的许多器件。此外,在工业应用中常见的高振动水平下,它还能针对信号切断提供额外保护。
同时,该器件可以满足工业环境中常见的高温或快速变化的温度要求。BMI088 加速计的灵敏度温度漂移仅为 0.002%/K,0 g 失调温度漂移小于 0.2 mg/K。同样,陀螺仪的零位温度系数 (TCO) 仅为 0.015 dps/K,灵敏度温度系数 (TCS) 为 0.03%/K。
基于 MEMS 的 IMU 可提供高性能,但消耗的电流往往非常小。例如,正常模式下 BMI088 加速计消耗的电流为 150 μA,陀螺仪则为 5 mA。与大多数低功耗器件一样,开发人员可以在不活动期间将 BMI088 切换至低功耗模式。在低功耗挂起模式下,加速计和陀螺仪的电流分别降至 3 μA 和 25 μA。实际上,BMI088 陀螺仪还具有深度挂起模式,此时消耗的电流小于 5 μA。
对于便携式电动工具或资产跟踪设备等电池供电应用而言,低功耗运行自然相当重要,但在工业应用中,快速恢复正常测量的能力同样非常重要。实际上,相较于可穿戴设备及其他个人电子产品等消费类应用中常用的 IMU,BMI088 从挂起(和深度挂起)模式中唤醒的时间显然更快。
支持长寿命产品
消费类设备与工业设备对 IMU 的要求可能存在根本区别。与所有产品类别一样,消费类产品和工业产品也遵循着人们所熟悉的生命周期模式,即产品推出后逐步经历增长期、成熟期和衰退期(图 2)。
图 2:消费者对最新功能的需求往往会缩短消费类产品生命周期的后期阶段,但是许多工业用户却寄望于延长成熟可靠产品系列的可用性。(图片来源:维基百科)
对于消费类产品而言,人们对功能丰富的最新移动产品的需求大大缩短了产品生命周期的成熟期和衰退期。然而,人们却常常期望不同类型的工业设备可以使用数年之久,这与消费类电子产品生命周期的缩短形成了鲜明的对比。相比那些花里胡哨的新功能,成熟的工业级电动工具系列往往会因其主要功能方面的可靠性而赢得更多的忠实拥护者。在资产跟踪或工业物联网监控等其他工业应用中,与对支持新增增强功能的替换器件的需求或实用性相比,器件系列的长期可用性可能更受重视。为了满足对长寿命产品的需求,开发人员常常可以在半导体制造商的长寿命计划中找到关键产品,以确保产品在推出后的一段时间内能够保持可用性。例如,Bosch 推出的 BMI090L IMU 就属于该公司的 10 年长寿命计划范畴。作为 BMI088 的引脚兼容版本,BMI090L 的功能和性能规格也与 BMI088 相同。
机器学习型工业 IMU
作为其 10 年长寿命计划的一部分,STMicroelectronics 推出了高性能 ISM330DHCX 工业 IMU。ISM330DHCX 属于 iNEMO 专用系统级封装 (SiP) 模块系列。该系列还包括 STMicroelectronics 的 LSM6DSOX 和 LSM6DSRX。这三款器件都将三轴加速计和三轴陀螺仪与嵌入式机器学习内核整合在一起。(有关 iNEMO 机器学习内核及其用途的更多信息,请参阅《使用智能传感器的内置机器学习内核可以优化“始终开启”运动跟踪》。)
LSM6DSOX 专为电池供电的消费类产品而设计,是该专用器件系列中功耗最低的一款。相对地,LSM6DSRX 则设计用于虚拟现实(VR)、增强现实 (AR) 和无人机应用。它的稳定性比 LSM6DSOX 更强,并且扩展了机器学习内核。
ISM330DHCX 则是专为高性能工业应用而设计,虽以消费级 LSM6DSRX 的功能为基础,但对比 LSM6DSRX 的工作温度范围 -40℃ 至 +85℃,ISM330DHCX 的工作温度范围更广,为 -40℃ 至 +105℃。它的线性加速度范围高达 16 g,最大角速度测量范围达 4,000°/s,是同类产品中可用角速度测量值最大的器件之一。鉴于工业应用的要求,ISM330DHCX 受温度影响很小。加速计的灵敏度温漂仅为 0.005%/℃,0 g 失调温漂为 0.1 mg/℃,而陀螺仪的灵敏度温漂为 0.007%/℃,零位温度漂移为 0.005 dps/℃。
与大多数高端 IMU 一样,ISM330DHCX 可通过 I2C 或 SPI 连接与主机处理器轻松集成。开发人员可以采用以下四种不同的连接配置:
- 仅用于与主机连接(模式 1)
- 用于传感器集线器功能(模式 2)
- 用于连接主要主机和次要主机,后者只能读取陀螺仪的数据(模式 3)
- 用于连接主要主机和次要主机,后者可读取陀螺仪和加速计的数据(模式 4)
图 3:通过配置,STMicroelectronics 的 ISM330DHCX 可在多种模式下运行,其中包括上图所示的模式 2,使 ISM330DHCX 用作外部传感器的传感器集线器,将整合后的数据传输给主机。(图片来源:STMicroelectronics)
快速 IMU 开发由于数字 IMU 对硬件的要求极低,因此在开发早期阶段,开发人员很大程度上可以放弃硬件设计,转而借助工业 IMU 器件制造商提供的一系列开发板,立即投入软件开发。例如,Bosch 推出的应用板旨在接受该公司的 BMI090L 开发板等各种子板。Bosch 应用板基于 Arm® Cortex®-M4 处理器,提供了多个测试点和连接器,以及连接主机 PC 的 USB 接口以用于供电和开发。
针对基于 STMicroelectronics 的 ISM330DHCX 的工业应用,开发人员可以使用 Adafruit Industries 的 4502 ISM330DHCX 评估板,并连接该公司的 4382 STM32F405 Feather 开发板(作为硬件平台),从而加快评估和原型开发。
对于软件开发,Adafruit 的 CircuitPython LSM6DS github 软件库支持多款 STMicroelectronics IMU,包括 ISM330DHCX、LSM6DSOX 和 LSM6DS33。因此,开发人员只需使用数行 Python 代码从 ISM330DHCX 传感器读取数据,即可快速构建原型应用程序(清单 1)。
复制 import time import board import busio from adafruit_lsm6ds import ISM330DHCT i2c = busio.I2C(board.SCL, board.SDA) sensor = ISM330DHCT(i2c) while True: print("Acceleration: X:%.2f, Y: %.2f, Z: %.2f m/s^2" % (sensor.acceleration)) print("Gyro X:%.2f, Y: %.2f, Z: %.2f degrees/s" % (sensor.gyro)) print("") time.sleep(0.5) 清单 1:借助 Adafruit 的 CircuitPython 模块,开发人员只需访问 ISM330DHCX 对象的属性,即可读取 ISM330DHCX 传感器的数据,从而加快原型应用程序开发。(代码来源:Adafruit Industries)
此外,STMicroelectronics 还提供了基于 ISM330DHCX 的 STEVAL-MKI210V1K 扩展板。该扩展板可通过 DIL 24 适配器连接该公司的 STEVAL-MKI109V3 开发板,后者基于 STM32F401VE 微控制器。STMicroelectronics 提供了适用于 Linux (STSW-MKI109L)、Mac OSX (STSW-MKI109M) 和 Windows (STSW-MKI109W) 的软件包,以便通过此扩展板评估 ISM330DHCX。
这款 STEVAL 硬件平台的评估对象仅限于 ISM330DHCX,不过开发人员可以使用 STMicroelectronics 的 X-NUCLEO-IKS02A1 扩展板,这样就能评估结合了其他传感器的 ISM330DHCX。除了 ISM330DHCX IMU 以外,X-NUCLEO-IKS02A1 扩展板还包括 STMicroelectronics 的 IIS2MDC 磁力仪、IIS2DLPC 低功耗加速计和 IMP34DT05 MEMS 数字全向性麦克风。NUCLEO-IKS02A1 扩展板采用专门设计,可插入 NUCLEO-L476RG 等 STMicroelectronics NUCLEO 板以提供功能齐全的硬件平台。
对于生产代码开发,STMicroelectronics 的 STM32Cube 软件包及相关的 X-CUBE-MEMS1 软件插件提供了全面的软件平台。除了电路板和器件驱动程序外,X-CUBE-MEMS1 软件包还提供了许多样例应用程序,可在传感器和基板套件上运行或用作定制开发的基础。例如,如下所示的振动监控应用程序采用了一个简单的循环,从 X-NUCLEO-IKS02A1 扩展板的 ISM330DHCX 加速计连续读取数据(清单 2)。
while (fftIsEnabled == 0) { if (((HAL_GetTick() - start) > 6000)) { Restart_FIFO(); return 0; } IKS02A1_MOTION_SENSOR_FIFO_Get_Tag(IKS02A1_ISM330DHCX_0, &tag); if (tag == (uint8_t)ISM330DHCX_XL_NC_TAG) { IKS02A1_MOTION_SENSOR_FIFO_Get_Axes(IKS02A1_ISM330DHCX_0, MOTION_ACCELERO, &acceleration); } /* Store data */ single_data.AXIS_X = (float)acceleration.x; single_data.AXIS_Y = (float)acceleration.y; single_data.AXIS_Z = (float)acceleration.z; /* Remove DC offset */ MotionSP_accDelOffset(&single_data_no_dc, &single_data, DC_SMOOTH, RestartFlag); /* Fill the accelero circular buffer */ MotionSP_CreateAccCircBuffer(&AccCircBuffer, single_data_no_dc); if (AccCircBuffer.Ovf == 1) { fftIsEnabled = 1; AccCircBuffer.Ovf = 0; } MotionSP_TimeDomainProcess(&sTimeDomain, (Td_Type_t)MotionSP_Parameters.td_type, RestartFlag); RestartFlag = 0; } 清单 2:STMicroelectronics 的 X-CUBE-MEMS1 软件包中,一个振动监控样例应用程序的代码片段演示了采用一个简单的循环,从 ISM330DHCX IMU 读取加速计的数据。(代码来源:STMicroelectronics)
在此循环中,函数 IKS02A1_MOTION_SENSOR_FIFO_Get_Tag() 调用了 ISM330DHCX 专用例程 ism330dhcx_fifo_sensor_tag_get(),器件在模式 1 配置下运行时,该例程将返回一个标签以识别 ISM330DHCX 的特定源传感器或外部传感器。ISM330DHCX 内置的这种标签功能提供了一种简单的机制,可用于识别存储在器件 3 KB 先进先出 (FIFO) 缓冲器中数据的多种类型和来源。本样例中,应用程序预设了一个加速计标签 ISM330DHCX_XL_NC_TAG。
随后,对 IKS02A1_MOTION_SENSOR_FIFO_Get_Axes() 的调用将调用 ISM330DHCX 专用例程,ISM330DHCX_FIFO_ACC_Get_Axes() 用于加速计数据,或是 ISM330DHCX_FIFO_GYRO_Get_Axes() 用于陀螺仪数据。本样例中,调用使用了 ISM330DHCX_FIFO_ACC_Get_Axes(),即依此调用低级例程 ISM330DHCX_FIFO_Get_Data(),执行读取 FIFO 缓冲器数据所需的寄存器级操作,然后分别返回换算为灵敏度的三轴加速度数据(清单 3)。
int32_t ISM330DHCX_FIFO_ACC_Get_Axes(ISM330DHCX_Object_t *pObj, ISM330DHCX_Axes_t *Acceleration) { uint8_t data[6]; int16_t data_raw[3]; float sensitivity = 0.0f; float acceleration_float[3]; if (ISM330DHCX_FIFO_Get_Data(pObj, data) != ISM330DHCX_OK) { return ISM330DHCX_ERROR; } data_raw[0] = ((int16_t)data[1] << 8) | data[0]; data_raw[1] = ((int16_t)data[3] << 8) | data[2]; data_raw[2] = ((int16_t)data[5] << 8) | data[4]; if (ISM330DHCX_ACC_GetSensitivity(pObj, &sensitivity) != ISM330DHCX_OK) { return ISM330DHCX_ERROR; } acceleration_float[0] = (float)data_raw[0] * sensitivity; acceleration_float[1] = (float)data_raw[1] * sensitivity; acceleration_float[2] = (float)data_raw[2] * sensitivity; Acceleration->x = (int32_t)acceleration_float[0]; Acceleration->y = (int32_t)acceleration_float[1]; Acceleration->z = (int32_t)acceleration_float[2]; return ISM330DHCX_OK; } 清单 3:STMicroelectronics 的 X-CUBE-MEMS1 软件包旨在支持多个传感器和开发板,可提供器件专用的函数,如上所示,即依次调用低级例程 ISM330DHCX_FIFO_Get_Data(),执行所需的寄存器级操作。(代码来源:STMicroelectronics)
X-CUBE-MEMS1 软件包中的其他样例代码集演示了电子罗盘、倾斜感测、传感器校准,以及使用软件包中的 MotionFX 传感器融合库实现数据融合。搭配 NUCLEO 板组一起使用,STMicroelectronics 的 STM32Cube 和 X-CUBE-MEMS1 软件包则可提供一个全面的开发平台,用于构建可投入生产的、基于运动的工业应用。
总结
除了应对恶劣的工作条件外,工业产品的设计常常还需要为延长产品系列的使用寿命提供支持。为面向基于运动的工业应用,工业 IMU 兼具所需的鲁棒性与稳定性,即使在热应力和机械应力作用下仍能准确地测量。对于依赖运动数据鲁棒性和设备长期可用性的工业产品线而言,长寿命工业 IMU 的可用性使开发人员能够提供有效的设计解决方案。