測量環境參數的能力可以作為在工廠和工業應用以及智能建筑,家電和個人產品中建立成熟的健康和安全特征的基礎。然而,為了提供這些功能,有助于滿足法規要求,開發人員需要找到有效地合并來自多個傳感器,最大限度地減少空間,功耗和成本效果的一種手段,同時確保最高的準確度,精確度和可靠性。
為了實現這一點,開發人員現在可以求助于復雜的傳感器融合算法,能夠產生大約空氣質量,溫度,濕度,和總體舒適的信息。
本文將展示如何使用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)。
用BME680設計和開發
為了幫助啟動設計,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與博世軟件環境集群和驅動程序結合使用,大大降低了環境傳感的硬件和軟件設計的復雜性,成本和占地面積。
這種組合提供了對空氣質量,有效溫度和舒適度的數值評估,使開發人員能夠創建更復雜的設計,以滿足工業,城市和家庭應用中與健康有關的健康和安全要求。
評論