作者:陸向陽
對Maker而言,能看到自己的作品正確動作,例如燈號亮、馬達轉動,就會很有成就感。但進一步的,Maker可能希望作品能夠移動、能夠攜帶、能長時間在沒有插頭的環境中運作,這時就必須用電池。
但電池電力有限,如果作品很耗電,電池幾小時或幾天就耗盡,會很令人洩氣,甚至讓作品變得不實用,例如希望小孩隨身攜帶一個紫外線感測警告器,出門5小時,但3小時就沒電,使用性大打折扣。這時就要考慮使用「省電模式」。
省電模式基本概念
相信各位都知道,離開客廳到臥房就寢前,會把客廳的燈關掉,或煮好菜離開廚房時,短時間不會再進廚房,就會把廚房的燈關掉,以此節約能源。
其實,晶片或電路的省電方式也是這樣的,整片電路板可以當成一個房子,房子以很多隔間,例如廚房、客廳,在電路上這種隔間被稱為島區(Island),只是不易用肉眼看出島區的分隔界線,但具體的電路圖上可以知道。
區分成數個島區的用意就在,一旦確定哪個島區的電路暫時不用運作,就停止供電給那個島區(類似生活上的關燈),需要使用時再恢復供電,長時間如此,電路板的總體用電量便可以下降。
電路如此,晶片也一樣,晶片內其實就是微小化的電路,也是分幾個島區,對於暫時不使用的功能電路加以斷電,使整體晶片達到省電。
晶片省電模式各自為政
有了「島區靈活供電、斷電」概念後,進一步要說的是,目前無論晶片或電路,在島區的劃分上,其實沒有一致的標準,每個晶片商依據自己晶片的特性,而有不同的島區規劃設計。
另外,晶片同時間要關閉幾個島區一樣是各自為政,晶片商通常設計出幾個模式,例如A模式關閉1個島區,B模式關閉3個島區等,並為各種省電模式命名,例如瞌睡(Doze)、睡眠(Sleep)、暫眠(Suspend)、冬眠(Hibernation)等。
除了同時關閉的島區多寡,構成多種省電模式外,晶片商提供多種模式的用意也在於,晶片商不知道購買晶片的人如何運用晶片?會用晶片設計出怎樣的電路?所以提供多種省電模式給人選擇。
另外,不同的省電模式,因為關閉的島區數目不同,要離開省電模式,並回到正常運作,所需要的時間也不同,有的設計需要很快跳離省電模式,就會選擇反應較快,但省電程度較少的省電模式,反之也有人需要很省電的設計,就會使用很省電,但進入與離開時間較久的模式。
除了省電程度、進出省電模式的反應速度外,還要考慮一些細節,例如晶片內的記憶體島區一旦停止供電,資料就會消失,所以必須在進入省電模式前,將資料搬移到其他可儲存的區域,之後再搬回來。類似的,晶片也有I/O接腳的島區,若停止供電,則晶片對外部電路的控制也就無法維持。
所以,理論上關閉越多島區可以越省電,但也要考慮各種運作情境,不過這已經是比較Pro的電子工程師在管,Maker暫時不用理會,迫不得已再進一步去瞭解。
Ameba兩個主要省電模式
說了很多基礎概念,希望愛好Ameba的Maker能更瞭解Ameba的省電模式。Ameba其實也有多種模式,但最主要有兩個,一是睡眠模式(Sleep),另一是深眠模式(Deep Sleep)。
深眠的省電效果比睡眠好,但缺點是幾乎整個晶片都停擺,前者雖然沒有深眠模式來的省電,但卻可以讓Wi-Fi通訊保持運作。
無論要使用睡眠或深眠,都需要在程式的一起頭就含括(include)一個檔案,即PowerManagement.h,而如同前述,晶片的省電模式是各業者各自為政的,這個頭檔(head,指 .h檔)、含括檔,就只能供Ameba使用,其他晶片不適用。
進一步的,要使用睡眠模式,函式指令為PowerManagement.sleep(),若是要用深眠模式則為PowerManagement.deepsleep()。
函式指令還牽涉到要輸入的參數,也牽涉到一些電路設計,例如對UART、SPI、I2C等介面可能要保留相鎖迴路(Phase Lock Loop, PLL),省電模式的進入、離開也稍有不同,這些將有待後述。
- Sony強力加持!樹莓派發表專屬AI攝影機 - 2024/10/28
- 【Qualcomm Inside】12TOPS Edge AI單板RUBIK Pi規格剖析 - 2024/10/20
- TinyML潛力股!MicroFlow挑戰TensorFlow Lite for Microcontrollers - 2024/10/15