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