可以控制到多低(功率)?
how low (power) can you go?
低功率模式實驗
探索低功耗模式的最佳方法是選擇乙個微控制器,並在各種低功耗模式下實際執行處理器。在這篇文章中,我決定抹去我久經考驗的nxp kinetis-l freedom board,我不僅用過它,還用在了許多產品、應用程式和課程中。我還決定,不管是對是錯,不僅要測量微控制器消耗的能量,還要測量整個開發板。mcu通常是電路板上最耗電的裝置之一,但我經常發現,測量整個系統的電流提醒我,它並不是電路板上唯一的能源消耗者。優化微控制器可以帶你走很長的路,但它並不總是唯一需要能量優化的裝置。
從基準測量開始
每當我在優化產品的能源消耗時,我首先從基準能量測量開始。這通常是通過分析幾秒鐘或幾分鐘內裝置的電流消耗來完成的,以了解我們從何處開始。在我的開發板實驗中,我讓kinetis-l處於執行模式,沒有實現睡眠,所有外圍裝置都開啟了,並設定板定期切換led。使用帶有i-jet偵錯程式和i-scope的iar embedded workbench,我能夠為我的電路板描繪乙個簡單的基準,當led熄滅時為16.9毫安,當led亮起時為18.0毫安,如下圖1所示。正如你所看到的,重要的是要注意你的測量從**來,否則你的分析可能會有很大的偏差。
利用等待和深度睡眠模式優化能量
要想節省一些能量,最快的方法是實施等待或深度睡眠模式。對kinetis-l處理器資料表的檢查表明,在3伏電壓下,等待模式在3.7到5.0毫安之間。在這種模式下,cpu和外圍時鐘被禁用,但快閃儲存器處於打瞌睡模式,允許處理器在中斷時間範圍內(12-15個時鐘週期)喚醒。等待模式易於實現,進入等待模式的**如下:
void sleep_wait(void)
只有這兩行**,開發板的電流消耗從18.0毫安下降到15.9毫安。現在的消費量下降了11.6%!如果主機板由680毫安的電池供電,那麼該裝置的電池壽命將從37.8小時延長到42.8小時!只需兩行**就可以增加5個小時!
這些高階功率模式的優點在於我們可以輕鬆地將這一點再進一步。我們可以使用以下**將處理器轉入深度休眠等待模式,而不是將處理器置於等待模式:
void sleep_deep(void)
我們所做的只是調整scb_scr暫存器中的乙個位,現在我們已經從原來的18毫安電流消耗變為14.8毫安。現在的消費量下降了17.8%!同樣,假設主機板由680毫安的電池供電,電池壽命將從37.8小時延長到46小時!只需幾行**就可以節省大量成本,這只是冰山一角!
利用停機和vlls模式進行ua電流消耗
使用停止模式有可能通過禁用核心和系統時鐘進一步降低mcu的電流消耗,最多再降低兩毫安。你會發現,功率模式越低,實現它所需的**越多,喚醒系統的**就越複雜。在kinetis-l上進入停止模式的**如下:
void sleep_stop(void)
請注意,停止模式是通過電源管理控制暫存器控制的,一旦狀態設定好,就呼叫sleep_deep函式來完成電源模式的設定和wfi的執行。
到目前為止,我們一直在討論1-2毫安的mcu圖。現代微控制器將有功率模式,可以吸引微安甚至毫安!kinetis-l處理器在2023年左右首次亮相,其極低洩漏停止(vlls)模式僅需135至496微安!初始化此電源模式的**如下所示:
void sleep_vlls1(void)
在這一點上,微控制器將幾乎沒有任何能量!
低功耗模式對喚醒延遲的影響
到目前為止,我們已經看到,將處理器移動到越來越低的功耗模式是一種很好的節能方式,但這種節省確實是要付出代價的。處理器的能量狀態越低,喚醒處理器並執行有用工作所需的時間就越長。例如,如果我要使用標準停止模式,處理器喚醒並重新開始執行**需要2 us加上中斷延遲。還不錯。然而,如果我使用kinetis-l上的vlls模式之一,我將有乙個啟動處理器的喚醒延遲加上另外53到115微秒!這可能是不可接受的,具體取決於應用程式。圖2顯示了kinetis-l上從低功耗模式到執行狀態的其他轉換。
結論
arm微控制器都有標準的低功耗模式,但是每個矽晶元廠商都定製了低功耗模式,供開發者使用。正如我們所看到的,矽晶元**商通常提供幾種模式,它們可以作為低掛起的水果,對喚醒延遲的影響最小。它們還提供了幾種非常低功耗的模式,幾乎可以關閉處理器,只需要幾百微安或更少!開發人員通常需要平衡他們想要的能量和他們需要系統以多快的速度喚醒和響應事件。這種取捨肯定是特定於應用程式的,所以不要指望能夠在每個產品和應用程式上執行最低功耗模式。
UIStoryboardSegue 多控制器
標籤 空格分隔 ui property nonatomic,readonly nsstring identifier property nonatomic,readonly id sourceviewcontroller property nonatomic,readonly id destinat...
Python可以多繼承嗎??
物件導向的程式設計帶來的主要好處之一是 的重用,實現這種重用的方法之一是通過繼承機制。繼承完全可以理解成類之間的父與子的關係。例子 class prtutu def init self print prtutu class prtutu1 def init self,a print prtutu1 ...
多版本併發控制
多版本併發控制,討論的不是指的乙個軟體同時發行多個版本怎麼進行管理的問題,而是mysql中的mvcc。mvcc,multiple version concurrent control,多版本併發控制。可以認為mvcc是行級鎖的乙個變種,但它在很多情況下避免了加鎖操作,因此開銷更低。雖然實現機制有所不...