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

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 單片機(jī)應(yīng)用系統(tǒng)斷電時(shí)的數(shù)據(jù)保護(hù)方法

          單片機(jī)應(yīng)用系統(tǒng)斷電時(shí)的數(shù)據(jù)保護(hù)方法

          ——
          作者:平原大學(xué) 蘇明強(qiáng) 鄺濤 時(shí)間:2007-01-26 來(lái)源:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》 收藏

          在測(cè)量、控制等領(lǐng)域的應(yīng)用中,常要求單片機(jī)內(nèi)部和外部ram中的數(shù)據(jù)在電源掉電時(shí)不丟失,重新加電時(shí),ram中的數(shù)據(jù)能夠保存完好,這就要求對(duì)單片機(jī)系統(tǒng)加接掉電保護(hù)電路。掉電保護(hù)通??刹捎靡韵氯N方法:一是加接不間斷電源,讓整個(gè)系統(tǒng)在掉電時(shí)繼續(xù)工作,二是采用備份電源,掉電后保護(hù)系統(tǒng)中全部或部分?jǐn)?shù)據(jù)存儲(chǔ)單元的內(nèi)容;三是采用eeprom來(lái)保存數(shù)據(jù)。由于第一種方法體積大、成本高,對(duì)單片機(jī)系統(tǒng)來(lái)說(shuō),不宜采用。第二種方法是根據(jù)實(shí)際需要,掉電時(shí)保存一些必要的數(shù)據(jù),使系統(tǒng)在電源恢復(fù)后,能夠繼續(xù)執(zhí)行程序,因而經(jīng)濟(jì)實(shí)用,故大量采用[1]。eeprom既具有rom掉電不丟失數(shù)據(jù)的特點(diǎn),又有ram隨機(jī)讀寫(xiě)的特點(diǎn)。但由于其讀寫(xiě)速度與讀寫(xiě)次數(shù)的限制,使得eeprom不能完全代替ram。下面將介紹最常用的一些掉電保護(hù)的處理方法,希望能對(duì)相關(guān)設(shè)計(jì)人員在實(shí)際工作中有所幫助。

          1 簡(jiǎn)單的ram數(shù)據(jù)掉電保護(hù)電路

          在具有掉電保護(hù)功能的單片機(jī)系統(tǒng)中,一般采用cmos單片機(jī)和cmos ram。cmos型ram存儲(chǔ)器靜態(tài)電源小,在正常工作狀態(tài)下一般由電源向片外ram供電,而在斷電狀態(tài)下由小型蓄電池向片外ram供電,以保存有用數(shù)據(jù),采用這種方法保存數(shù)據(jù),時(shí)間一般在3-5個(gè)月[2]。然而,系統(tǒng)在上電及斷電過(guò)程中,總線狀態(tài)的不確定性往往導(dǎo)致ram內(nèi)某些數(shù)據(jù)的變化,即數(shù)據(jù)受到?jīng)_失。因此對(duì)于斷電保護(hù)數(shù)據(jù)用的ram存儲(chǔ)器,除了配置供電切換電路外,還要采取數(shù)據(jù)防沖失措施,當(dāng)電源突然斷電時(shí),電壓下降有個(gè)過(guò)程,cpu在此過(guò)程中會(huì)失控,可能會(huì)誤發(fā)出寫(xiě)信而沖失ram中的數(shù)據(jù),僅有電池是不能有效完成數(shù)據(jù)保護(hù)的,還需要對(duì)片選信號(hào)加以控制,保證整個(gè)切換過(guò)程中cs引腳的信號(hào)一直保持接近vcc。通常,采用在ram的cs和vcc引腳之間接一個(gè)電阻來(lái)實(shí)現(xiàn)coms ram的電源切換,然而,如果在掉電時(shí),譯碼器的輸出出現(xiàn)低電平,就可能出現(xiàn)問(wèn)題,圖1給出一種簡(jiǎn)單的電路設(shè)計(jì),它能夠避免上述問(wèn)題的產(chǎn)生。

          圖1中,4060開(kāi)關(guān)電路起到對(duì)cs控制的作用。當(dāng)電壓小于等于4.5v時(shí)就使開(kāi)關(guān)斷開(kāi),cs線上拉至"1",這樣,ram中的數(shù)據(jù)就不會(huì)沖失;當(dāng)電壓大于4.5v時(shí),4060開(kāi)關(guān)接通,使ram能正常進(jìn)行讀寫(xiě)。

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

          2 可靠的ram掉電保護(hù)電路

          上述的電路雖然簡(jiǎn)單,但有時(shí)可能起不到ram掉電保護(hù)的作用,原因是在電源掉電和重新加電的過(guò)程中,電源電壓躍變的干擾可能使ram瞬間處于讀寫(xiě)狀態(tài),使原來(lái)ram中的數(shù)據(jù)遭到破壞,因此,在掉電剛剛開(kāi)始以及重新加電直到電源電壓保持穩(wěn)定下來(lái)之前,ram應(yīng)處于數(shù)據(jù)保持狀態(tài),6264 ram、5101 ram等ram芯片上都有一個(gè)ce2引腳,在一般情況下需將此引腳拉高,當(dāng)把該引腳拉至小于或等于0.2v時(shí),ram就進(jìn)入數(shù)據(jù)保持狀態(tài)。

          實(shí)用的靜態(tài)ram掉電保護(hù)電路如圖2所示,圖2中u1、u2為電壓比較器,穩(wěn)壓管d3提供一個(gè)基準(zhǔn)電壓vr(vr=3.5v)。當(dāng)vcc為5v時(shí),在r4上得到的分壓大于vr,u2輸出高電平,又因?yàn)閡4輸出也為高電平,故ce2輸出為高電位,單片機(jī)此時(shí)可對(duì)ram進(jìn)行存取,當(dāng)電源掉電時(shí),vcc開(kāi)始下降,當(dāng)滿足如下條件時(shí):

          r4×vcc/[(r4+r3)/(r5+r6)]≥vr


          u2輸出低電平,通過(guò)u5和u6使ce2輸出小于等于0.2v,ram進(jìn)入數(shù)據(jù)保持狀態(tài)(按圖2中元件參數(shù)代入上式,當(dāng)vcc降到4.7v時(shí),u2輸出為低電位)。若vcc繼續(xù)下降使u3翻轉(zhuǎn),再通過(guò)d4、u4和u6進(jìn)一步保證ce2為低電平。此外,當(dāng)vcc下降到小于e時(shí),d2截止,d1導(dǎo)通,這時(shí)e作為ram的備份電源,當(dāng)單片機(jī)重新加電時(shí),vcc由0躍變到5v時(shí),u2的輸出端會(huì)出現(xiàn)瞬間的干擾脈沖,由于u3和u4間電路的積分延遲(約0.7rc),ce2并不立即升到高電平,因而阻止了u2的干擾脈沖,當(dāng)延時(shí)結(jié)束時(shí),電源電壓已穩(wěn)定在5v,此后ce2升高,單片機(jī)便可對(duì)ram進(jìn)行存取。圖2中u3和u6為一塊四施秘特與非門(mén)(cd4093),該電路直接由e供電,這樣才能保證掉電后使ce2≤0.2v,并在重新加電時(shí)ce2不受電源電壓躍變的干擾,比較器u1和u2為電源供電,vcc為后備電源u1的電壓監(jiān)視電路,當(dāng)后備電池快用完時(shí)(小于3.5v),發(fā)光管會(huì)發(fā)出亮光,表明要換上新電池,備份電源可用3節(jié)5號(hào)干電池,也可以采用鋰電池或鎳電池。

          3 利用tl7705對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行保護(hù)

          單片機(jī)構(gòu)成的應(yīng)用系統(tǒng)在突然斷電時(shí),往往使片內(nèi)ram數(shù)據(jù)遭到破壞,下面介紹一種利用tl7705構(gòu)成的電源監(jiān)控電路,使單片機(jī)系統(tǒng)在掉電時(shí)自動(dòng)保護(hù)現(xiàn)場(chǎng)數(shù)據(jù)。

          3.1 tl7705的工作原理

          tl7705是電源監(jiān)控用集成電路,采用8腳雙列直插式封裝,其內(nèi)部結(jié)構(gòu)圖3所示。圖3中,基準(zhǔn)電壓發(fā)生器具有較高的穩(wěn)定性,可由1腳輸出2.5v基準(zhǔn)電壓,為了吸收電源的同脈沖干擾,通常在1腳上接一個(gè)0.1μf的濾波電容來(lái)提高其抗干擾能力,被監(jiān)控的電源電壓由sense端7腳引入,經(jīng)過(guò)r1和r2分壓后送入比較器cmp1,與基準(zhǔn)電壓進(jìn)行比較,當(dāng)其值小于基準(zhǔn)電壓時(shí),t1導(dǎo)通,定時(shí)電容ct通過(guò)t1放電,使cmp2比較器翻轉(zhuǎn),t2和t3導(dǎo)通,輸出腳reset為高電平,seset反為低電平,當(dāng)送入cmp1比較器的電壓高于基準(zhǔn)電壓時(shí),t1截止100μa恒流源給ct充電,當(dāng)ct上的電壓高于2.5v時(shí),cmp2比較器翻轉(zhuǎn),t2和t3截止,reset和reset反輸出關(guān)斷。

          3.2 tl7705與80c51單片機(jī)的接法

          在某些單片機(jī)應(yīng)用系統(tǒng)中需要在系統(tǒng)掉電時(shí)記憶當(dāng)前現(xiàn)場(chǎng)狀態(tài),以使電源恢復(fù)后能繼續(xù)從斷電處運(yùn)行,圖4是以80c51單片機(jī)為例采用其空閑方式或掉電方式,在備用電池支持下實(shí)現(xiàn)掉電后的數(shù)據(jù)保護(hù)。

          圖4中,r1、c1和74lso4構(gòu)成單片機(jī)的上電自動(dòng)復(fù)位和手動(dòng)按鈕復(fù)位電路,備用電池p1及d1、d2實(shí)現(xiàn)掉電時(shí)備用電池的切換。電源正常時(shí)d1不導(dǎo)通,+5v直接給單片機(jī)供電,并為電池p1充電,為了減小電池耗電,備用電池只給單片機(jī)供電,保護(hù)片內(nèi)ram中的數(shù)據(jù),電源掉電后,其他外圍電路的工作電壓僅靠電源電容維持很短的時(shí)間,電位器rw用來(lái)調(diào)節(jié)檢測(cè)電壓,范圍為4.5-4.75v,當(dāng)?shù)綦姇r(shí),外圍電路的電壓下降到門(mén)限設(shè)定電壓時(shí),可將片外ram中需要保護(hù)的數(shù)據(jù)寫(xiě)入片內(nèi)ram中,并使單片機(jī)進(jìn)入掉電工作方式以完成數(shù)據(jù)保護(hù),為了保證單片機(jī)有足夠的處理時(shí)間,取檢測(cè)電壓為4.75v,當(dāng)電源電壓降至4.75v時(shí),tl7705由reset反向單片機(jī)發(fā)出中斷請(qǐng)求信號(hào)(into反)。單片機(jī)運(yùn)行到一個(gè)可斷斷點(diǎn)后,相應(yīng)中斷,在中斷服務(wù)程序中保護(hù)現(xiàn)場(chǎng)數(shù)據(jù),使單片機(jī)進(jìn)入掉電工作狀態(tài)。

          4 采用軟件冗余措施保證數(shù)據(jù)的準(zhǔn)確性。

          最常用的一種方法是采用軟件冗余措施,即將欲保護(hù)的數(shù)據(jù)寫(xiě)入ram中的不同區(qū)域,如0000h-00ffh、0100h-01ffh和0200h-02ffh這三個(gè)區(qū)域存儲(chǔ)同樣一組數(shù)據(jù),當(dāng)使用這些數(shù)據(jù)前,先對(duì)各組進(jìn)行檢查,對(duì)于正確的數(shù)據(jù)方可應(yīng)用,同時(shí)將錯(cuò)誤的數(shù)據(jù)進(jìn)行修正,在上電與斷電過(guò)程中,總線不確寫(xiě)性是隨機(jī)的,不可將所有數(shù)據(jù)完全沖失。采用硬件對(duì)數(shù)據(jù)進(jìn)行斷電保護(hù),同時(shí)在軟件上采用冗余的措施是最常用的數(shù)據(jù)保護(hù)方法,在斷電突然發(fā)生時(shí)可保證數(shù)據(jù)的準(zhǔn)確無(wú)誤。

          雙控開(kāi)關(guān)相關(guān)文章:雙控開(kāi)關(guān)原理


          關(guān)鍵詞:

          評(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); })();