吳清榮,丁躍軍
(河南工業(yè)技師學(xué)院, 鄭州 450007)
目前,電子產(chǎn)品的日趨小型化和智能化,對(duì)單片機(jī)的低功耗應(yīng)用提出了更高的要求,尤其是便攜式產(chǎn)品、野外檢測(cè)儀器儀表、海河航標(biāo)燈和玩具產(chǎn)品,對(duì)低功耗的要求更為突出。設(shè)計(jì)一個(gè)性能良好的低功耗產(chǎn)品,需要從硬件設(shè)計(jì)、軟件設(shè)計(jì)等多方面綜合考慮,是一項(xiàng)較為復(fù)雜的系統(tǒng)工作,本文闡述了低功耗設(shè)計(jì)的幾種具體措施。
PIC系列單片機(jī)雖然功耗都很低,但不同的模塊電能消耗仍然不同,既便是在同一個(gè)系列里,選擇的芯片型號(hào)不同,它們的電能消耗量也不同! 選型時(shí),要注意資料中詳細(xì)的參數(shù)說(shuō)明,一般型號(hào)后綴為L(zhǎng)C的芯片能耗比后綴為C的能耗要小,目前,Microahip公司最新推出了18個(gè)引腳的低功耗芯片,如PIC18F1220、PIC18F1320和nW級(jí)的芯片如PIC16F627A等,可以根據(jù)產(chǎn)品的實(shí)際需求,合理地來(lái)選擇芯片的型號(hào)。
一般單片機(jī)睡眠模式下運(yùn)行要比正常模式下運(yùn)行耗電小得多,所以如果其它條件允許,應(yīng)盡量讓芯片處于睡眠狀態(tài);單片機(jī)在低電壓下工作時(shí)比較省電,在選用單片機(jī)時(shí)盡可能選擇較低的工作電壓;另外,單片機(jī)MCU的電流和振蕩頻率成正比,所以,在速度允許的情況下,應(yīng)盡可能選擇振蕩頻率比較低的芯片。
晶體振蕩器、諧振器和RC振蕩器,有著不同的喚醒時(shí)間。一般來(lái)說(shuō),晶體振蕩器的喚醒時(shí)間最長(zhǎng)為8.5mS左右,諧振器的喚醒時(shí)間約為390μS,而RC振蕩器的喚醒時(shí)間最短,約為1.15μS左右。單片機(jī)在工作時(shí),如果喚醒時(shí)間過(guò)長(zhǎng),在喚醒過(guò)程中存在一個(gè)預(yù)工作階段,此時(shí)處理器已經(jīng)開(kāi)始消耗電能,但是還沒(méi)有運(yùn)行程序,這就會(huì)帶來(lái)更多的電能消耗。如果所設(shè)計(jì)的產(chǎn)品,喚醒后的工作時(shí)間很短,一般應(yīng)采用RC振蕩器較為合理。
晶體振蕩器、諧振器和RC振蕩器,有著不同的電耗,即使在相同頻率下,它們的電耗也不同。一般說(shuō)來(lái),晶體振蕩器的工作電耗最小,RC振蕩的工作電耗最大。三者比較結(jié)果如表1所示。
表1 晶體振蕩器、諧振器和RC振蕩器的比較
在不能長(zhǎng)期工作在休眠狀態(tài)的場(chǎng)合,如計(jì)時(shí)時(shí)鐘,一般應(yīng)采用晶體振蕩器以獲得節(jié)能效果。為了節(jié)能我們有時(shí)候還在晶體振蕩器的回路中串上一個(gè)小電阻RS,如圖1所示,這是因?yàn)榫w的驅(qū)動(dòng)功率為: P= U2/Re,U:芯片向晶體提供的電壓;Re:晶體的等效電阻;在晶體振蕩器回路中串上一個(gè)小電阻RS后,加大晶體的等效電阻。這樣,不僅可以減少在晶體上的功率消耗、還可以防止晶體過(guò)驅(qū)動(dòng)、穩(wěn)定晶體的振蕩頻率以及延長(zhǎng)晶體壽命。RS的取值范圍是0~10KΩ,主要基于Timer1振蕩器,所有內(nèi)建Timer1芯片都可以用外部晶體來(lái)實(shí)現(xiàn)RTC。如:PIC16F72、PIC16F73、PIC16F877、PIC18F452和PIC18F85等。
圖1 晶體振蕩器
I/O 管腳的處理,在低功耗系統(tǒng)里非常重要。設(shè)置為輸出的管腳可以驅(qū)動(dòng)20~25mA電流。所以檢查你的設(shè)計(jì),優(yōu)化每個(gè)輸出管腳上的電流消耗是非常重要的,即使是弱上拉的管腳,依然可以輸出 400uA電流,為達(dá)到節(jié)能目的,可以禁止內(nèi)部上拉,使用外部較大的電阻做上拉。必要時(shí)還可以用一個(gè)I/O口來(lái)控制外部上拉,以便在不需要檢測(cè)輸入時(shí)或在休眠狀態(tài)下進(jìn)一步節(jié)能。如圖二中的輸入口I1、I2和I3的外部電路。I/O口管腳可以吸收1uA電流,而MCLR,RA4/T0CKI和OSC1可能吸收5uA電流。在干擾的環(huán)境下,讓I/O管腳懸空(輸入、高阻),可能因內(nèi)部鎖存器頻繁翻轉(zhuǎn),極大地增加電流消耗,所以對(duì)于沒(méi)有用的管腳,都設(shè)置為輸出(高或者低均可)。
在需要實(shí)時(shí)時(shí)鐘的場(chǎng)合,在Timer1上接入一個(gè)32.768kHz 晶振,就可以實(shí)現(xiàn)成本低和電耗低。Timer1可以在不用外部時(shí)鐘芯片、允許芯片進(jìn)入睡眠模式下,繼續(xù)走時(shí)鐘(時(shí)間/日期)。
執(zhí)行一條SLEEP指令后,便進(jìn)入了休眠(SLEEP)方式。在這種方式中,為了使耗電量降至最低,把所有I/O引腳接至VDD或VSS,以確保沒(méi)有外部電路從I/O引腳上引出電流,關(guān)閉A/D轉(zhuǎn)換,禁止使用外部時(shí)鐘,引腳必須處于一個(gè)邏輯高電平狀態(tài)。
單片機(jī)從耗電的角度出發(fā)常常會(huì)進(jìn)入休眠狀態(tài),但由于某個(gè)特殊的原因,又會(huì)及時(shí)從休眠狀態(tài)中喚醒。
1)如果芯片出現(xiàn)以下事件,單片機(jī)便可以從休眠狀態(tài)進(jìn)入喚醒狀態(tài):
(1)將外部的復(fù)位信號(hào)輸入到引腳 ;
(2)監(jiān)視定時(shí)器激活(如果WDT使能);
(3)來(lái)自引腳INT的中斷,RB端口的電平變位,或者其他一些外圍設(shè)備中斷。
當(dāng)休眠狀態(tài)被喚醒,設(shè)置成電源開(kāi)啟標(biāo)志位被清零。如果WDT發(fā)生了定時(shí)時(shí)間到而引起喚醒狀態(tài), 位被清零。
2)如果以下外圍設(shè)備出現(xiàn)中斷請(qǐng)求,也可使單片機(jī)從休眠狀態(tài)中喚醒:
(1)并行從動(dòng)端口讀/寫(xiě)操作;
(2)在異步計(jì)數(shù)方式下,定時(shí)器TMR1中斷;
(3)CCP捕捉方式中斷;
(4)特殊事件觸發(fā)在異步方式下,定時(shí)器1采用外部時(shí)鐘;
(5)SSP(起始/停止)位探測(cè)中斷;
(6)在從動(dòng)方式下,SSP發(fā)送或接收中斷(SPI/I2C);
(7)USAR的RX/TX(同步從動(dòng)方式);
(8)當(dāng)A/D時(shí)鐘源為RC時(shí),A/D轉(zhuǎn)換中斷;(9)EEPROM寫(xiě)入操作完成。
當(dāng)執(zhí)行SLEEP指令時(shí),下一個(gè)指令(PC+1)被預(yù)先取出。為了使器件能通過(guò)某一中斷事件而激活,與之對(duì)應(yīng)的中斷允許位必須被置位。喚醒狀態(tài)與GIE位的狀態(tài)無(wú)關(guān),如果GIE位被清零,器件將繼續(xù)執(zhí)行SLEEP指令后面的指令;如果GIE位被置位,器件將執(zhí)行SLEEP指令后面的指令,然后轉(zhuǎn)移到中斷地址(0004H)。若用戶不希望執(zhí)行SLEEP指令后面的指令,那么在SLEEP指令后面必須要有一個(gè)NOP指令。
設(shè)計(jì)一個(gè)低功耗系統(tǒng)產(chǎn)品,是一個(gè)綜合規(guī)劃的內(nèi)容,需要考慮的因素很多。如圖2所示,給出了一個(gè)具體硬件實(shí)施方案:
單片機(jī)的系統(tǒng)時(shí)鐘采用外接R1、C1阻容振蕩方式提供。既可以節(jié)省成本,又可以快速啟動(dòng)單片機(jī),減少喚醒時(shí)的能耗。
日期、小時(shí)、分鐘、秒的計(jì)時(shí)采用定時(shí)器/計(jì)數(shù)器TMR1完成。TMR1是具有獨(dú)立的低功耗、低頻率振蕩器,既便是在單片機(jī)處于睡眠狀態(tài),TMR1依然可以精確計(jì)時(shí)并能在計(jì)時(shí)溢出時(shí)產(chǎn)生中斷請(qǐng)求,喚醒單片機(jī)。石英晶體XTL采用32768Hz的低頻晶體,在晶體回路中串有電阻R5,以便進(jìn)一步降低能耗。
圖2 低功耗硬件設(shè)計(jì)方案
芯片采用5V電源供電,掉電保持電源BT1采用2.4V的鋰電池。BT1接在一個(gè)模擬I/O口上,R6為充電限流電阻。單片機(jī)可以通過(guò)該電阻以脈沖方式對(duì)電池充電,而停止充電時(shí),可以通過(guò)該口以模擬輸入方式,檢測(cè)電源電壓并調(diào)整充電脈沖的寬度,即通過(guò)軟件實(shí)現(xiàn)智能PWM充電。在外部電源掉電時(shí),電池BT1可以經(jīng)電阻R6和I/O口輸入端保護(hù)二極管D向單片機(jī)供電。由于這時(shí)的供電電流僅為微安級(jí),因此電阻R6上的壓降可以忽略不計(jì),D1的作用是防止電池BT1向其它芯片或電路放電。如果掉電時(shí)間不是很長(zhǎng)的話,可用漏電較小的膽電容代替電池;如果掉電時(shí)間較長(zhǎng)的話,可用CSC-4法拉級(jí)大電容代替電池,持續(xù)時(shí)間可以從幾分鐘到幾天。
輸入口I1、I2、I3均接有120KΩ的上拉電阻R2、R3、R4,但該上拉電阻不是接到電源正極,而是接到輸出端口O1上。單片機(jī)處于工作狀態(tài)時(shí),O1口輸出高電平;單片機(jī)進(jìn)入睡眠狀態(tài)時(shí),將O1口置成低電平或高阻狀態(tài)。注意,在這里一定要把內(nèi)部上拉屏蔽掉。
輸出口O2接有一只二極管D2。二極管D2的作用是防止在系統(tǒng)掉電后高電平輸出時(shí),消耗較多的維持電能。當(dāng)O2口輸出低電平時(shí),二極管D2導(dǎo)通,三極管基極被嵌位而截止;當(dāng)O2口輸出高電平時(shí),二極管D2截止,電源經(jīng)R7向三極管提供基極偏流,三極管飽和導(dǎo)通,繼電器線圈得電,常開(kāi)觸點(diǎn)閉合。
總之,PIC單片機(jī)工作時(shí)要最大限度地降低功耗,就要根據(jù)具體的應(yīng)用場(chǎng)合,從硬件設(shè)計(jì)和軟件設(shè)計(jì)上綜合考慮,并采用相應(yīng)的措施,以達(dá)到降低功耗之目的。
[1] 劉啟中,李榮正.PIC單片機(jī)原理及應(yīng)用[M].北京:航空航天大學(xué)出版社,2003.
[2] 丁躍軍,來(lái)清民.PIC單片機(jī)基礎(chǔ)教程[M].北京:航空航天大學(xué)出版社,2005.
[3] 張明峰.PIC單片機(jī)入門(mén)與實(shí)戰(zhàn)[M].北京:航空航天大學(xué)出版社,2004.
[4] 李建忠.單片機(jī)原理及應(yīng)用[M].西安:電子科技大學(xué)出版社,2006.