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