<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 軟硬兼顧 低功耗MCU設(shè)計(jì)考慮

          軟硬兼顧 低功耗MCU設(shè)計(jì)考慮

          作者: 時(shí)間:2015-02-27 來(lái)源:網(wǎng)絡(luò) 收藏

            電子產(chǎn)品的問(wèn)題經(jīng)常讓產(chǎn)品設(shè)計(jì)者頭痛而又不得不面對(duì)。以單片機(jī)()為核心的系統(tǒng),其功耗主要由單片機(jī)功耗和單片機(jī)外圍電路功耗組成。要降低單片機(jī)系統(tǒng)的功耗,需要從硬件和軟件兩方面入手。

          本文引用地址:http://www.ex-cimer.com/article/270160.htm

            硬件設(shè)計(jì)考慮因素

            要滿足單片機(jī)系統(tǒng)的要求,選用具有特性的單片機(jī)可以很容易實(shí)現(xiàn)(例如,Siliconlaboratories設(shè)計(jì)的高速C8051F($8.5125)系列單片機(jī))。因?yàn)榫哂械凸奶匦缘膯纹瑱C(jī)可以大大降低系統(tǒng)功耗,這可以從單片機(jī)的供電電壓、內(nèi)部結(jié)構(gòu)、系統(tǒng)時(shí)鐘和低功耗模式等幾方面來(lái)考察一款單片機(jī)的低功耗特性。一般來(lái)講,用戶在選擇技術(shù)供應(yīng)商和產(chǎn)品過(guò)程中,需要對(duì)下面的一些重要硬件參數(shù)進(jìn)行更加深入的考量:

            選擇簡(jiǎn)單的CPU內(nèi)核

            選擇CPU內(nèi)核時(shí)切忌一味追求性能,以“夠用就好”為原則。8位機(jī)夠用,就沒(méi)有必要選用16位機(jī)、32位機(jī);單片機(jī)的運(yùn)行速度越快,往往其功耗也越大。一個(gè)CPU越復(fù)雜、集成度越高、功能越強(qiáng),片內(nèi)晶體管越多,總漏電流也越大,即使進(jìn)入STOP狀態(tài),漏電流也會(huì)變得不可忽視;而簡(jiǎn)單的CPU內(nèi)核不僅功耗低,成本也低。

            選擇低電壓供電的單片機(jī)系統(tǒng)

            單片機(jī)系統(tǒng)的供電電壓低,可以有效地降低其系統(tǒng)功耗。由于半導(dǎo)體制造工藝的發(fā)展,現(xiàn)在單片機(jī)的供電電壓從5V供電降低到3.3V、3V、2V乃至1.8V。供電電壓低,不緊可以降低單片機(jī)的功耗,還可以降低單片機(jī)外圍電路的功耗。

            選擇帶有低功耗模式的單片機(jī)系統(tǒng)

            低功耗模式指的是系統(tǒng)的Idle、Stop和Suspend等模式。處于這些模式下的功耗將遠(yuǎn)遠(yuǎn)小于正常運(yùn)行下的功耗。Idle模式下,CPU停止工作,但內(nèi)部系統(tǒng)時(shí)鐘并不停止,單片機(jī)的外圍I/O模塊也不停止工作;系統(tǒng)功耗一般降低有限,相當(dāng)于工作模式功耗的50%左右。

            如果在CPU進(jìn)入Stop模式時(shí),將各個(gè)模擬外設(shè)關(guān)掉,這時(shí)的功耗可以降低到nA級(jí)。但是在Stop模式下,CPU被喚醒后要重新對(duì)系統(tǒng)作初始化,所有特殊功能寄存器的內(nèi)容將被重新初始化。這在某些低功耗應(yīng)用場(chǎng)合需要注意。

            Suspend模式下,CPU、內(nèi)部系統(tǒng)時(shí)鐘停止工作,I/O模塊等被懸掛起來(lái),片內(nèi)RAM中存儲(chǔ)的數(shù)據(jù)將被保持,CPU的功耗可以降低到nA級(jí),由喚醒事件喚醒。當(dāng)CPU被喚醒后,系統(tǒng)不會(huì)被CPU復(fù)位,繼續(xù)從進(jìn)入Suspend模式的地方開(kāi)始執(zhí)行程序。這是一種非常理想的低功耗模式。

            在硬件層面來(lái)說(shuō),對(duì)上面的這些參數(shù)進(jìn)行仔細(xì)衡量是十分必要的,除此之外,選擇合適的時(shí)鐘方案和使用每MIPS功耗來(lái)衡量的低功耗性能也是非常關(guān)鍵的。

            應(yīng)用軟件考慮因素

            應(yīng)用軟件設(shè)計(jì)對(duì)于一個(gè)低功耗系統(tǒng)的重要性常常被人們忽略。一個(gè)重要的原因是,軟件設(shè)計(jì)上的缺陷并不像硬件那樣容易發(fā)現(xiàn),同時(shí)也沒(méi)有一個(gè)嚴(yán)格的標(biāo)準(zhǔn)來(lái)判斷一個(gè)軟件的低功耗特性。但是設(shè)計(jì)者如果能盡量將應(yīng)用的低功耗特性反映在軟件中,就可以避免那些“看不見(jiàn)”的功耗損失:

            用“中斷”代替“查詢”

            在沒(méi)有要求低功耗的場(chǎng)合,程序使用中斷方式還是查詢方式并不重要。但在要求低功耗場(chǎng)合,這兩種方式相差甚遠(yuǎn)。使用中斷方式,CPU可以什么都不做,甚至可以進(jìn)入等待模式或停止模式;而查詢方式下,CPU必須不停地訪問(wèn)I/O寄存器,這會(huì)帶來(lái)很多額外的功耗。

            用“宏”代替“子程序”

            子程序調(diào)用的入棧出棧操作,要對(duì)RAM進(jìn)行兩次操作,會(huì)帶來(lái)更大的功耗。宏在編譯時(shí)展開(kāi),CPU按順序執(zhí)行指令。使用宏,會(huì)增加程序的代碼量,但對(duì)不在乎程序代碼量大的應(yīng)用,使用宏無(wú)疑會(huì)降低系統(tǒng)的功耗。

            盡量減少CPU的運(yùn)算量

            減少CPU的運(yùn)算工作量,可以有效地降低CPU的功耗。減少CPU運(yùn)算的工作可以從很多方面入手:用查表的方法替代實(shí)時(shí)的計(jì)算;不可避免的實(shí)時(shí)計(jì)算,算到精度夠了就結(jié)束,避免“過(guò)度”的計(jì)算;盡量使用短的數(shù)據(jù)類型,例如,盡量使用字符型的8位數(shù)據(jù)替代16位的整型數(shù)據(jù),盡量使用分?jǐn)?shù)運(yùn)算而避免浮點(diǎn)數(shù)運(yùn)算等。

            讓I/O模塊間歇運(yùn)行

            在系統(tǒng)運(yùn)行過(guò)程中,不用的I/O模塊要關(guān)掉,間歇使用的I/O模塊要及時(shí)關(guān)掉,以節(jié)省電能。同時(shí),不用的I/O引腳要設(shè)置成輸出或設(shè)置成輸入,用上拉電阻拉高。

            總之,在單片機(jī)系統(tǒng)設(shè)計(jì)過(guò)程中,需要深入理解單片機(jī)低功耗的特性,并在硬件和應(yīng)用軟件的設(shè)計(jì)過(guò)程中充分利用單片機(jī)的低功耗特性,從而設(shè)計(jì)出符合低功耗要求的產(chǎn)品。

          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理


          晶體管相關(guān)文章:晶體管工作原理


          晶體管相關(guān)文章:晶體管原理
          上拉電阻相關(guān)文章:上拉電阻原理


          關(guān)鍵詞: MCU 低功耗

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();