現(xiàn)在,有許多單片機(jī)應(yīng)用領(lǐng)域,,都是用電池供電,,節(jié)能成為設(shè)計(jì)工程師普遍關(guān)心的問(wèn)題。希望大家就這方面展開(kāi)討論,。以下提供一些討論的方向:
1,、如何降低系統(tǒng)功耗?(軟件,?硬件,?)
2、各位在這方面有何經(jīng)驗(yàn)教訓(xùn),?(可以拿出來(lái)與大家分享)
3,、各種芯片的功耗比較?
4,、SLEEP模式應(yīng)用的注意事項(xiàng),?
5、一些新型的節(jié)能器件的介紹,?
6,、其它與低功耗設(shè)計(jì)相關(guān)的話題?
進(jìn)入掉電模式
現(xiàn)在有很多的低功耗的片子,,特別是在進(jìn)入掉電模式之后,,只有1uA的電流。也可以使用電源管理的方法,,在不工作的時(shí)候,,把系統(tǒng)電源關(guān)斷,這樣更省電我用了很久51芯片,,本來(lái)對(duì)它的功耗非常不滿,,但是因?yàn)槠鋬r(jià)格越來(lái)越便宜,本身的性價(jià)比依舊很好,,所以總也甩不掉,。
1、休眠,。一般的系統(tǒng)都不會(huì)到了忙不過(guò)來(lái)的地步,,適當(dāng)?shù)男菝哌€是可以節(jié)省一些功耗的,在一些簡(jiǎn)單的系統(tǒng),,多抽時(shí)間休眠成了省電的關(guān)鍵,,你看別的芯片都不耗電,只有單片機(jī)了,,它就是關(guān)鍵了,,在有些時(shí)候,提高主頻反而會(huì)獲取更多的休眠時(shí)間,反而使系統(tǒng)功耗更小了,。但是值得注意的是,,經(jīng)常性的切換休眠和工作狀態(tài)會(huì)讓電源產(chǎn)生mV級(jí)的波動(dòng),特別對(duì)于很多線性穩(wěn)壓器只有100mA以內(nèi)的輸出能力的情況更明顯,,這樣的波動(dòng)或許會(huì)影響系統(tǒng)內(nèi)的AD和一些其他模擬電路,,值得注意。
2,、掉電,。如果進(jìn)入了掉電模式,很多51芯片是無(wú)法通過(guò)中斷重新開(kāi)始工作的,,可以外加一個(gè)微功耗的單片機(jī)來(lái)提供復(fù)位,,這個(gè)單片機(jī)只負(fù)責(zé)鍵盤(pán)掃描和復(fù)位51單片機(jī),以及發(fā)送鍵盤(pán)編碼到51芯片,。我以前見(jiàn)過(guò)一個(gè)手持設(shè)備,,耗電很小,但是包括了大容量存儲(chǔ),、顯示,、輸入、數(shù)據(jù)輸出,、檢索等功能,,平時(shí)89C51總是處于掉電狀態(tài),但是有了鍵盤(pán)操作后,,就復(fù)位開(kāi)始運(yùn)行,,處理完鍵盤(pán)送來(lái)的任務(wù)之后又自動(dòng)掉電了。
3,、復(fù)雜運(yùn)算,。復(fù)雜運(yùn)算(譬如指數(shù)運(yùn)算、浮點(diǎn)乘除)一定會(huì)占據(jù)更多系統(tǒng)時(shí)序,,響應(yīng)減少休眠時(shí)間,,可以通過(guò)查表方式,這樣用大容量的表格代替了現(xiàn)場(chǎng)計(jì)算,,更多的時(shí)間不就可以睡覺(jué)了嗎,?
4、如果軟件任務(wù)少到一定程度,,那么可以考慮把晶體搞到32k去運(yùn)行,,其實(shí)這樣更省電,但是這意味著51軟件基本沒(méi)什么高速的事情做,,也不需要串行通信,,否則,,還是老老實(shí)實(shí)面對(duì)現(xiàn)實(shí)吧。
我覺(jué)得,,51芯片用于電池供電的系統(tǒng)不是很合適,,但是從開(kāi)發(fā)周期看,它的開(kāi)發(fā)環(huán)境很好,,畢竟可以承載8位機(jī)的相對(duì)大型的應(yīng)用,有時(shí)候又不得不用它,。我覺(jué)得距離51最靠近的AVR單片機(jī)更適合將來(lái)的應(yīng)用,,因?yàn)槠湫阅軆r(jià)格比相對(duì)其他單片機(jī)還是不錯(cuò)的,除非51芯片可以將來(lái)做到在3MIP下,,工作電流小于2mA,,休眠電流小于500uA,掉電電流小于10uA,。在很多的設(shè)計(jì)中,,采用線性降壓的方法,電源損耗大,,如提高供電電壓,,并用高效率的DC-DC電源,可延長(zhǎng)電源使用的時(shí)間89C8252掉電工作,,看門(mén)狗做“系統(tǒng)運(yùn)行時(shí)鐘”同時(shí)把看門(mén)狗復(fù)位“軟件模擬成看門(mén)狗中斷”“狗”叫一次跳起來(lái)看看,,“RAM值班室登個(gè)記”,同時(shí)還登記下當(dāng)前PC+1的值,,然后“睡死”過(guò)去,!
平均功耗不大于5V/0。3MA,,而且有很強(qiáng)的抗干擾性,!
軟件優(yōu)化很重要!
如64MS一次“狗”叫,!起來(lái)做40條指令,,24MHZ下最多:40*0.5=20US
于是占空比:20/64000=1/3200 即平均電流下降3200倍!??!
外設(shè)會(huì)受復(fù)位改變嗎?當(dāng)然,!但鎖存器干什么?。?!
如何知道程序能運(yùn)行多久,?下一條運(yùn)行指令運(yùn)行到那,?
如果任何時(shí)刻,你自己編的程序運(yùn)行在那個(gè)片區(qū),,你都不知道,,那還叫什么搞軟硬件的要天人合一啊,?,!
系統(tǒng)任務(wù)不忙的情況下,你的看門(mén)狗定時(shí)復(fù)位方法還可以,,但是,。。,。好多情況下似乎做不到呀,。我的51系統(tǒng)只有200微安省電是個(gè)大難題,特別是51,,但只有用心還是可以做到的,,特別是工作任務(wù)少的時(shí)候。我的一個(gè)水文遙測(cè)系統(tǒng),,用12伏電池供電耗電只有200微安,,有8Mbit data flash,一個(gè)調(diào)制解調(diào)器,,一個(gè)時(shí)鐘,,一個(gè)485通信口,一個(gè)232通信口,,還有6個(gè)數(shù)碼管,,是不是夠多的了,但它們平時(shí)都不工作,,我也是用看門(mén)狗復(fù)位來(lái)喚醒51單片機(jī)的,,每1.6秒一次,用的是x25045,,可是25045的復(fù)位時(shí)間有200毫秒之多,,實(shí)驗(yàn)發(fā)現(xiàn),51從掉電返回到正常工作只要有30個(gè)毫秒足了,,別小看節(jié)省的這一百多毫秒,,因?yàn)?1在每次醒來(lái)是只要發(fā)現(xiàn)沒(méi)有任務(wù)就可以馬上POWERDOWN了,所以加了一個(gè)CMOS的單穩(wěn)來(lái)復(fù)位,。其它的就是口線的狀態(tài)一定要注意,,不要讓它吸收電流也不要輸出電流,要是做不到可以試著加一此電路,,如反相器.
穩(wěn)壓電源是個(gè)要權(quán)衡的事,,雖然開(kāi)關(guān)穩(wěn)壓有較高的效率,,但在低功耗設(shè)計(jì)不一定對(duì),開(kāi)關(guān)電源本身消耗的電流就是一個(gè)大問(wèn)題,,一個(gè)微安級(jí)的系統(tǒng)也許要特別對(duì)待,,我用的是max667線性穩(wěn)壓數(shù)微安靜態(tài)電流.我想開(kāi)關(guān)電源做不到對(duì)于外部事務(wù)頻繁的應(yīng)用,無(wú)法使用掉電方式雖然很多51芯片支持外中斷觸發(fā)芯片脫離POWER DOWN狀態(tài)(如華邦的W78E58,、W77E58),,但還是解決不了串行通信的問(wèn)題,而且對(duì)于需要內(nèi)部精確定時(shí)的場(chǎng)合,,從POWER DOWN到正常工作需要很長(zhǎng)時(shí)間,,這個(gè)恐怕還是難于讓人接受。莫非沒(méi)有一個(gè)廠家可以產(chǎn)出高速小功耗的51芯片,?沒(méi)到理呀,PHILIPS不是玩了很久嗎,?怎么弄出的芯片在12MHz下還是大于10mA,,休眠也有幾個(gè)mA,這也吹牛沒(méi)下功夫嘛,!
用51做低功耗,,太累了低功耗多得是,象PIC,、EMC輕松做到20uA以下,,51有POWER DOWN,但只能復(fù)位喚醒,,有少數(shù)可用INT喚醒,,太麻煩。有些有雙晶體的單片機(jī),,做低功耗最簡(jiǎn)單,,平時(shí)用32768工作也只有20uA,這種單片機(jī)一般帶有LCD,。EMC內(nèi)有PLL單片機(jī)做功耗系統(tǒng)很方便,,象78565,567,,功能強(qiáng)價(jià)格低samgsung的單片機(jī)可以做到565匠人也用過(guò),。平時(shí)進(jìn)IDLE模式,功耗只有幾個(gè)UA分級(jí)供電和外部喚醒確是一種可行的辦法 在分級(jí)供電中要注意的是如果電源是小電流的穩(wěn)壓器件最好有一個(gè)比較大的蓄電電路,,要不然單片機(jī)喚醒和上電時(shí)可能會(huì)起動(dòng)不了,,而且可能會(huì)進(jìn)入一個(gè)不希望的振蕩期,比如單片機(jī)要起振,,電流增大,,這時(shí)電源供不起,,電壓就下降,引起的是單片機(jī)又停振電壓又回升,!所以一個(gè)合理的電源管理電路就顯得很關(guān)鍵,,這方面的專業(yè)IC將是未來(lái)一個(gè)很有前途的產(chǎn)業(yè)!這個(gè)IC應(yīng)有一個(gè)內(nèi)部低速的定時(shí)器和一個(gè)專門(mén)的蓄電管理電路,,當(dāng)電路進(jìn)入低功耗后應(yīng)該將蓄電電路沖滿以備喚醒和大功耗時(shí)用,,這種電路主要用于小電流供電的環(huán)境,它可以為小電流供電環(huán)境提供一個(gè)短時(shí)間的大電流工作,。 另外單片機(jī)的耗電除了核本身的耗電外,,大多是IO口的耗電,大家可以通過(guò)降低主頻,,將IO口置在比較合適的狀態(tài)來(lái)達(dá)到一個(gè)比較省心又省力的方式,。而且不全理的頻繁喚醒有時(shí)會(huì)帶來(lái)更多的電耗!
用TI的單片機(jī)MSP430系列非常省電,。正常工作時(shí)幾百微安,,掉電時(shí)約1微安87LPC76X低功耗51,32k時(shí)20uA使用雙振的單片機(jī),,在系統(tǒng)不忙的時(shí)候使用32768的晶振,,同時(shí)進(jìn)入SLEEP這樣處理通常耗電都在幾個(gè)uA.在處理SLEEP喚醒后的程序需要小心處理,特別是臺(tái)灣的單片機(jī),,有時(shí)廠家給出的資料都要小心,,我碰到過(guò)。我不知道您是用的哪家的51單片機(jī),,功耗能做到這么低,。據(jù)我所知ATMEL89C52 Powerdown mode下最少是40微安。您的系統(tǒng)中有這么多的器件,,即使都是低功耗可關(guān)斷的器件,,那你的系統(tǒng)每次工作時(shí)都要啟動(dòng)所有的器件才能運(yùn)轉(zhuǎn)起來(lái),這個(gè)啟動(dòng)過(guò)程是多長(zhǎng)呢,?還有您的單片機(jī)不會(huì)工作在12V的,,你還需要一個(gè)電壓變換器,它平時(shí)不用電的嗎,?你的CMOS單穩(wěn)不用電的嗎,?據(jù)我所知常用的485,232,,modem,,flash都不是低功耗可關(guān)斷的,如果您都使用的是特殊器件,那實(shí)用的意義何在呢,?或者您使用了其他器件來(lái)控制這些耗電多的設(shè)備,,那您一定是硬件高手了??煞裰更c(diǎn)一二,?
高速51: C8051FXXX在1M指令流下,VDD僅僅1.5mA用IO口控制RC振蕩頻率,?
用RC振蕩方式,,并將IOSI口接一個(gè)電阻到IO口上。通過(guò)切換IO口的電平來(lái)切換頻率,,方法如下:
功耗,,在電池供電的儀器儀表中是一個(gè)重要的考慮因素。PIC16C××系列單片機(jī)本身的功耗較低(在5V,,4MHz振蕩頻率時(shí)工作電流小于2mA),。為進(jìn)一步降低功耗,在保證滿足工作要求的前提下,,可采用降低工作頻率的方法,,工作頻率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,,其電流可減小到15μA),但較低的工作頻率可能導(dǎo)致部分子程序(如數(shù)學(xué)計(jì)算)需占用較多的時(shí)間,。在這種情況下,,當(dāng)單片機(jī)的振蕩方式采用RC電路形式時(shí),可以采用中途提高工作頻率的辦法來(lái)解決,。體做法是在閑置的一個(gè)I/O腳(如RB1)和OSC1管腳之間跨接一電阻(R1),,如圖1所示。低速狀態(tài)置RB1=0,。需進(jìn)行快速運(yùn)算時(shí)先置RB1=1,,由于充電時(shí),電容電壓上升得快,,工作頻率增高,,運(yùn)算時(shí)間減少,運(yùn)算結(jié)束又置RB1=0,,進(jìn)入低速,、低功耗狀態(tài)。工作頻率的變化量依R1的阻值而定(注意R1不能選得太小,,以防振蕩電路不起振,,一般選取大于5kΩ)。
改用C8051Fxxx,,20MHz 僅僅10mA,,若降到1MHz,,可以做到1~2mA;
或是干脆采用MSP430,一般<1mA,,稍稍采取措施,,馬上可以接近零功耗!
大家不要以為更換CPU是很難的事情,,我們僅僅用2周就更換成功CPU先天不足,,51低功耗沒(méi)前途的msp430,m16等有很多低功耗單片機(jī),,功能強(qiáng),,又是精簡(jiǎn)指令,全天uA級(jí)工作成本也是關(guān)鍵,,不一定非要低功耗器件,。我覺(jué)得要很好的利用單片機(jī)的中斷和休眠功能,單片機(jī)盡可能的處于休眠等待狀態(tài),,同時(shí)注意空閑IO口的狀態(tài),,輸出的最好置低,輸入的要視外圍電路而定,,不用的腳要處理好,,不是簡(jiǎn)單不接就可以的
另外,外圍電路可以做分區(qū)域的電源開(kāi)關(guān),,不用時(shí),,關(guān)閉電源,并將與其相連的單片機(jī)的IO口置低,,減少信號(hào)線饋電,。不知說(shuō)的對(duì)不對(duì)。
剛開(kāi)始做電池產(chǎn)品時(shí),,只有8031 ,,考慮用PSEN什么的控制外部RAM,休眠方式,,但是還是在十毫安級(jí),。 現(xiàn)在好了,有許多型號(hào)單片機(jī)本身就是低功耗,,為了減少體積,,還要追求更低。
1.系統(tǒng)設(shè)計(jì),,好的系統(tǒng)設(shè)計(jì)是降低功耗的關(guān)鍵,。 減少外圍器件,降低晶體頻率??梢圆捎脦cd,,ad,實(shí)時(shí)時(shí)鐘功能的單片機(jī),,即降低成本,,又減少了故障率,可謂一舉兩得.HOLTEL,,PHILIPS,,PIC 都有此類單片機(jī)。 低的主頻也可以降低功耗,,如ZILOG的單片機(jī)可以程序控制對(duì)主頻的分頻,,在不忙時(shí)把頻率降低,需要時(shí)在提高,。 HOLTEK的可以采用雙頻率工作,,高主頻可以關(guān)閉,32768可以提供內(nèi)部精確計(jì)時(shí),,還可以激活休眠的單片機(jī)工作,。
2.降低系統(tǒng)電壓,可以降低功耗,。
3.合理處理不用的IO口,,最好設(shè)為輸入態(tài)。對(duì)外圍電路也要考慮,,如光耦,,盡量使其導(dǎo)通態(tài)<斷開(kāi)態(tài)。驅(qū)動(dòng)三極管的狀態(tài),。還有就是上拉,下拉電阻值,,太小也會(huì)造成漏電,。
Mega8的一個(gè)特點(diǎn)是帶有內(nèi)部的RC振蕩器,別小看他,,他與晶振的不同之處在于他的起振時(shí)間很短,,只要幾u(yù)S,而晶振一般要幾十mS,,所以低功耗設(shè)計(jì)時(shí)一定要用,,430的宣傳不是也講起動(dòng)時(shí)間6uS嗎,那一樣是指的RC振蕩開(kāi)始工作的時(shí)間,。我得設(shè)計(jì)靜態(tài)電流50uA,,實(shí)際只是LCD模塊的電流,單片機(jī)平時(shí)處在掉電的狀態(tài)。每隔1S倍液晶模塊喚醒一次,,作一次顯示的刷新工作,,耗時(shí)約4mS,正常工作時(shí)如果有脈沖來(lái)的話,,就作一些運(yùn)算,,脈沖頻率50Hz,每次運(yùn)算不過(guò)200uS,,這樣下來(lái),,正極的功耗大大降低,加上一些外圍電路,,平均在100uA以下,。
低功耗設(shè)計(jì)
現(xiàn)象一:我們這系統(tǒng)是220V供電,就不用在乎功耗問(wèn)題了
點(diǎn)評(píng):低功耗設(shè)計(jì)并不僅僅是為了省電,,更多的好處在于降低了電源模塊及散熱系統(tǒng)的成本,、由于電流的減小也減少了電磁輻射和熱噪聲的干擾。隨著設(shè)備溫度的降低,,器件壽命則相應(yīng)延長(zhǎng)(半導(dǎo)體器件的工作溫度每提高10度,,壽命則縮短一半)
現(xiàn)象二:這些總線信號(hào)都用電阻拉一下,感覺(jué)放心些
點(diǎn)評(píng):信號(hào)需要上下拉的原因很多,,但也不是個(gè)個(gè)都要拉,。上下拉電阻拉一個(gè)單純的輸入信號(hào),電流也就幾十微安以下,,但拉一個(gè)被驅(qū)動(dòng)了的信號(hào),,其電流將達(dá)毫安級(jí),現(xiàn)在的系統(tǒng)常常是地址數(shù)據(jù)各32位,,可能還有244/245隔離后的總線及其它信號(hào),,都上拉的話,幾瓦的功耗就耗在這些電阻上了(不要用8毛錢(qián)一度電的觀念來(lái)對(duì)待這幾瓦的功耗),。
現(xiàn)象三:CPU和FPGA的這些不用的I/O口怎么處理呢,?先讓它空著吧,以后再說(shuō)
點(diǎn)評(píng):不用的I/O口如果懸空的話,,受外界的一點(diǎn)點(diǎn)干擾就可能成為反復(fù)振蕩的輸入信號(hào)了,,而MOS器件的功耗基本取決于門(mén)電路的翻轉(zhuǎn)次數(shù)。如果把它上拉的話,,每個(gè)引腳也會(huì)有微安級(jí)的電流,,所以最好的辦法是設(shè)成輸出(當(dāng)然外面不能接其它有驅(qū)動(dòng)的信號(hào))
現(xiàn)象四:這款FPGA還剩這么多門(mén)用不完,可盡情發(fā)揮吧
點(diǎn)評(píng):FGPA的功耗與被使用的觸發(fā)器數(shù)量及其翻轉(zhuǎn)次數(shù)成正比,,所以同一型號(hào)的FPGA在不同電路不同時(shí)刻的功耗可能相差100倍,。盡量減少高速翻轉(zhuǎn)的觸發(fā)器數(shù)量是降低FPGA功耗的根本方法,。
現(xiàn)象五:這些小芯片的功耗都很低,不用考慮
點(diǎn)評(píng):對(duì)于內(nèi)部不太復(fù)雜的芯片功耗是很難確定的,,它主要由引腳上的電流確定,,一個(gè)ABT16244,沒(méi)有負(fù)載的話耗電大概不到1毫安,,但它的指標(biāo)是每個(gè)腳可驅(qū)動(dòng)60毫安的負(fù)載(如匹配幾十歐姆的電阻),,即滿負(fù)荷的功耗最大可達(dá)60*16=960mA,當(dāng)然只是電源電流這么大,,熱量都落到負(fù)載身上了,。
現(xiàn)象六:存儲(chǔ)器有這么多控制信號(hào),我這塊板子只需要用OE和WE信號(hào)就可以了,,片選就接地吧,,這樣讀操作時(shí)數(shù)據(jù)出來(lái)得快多了。
點(diǎn)評(píng):大部分存儲(chǔ)器的功耗在片選有效時(shí)(不論OE和WE如何)將比片選無(wú)效時(shí)大100倍以上,,所以應(yīng)盡可能使用CS來(lái)控制芯片,,并且在滿足其它要求的情況下盡可能縮短片選脈沖的寬度。
現(xiàn)象七:這些信號(hào)怎么都有過(guò)沖???只要匹配得好,就可消除了
點(diǎn)評(píng):除了少數(shù)特定信號(hào)外(如100BASE-T,、CML),,都是有過(guò)沖的,只要不是很大,,并不一定都需要匹配,,即使匹配也并非要匹配得最好。象TTL的輸出阻抗不到50歐姆,,有的甚至20歐姆,,如果也用這么大的匹配電阻的話,那電流就非常大了,,功耗是無(wú)法接受的,,另外信號(hào)幅度也將小得不能用,再說(shuō)一般信號(hào)在輸出高電平和輸出低電平時(shí)的輸出阻抗并不相同,,也沒(méi)辦法做到完全匹配。所以對(duì)TTL,、LVDS,、422等信號(hào)的匹配只要做到過(guò)沖可以接受即可。
現(xiàn)象八:降低功耗都是硬件人員的事,,與軟件沒(méi)關(guān)系
點(diǎn)評(píng):硬件只是搭個(gè)舞臺(tái),,唱戲的卻是軟件,,總線上幾乎每一個(gè)芯片的訪問(wèn)、每一個(gè)信號(hào)的翻轉(zhuǎn)差不多都由軟件控制的,,如果軟件能減少外存的訪問(wèn)次數(shù)(多使用寄存器變量,、多使用內(nèi)部CACHE等)、及時(shí)響應(yīng)中斷(中斷往往是低電平有效并帶有上拉電阻)及其它爭(zhēng)對(duì)具體單板的特定措施都將對(duì)降低功耗作出很大的貢獻(xiàn),。