透過 Arduino 分接板開始進行 MEMS 架構的動作與定向感測器設計
資料提供者:DigiKey 北美編輯群
2020-11-25
設計人員逐漸需要在系統中提供定向與動作能力。幸好,以感測器為基礎的固態 (半導體) 及微機電系統 (MEMS) 技術已經問世,可協助達成此目標。其具有小型尺寸與低成本,因此可在多種系統上部署動作與定向感測功能,包括無人機、機器人,當然還有手持式產品,例如智慧型手機與平板電腦等。這些感測器亦可用於工業物聯網 (IIoT) 的預測性維護系統,可提供資料,在邊緣端利用人工智慧與機器學習進行分析。
可用來偵測動作與定向的 MEMS 感測器主要類型為加速計、陀螺儀、磁力計及多種組合。許多設計人員都有興趣在設計中納入動作與定向感測器,但往往不確定該從何開始。
有個作法是使用 MEMS 感測器廠商提供的評估和開發套件來支援其解決方案。如果支援度很高,則會是相當完美的作法。然而在此作法下,設計人員就會受到限制,只能使用單一廠商的感測器,或是要學習多家感測器廠商的軟體工具。
設計人員若之前沒有使用動作與定向感測器的經驗,則享有使用 Arduino 低成本開源微控制器開發板進行實驗與原型開發的優勢,透過其單一整合式開發環境,再搭配內建來自多家廠商感測器的低成本開源感測器分接板 (BOB)。
為了協助設計人員開始使用,本文將提供感測器詞彙表,並概述動作及定向感測器所扮演的角色。接著會說明 Adafruit 的一些感測器分接板及其用途。
感測器詞彙表
談到動作及定向感測器時,有兩個詞相當常用,即「軸數」與「自由度 (DOF)」。但這兩個詞經常以同義詞使用,因而導致語意混淆。
一般來說,軸可用來說明系統所採用之資料的維度。在動作與定向層面,有三個相關的軸:X、Y 和 Z。
這些軸的視覺化方式需視相關系統而定。舉例來說,若是智慧型手機以直向方式操作,X 軸相對於螢幕為水平且朝右;Y 軸相對於螢幕則為垂直且朝上;Z 軸則與另兩個軸呈正交,且視為遠離螢幕 (圖 1)。
圖 1:實體系統最多僅可有六 DOF,因為其在 3D 空間內可移動的方向僅有六個:三個線性與三個角度。(圖片來源:Max Maxfield)
以智慧型手機裝置為例,有兩個相關的動作類型:線性與角度。若是線性動作,系統可能會在 X 軸左右移動、在 Y 軸上下移動,及在 Z 軸前後移動。若是角動作,系統可能會繞著三個軸其中一個或多個轉動。
在動作層面上,DOF 是指可發生獨立動作的任意方向。在此基礎上,實體系統最多僅可有六 DOF (6DOF),因為其在 3D 空間內可移動的方向僅有六個 (三個線性與三個角度)。
「定向」一詞是指某物相對於另一物的實體位置或方向。以智慧型手機為例,定向可判斷手機是否背面朝下平放、靠著一邊站立 (直向或橫向模式),或在兩者之間。
有個方法可查看,就是裝置的定向指定成在某個時間 (tX) 下,所有可能 DOF 的值。經過比較後,裝置的動作可由 t0 與 t1 時間之間,所有可能 DOF 值的差異來判斷。
加速計、陀螺儀與磁力計等感測器都有提供一、二或三個軸。以單軸加速計為例,僅會針對其所對準的三軸之一偵測變化;雙軸感測器則會偵測三軸中兩個軸的變化;三軸感測器則會偵測全部三軸的變化。
若感測器平台表示可追蹤超過六個軸,則代表其會追蹤 X、Y 和 Z 軸上 (或周圍) 的多個資料點,藉此提供更高的準確度。以 12 軸加速計套件為例,就採用四個三軸加速計提供線性加速度量測。
然而,DOF 經常會跟軸數混為一談。舉例而言,對於三軸加速計、三軸陀螺儀與三軸磁力計的組合,有些廠商可能會描述成 9DOF 感測器,但應正確描述成 6DOF 九軸感測器。
感測器融合
加速計除了測量加速度外,還可測量重力。以智慧型手機為例,即便使用者站立不動且裝置靜止不動,三軸加速計依然可判斷朝下的方向。
三軸加速計亦可用來判斷裝置的垂直與水平定向,即可使用此資訊以直向或橫向模式來呈現顯示內容。但光靠加速計本身其實無法判斷智慧型手機相對於地球磁場的定向。此能力對於天文應用等任務來說是必備的,如此就能讓使用者將裝置朝向夜空中感興趣的區域,即可辨別並定位恆星、行星與星座。在此例子中,磁力計就是必要元件。若智慧型手機一直平放在桌面上,則單軸磁力計就足夠。但智慧型手機可能會以任意定向使用,因此必須採用三軸磁力計。
加速計不受周遭磁場影響,但會受到移動與振動影響。在比較之下,磁力計則不會受到移動與振動的影響,但會受到磁性材料與附近電磁場的影響。
即便三軸加速計亦可用於產生轉動資料,但三軸陀螺儀可在角動量層面提供更準確的資料。陀螺儀在測量轉速方面的表現更好,且不會受到線性方向的加速度或磁場的影響。但陀螺儀則有產生些微「殘留」轉速的傾向,甚至在靜止下也有此情況。此現象稱為「零漂移偏移」。若使用者試著使用陀螺儀判定絕對角度時就會發生此問題,因為此時必須要整合轉速以取得角位置。此情況下的整合問題是因為誤差會累積。舉例而言,第一次測量時僅 0.01 度的小誤差,會在測量 100 次後累積成完整角度。此現象稱為「陀螺儀飄移」。
「感測器融合」一詞是指將來自不同來源的感測器資料互相結合,如此一來所得到的資訊,比起這些來源的資料單獨使用時,在不確定性上會較低。
舉例來說,若感測器陣列由三軸加速計、三軸陀螺儀以及三軸磁力計組成,來自加速計與磁力計的資料就可用來抵銷陀螺儀飄移。同時,陀螺儀的資料可用來補償加速計振動產生的雜訊,以及磁力計磁性材料/磁場產生的雜訊。
使用感測器融合後的結果就是輸出準確度會超越個別感測器的準確度。
一些代表性感測器的介紹
視應用而定,設計人員可能會決定只採用單一類型的動作/定向感測器,可能是加速計、陀螺儀或磁力計。
有個良好的入門級加速計就是 Adadruit 的 2019 BOB,其具有一個三軸加速計搭配 14 位元類比數位轉換器 (ADC) (圖 2)。
圖 2:Adafruit 的 2019 BOB 具有一個三軸加速計,可用來偵測動作、傾斜及基本的定向。(圖片來源:Adafruit)
此高度精密的三軸感測器具有寬廣的測量範圍,從 ±2 g 至 ±8 g,可用來偵測動作、傾斜以及基本的定向。此感測器需要 3.3 V 電源,但 BOB 含有低壓降 3.3 V 穩壓器及位準轉換電路,因此可安全搭配 3 V 或 5 V 電源及邏輯元件使用。BOB 及 Arduino (或其他微控制器) 之間的通訊可透過 I2C BOB 進行。
對於僅需要一個陀螺儀感測器來偵測扭轉與轉向動作的應用來說,有個不錯的入門板,就是 Adafruit 的 1032 BOB,其搭配 STMicroelectronics 的 L3GD20H 三軸陀螺儀。L3GD20H 支援 I2C 與 SPI 介面以連接 Arduino (或其他微控制器),可設定成 ±250、±500 或 ±2000 度/秒標度,達到寬廣的靈敏度範圍。同樣地,此感測器需要 3.3 V 電源,但 BOB 含有低壓降 3.3 V 穩壓器及位準轉換電路,因此可搭配 3 V 或 5 V 電源及邏輯元件使用。
對於僅需要一個磁性感測器的應用來說,有個不錯的評估選項就是 Adafuit 的 4479 BOB,其具有 STMicroelectronics 的 LIS3MDL 三軸磁力計。LIS3MDL 可感測 ±4 高斯 (±400 µT) 到最高 ±16 高斯 (±1600 µT 或 1.6 mT)。BOB 及 Arduino (或其他微控制器) 之間的通訊可透過 I2C BOB 進行。同樣地,此 BOB 含有 3.3 V 穩壓器及位準轉換電路可安全搭配 3 V 或 5 V 電源及邏輯元件使用。
多個感測器彼此搭配使用是相當常見的。例如,加速計就可搭配陀螺儀來進行 3D 動作捕捉與慣性量測等任務;如此就能讓使用者判斷物體在 3D 空間中的移動方式。Adafruit 的 4480 BOB (圖 3) 就是此組合的例子之一,其具有 STMicroelectronics 的 LSM6DS33 感測器晶片。
圖 3:Adafruit 的 4480 BOB 具有 LSM6DS33TR 三軸加速計及三軸陀螺儀,可用來執行 3D 動作捕捉與慣性量測等任務。(圖片來源:Adafruit)
三軸加速計會以重力測量的方式提供資料,以瞭解朝地面的方向,以及板件在 3D 空間中的加速度有多快。同時,三軸陀螺儀可測量旋轉及扭轉。此 4480 BOB 與之前介紹的其他感測器 BOB 一樣,都含有 3.3 V 穩壓器及位準轉換電路,因此可安全搭配 3 V 或 5 V 電源及邏輯元件使用。此外,感測器資料可透過 I2C 或 SPI 介面進行存取,因此無需複雜的硬體設定即可搭配 Arduino (或其他微控制器) 使用。
雙感測器 BOB 的另一個例子是 Adafuit 的 1120,其採用 STMicroelectronics 的 LSM303 感測器晶片,其中兼具三軸加速計與三軸磁力計。微控制器與 1120 之間的通訊可透過 I2C 介面進行,且此 BOB 具有 3.3 V 穩壓器及位準轉換電路,因此可安全搭配 3 V 或 5 V 電源及邏輯元件使用。
有些應用需要使用加速計、陀螺儀及磁力計。此時,Adafruit 的 3463 就是實用的入門 BOB,其具有兩個感測器晶片:一個三軸陀螺儀,以及三軸加速計搭配三軸磁力計。BOB 與微控制器之間的通訊可透過 SPI 介面進行。此外,含有 3.3 V 穩壓器及位準轉換電路,因此可安全搭配 3 V 或 5 V 電源及邏輯元件使用。
3463 BOB 有個優點,就是設計人員可直接存取這三個感測器的原始資料。但這相對的也有個缺點,就是要使用此感測器 (操控與處理資料時) 需要 15 KB 的微控制器快閃記憶體,而且會耗用不少時脈週期。
有個替代方案是 Adafuit 的 2472 BOB,其具有 Bosch 的 BNO055 感測器晶片。BNO055 含有三軸加速計、三軸陀螺儀及三軸磁力計,全納入單一封裝中 (圖 4)。
圖 4:除了三軸加速計、三軸陀螺儀和三軸磁力計外,Adafuit 的 2472 BOB 上的 BNO055 感測器還含有 Arm Cortex-M0 處理器,可用來執行感測器融合。(圖片來源:Adafruit)
此外,BNO055 亦含有 32 位元 Arm Cortex-M0 處理器,可取用三個感測器的原始資料、執行複雜的感測器融合,然後以設計人員可使用的格式提供經過處理的資訊:四元數、歐拉常數與向量。確切來說,透過 2472 BOB 的 I2C 介面,設計人員即可輕鬆快速存取以下資訊:
- 絕對定向 (歐拉向量、100 Hz):以 360 球面為準的三軸定向資料。
- 絕對定向 (四元數、100 Hz):四點四元數輸出可達到更準確的資料操控。
- 角速度向量 (100 Hz):三軸「轉動速度」,單位為 rad/s。
- 加速度向量 (100 Hz):三軸加速度 (重力 + 線性動作),單位為 m/s2。
- 磁場強度向量 (20 Hz):三軸磁場感測 (單位為 μT)。
- 線性加速度向量 (100 Hz):三軸線性加速度資料 (加速度除去重力),單位為 m/s2。
- 重力向量 (100 Hz):三軸重力加速度 (除去任何移動),單位為 m/s2。
- 溫度 (1 Hz):環境溫度,單位為攝氏度。
在晶片上執行感測器融合即可釋放主微控制器的記憶體與運算週期,非常適合想要打造低成本即時系統的設計人員。此外,感測器融合演算法並不容易,要熟練需要花費相當多時間。能在晶片上執行感測器融合,即可讓系統開發人員在數分鐘內就準備好操作,但若從頭開始實作演算法,則要花費數天甚至數週。
結論
許多設計人員都有興趣在設計中納入動作與定向感測器,卻不確定該從何開始。若設計人員沒有使用這些裝置的經驗,要熟悉眾多廠商的感測器並不容易。有個方法可以開始試驗並製作原型,就是使用低成本的開源微控制器開發板 (如 Arduino) 搭配低成本的開源感測器 BOB,其中就具有多家廠商的感測器。
進階閱讀:

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