获得传感器融合设计的捷径
投稿人:DigiKey 北美编辑
2016-12-20
准确可靠地感测位置、方向和运动已经成为许多细分市场(包括消费、工业和军用/航空)各种应用领域的必要需求。 要提供这种复杂的数据,适用的传感器系统除了整合来自基本的陀螺仪传感器或加速计的结果外,还需其他方面的结果。
从这些单独的传感器获得准确的读数本身就很难,系统设计人员还需进一步组合多个传感元件的输出,并通过传感器融合来整合其输出。 然而,实施传感器融合的复杂性极易造成系统开发停滞不前。
为此,设计人员可以转而使用 Bosch Sensortec 的两款方向传感器器件。 这些器件提供了一种比定制传感器融合设计更简单的替代方案,通过现成的解决方案加快传感器融合功能的开发。
传感器融合的需求
感知方向和运动的能力在依赖虚拟或物理运动的应用中起着至关重要的作用。 智能手机依靠这种能力来进行各种操作,简单如纵向显示切换到横向显示,复杂如无需 GPS 辅助即可操作的惯性导航应用。 除了智能手机及许多其他消费品和工业物联网 (IoT) 产品外,医疗和汽车应用越来越需要一定程度的方向感知功能。 虽然在实施具有方向感知的传感器融合设计上会有所起伏,但这让设计人员有机会提供与众不同的设计。
在硬件层面,底层传感系统用加速计检测运动,用陀螺仪感测旋转,并用磁力仪识别航向。 理论上,这些传感器可以提供确定方向、位置和航向所需的所有必要信息。
然而在实践中,每种传感器在其传输必要数据的能力方面都表现出严重的局限性。 加速计的高灵敏度会带来高噪声。 陀螺仪会随时间产生漂移,因此不能提供绝对旋转数据。 磁力仪会响应所有磁场并会因给定设置中发现的磁性材料产生异常结果。
此外,这些传感器类型中没有一个能够明确地测量偏航等更复杂的运动,更不用说根据地球的磁场识别传感器的绝对方向。 要取得这些更复杂的结果,需要在所谓的“传感器融合”的过程中组合传感器数据。
传感器融合方法
传感器融合会合并来自多个传感器的数据,以得出从单个传感器无法得出的结果。 方向和惯性导航专家采用为特定类别的应用设计的一系列传感器融合算法。 这些算法的细节不在本文的探讨范围内,但每种算法都力求优化原始传感器数据的合并,这些数据经传感器噪声和精度等各种特性进行了静态或动态加权。 结果是使用诸如欧拉角或四元数等抽象概念的方向和运动的数学投影。
幸运的是,开发人员不必成为传感器融合算法的专家就能利用这些算法的功能。 在构建传感器融合应用时,开发人员可以使用现有的软件解决方案,如 NXP Semiconductors 传感器融合库。 设计用于在 Kinetis K20 之类的 MCU 上运行的 NXP 软件可以组合使用由可编程增益放大器 (PGA)、比较器和模数转换器 (ADC) 组成的 MCU 集成模拟信号链采集的传感器数据。
这种基于 MCU 的方法在满足特定应用需求方面具有极大的灵活性。 没有传感器融合理论经验的开发人员可以使用现成的库开发经过优化的系统。 希望实施更专业算法的专家可以在目标应用程序中替换其代码。 即使如此,所有开发人员在前端传感器系统自身的设计上仍面临重大挑战。
不管算法如何,传感器融合结果的精度很大程度上取决于底层传感器设计。 作为传感器融合的基本要求,传感器测量值需要紧密/或足够紧密地同步,以满足时间分辨率的应用要求。 目标传感器的物理布局等问题会影响同步,特别是对于传感器远离传感器处理设备的应用而言。 在这些情况下,传感器及其各自的信号处理链之间的不同时序路径会导致同步中出现系统定时误差。 虽然开发人员可以解释这些差异,但基于集成传感器的方法化解了这个问题。
集成传感器模块简化了融合
集成传感器器件将每个目标传感器放置在同一个模块上,消除了有关不同时序路径的实际问题。 此外,使用这种器件,开发人员可以依赖于其传感器模块设计人员来尽量减少噪声源或会影响传感器精度的其他设计因素。 事实上,Bosch Sensortec 通过其 BMF055 9 轴方向传感器使这种方法更进一步。 这种系统级封装 (SiP) 器件将 Atmel ATSAMD20J18A 32 位 MCU 和与其 BMA280 加速计、BMG160 陀螺仪和 BMM150 地磁传感器(图 1)大致相当的传感器加以集成。 (注意,BMF055 的传感器在某些性能值方面与其独立的等效产品有所不同。)
图 1: Bosch Sensortec BMF055 将传感器与基于Atmel Cortex-M0 + 的 MCU 相结合,收集原始传感器数据并执行传感器融合,简化了方向和惯性测量应用的传感器系统设计。 (图片: Bosch Sensortec)
基于 ARM® Cortex®-M0+ 内核的内置 Atmel ATSAMD20J18A MCU 集成了 32 KB 的 SRAM 和 256 KB 的闪存。 它用作本地主机,通过 SPI 总线获取原始传感器数据,并在模块内执行传感器融合软件算法。 反过来,Atmel MCU 通过 USART 接口与外部主机通信,以传输最终的传感器融合结果。
硬件设计简单明了。 BMF055 只需要一个外部 32 KHz 晶体和电容即可完成传感器融合设计(图 2)。 事实上,Bosch Sensortec BMF055 评估套件提供了一个简单的即用型开发平台,将分线板与包含 BMF055 和所有必要组件的小板组合在一起。
图 2: Bosch Sensortec BMF055 几乎不需要额外组件来实施方向传感器系统,并提供串行接口用于开发及将传感器融合结果传输到主机系统。 (图片: Bosch Sensortec)
BMF055 SiP 消除了传感器融合设计硬件实施的重大障碍。 需要自行编写传感器融合算法的开发人员可以使用 BMF055 作为集成替代方案,不用再创建基于 MCU 的传感器融合设计。 事实上,Bosch Sensortec 在基于 Atmel 软件框架 (ASF) 的分层架构中提供了 BSX-Lite 传感器融合库。
该软件包在每一层上都公开了一系列 API,用于访问 BSX-Lite 库、传感器驱动程序和底层 ASF 驱动程序(图 3)。 实际的运行时间代码驻留在随分发包提供的封装库中。 开发人员可以在提供的堆栈上快速构建其应用程序,根据特定应用程序需求替换自己的专有传感器融合库。
图 3: Bosch Sensortec 提供传感器融合软件包,允许通过 API 访问 BSX-Lite 传感器融合库、传感器和 Atmel 软件框架 (ASF)。 (图片: Bosch Sensortec)
Bosch Sensortec 软件包甚至包含示例代码,该代码能展现用于执行各种器件操作(代码列表)的高级调用。 软件为每个传感器提供了分类,因此从特定传感器读取数据就像为相应类别的实例调用适当的方法一样简单。 传感器支持库中的低级例程执行必要的总线读取,由嵌入式 MCU 执行,以通过 SiP 模块的内部 SPI 总线访问传感器器件寄存器。
Copy
void bmf055_sensors_initialize (void)
{
/* Initialize BMA280 */
bma_init();
/*BMA settings for running BSXLite: Range = 2G, BW = 62.5Hz*/
bma2x2_set_range(BMA2x2_RANGE_2G);
bma2x2_set_bw(BMA2x2_BW_62_50HZ);
/* Initialize BMG160 */
bmg_init();
/* BMG settings for running BSXLite: Range = 500dps, BW = 64Hz*/
bmg160_set_range_reg(0x02);
bmg160_set_bw(0x06);
/* Initialize BMM150 */
bmm_init();
/*BMM settings for running BSXLite: Preset mode = Regular, Functional state = Forced mode*/
bmm050_set_presetmode(BMM050_PRESETMODE_REGULAR);
bmm050_set_functional_state(BMM050_FORCED_MODE);
}
代码列表。 BMF055 软件包含有示例例程,展示了如何使用高级例程进行一些操作,例如对器件的三个集成传感器进行初始化。 (代码来源: Atmel/Bosch Sensortec)
直接替代型解决方案
凭借完整的可编程性,BMF055 为需要定制功能,甚至专门的传感器融合计算的应用提供了有效的解决方案。 对于寻求快速直接替代型解决方案的开发人员,Bosch Sensortec BNO055 将传感器融合固件与传感器和 MCU 集成,直接输出固件所生成的高级信息。 BNO055 使用基于寄存器的方法,能让主机获得最终的结果,包括加速度、线性加速度、重力矢量、磁场强度、角速率、温度,以及欧拉角或四元数的方向。
对于硬件集成,模块提供 I2C 和 UART 端口用于连接到主机,并需要与 BMF055 相同的基本晶体和电容器补充。 与 BMF055 一样,Bosch Sensortec 还提供了一个 BNO055 开发板,其中包括该器件和所有必需的组件。
因为 BNO055 执行传感器融合计算并提供最终结果,所以软件界面相对简单。 基本器件驱动程序处理外部主机通过 I2C 或 UART 硬件接口访问器件所需的总线读写操作。
低级软件例程会访问 BNO055 的专用寄存器来检索特定的传感器融合结果。 例如,驱动程序例程 bno055_read_accel_xyz()
会读取原始线性加速度数据,bno055_convert_float_accel_xyz_msq()
函数会将数据转换为以 m/s2 为单位的浮点值。
总结
增强现实、无人机和智能手机等应用依赖于确定方向和运动的能力。 传感器融合基于不能单独生成信息或者不能明确和快速生成信息的传感器来提供这些信息。 对于设计人员来说,创建合适的传感器解决方案在硬件设计和软件开发方面都面临重大挑战。
BMF055 和 BNO055 器件能满足快速开发传感器融合设计的定制和直接替代型解决方案的需求。
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。