構成物聯網 (IoT) 的眾多器件關聯在一起的其中一個原因是對低能耗的要求。為了滿足這一要求,需要在一個整體策略內,從多個層面進行優化。一個成功的設計不僅需要選擇低功耗的元器件,還要使用軟件以最有效的方式使這些元器件協同工作,從而節省可用的電池容量。即使是硬件和軟件實現的稍微變動,也會對整體能耗造成很大的影響。
大多數 IoT 器件的核心是為高能效設計的微控制器 (MCU)。典型的低能耗 MCU 包括一系列智能外設,其代表核心處理器來控制 I/O 和基本的系統功能。串行端口 (UART) 通常能夠自主地發送和接收數據,而在處理器內核上運行的軟件只需在數據接收完成后從相應的緩沖器中傳輸字節。通過在諸如 Silicon Labs 的 Gecko EFM32 系列的 MCU 等器件上提供鏈接的 DMA 傳輸,甚至是這種交互都可以減至最少。這種情況下,處理器內核只需在收到完整消息后喚醒以檢查存儲器的內容。
通過允許外設管理 I/O,MCU 可以在大部分時間里都處于休眠模式,這樣 MCU 的許多部分將關閉,而不會耗電。占空比是處于活動模式的時間與處于休眠模式的時間之比。低占空比對于電池供電的 IoT 應用非常重要,因為休眠模式僅僅消耗微安量級的電流,而活動模式通常會高出幾個數量級。
低占空比允許處理器內核大部分時間處于休眠模式,僅在需要時喚醒以收集數據或進行通信。實施低占空比策略的關鍵是了解軟件如何與硬件進行交互。需要確定哪些功能導致 MCU 喚醒時間過長,然后盡可能更換或重寫。一直以來,在開發階段的早期很難實現這一點,因為需要對硬件成品進行測試才能確定。
Silicon Labs 的 Pearl Gecko 入門套件及類似評估板包括高級能量監視器 (AEM) 功能。當與公司的 Simplicity Studio 中的高級工具結合使用時,可以在軟件開發期間,提供極有價值的洞察信息,讓開發人員了解應用需要多少能量。這些信息不僅顯示了休眠模式的有效性,還揭示功能層級的優化。
圖 1: Pearl Gecko 入門套件板上 AEM 模塊的實施。
AEM 功能可監控從通過 USB 總線獲取電力的板載 LDO 流出的電流。通常,USB 將用于支持調試及將軟件下載到目標 MCU。如圖 1 所示,當板載開關設置為電池供電模式時,將無法測量電流。
當電源開關設置為 AEM 模式時,板控制器收集的數據將傳送至 Simplicity Studio 工具,并可使用能量分析器進行顯示。AEM 可以測量 0.1 μA 至 50 mA 大范圍(動態范圍達 114 dB)的電流。這樣便可精確分析不同休眠模式狀態的影響以及活動模式的功耗。
為了精確測量跨如此大范圍的電流消耗,可以將電流檢測放大器與雙增益級一起使用。放大器用于測量小型串聯電阻器上的壓降,而增益級使用兩種不同的增益設置進一步放大該電壓,從而獲得兩個電流范圍。這兩個范圍之間的過渡發生在 250 μA 左右。在樣本導出之前,會在評估板控制器內對數字進行濾波和平均化處理。
每經過一個計時器刻度,AEM 便會對電流進行一次采樣和轉換,并通過 USB 將電壓和計時信息一起發送至開發工具,其每秒生成的電流樣本高達 6250 個。
由于能量分析依賴于跟蹤數據進行關聯,因此需要將 MCU 上運行的代碼編譯為包含發送使用任意記錄格式調試 (DWARF) 數據的語句。發送至調試器的程序計數器 (PC) 樣本通過調試數據與目標文件相關聯,以找到在 MCU 上運行的相關源文件、函數和 C 代碼行。這樣便可以將功率測量與各個功能和任務關聯起來。
在 Simplicity Studio 中使用分析工具時,用戶可以訪問三個窗口。它們顯示了相關代碼、電流消耗圖和功能級別視圖。通過單擊電流圖上的任意點,可高亮顯示代碼列表窗口中的部分代碼。這對應于在給定時刻運行且具有給定級別的電流消耗的實際代碼段。功能列表提供了每個功能的總能耗及其占整個應用測量總量的百分比。如果用戶想要稍后分析信息,則可以將數據導出到文件,然后再將其導入以供進一步分析。
為了說明如何使用 Simplicity Studio 中提供的功耗監控工具,我們來看一個通過 UART 端口進行通信的 MCU 示例。將數據從 Gecko 的 LEUART 緩沖器移至主存儲器以供稍后處理的一種簡單直接的方法是定期輪詢外設。如果數據可用,狀態標記 (LEUART_STATUS_RXDATAV) 將指示可以檢索數據。
圖 2: 采用串口輪詢的長期高功耗。
在活動處理器內核上運行代碼會導致產生幾毫安的恒定電流消耗。通過單擊圖表,可以高亮顯示產生此功耗的功能。為了節省能耗,MCU 需要避免使用輪詢來檢查數據可用性。為實現此目的,可以在數據獲取之間將處理器置于休眠狀態,并在接收緩沖器數據變得可用時使用中斷來喚醒處理器。電流消耗在休眠期間明顯下降,而在中斷服務例程 (ISR) 運行時則會達到峰值。在能量分析器窗口中準確找到 ISR 后便可以看出這一點。
圖 3: 實施中斷服務響應可以將具有較高電流消耗的時間段縮至更短。
但是,處理數據接收中斷后,代碼的其他部分可能顯示為因保持處理器處于活動狀態而消耗了比預期更多的功率。單擊相關功能可顯示傳輸功能現在負責額外的功耗。雖然對傳輸功能進行編程的一個簡單方法是設置 while{} 循環以等待每個字節的傳輸完成,但這將使處理器的運行時間超過必要的運行時間。與接收端口的情況類似,可以將該循環替換為中斷(在每個字節傳輸完成后喚醒處理器)。現在處理器會在每幀字節之間進入休眠模式,從而降低平均電流消耗。
圖 4: 在字節級傳輸之間進入休眠可進一步降低功耗。
Gecko MCU 上的 LEUART 模塊可以在深度休眠模式下工作。在此模式下,高頻振蕩器處于關閉狀態,而低頻振蕩器(RC 或晶體)仍在運行并為 LEUART 提供時鐘。利用這種模式可以使 ISR 處理之間的電流消耗降至微安量級。
圖 5: 使用深度休眠模式可提高低占空比應用的能效。
通過將更多的緩沖器處理移至鏈接的 DMA 引擎,使其負責在發送或接收全部幀后觸發中斷,可以實現進一步的改進。這種策略可以使處理器內核休眠更長時間,且主要通過功能級別的數據分析任務來優化功耗。
結論:
上述示例展示了電流監控和調試工具在優化 MCU 應用能效方面的重要性。不是等到開發結束才能執行能量優化,而在整個開發階段都可以執行分析,開發人員可以清晰地看到迭代改進。再加上高級休眠模式和無需長時間的處理器干預即可運作的智能硬件,工程團隊可以輕松地實現能效方面的重大改進。
-
mcu
+關注
關注
146文章
16984瀏覽量
350293 -
Silicon Labs
+關注
關注
11文章
323瀏覽量
62454 -
電流監控
+關注
關注
0文章
39瀏覽量
11107
發布評論請先 登錄
相關推薦
評論