開發工具針對 MCU 微調功耗

作者:歐洲編輯群

資料提供者:DigiKey 歐洲編輯群

構成物聯網 (IoT) 的許多裝置皆有一個共同考量:需要達到低能耗。為了因應此需求,必須以全面性策略在多重層級進行最佳化。成功的設計不僅會採用低功率元件,也會使用軟體讓這些元件以最有效率的方式一起運作,藉此維持可用的電池電量。即便在軟硬體實作上僅有些微變動,也會對整體的能源使用情況產生巨大差異。

絕大多數 IoT 裝置的核心是針對高能效設計的微控制器 (MCU)。典型的低功耗 MCU 包含一系列智慧型周邊裝置,可代表核心處理器來控制 I/O 和重要的系統功能。序列埠 (UART) 通常能夠自主傳送和接收資料,且完成資料接收後,只需使用核心處理器上執行的軟體從適當的緩衝器來傳輸位元組。透過 Silicon LabsGecko EFM32 系列 MCU 等裝置上連結的 DMA 傳輸,甚至能將此互動降至最低。在此情況下,接收到完整訊息後,處理器核心僅須喚醒以檢查記憶體的內容即可。

讓周邊裝置管理 I/O,MCU 就可長時間處於睡眠模式,此時 MCU 的許多部分都會關閉而不會耗電。工作週期是指作用模式下和睡眠狀況下所花時間的時間比。低工作週期對電池供電式 IoT 應用很重要,因為睡眠模式僅消耗幾微安培而已,而作用模式的耗電通常是好幾數量級。

低工作週期能讓處理器核心在多數時間處於睡眠狀態,僅在必要時喚醒進行資料的收集或通訊。實行低工作週期策略的關鍵在於瞭解軟體如何與硬體互動。必須找出會導致 MCU 長時間喚醒的功能,接著盡可能取代或重寫該功能。以往,這在開發階段初期不易達成,因為必須仰賴硬體成品進行測試才可找出問題。

Silicon Labs 的 Pearl Gecko 入門套件和類似的評估板含有進階能源監測器 (AEM) 功能。搭配該公司 Simplicity Studio 的進階工具使用後,就可提供寶貴的洞察,深入瞭解應用在軟體開發週期中需要多少能量。此資訊不僅可顯示睡眠模式的效力,亦可達到功能層面的最佳化。

Silicon Labs 的 Pearl Gecko 入門套件板 AEM 模組圖片

圖 1:在 Pearl Gecko 入門套件板上實作 AEM 模組。

AEM 功能會針對從 USB 匯流排取用電力的板載 LDO 監測其電流。通常 USB 會用於支援偵錯以及將軟體下載至目標 MCU。如圖 1 所示,當板載開關被設定為電池供電模式時,就無法進行電流量測。

當電源開關設定為 AEM 模式,電路板控制器所收集的資料會中轉至 Simplicity Studio 工具,就可使用 Energy Profiler 顯示。AEM 可量測 0.1 μA 到 50 mA 的電流,動態範圍達 114 dB。如此即可精確分析不同睡眠模式狀態的影響,以及作用模式下的功耗。

為了在如此寬廣的範圍下準確測量電流消耗量,電流感測放大器會搭配雙增益級一同採用。此放大器會測量流通小型串聯電阻的壓降,增益級會以兩種不同的增益設定進一步放大此電壓,取得兩個電流範圍。這兩個範圍之間的轉換大約發生於 250 μA。在匯出樣本前,會在評估板控制器中進行數位濾波與平均化。

計時器每次滴答計時運作時,AEM 都會對電流進行取樣與轉換,並透過 USB 將電流與電壓和計時資訊一起傳送到開發工具中,每秒產生最多 6250 個電流樣本。

由於能源描繪需仰賴蹤跡資料以提供關聯性,因此在 MCU 上執行的程式碼必須經過編譯,以便含有可傳送 Debug With Arbitrary Record Format (DWARF) 資料的陳述式。傳送至除錯器的程式計數器 (PC) 樣本會使用除錯器資料來和物件檔建立關聯,以找出在 MCU 上執行的相關來源檔、函數及 C 程式碼行列。如此即可將電源量測連結到個別的功能和任務。

在 Simplicity Studio 的描繪工具中,使用者能夠存取三個視窗。這些視窗會顯示相關的程式碼、電流消耗圖以及功能層級視圖。若按一下電流圖上的任何一點,程式碼列表視窗中一部分的程式碼會醒目提示。此處對應至在此指定時刻所執行的實際程式碼,以及電流消耗量的指定位準。功能列表會列出各功能的總能耗,以及在整體應用中,各功能在總量測值中所佔的百分比。若使用者希望之後再分析描繪資訊,可以將資料匯出成檔案,然後再次匯入以進一步分析。

為了說明 Simplicity Studio 提供之電力監測工具的使用方式,我們用 MCU 透過 UART 埠進行通訊來示範說明。有個相當直覺的方式可將資料從 Gecko 的 LEUART 緩衝器移至主記憶體以便日後進行處理,那就是定期輪詢周邊裝置。若資料可以使用,狀態旗標 (LEUART_STATUS_RXDATAV) 會指出資料可以取得。

長期高能耗圖片

圖 2:序列埠輪詢的長期高能耗情形。

在使用中的處理器核心上執行程式碼,會導致好幾毫安培的恆定電流消耗。按一下圖表,就會將導致耗電的功能醒目提示。為了省電,MCU 必須避免使用輪詢來檢查資料可用性。只要讓處理器在資料擷取作業之間進入睡眠模式,並在接收緩衝資料可用時透過中斷來喚醒處理器,便可達到目標。電流消耗在睡眠期間會大幅降低,並在中斷服務常式 (ISR) 執行時突增。在 Energy Profiler 視窗中指明 ISR 即可看到此情形。

中斷服務反應的實作示意圖

圖 3:中斷服務反應的實作會縮短高電流消耗的時間。

然而,解決資料接收中斷問題後,會顯示出其他部分的程式碼因為持續使用處理器而耗用比預期還要多的能源。在相關的功能上按一下,會顯示出傳輸功能現在是導致額外能耗的元兇。雖然設定 while{} 迴圈來等待每個位元組傳輸完成就能輕易編程傳輸功能,但這會讓處理器運作超出必要時間。迴圈能由中斷作業取代 (類似於接收埠的情況),中斷作業會在每個位元組傳輸完成時喚醒處理器。處理器現在會在每個訊框位元組之間進入睡眠模式,進而降低平均電流消耗量。

位元組等級傳輸間進入睡眠模式的示意圖

圖 4:在位元組層級傳輸之間進入睡眠,可進一步降低功耗。

Gecko MCU 的 LEUART 模組能在深度睡眠模式下運作。在此模式中,高頻振盪器會關閉,但低頻振盪器 (RC 或晶體) 仍在運作,並使 LEUART 產生時脈。利用這種模式,就可讓 ISR 處理間的電流降至微安培程度。

深度睡眠模式改善能效的示意圖

圖 5:使用深度睡眠模式提升低工作週期應用的能效。

將更多緩衝區處理工作移轉到連結的 DMA 引擎,讓引擎負責在整個訊框已傳送或接收時觸發中斷,就可達到進一步的提升。此策略能讓處理器核心睡眠更久,達到電力最佳化並專注在功能層級的資料分析任務。

結論:

以上範例展示出電流監測與除錯工具在 MCU 應用中,對於達到能效最佳化而言非常重要。開發人員無需等到開發結束才進行能源最佳化,可在整個開發階段進行分析,並且能夠清楚地看到迭代改善成果。搭配進階的睡眠模式,以及無需處理器干預即可長時間運作的智慧型硬體,工程團隊即可隨時在能效方面提供顯著改善。

 
DigiKey logo

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

關於作者

歐洲編輯群

關於出版者

DigiKey 歐洲編輯群