使用壽命長、可用性更高的先進 IMU 可確保工業裝置經久耐用
資料提供者:DigiKey 北美編輯群
2020-04-28
開發人員希望構建機器人系統、智慧型電動工具、資產追蹤裝置,以及其他動作型工業產品,其中的關鍵元件就是慣性量測單元 (IMU),可提供所需的資料來管理效能、安全性等。這些長壽型工業產品的製造商不只仰賴 IMU 元件的效能能力,還有其長期可用性。市面上新出現一類具有長期可用性的工業 IMU,能為開發人員提供同時滿足效能和可用性要求的解決方案。
本文將探討 Bosch Sensortec 和 STMicroelectronics 提供的 IMU。這些 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 至 2000°/s 的多重滿量程角速率下進行陀螺儀量測。BMI088 與此類別的絕大多數元件一樣,可支援在 -40 至 +85°C 的完整工業溫度範圍內運作。但 BMI088 超越許多同級元件之處在於,其加速計支援高達 24 g 的滿量程量測,因此能提供額外的防護,避免訊號在高振動度下發生切割失真 (工業應用中常出現此情形)。
此外,這款元件可以滿足工業環境中常見的高溫或溫度快速變動要求。BMI088 加速計的靈敏度溫度漂移僅有 0.002 %/K,零 g 偏移溫度漂移則低於 0.2 mg/K。同樣地,其陀螺儀具有低至 0.015°/s/K 的偏移溫度係數 (TCO),以及 0.03%/K 的靈敏度溫度係數 (TCS)。
儘管 MEMS 架構 IMU 具有高效能特性,但消耗的電流量通常微乎其微。例如,BMI088 的加速計在一般模式下消耗 150 μA 的電流,而陀螺儀需要 5 mA。與大多數低功率元件一樣,開發人員可以在無活動期間將 BMI088 切換至低功率模式。在低功率暫停模式下,加速計和陀螺儀的電流分別會降至 3 μA 及 25 μA。事實上,BMI088 的陀螺儀提供深度暫停模式,消耗的電流低於 5 μA。
對於可攜式電動工具或資產追蹤裝置等電池供電式應用來說,低功率運作自然非常重要,但在工業應用中,快速恢復一般量測的能力也同樣重要。事實上,BMI088 比起穿戴式裝置及其他個人電子產品等消費性應用中常用的 IMU,能更快從暫停 (以及深度暫停) 模式中喚醒。
支援長壽型產品
消費性和工業裝置對 IMU 的需求,可能有一項較為根本的差異。與任何產品類別一樣,消費性產品和工業產品的生命週期也遵循著類似的模式,即導入、成長、成熟然後衰退 (圖 2)。
圖 2:儘管消費者對最新功能的需求通常會縮短消費性產品生命週期的後期階段,但許多工業使用者需仰賴成熟可靠產品線的更高可用性。(圖片來源:Wikipedia)
消費者追求功能豐富的最新行動產品,此需求大幅縮短產品生命週期的成熟期和衰退期。消費性電子產品的生命週期不斷縮短,但不同類型的工業設備通常預期可持續運作好幾年,兩者相差甚異。成熟的工業級電動工具產品線,獲得忠誠擁護往往是因為可靠地提供主要功能,而非花俏的附屬功能。在資產追蹤或 IIoT 監控等其他工業應用中,系列元件的長期可用性更為重要,勝過於汰換元件以支援逐漸增強功能的需求或實用性。
為了滿足長壽型產品的需求,開發人員通常能在半導體製造商的長壽性計畫中找到關鍵的產品。這些計畫可確保產品在推出後享有一定的可用性時間。例如,Bosch 提供的 BMI090L IMU,就屬於該公司 10 年長壽性計畫的一部分。BMI090L 是 BMI088 的引腳相容版本,具有與 BMI088 相同的功能及效能規格。
機器學習工業 IMU
STMicroelectronics 在其 10 年長壽性計畫中,推出高效能的 ISM330DHCX 工業 IMU。ISM330DHCX 是 iNEMO 系統級封裝 (SiP) 模組專用系列的成員,同樣內含 STMicroelectronics 的 LSM6DSOX 和 LSM6DSRX。這些元件結合了三軸加速計、三軸陀螺儀,以及嵌入式機器學習核心。(如需詳細瞭解 iNEMO 機器學習核心及其用途,請參閱《使用智慧型感測器內建的機器學習核心達到最佳化「全時啟動」動作追蹤》。)
LSM6DSOX 專為電池供電式消費性產品所設計,在此專用元件系列中功耗最低。另外,LSM6DSRX 專為虛擬實境 (VR)、擴增實境 (AR) 以及無人機應用所設計。此元件提供比 LSM6DSOX 更高的穩定性,以及擴充的機器學習核心。
ISM330DHCX 針對高效能工業應用所設計,以消費級 LSM6DSRX 的能力作為基礎,但提供的工作溫度範圍更為寬廣,介於 -40 至 +105°C,LSM6DSRX 則為 -40 至 +85°C。ISM330DHCX 提供高達 16 g 的線性加速範圍,同時具備 4000°/s 的最大角速率量測範圍,這是同等級元件中提供的最大角速率量測範圍之一。為了滿足工業應用的需求,ISM330DHCX 的溫度相依性很低。其加速計具有低至 0.005%/°C 的靈敏度,以及 0.1 mg/°C 的零 g 漂移,而陀螺儀具備 0.007%/°C 的靈敏度,以及 0.005°/s/°C 的零速率漂移。
與大多數先進 IMU 一樣,ISM330DHCX 可以使用 I2C 或 SPI 連線與主機處理器輕鬆整合。開發人員連接此元件時,可以採用四種不同的配置:
- 僅用於連接主機 (模式 1)
- 搭配感測器中樞功能使用 (模式 2)
- 用於連接主要主機以及次要主機,僅能讀取陀螺儀的數據 (模式 3)
- 用於連接主要主機以及次要主機,能同時讀取陀螺儀和加速計的數據 (模式 4)
在模式 2 中,ISM330DHCX 能作為感測器中樞來運作,既作為主機的從屬元件,亦作為連接至 I2C 介面之外部感測器的主控元件 (圖 3)。
圖 3:STMicroelectronics 的 ISM330DHCX 可設定為在多種運作模式下運行 (包括此處顯示的模式 2),能讓 ISM330DHCX 作為外部感測器的感測器中樞使用,向主機提供整合後的資料。(圖片來源:STMicroelectronics)
快速 IMU 開發
由於數位 IMU 對硬體的要求極低,因此開發人員能在早期開發階段徹底忽視硬體設計,可利用工業 IMU 元件製造商提供的多種開發板,立即開始進行軟體開發。例如,Bosch 的應用板能接受多種子板,包括 Bosch 的 BMI090L 切換板。Bosch 應用板以 Arm® Cortex®-M4 處理器作為基礎,提供多個測試點和連接器,並具備 USB 連線能力,可取得電力並在主機個人電腦上進行開發。
對於以 STMicroelectronics 的 ISM330DHCX 作為基礎的工業應用,若要加速其評估和原型開發作業,開發人員可以使用 Adafruit Industries 的 4502 ISM330DHCX 評估板,並連接到 Adafruit Industries 的 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 配接器連接到該公司以 STM32F401VE 微控制器作為基礎的 STEVAL-MKI109V3 開發板。為了評估採用此板件設定的 ISM330DHCX,STMicroelectronics 分別針對 Linux、Mac OSX 和 Windows 系統提供軟體套裝,依序為 STSW-MKI109L、STSW-MKI109M 和 STSW-MKI109W。
儘管此 STEVAL 硬體平台將重點完全放在 ISM330DHCX 上,但開發人員能改用 STMicroelectronics 的 X-NUCLEO-IKS02A1 擴充板結合其他感測器,以評估 ISM330DHCX。除了 ISM330DHCX IMU 以外,X-NUCLEO-IKS02A1 擴充板還包含 STMicroelectronics 的 IIS2MDC 磁力計、IIS2DLPC 低功率加速計,以及 IMP34DT05 MEMS 數位全向性麥克風。NUCLEO-IKS02A1 擴充板是要插入 STMicroelectronics 的 NUCLEO 板 (如 NUCLEO-L476RG) 使用,以提供功能齊全的硬體平台。
若要開發生產用的程式碼,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 感測器融合函式庫)。STMicroelectronics 的 STM32Cube 和 X-CUBE-MEMS1 軟體套裝結合了 NUCLEO 板組合,可提供全方位的開發平台,能打造生產就緒的動作型工業應用。
結論
除了要應對嚴苛的運作條件之外,工業產品的設計通常也要支援較長的產品線使用壽命。對於動作型工業應用來說,工業 IMU 兼具必要的強健特性及穩定性,即使有熱應力和機械應力,仍可提供準確的量測結果。藉由長使用壽命的工業 IMU,開發人員能針對仰賴於完備動作資料和元件長期可用性的工業產品線,提供有效的設計解決方案。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。