物联网
测量环境参数的能力可以作为在工厂和工业应用以及智能建筑,家电和个人产品中建立成熟的健康和安全特征的基础。然而,为了提供这些功能,有助于满足法规要求,开发人员需要找到有效地合并来自多个传感器,最大限度地减少空间,功耗和成本效果的一种手段,同时确保最高的准确度,精确度和可靠性。
为了实现这一点,开发人员现在可以求助于复杂的传感器融合算法,能够产生大约空气质量,温度,湿度,和总体舒适的信息。
本文将展示如何使用Bosch Sensortec的单个设备和软件,特别是BME680及其相关的支持硬件和软件,以最小的努力完成此项工作。
健康和舒适水平与环境因素密切相关,远远超出对基本参数的简单测量。舒适温度的人类感觉不仅取决于温度,还取决于湿度水平。健康专家将温度和湿度结合起来,形成一个“高温指数”,高度警示重大健康风险。正如热指数所预测的那样,在特定温度的环境中工作的人在湿度升高时可能面临严重的健康风险(图1)。
图1:人类受温度和相对湿度组合的影响,使其同时测量更有用。
人为因素的专家进一步研究,根据“有效温度”的一个新的参数定义了一个主观的“舒适区”,将温度和湿度结合成一个单一的指标。温度或湿度的变化会迅速导致典型个体感到不舒服的环境(图2)。
图2:人类认为温度和相对湿度的变化使得舒适区狭窄,极端情况下会导致包括中暑在内的重大健康风险。
与热指数一样,舒适区以外的温度,湿度或两者的剧烈变化都可能迅速造成不仅令人不舒服的情况。高于温度依赖的湿度水平,个体甚至可能面临中暑的危险。工作环境中的舒适区的概念是如此重要,以至于其操作参数在由美国国家标准学会(ANSI)批准的美国加热,制冷和空调工程师协会(ASHRAE)的标准55中规定。
尽管舒适区之外的重大短途旅行可能会影响健康,但即使温度有限的变化也会影响人的表现。在对这个话题进行实验性研究的调查中,研究人员发现,在相对较窄的有效温度范围之外,工作性能一直在下降(图3)。
图3:研究人员始终发现,当有效温度超出相对较窄的范围时,性能会下降。
同时,温度和湿度决不是单独影响健康。挥发性有机化合物(VOCs)由多种天然和人为来源引起,对空气质量构成了特别隐蔽的威胁。由于空气质量对健康至关重要,美国环境保护署(EPA)等组织将各种空气质量参数压缩为单一指标(图4)。空气质量指数(AQI)通常作为城市和较大地理区域的健康指标呈现,可直接应用于小气候,建筑物和其他高占用率地区。大型建筑物中的高级加热,通风和空调(HVAC)系统通常依赖于空气质量的一些度量作为其气流过程控制设计的一部分。
图4:环境和健康组织使用标准的空气质量指数来警告当地居民的空气质量状况,可能会导致一系列的健康风险。
对于工程师来说,温度,湿度和挥发性有机化合物等基本因素之间复杂的相互关系,对于健康和健康传感系统的设计来说是一个巨大的挑战。在最基本的层面上,设计师必须准确地测量每个因素。
过去,开发人员通过将传感器与定制信号链相结合来处理原始电压和电流输出,从而解决了这些类型的传感问题。智能传感器的出现极大地简化了传感系统的开发。通过集成传感器,传感器信号链,模数转换器(ADC)和控制逻辑,智能传感器可以向主MCU提供准确的温度补偿数字传感器数据。开发人员只需通过集成传感器通常支持的SPI或I 2 C接口将这些设备连接到MCU 。
尽管如此,对于诸如舒适区和AQI等派生分析,即使是单个智能传感器的集合也没有提供有效的解决方案。而且,多个传感器的使用导致更大的设计复杂性,更大的BOM和更大的物理足迹。这就降低了开发人员满足客户对更小,更高效设计的需求的能力。
也许更糟的是,使用多个传感器,甚至是智能传感器的设计在满足功能要求方面面临重大问题。即使与有效温度一样重要,派生测量也需要开发人员同步底层传感器测量结果以用于传感器融合算法。博世Sensortec BME680消除了这些设计限制,使开发人员能够使用单个设备和相关联的传感器融合库,以快速满足健康和保健应用的需求。
BME680是一款集成式环境传感器,将温度,湿度,压力和气体传感器集成在一起,尺寸仅为3 x 3 x 1 mm,采用8引脚LGA封装。特别是,该装置的气体传感器支持基于各种气体测量的空气质量测量。
该器件实现了高线性度和高准确度,而正常工作时功耗仅为微安(μA),睡眠模式下仅为0.16μA。在典型的操作过程中,BME680的温度测量功耗仅为1.0μA。对于湿度,压力和温度的组合测量,器件仅使用3.7μA。对于气体传感,传感器子系统的性质导致功耗从0.09毫安(mA)到12毫安(取决于工作模式)。
气体感测的较高功耗源自两阶段过程。气体传感器本身是一种基于金属氧化物的装置,当它与各种各样的VOC或其他环境污染物接触时,其电阻会发生变化。但是,在传感器运行之前,气体传感器子系统中的加热器将温度升高到确保准确测量所需的水平。在气体传感器子系统内,加热器控制模块使用控制回路来控制集成数字 - 模拟转换器(DAC)的输出。反过来,DAC输出用于调整注入电阻加热器元件的电流量以提高温度。
BME680为开发人员提供了几种控制气体感应功耗的方法。使用三种不同的操作模式,开发者可以交换功耗的更新速率。对于需要最大更新速率的应用,气体传感器可以以每秒更新一次的连续模式运行,耗电量为12 mA。
对于更新要求较低的应用程序,开发人员可以选择两种不同的模式。在低功耗模式下,气体传感器每3秒更新一次读数,在此过程中消耗0.9 mA。对于功率限制大于更新速率的应用,开发人员可以在超低功耗模式下操作气体传感器,该模式仅消耗0.09 mA,但每300秒更新一次。
这两种模式除了在更新速率和功耗上的差异之外,在气体传感器的响应时间上差别很大。在低功耗模式下,气体传感器子系统的典型响应时间为1.4 s。超低功耗模式会导致响应时间明显变慢,通常为92 s。
开发人员还可以通过控制加热过程对功耗进行一定程度的控制。通常,为了达到所需的温度水平,在气体传感器测量之前,该装置需要约30ms的加热时间。开发人员可以通过编程加热持续时间在1毫秒到4032毫秒范围内来控制加热持续时间并影响功耗。
为了避免不必要的功耗,BME680在睡眠模式下启动,等待测量命令。在大多数情况下,开发人员以强制模式操作设备,使设备依次自动采样每个传感器(图5)。
图5:在强制模式运行状态下,Bosch Sensortec BME680在采样之前,先加热气体传感器,然后对其温度,压力和湿度传感器进行采样。
在强制模式下,在进行气体传感器测量之前所需的加热之前,设备将完成温度,压力和湿度传感器的测量。在加热阶段期间,加热元件通常达到200℃和400℃之间的目标温度,并且维持该程序的加热持续时间的温度。通过仅在初始传感器测量之后执行该加热阶段,该装置避免了加热元件对那些传感器测量的任何直接影响。最后,当加热阶段达到指定的时间后,器件的ADC产生气体传感器电阻值。
BME680信号链为开发人员提供了优化某些测量的方法。为了减少测量RMS噪声,开发人员可以对器件进行编程,以对其温度,湿度和压力传感器进行过采样。还可以选择启用集成式无限脉冲响应(IIR)滤波器,以减少瞬态事件对温度和压力传感器测量的影响。尽管内部IIR滤波器可以降低这些测量的带宽,但它将分辨率从16位提高到20位。请注意,由于他们的测量方法,这种类型的过滤不是湿度和气体传感器所必需的。
除了配置传感器的测量过程之外,设计人员可以单独启用或禁用个别温度,湿度和压力传感器的测量。但是,Bosch Sensortec建议开发人员始终启用温度测量,因为相关的软件包使用温度数据来校正其他传感器测量值。
尽管过采样和滤波可以降低噪声并提高分辨率,但BME680的最终输出最终将采用由器件内部ADC产生的未经补偿的传感器值的形式。开发人员需要应用存储在设备中的校准参数来产生准确的结果。幸运的是,设备驱动程序包含处理该任务的应用程序编程接口(API)。
为了帮助启动设计,Bosch Sensortec提供了一个完整的驱动程序和API,简化了使用BME680进行设计的软件开发。对于数据补偿等基本操作,开发人员只需要为每个传感器调用不同的API函数。例如,calc_gas_resistance函数的调用参数包括气体传感器ADC输出和BME60数据结构(清单1),用于访问存储在设备中的校准数据。
struct bme680_dev {
/*! Chip Id */
uint8_t chip_id;
/*! Device Id */
uint8_t dev_idDK;
/*! SPI/I2C interface */
enum bme680_intf intf;
/*! Memory page used */
uint8_t mem_page;
/*! Ambient temperature in Degree C*/
int8_t amb_temp;
/*! Sensor calibration data */
struct bme680_calib_data calib;
/*! Sensor settings */
struct bme680_tph_sett tph_sett;
/*! Gas Sensor settings */
struct bme680_gas_sett gas_sett;
/*! Sensor power modes */
uint8_t power_mode;
/*! New sensor fields */
uint8_t new_fields;
/*! Store the info messages */
uint8_t info_msg;
/*! Burst read structure */
bme680_com_fptr_t read;
/*! Burst write structure */
bme680_com_fptr_t write;
/*! Delay in ms */
bme680_delay_fptr_t delay_ms;
/*! Communication function result */
int8_t com_rslt;
};
清单1:Bosch Sensortec开源BME680驱动程序提供了与BME680交互的所有基本软件支持,并说明了包含关键配置值的关键软件结构。(代码来源:Bosch Sensortec)
根据设备中存储的参数,该功能返回修正后的气体传感器结果(清单2)。
static uint32_t calc_gas_resistance(uint16_t gas_res_adc, uint8_t gas_range, const struct bme680_dev *dev)
{
int64_t var1;
uint64_t var2;
int64_t var3;
uint32_t calc_gas_res;
var1 = (int64_t) ((1340 + (5 * (int64_t) dev-》calib.range_sw_err)) *
((int64_t) lookupTable1[gas_range])) 》》 16;
var2 = (((int64_t) ((int64_t) gas_res_adc 《《 15) - (int64_t) (16777216)) + var1);
var3 = (((int64_t) lookupTable2[gas_range] * (int64_t) var1) 》》 9);
calc_gas_res = (uint32_t) ((var3 + ((int64_t) var2 》》 1)) / (int64_t) var2);
return calc_gas_res;
}
清单2:BME680驱动程序包含传感器特定的例程,例如此功能,该功能可使用存储在设备内的传感器校准数据将原始气体传感器数据转换为校准读数。(代码来源:Bosch Sensortec)
然而,如前所述,从原始温度,湿度和气体传感器数据算法得出更有用的量,如有效温度,舒适度和空气质量。例如,空气质量不仅取决于来自气体传感器的VOC读数,还取决于有效温度,取决于这些传感器的温度和湿度结果。除了这个算法复杂性之外,传感器的自然漂移要求定期使用校准方法来保持精确的结果。在博世软件环境集群(黑海经济合作组织)软件包解决这些问题,使开发人员能够轻松地生成健康和保健应用程序所需的复杂信息。
基于开源BME680驱动程序集,BSEC是一个封闭的二进制包,实现了传感器融合所需的算法。例如,使用BME680传感器读数,BSEC算法会生成一个反映图4所示标准空气质量指标的室内空气质量指标。
博世传感器提供了黑海经济合作组织作为主要的指令集架构,包括ARM二进制分发®的Cortex ® -M,Espressif系统ESP8266和瑞萨 RL78 MCU的。BESC发行版还包括用于BESC API的C语言头文件以及说明BSEC传感器融合API使用的示例软件。例如,示例主程序(清单3)演示了一个完整的传感器程序,仅使用两个函数来初始化设备并定期对BME680传感器进行采样。
int main()
{
/* Call to the function which initializes the BSEC library
* Switch on low-power mode and provide no temperature offset */
bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep);
/* Call to endless loop function which reads and processes data based on sensor settings */
bsec_iot_loop(sleep, get_timestamp_us, output_ready);
return 0;
}
清单3:博世软件环境集群(BSEC)软件分发包括示例软件,例如说明设备初始化和传感器采样的主程序。(代码来源:Bosch Sensortec)
开发人员使用该bsec_iot_init函数来指定采样率,温度偏移以及样本之间的睡眠时间。两个额外的参数,bus_write, bus_read允许开发人员交换不同的总线访问方法来读取和写入BME680寄存器。
作为系统配置的一部分,开发人员可以指定自己的软件例程来进行总线写入和读取。例如,他们可以使用Arduino Wire库进行总线I / O(清单4),在Arduino平台上轻松运行驱动程序或BESC包。驱动程序和BESC每个都使用包含指向这些自定义I / O例程的指针的设备结构。在程序执行期间,工作代码使用设备结构中的指针引用的软件I / O例程执行总线操作。
#include 《Wire.h》
int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint8_t data_len)
{
Wire.beginTransmission(dev_addr);
Wire.write(reg_addr); /* Set register address to start writing to */
/* Write the data */
for (int index = 0; index 《 data_len; index++) {
Wire.write(reg_data_ptr[index]);
}
return (int8_t)Wire.endTransmission();
}
清单4:使用Bosch Sensortec BME680驱动程序和BESC软件包,开发人员可以使用其特定于平台的总线I / O软件例程,例如此总线写入例程,该例程使用Arduino Wire库在Arduino兼容的硬件平台上操作。(代码来源:Bosch Sensortec)
对于开发平台本身,用户可以利用兼容Arduino的评估板以及Bosch Sensortec提供的板卡。该公司的BME680穿梭板简单地提出了BME680器件的V DD模拟电源,地,V DDIO数字电源,地和串行接口(片选,串行数据输入,串行数据输出,串行时钟输入)。开发人员可以在自己定制的基于MCU的设计中使用穿梭板,或者将穿梭板插入Bosch Sensortec自己的应用板。
对于Arduino开发人员,MikroElektronika MIKROE-2467 MikroBUS点击板为连接兼容的开发板提供了一个简单的选择。随着BME680,点击板添加一个USB接口和电源稳压器。开发人员可以单独使用点击板,或者将其插入MikroElektronika MIKROE-2340开发板(如图6)等MikroBUS兼容硬件。
图6:通过将MikroElektronika MIKROE-2467 MikroBUS点击板插入MikroElektronika MIKROE-2340开发板,开发人员可以快速开始开发基于BME680的应用程序,该开发板在板的一侧提供MikroBUS连接器,在另一侧提供Arduino连接器。(图片来源:MikroElektronika)
该电路板包含Microchip Technology 32位PIC32MZ2048EFH100 MCU,该器件将高性能MIPS32 M级处理器内核,浮点单元,2 MB闪存,512 KB SRAM,丰富的模拟外设和标准数字接口。除了标准连接器外,MIKROE-2340板还带有开发端口,并提供用于简单用户通知的LED指示灯。
该电路板的独特功能是支持MikroBus和Arduino连接器,可在该双面电路板的任一侧使用。对于软件设计,该开发板支持chipKIT,一个兼容Arduino的开源嵌入式开发环境。使用熟悉的Arduino环境,设计人员可以利用广泛的Arduino生态系统快速实施环境感测系统。
Bosch Sensortec BME680与博世软件环境集群和驱动程序结合使用,大大降低了环境传感的硬件和软件设计的复杂性,成本和占地面积。
这种组合提供了对空气质量,有效温度和舒适度的数值评估,使开发人员能够创建更复杂的设计,以满足工业,城市和家庭应用中与健康有关的健康和安全要求。
全部0条评论
快来发表一下你的评论吧 !