你的位置:首頁(yè) > 傳感技術(shù) > 正文

通過(guò)更簡(jiǎn)單的途徑增加低功耗 9 軸運(yùn)動(dòng)跟蹤功能

發(fā)布時(shí)間:2018-03-13 責(zé)任編輯:wenwei

【導(dǎo)讀】越來(lái)越多的可穿戴設(shè)備和物聯(lián)網(wǎng)設(shè)計(jì)將檢測(cè)方向和跟蹤運(yùn)動(dòng)的能力視為重要要求。盡管已經(jīng)有各種各樣的可用運(yùn)動(dòng)傳感器,但工程師還是不斷受到挑戰(zhàn),探索以更低的功耗更快、更高效地集成這些設(shè)備,這在額外增加傳感器時(shí)尤其具有挑戰(zhàn)性。
 
為應(yīng)對(duì)這些運(yùn)動(dòng)跟蹤挑戰(zhàn),設(shè)計(jì)人員需要集成度更高的加速計(jì)、陀螺儀和磁力儀五金件以及更加高效且智能的數(shù)據(jù)融合算法。
 
本文將介紹 TDK InvenSense 提供的同時(shí)為硬件和軟件提供幫助的解決方案。然后,本文還將介紹設(shè)計(jì)人員如何著手將該解決方案應(yīng)用于簡(jiǎn)化需要復(fù)雜的運(yùn)動(dòng)感應(yīng)功能的復(fù)雜低功耗多傳感器應(yīng)用的開(kāi)發(fā)。
 
高效運(yùn)動(dòng)跟蹤的挑戰(zhàn)
 
利用傳統(tǒng)的運(yùn)動(dòng)跟蹤方法,開(kāi)發(fā)人員可以同時(shí)為硬件和軟件處理重要的集成問(wèn)題。在硬件方面,開(kāi)發(fā)人員通常會(huì)努力在采用單獨(dú)的傳感器(包括加速計(jì)、陀螺儀和磁力儀)構(gòu)建的設(shè)計(jì)中最大限度減少其復(fù)雜性、尺寸和零件的數(shù)量。軟件工程師則需要特別注意同步各種各樣的傳感器輸出,以創(chuàng)建高級(jí)運(yùn)動(dòng)跟蹤應(yīng)用中所用傳感器融合算法所需的統(tǒng)一數(shù)據(jù)流。對(duì)于硬件和軟件開(kāi)發(fā)人員而言,需要在設(shè)計(jì)中集成額外傳感器類(lèi)型的應(yīng)用面臨的挑戰(zhàn)均顯著增加。
 
但是,使用 TDK InvenSense ICM-20948,開(kāi)發(fā)人員便能夠以最少的工作量快速實(shí)現(xiàn)運(yùn)動(dòng)跟蹤設(shè)計(jì)或其他多傳感器系統(tǒng)。
 
運(yùn)動(dòng)跟蹤解決方案
 
TDK InvenSense ICM-20948 是一種多芯片模塊,尺寸只有 3 mm x 3 mm x 1 mm,它集成了提供完整運(yùn)動(dòng)跟蹤解決方案所需的整套傳感器、信號(hào)鏈、數(shù)據(jù)處理和接口電路(圖 1)。
 
通過(guò)更簡(jiǎn)單的途徑增加低功耗 9 軸運(yùn)動(dòng)跟蹤功能
圖 1: TDK InvenSense ICM-20948 通過(guò)其專(zhuān)用的信號(hào)鏈、可編程濾波器、接口電路和數(shù)字運(yùn)動(dòng)處理器執(zhí)行運(yùn)動(dòng)跟蹤。(圖片來(lái)源: TDK InvenSense)
 
該模塊在全面工作模式下僅需要 3 毫安 (mA) 左右便能實(shí)現(xiàn)其全部功能。對(duì)于功率受限的應(yīng)用,開(kāi)發(fā)人員可以關(guān)閉模塊的某些部分,從而將完全休眠模式下各階段的電流消耗降低至 8 微安 (μA)。產(chǎn)生的功耗取決于工作電壓 (VDD),根據(jù)設(shè)計(jì)要求,該電壓值可以介于 1.71 伏特和 3.6 伏特。
 
單獨(dú)的信號(hào)鏈集成在模塊中,為集成的 3 軸加速計(jì)、3 軸陀螺儀和 3 軸磁力儀以及集成的溫度傳感器的每個(gè)通道提供支持。每個(gè)信號(hào)鏈都包括緩沖放大器和一個(gè)專(zhuān)用的 16 位模數(shù)轉(zhuǎn)換器 (ADC),以及特定于傳感器的電路,如驅(qū)動(dòng)模塊的霍爾效應(yīng)磁力儀的電流源。
 
為了提高每種信號(hào)鏈的輸出,模塊包括適用于每種進(jìn)一步傳感器類(lèi)型的信號(hào)調(diào)節(jié)階段。例如,磁力儀輸出通過(guò)算術(shù)電路進(jìn)行基本信號(hào)處理,而其他傳感器的輸出各自饋入自動(dòng)的傳感器特定調(diào)節(jié)階段,以執(zhí)行采樣平均等處理功能。開(kāi)發(fā)人員可以將 ICM-20948 設(shè)置為平均多達(dá) 128 個(gè)陀螺儀數(shù)據(jù)采樣,或者將加速計(jì)設(shè)置為平均多達(dá) 32 個(gè)采樣。最終,每個(gè)通道的信號(hào)調(diào)節(jié)階段的輸出饋入一組專(zhuān)用的傳感器寄存器中。
 
ICM-20948 的核心是一個(gè)專(zhuān)有的數(shù)字運(yùn)動(dòng)處理器 (DMP),用于提供各種不同的功能,包括執(zhí)行運(yùn)動(dòng)處理算法、校準(zhǔn)和自測(cè)試。在正常工作期間,DMP 會(huì)處理來(lái)自專(zhuān)用傳感器寄存器的數(shù)據(jù)。然后再將結(jié)果存儲(chǔ)在模塊的集成式 FIFO 中,供主機(jī) MCU 通過(guò)共享的 I2C 或 SPI 總線訪問(wèn)。
 
DMP 和 FIFO 的功能為很多實(shí)際應(yīng)用提供重要功能。很多情況下,應(yīng)用以相對(duì)較慢的速度更新其運(yùn)動(dòng)跟蹤結(jié)果,甚至允許其主機(jī)處理器在更新之間休眠,以降低總功耗。然而,運(yùn)動(dòng)跟蹤算法需要的更新速度明顯更高,以確保其在應(yīng)用請(qǐng)求更新時(shí)以最低的延時(shí)提供精確的數(shù)據(jù)。DMP 能夠在不需要主機(jī)參與的情況下維持高更新速度,這有助于確保準(zhǔn)確性,而不會(huì)對(duì)主機(jī)應(yīng)用本身的性能或功耗強(qiáng)加額外的要求。
 
簡(jiǎn)單的集成
 
ICM-20948 結(jié)合了小封裝、系統(tǒng)集成功能及主機(jī)獨(dú)立操作等特點(diǎn),特別適合在移動(dòng)設(shè)備、可穿戴設(shè)備和物聯(lián)網(wǎng)設(shè)計(jì)中使用。模塊的高水平集成意味著,開(kāi)發(fā)人員僅使用三個(gè)電容器便可以執(zhí)行典型的運(yùn)動(dòng)跟蹤設(shè)計(jì)。按照 TDK InvenSense 使用陶瓷 X7R 零件的建議,開(kāi)發(fā)人員將在模塊的 REGOUT 引腳上增加一個(gè) 0.1 μF 電容器進(jìn)行穩(wěn)壓器濾波,并在其 VDD 和 VDDIO 引腳上增加一個(gè)該電容器用于電源旁通(圖 2)。
 
通過(guò)更簡(jiǎn)單的途徑增加低功耗 9 軸運(yùn)動(dòng)跟蹤功能
圖 2: 設(shè)計(jì)人員可以將 TDK InvenSense ICM-20948 輕松添加到基于 MCU 的設(shè)計(jì)中,從而通過(guò) SPI(此處所示)或 I2C 接口連接到 MCU,后者使用相同的配置,但引腳 22 (nCS) 與 VDDIO 相關(guān)聯(lián)。(圖片來(lái)源: TDK InvenSense)
 
雖然 ICM-20948 為運(yùn)動(dòng)跟蹤設(shè)計(jì)提供了近乎直接替代型的解決方案,但很多應(yīng)用還是對(duì)其他傳感器類(lèi)型提出了要求。為幫助開(kāi)發(fā)人員簡(jiǎn)化這些多傳感器設(shè)計(jì),ICM-20948 為其他外部傳感器提供單獨(dú)的 I2C 接口和內(nèi)置支持。開(kāi)發(fā)人員在此將兼容 I2C 的智能傳感器連接到模塊的專(zhuān)用輔助 I2C 端口(圖 3)。
 
通過(guò)更簡(jiǎn)單的途徑增加低功耗 9 軸運(yùn)動(dòng)跟蹤功能
圖 3: 在 SPI(或 I2C)與主機(jī) MCU 連接的同時(shí),開(kāi)發(fā)人員可以使用 TDK InvenSense ICM-20948 模塊的輔助 I2C 接口(AUX_CL 和 AUX_DA)連接外部傳感器,并通過(guò) ICM-20948 的輔助設(shè)備專(zhuān)用寄存器管理它們。(圖片來(lái)源: TDK InvenSense)
 
在正常操作中,ICM-20948 將充當(dāng) I2C 總線控制器,以與外部傳感器通信。在此模式下,開(kāi)發(fā)人員可編程一組專(zhuān)用的模塊寄存器,以定義外部設(shè)備的 I2C 地址、輸出數(shù)據(jù)地址以及其他的傳輸參數(shù)。用此信息,模塊可以將外部傳感器數(shù)據(jù)讀入其 FIFO 和外部設(shè)備數(shù)據(jù)寄存器中,從而在傳感器 I2C 總線上使用單字節(jié)或多字節(jié)讀取,而不會(huì)涉及到主機(jī) MCU。
 
ICM-20948 提供專(zhuān)門(mén)設(shè)計(jì)用于協(xié)調(diào) ICM-20948 與外部傳感器之間時(shí)間的一項(xiàng)額外功能。除了使用模塊的專(zhuān)用中斷 INT 引腳之外,開(kāi)發(fā)人員還可以使用外部傳感器的中斷或同步脈沖驅(qū)動(dòng)模塊的 FSYNC 引腳。例如,在圖像穩(wěn)定應(yīng)用中,開(kāi)發(fā)人員可以使用圖像傳感器的幀同步輸出來(lái)將圖像數(shù)據(jù)與 ICM-20948 傳感器讀數(shù)同步。使用模塊的 FSYNC_CONFIG 寄存器,開(kāi)發(fā)人員甚至可以將模塊配置為測(cè)量外部傳感器 FSYNC 事件與 ICM-20948 數(shù)據(jù)事件之間的時(shí)間,從而在圖像和運(yùn)動(dòng)數(shù)據(jù)間提供更密集的同步。
 
但是,作為專(zhuān)用的運(yùn)動(dòng)跟蹤設(shè)備,ICM-20948 缺乏使用一般由主機(jī) MCU 處理的那種設(shè)備特定設(shè)置操作來(lái)配置外部傳感器所需的功能。為簡(jiǎn)化系統(tǒng)初始化過(guò)程,該模塊提供一種直通模式,以使用集成的接口旁通多路復(fù)用器將主機(jī)系統(tǒng)處理器直接連接到外部傳感器上。
 
在直通模式下,該設(shè)備使用其集成的模擬開(kāi)關(guān)將輔助 I2C 引腳 AUX_CL(引腳 7)和 AUX_DA(引腳 21)直接以電氣方式連接到主機(jī) I2C 總線(引腳 23 和 24)。該工作模式提供一種簡(jiǎn)單的方法,以允許主機(jī)處理器處理與每個(gè)外部傳感器相關(guān)的任何配置和設(shè)置要求。初始化后,開(kāi)發(fā)人員禁用旁通多路復(fù)用器,以允許 ICM-20948 接管正常操作時(shí)的外部傳感器訪問(wèn)。
 
快速開(kāi)發(fā)
 
盡管 ICM-20948 提出了相對(duì)簡(jiǎn)單的接口要求,但希望評(píng)估運(yùn)動(dòng)跟蹤解決方案的開(kāi)發(fā)人員甚至可以避免該水平的硬件原型開(kāi)發(fā)。TDK InvenSense 的 DK-20948 評(píng)估板和參考設(shè)計(jì)提供現(xiàn)成的開(kāi)發(fā)平臺(tái),其結(jié)合了主機(jī) MCU、嵌入式調(diào)試器、USB 接口和用于增加其他傳感器的多個(gè)連接器、無(wú)線連接和其他功能(圖 4)。
 
通過(guò)更簡(jiǎn)單的途徑增加低功耗 9 軸運(yùn)動(dòng)跟蹤功能
圖 4: TDK InvenSense DK-20948 板提供一種完整的運(yùn)動(dòng)感應(yīng)設(shè)計(jì),其結(jié)合了 ICM-20948 模塊與 Microchip Technology ATSAMG55J19B MCU(左側(cè)中間)和基于 Microchip AT32UC3A4256 MCU(位于板的后側(cè))的嵌入式調(diào)試器。(圖片來(lái)源: TDK InvenSense)
 
DK-20948 板基于 Microchip Technology ATSAMG55J19B MCU,使用 ICM-20948 提供完整的運(yùn)動(dòng)傳感器設(shè)計(jì)。同時(shí),該板包括一個(gè)提供嵌入式調(diào)試功能的 Microchip AT32UC3A4256 MCU,從而在與主機(jī) ATSAMG55 MCU 結(jié)合使用時(shí)消除對(duì)外部工具的需求。開(kāi)發(fā)人員可以使用該板評(píng)估 ICM-20948,在此過(guò)程中,無(wú)需進(jìn)一步的硬件工作或者其他定制或可用子板來(lái)擴(kuò)展其功能。開(kāi)發(fā)人員完成其 ICM-20948 評(píng)估后,可以使用套件的示意圖、詳細(xì)的 BOM 和板設(shè)計(jì)文件創(chuàng)建定制設(shè)計(jì)。
 
對(duì)于軟件工程師而言,DK-20948 套件同樣包括用于快速評(píng)估和定制開(kāi)發(fā)的選項(xiàng)。對(duì)于評(píng)估,公司基于 MotionLink GUI 的工具可使開(kāi)發(fā)人員探索不同的配置設(shè)置及評(píng)估它們對(duì)所產(chǎn)生運(yùn)動(dòng)數(shù)據(jù)的影響。然而,對(duì)于大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō),套件的軟件開(kāi)發(fā)包將很快成為他們的主要關(guān)注點(diǎn)。
 
定制軟件
 
對(duì)于定制軟件開(kāi)發(fā),TDK InvenSense eMD(嵌入式運(yùn)動(dòng)驅(qū)動(dòng)器)SmartMotion 軟件包提供應(yīng)用編程接口 (API) 說(shuō)明文檔、驅(qū)動(dòng)源代碼、傳感器融合文庫(kù)以及預(yù)建的 DMP 固件圖像。同時(shí),該軟件包還包括構(gòu)建和閃現(xiàn)定制固件圖像的工具以及與評(píng)估板進(jìn)行控制臺(tái)交互的命令行實(shí)用程序。
 
eMD 軟件平臺(tái)設(shè)計(jì)用于與 Atmel/Microchip Technology Atmel Studio 配合使用,包含兩個(gè) Atmel Studio 包:內(nèi)核和應(yīng)用。內(nèi)核包包含編程和操作 ICM-20948 所需的底層驅(qū)動(dòng)器和固件,以及 DK-20948 板的 Microchip ATSAMG55J19B 主機(jī) MCU 的預(yù)建運(yùn)動(dòng)算法和 math 文件。
 
應(yīng)用包包含一個(gè)樣例應(yīng)用程序,用于演示內(nèi)核包的使用,包括從頂層應(yīng)用向下延伸到串行總線交易的主要設(shè)計(jì)模式。例如,主要的 C 例程展示開(kāi)發(fā)人員如何初始化 ICM-20948 和獲取數(shù)據(jù)(列表 1)。
 
int main (void)
 
{
 
   ...
 
  
 
    /* Initialize icm20948 serif structure */
 
   struct inv_icm20948_serif icm20948_serif;
 
   icm20948_serif.context   = 0; /* no need */
 
   icm20948_serif.read_reg  = idd_io_hal_read_reg;
 
   icm20948_serif.write_reg = idd_io_hal_write_reg;
 
   icm20948_serif.max_read  = 1024*16; /* max num bytes allowed per serial read */
 
   icm20948_serif.max_write = 1024*16; /* max num bytes allowed per serial write */
 
 
 
   icm20948_serif.is_spi    = interface_is_SPI();
 
 
 
   ...
 
  
 
    * Setup the icm20948 device */
 
   icm20948_sensor_setup();
 
 
 
   /*
 
    * Now that Icm20948 device was initialized, proceed with DMP image loading
 
    * This step is mandatory as DMP image are not store in non volatile memory
 
    */
 
 
 
   load_dmp3();
 
 
 
   /*
 
    * Initialize Dynamic protocol stuff
 
    */
 
   DynProTransportUart_init(&transport, iddwrapper_transport_event_cb, 0);
 
   DynProtocol_init(&protocol, iddwrapper_protocol_event_cb, 0);
 
 
 
   /*
 
    * Initializes the default sensor ODR in order to properly init the algorithms
 
    */
 
   sensor_configure_odr(period_us);
 
 
 
   InvScheduler_init(&scheduler);
 
 
 
   ...
 
  
 
   while (1) {
 
      InvScheduler_dispatchTasks(&scheduler);
 
 
 
      if (irq_from_device == 1) {
 
         inv_icm20948_poll_sensor(&icm_device, (void *)0, build_sensor_event_data);
 
 
 
         __disable_irq();
 
         irq_from_device = 0;
 
         __enable_irq();
 
      }
 
   }
 
 
 
   return 0;
 
}
 
列表 1: 開(kāi)發(fā)人員可以檢查 DK-20948 eMD SmartMotion 軟件包中提供的示例源代碼,以了解主要設(shè)計(jì)模式,如示例應(yīng)用的 main.c 例程中此代碼片段所列的 ICM-20948 初始化和傳感器輪詢(xún)模式。(代碼來(lái)源: TDK InvenSense)
 
編程 ICM-20948 等高度集成的設(shè)備時(shí),開(kāi)發(fā)人員很容易發(fā)現(xiàn)自己不僅要應(yīng)付設(shè)備的很多配置選項(xiàng),還要應(yīng)付高效操作設(shè)備所需的大量軟件組件。eMD 內(nèi)核包通過(guò)一系列的抽象(包括軟件結(jié)構(gòu)和服務(wù)層)消除了該復(fù)雜性。例如,關(guān)鍵軟件結(jié)構(gòu) inv_icm20948 收集了操作 ICM-20948 所需的所有數(shù)據(jù)和元數(shù)據(jù),包括其串行接口定義(列表 2)。
 
/** @brief ICM20948 serial interface
 
 */
 
struct inv_icm20948_serif {
 
       void *     context;
 
       int      (*read_reg)(void * context, uint8_t reg, uint8_t * buf, uint32_t len);
 
       int      (*write_reg)(void * context, uint8_t reg, const uint8_t * buf, uint32_t len);
 
       uint32_t   max_read;
 
       uint32_t   max_write;
 
       inv_bool_t is_spi;
 
};
 
列表 2: 為幫助降低軟件復(fù)雜性,DK-20948 eMD SmartMotion 軟件內(nèi)核例程提供很多 C 語(yǔ)言結(jié)構(gòu),這就是其中一個(gè)例子,該示例定義 ICM-20948 串行接口的設(shè)置及 I2C 或 SPI 交易所需的適當(dāng)?shù)讓幼x取和寫(xiě)入例程的指示器。(代碼來(lái)源: TDK InvenSense)
 
在實(shí)例化 eMD 結(jié)構(gòu)及初始化設(shè)備本身之后,開(kāi)發(fā)人員可以調(diào)用單個(gè)例程 inv_icm20948_poll_sensor(),以使用 inv_icm20948 結(jié)構(gòu)實(shí)例讀取傳感器和通過(guò) DMP 處理數(shù)據(jù)。這份記錄齊全的例程有 900 多行,為開(kāi)發(fā)人員詳細(xì)演示了操作傳感器、管理 FIFO 和利用 DMP 的核心功能的使用。
 
有興趣從更基礎(chǔ)的層面了解 ICM-20948 操作的開(kāi)發(fā)人員可以轉(zhuǎn)向底層內(nèi)核例程,如設(shè)備自測(cè)試 Icm20948SelfTest.c 模塊中使用的例程。在此模塊中,int inv_do_test_accelgyro 等例程顯示了控制設(shè)備的典型寄存器操作(列表 3)。
 
static int inv_do_test_accelgyro(struct inv_icm20948 * s, enum INV_SENSORS sensorType, int *meanValue, int *stMeanValue)
 
{
 
   ...
 
 
 
    // Set Self-Test Bit
 
    if (sensorType == INV_SENSOR_GYRO)
 
    {
 
        // Enable gyroscope Self-Test by setting register User Bank 2, Register Address 02 (02h) Bit [5:3] to b111
 
        result = inv_icm20948_write_single_mems_reg(s, REG_GYRO_CONFIG_2, BIT_GYRO_CTEN | SELFTEST_GYRO_AVGCFG);
 
    } else
 
    {
 
        result = inv_icm20948_write_single_mems_reg(s, REG_ACCEL_CONFIG_2, BIT_ACCEL_CTEN | SELFTEST_ACCEL_DEC3_CFG);
 
    }
 
 
 
   ...
 
}
 
列表 3: 開(kāi)發(fā)人員可以在 DK-20948 eMD SmartMotion 軟件包中發(fā)現(xiàn)演示 ICM-20948 在多個(gè)抽象層面使用的例程,包括 Icm20948SelfTest.c 模塊此代碼片段中顯示的寄存器級(jí)訪問(wèn)。(代碼來(lái)源: TDK InvenSense)
 
在列表 3 中,(相對(duì))高級(jí)的 inv_icm20948_write_single_mems_reg() 函數(shù)會(huì)調(diào)用低級(jí)例程 inv_icm20948_write_reg(),從而傳遞給常見(jiàn)的 inv_icm20948 結(jié)構(gòu)實(shí)例。該調(diào)用會(huì)向下傳達(dá)到低層,最終到達(dá)實(shí)際執(zhí)行寄存器寫(xiě)入操作的例程中。為執(zhí)行此操作,該最終低級(jí)函數(shù)使用軟件初始化期間加載到 inv_icm20948_serif 串行接口結(jié)構(gòu)實(shí)例中的寄存器寫(xiě)入例程指示器,如前面的列表 2 所示。這種分層方法對(duì)于幫助最大限度降低軟件復(fù)雜性和最大限度提高性能是必不可少的。
 
對(duì)于開(kāi)發(fā)人員,eMD SmartMotion 架構(gòu)提供一個(gè)在一組一致的關(guān)鍵預(yù)定義結(jié)構(gòu)上構(gòu)建的靈活框架。使用 eMD 軟件包,開(kāi)發(fā)人員可以在高水平上工作,從而使用抽象快速執(zhí)行應(yīng)用。同時(shí),開(kāi)發(fā)人員可以輕松跳入低層以執(zhí)行定制功能,而不會(huì)失去與更高級(jí)軟件的一致性。eMD SmartMotion 軟件包和 DK-20948 開(kāi)發(fā)板一起使用,可以提供全面的平臺(tái)來(lái)快速開(kāi)發(fā)運(yùn)動(dòng)感應(yīng)應(yīng)用。
 
總結(jié)
 
TDK InvenSense ICM-20948 模塊為運(yùn)動(dòng)感應(yīng)提供了完全集成的解決方案。使用相關(guān)的 DK-20948 開(kāi)發(fā)套件和 eMD SmartMotion 軟件包,開(kāi)發(fā)人員可以快速構(gòu)建能夠滿足最低尺寸和功耗要求的運(yùn)動(dòng)感應(yīng)解決方案。
 
 
 
 
 
 
 
 
推薦閱讀:



在僅有零點(diǎn)電阻和電容可調(diào)節(jié)的情況下設(shè)計(jì)PLL濾波器
了解開(kāi)關(guān)調(diào)節(jié)器的輸出,加快電源設(shè)計(jì)
如何用加速度計(jì)提高傾角測(cè)量精度
Digi-Key推出微信零件搜索功能以提升客戶體驗(yàn)
手機(jī)傳感器是怎么泄密的
 
 
 
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索
?

關(guān)閉

?

關(guān)閉