以單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告_第1頁
以單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告_第2頁
以單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告_第3頁
以單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告_第4頁
以單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 i以 AT89S52單片機為核心的智能充電器設(shè)計與實現(xiàn)項目可行性研究報告目錄 摘要(.3).關(guān)鍵詞(.4.).Abstract(.錯誤!未定義書簽。) TOC o 1-5 h z Key words(.4)前言.緒論.5).1.1課題研究的背景.5.)課題研究的意義 (.6.)1.2課題研究的主要工作(.7.)2充電技術(shù)(.7).2種電池的充電特性 .7.)2.1.1鎳氫/鎳鎘電池充電模式(.7.)2.1.2鋰離子電池的特點及充電方式 .8 )2.2智能充電器(9).2.3設(shè)計的功能模塊(.1.0)2.3.1單片機模塊(.10 )2.3.2充電過程控制模塊(.10)2.3.3充電電壓提供模塊

2、 (.1.1 )2.3.4 光耦模塊(.1.1 )2.3.5電壓測試模塊(.1.2 )3設(shè)計方案充電過程(.1.3)預(yù)充(13)快快充(13) TOC o 1-5 h z 滿充(13.)斷電(14.)報警(.14.)4鋰離子電池充電器硬件設(shè)計 (.14)4.1單片機電路.14)4.1.1 AT89S52 (16 )4.2充電部分(.1.9)4.4光耦控制部分.22 )5鋰離子電池充電器軟件設(shè)計 (.23)5.1程序功能(.23)5.2程序流程圖.23 )5.3程序代碼及說明 (.25)附錄(.57)致謝(.59.)參考文獻 (.60.)摘 要:隨著移動電話用戶數(shù)量的不斷增長,相應(yīng)的電池和電池充

3、電器需求也將會有較大的增加。電子技術(shù)的快速發(fā)展使得人們對高性能、小尺寸、重量輕的智能電池充電 器的需求也越來越大。目前,使用較多的是鎳鎘電池(Nied )、鎳氫電池(NiMH )和 鋰離子電池。由于不同類型電池的充電特性不同,通常對不同類型,甚至不同容量等 級和電壓的電池使用不同充電器,實際使用中會帶來諸多不便。于是設(shè)計一種以AT89S52單片機為核心的智能充電器,較好地解決了上述電池的充電問題。 在設(shè)計上, 選擇了簡潔、高效的系統(tǒng)硬件,包括單片機電路、充電控制電路、電壓轉(zhuǎn)換及光耦隔 離電路。實踐證明,設(shè)計的充電器功耗低、成本低、系統(tǒng)工作穩(wěn)定可靠,智能化程度 高,具有推廣價值。關(guān)鍵詞:智能充電

4、器;AT89S52單片機;硬件構(gòu)成、八 、-刖言現(xiàn)在社會信息化的不斷加快,人們對自己使用的各種家電設(shè)備、儀表以及工業(yè)生產(chǎn)中的數(shù)據(jù)采集與控制設(shè)備要求很高。尤其隨著手機在世界范圍內(nèi)的普及,手機電池充電 器的使用越來越廣泛的時候人們對高性能、小尺寸、重量輕的智能電池充電器的需求 也越來越大,所以智能充電器有它的巨大發(fā)展空間。所謂智能充電器是單片機參與處理和控制的充電器,能根據(jù)用戶的需要自主選擇充電 方式,并且在充電過程中能對被充電電池進行保護從而防止過電壓、電流和溫度過高 的一種智能化充電器。該智能充電器具有檢測鋰離子電池的狀態(tài);自動切換充電模式 以滿足充電電池的充電需要;充電器短路保護功能;充電狀

5、態(tài)顯示的功能。在生活中 更好的維護了充電電池,延長了它的使用壽命。因此,研究智能充電器的設(shè)計及推廣 其應(yīng)用,有著非常現(xiàn)實的意義。單片機模塊:實現(xiàn)充電器的智能化控制,比如自動斷電、充電完成報警提示等。充電過程控制模塊:采用專用的電池充電芯片實現(xiàn)對充電過程的控制。充電電壓提供模塊:采用電壓轉(zhuǎn)換芯片將外部+12V電壓轉(zhuǎn)換為需要的+5V電壓 該電壓在送給充電控制模塊之前還需經(jīng)過一個光耦模塊。C52程序:單片機控制電池充電芯片實現(xiàn)充電過程的自動化,并根據(jù)充電的狀態(tài)給出 有關(guān)的輸出指示。本論文從鋰離子電池技術(shù)特性、充電技術(shù)、充電器電路結(jié)構(gòu)、充電器典型電路和電池 保護等方面,多角度地闡述了充電技術(shù)發(fā)展和應(yīng)用

6、的智能化。緒論1.1課題研究的背景社會信息化進程的加快對電力、信息系統(tǒng)的安全穩(wěn)定運行提出了更高的要求。而各種 用電設(shè)備都離不開可靠的電源,如果在工作中間電源中斷,人們的生產(chǎn)和生活都將受 到不可估量的經(jīng)濟損失。對于由交流供電的用電設(shè)備,為了避免出現(xiàn)上述不利情況,所以要設(shè)計一種電源系統(tǒng),它能不間斷地為人們的生產(chǎn)和生活提供以安全和操作為目 的可靠的備用電源。為此,以安全和操作為目的的備用電源設(shè)備上都使用可充電池。 電池是一種化學電源,是通過能量轉(zhuǎn)換而獲得電能的器件。二次電池是可多次反復使 用的電池,它又稱為可充電池或蓄電池。二次電池的工作原理:當對二次電池充電時, 電能轉(zhuǎn)變?yōu)榛瘜W能,實現(xiàn)向負荷供電,

7、伴隨吸熱過程。普通充電器多采用大電流的快 速充電法,在電池充滿后如果不及時結(jié)束會使電池發(fā)燙,過度的充電也會嚴重損害電池 的壽命。一些低成本的充電器采用電壓比較法,為了防止過充,一般充電到90%就停止大電流快充,接著采用小電流涓流補充充電,這樣就使充電時間加長了。好的充電器不但能在短時間內(nèi)將電量充足,而且對鋰電池起到一定維護作用,修復由 于記憶造成的記憶效應(yīng)。于是設(shè)計出的智能充電器是采用單片機控制的,可以檢測出 電池充電飽和時發(fā)出的電壓變化信號,比較精確的停止充電工作,通過單片機對充電 芯片的控制實現(xiàn)充電過程的智能化,以縮短充電時間,延長電池使用壽命。智能充電 器還增加了充電電壓的顯示,讓我們能

8、看到電池的預(yù)充、快充、滿充充電階段,從而 加強對電池的維護。1.1.1課題研究的意義此課題研究的對象主要是鋰離子電池的充電原理和充電控制。鋰離子電池的充電設(shè)備需要解決的問題有:通過單片機的控制,簡化外圍電路的復雜性,增加自動化管理設(shè)置,減輕充電過程的 勞動強度和勞動時間,從而使充電器具有更大的靈活性、更高的可靠性和成本低。改善充電控制不合理而造成過充、欠充等問題,提高電池的使用性能和使用壽命。可以進行充電前處理,包括電池充電狀態(tài)的鑒定和預(yù)處理。-需解決充電時間長、效率低等問題。研究課題的意義:掌握鋰離子電池的充放電方式和特點,從中找到最佳充電方式及電池管理途徑。完善充電設(shè)備的適時處理功能和自診

9、斷功能。實現(xiàn)充電器具備強大的功能擴展性,為智能充電器的功能升級提供平臺。1.2課題研究的主要工作本課題主要研究鋰離子電池的充放電方法,在此基礎(chǔ)上進行硬件設(shè)計和軟件設(shè)計,并 通過調(diào)試結(jié)果對充電控制方法測試驗證。為了完成智能充電器的設(shè)計,我需做如下工 作:了解鋰離子電池的特點和在應(yīng)用中存在的主要問題從而分析實現(xiàn)電池的充放電方法和智能充電器的實現(xiàn)方法,從而選擇合適的充電電池芯片。進行硬件電路的設(shè)計,繪制充電電路原理圖。進行軟件設(shè)計,以C語言為開發(fā)工具,進行詳細設(shè)計和編寫程序代碼。調(diào)試硬件和軟件電路,驗證整個設(shè)計。2充電技術(shù)2.1 2種電池的充電特性2.1.1鎳氫/鎳鎘電池充電模式這2種鎳類電池具有相

10、似的充電特性曲線,因而可以用一樣的充電算法。這2種電池的主要充電控制參數(shù)為-AV和溫度9.對鎳氫/鎳鎘電池由預(yù)充電到標準充電轉(zhuǎn)換的判據(jù)為:單節(jié)電池電壓水平0.61V ;電池溫度-50oC.電池飽和充電的判據(jù)為:電池電壓跌落或接近零增長V= 615 mV /節(jié);電池最高溫度Omax 50 C;電池溫度上升率d B/dt 1.0 C/min。由于溫度的變化容易受環(huán)境影響,因而實際用于判別充電各階段的變量主要為V、Omax ,其中對-a的檢測需要有足夠的A/D分辨率和較高的電流穩(wěn)定度.-的測量與A/D分辨率、充 電電流的穩(wěn)定性與電池內(nèi)阻之間有以下關(guān)系:當電池內(nèi)阻等于50 Q(接近飽和充電)時, 充電

11、電流=1200mA,電流漂移等于5%,單節(jié)電池的最高充電電壓為1.58V,則此時 電流漂移可能引起的電池電壓變化為 3mV。2.1.2鋰離子電池的特點及充電方式鋰離子電池的正極材料通常由鋰的活性化合物組成,常見的正極材料主要成分為LiCo02,負極則是特殊分子結(jié)構(gòu)的碳。充電時,加在電池兩級的電勢迫使正極化合物釋出鋰離子,嵌入在負極分子排列呈片層結(jié)構(gòu)的碳中。放電時,鋰離子則從片層結(jié)構(gòu)的碳中析出,重新與正極的化合物結(jié)合。于是鋰離子的移動產(chǎn)生了電流。重量方面:鋰離子電池為3.6V,鋰離子電池的電壓是鎳氫、鎳鎘電池的 3倍。但鋰離 子電池因端電壓為3.6V,在輸出同電池的情況下,單個電池組合時數(shù)目可減

12、少 2/3從 而使成型后的電池組重量和體積都減小。自放電率:鎳鎘電池為15%30%,鎳氫電池為25%35%,鋰離子電池為2%5%。 鎳氫電池的自放電率最大,而鋰離子電池的自放電率最小。記憶效率:鋰離子電池很少有鎳鎘電池的記憶效應(yīng),記憶效應(yīng)的原理是結(jié)晶化,但在鋰電池中幾乎不會出現(xiàn)這種反應(yīng)。鋰離子電池在幾次充電放電后容量仍然會下降,主 要的原因從分子層里來看,正負極材料本身的變化,正負極上容納鋰離子的空穴結(jié)構(gòu) 會逐漸塌陷,堵塞;從化學角度來看,是正負極材料活性鈍化,出現(xiàn)副反應(yīng)生成穩(wěn)定 的其他化合物。在物理上還會出現(xiàn)正極材料逐漸剝落等情況,降低了電池中可以自由 在充放電過程中移動的鋰離子數(shù)目記憶效應(yīng)

13、一般認為是長期不正確的充電導致的,它可以使電池早衰,使電池無法進行 有效的充電,出現(xiàn)一充就滿、一放就完的現(xiàn)象。嚴格遵循“充足放光”的原則,即在 充電前最好將電池內(nèi)殘余的電量放光,充電時要一次充足,可防止電池出現(xiàn)記憶效應(yīng)。 對于由于記憶效應(yīng)而引起容量下降的電池,可以通過一次充足再一次性放光的方法反 復數(shù)次,大部分電池都可以得到修復。充電方式:過度充電和過度放電,將對鋰離子電池的正負極造成永久的損壞,從分子 層面看,過度放電導致負極碳過度釋放出鋰離子而使得其片層結(jié)構(gòu)出現(xiàn)塌陷,過度充 電將把太多的鋰離子硬塞進負極碳結(jié)構(gòu)里去,而使得其中一些鋰離子再也無法釋放出 來。這就是鋰離子電池為什么通常配有充放電

14、的控制電路的原因。鋰離子電池以恒流轉(zhuǎn)恒壓方式進行充電。采用 1C充電速率充電至4.1V時,充電器應(yīng)立即轉(zhuǎn)入恒壓充電,充電電流逐漸減小;當電池充足電后,進入涓流充電過程。為避 免過充電或過放電,鋰離子電池不僅在內(nèi)部設(shè)有安全機構(gòu),充電器也必須采取安全保 護措施,以監(jiān)測鋰離子電池的充放電狀態(tài)。2.2智能充電器在人們?nèi)粘9ぷ骱蜕钪?,充電器的使用越來越廣泛。從隨身聽到數(shù)碼相機,從手機 到筆記本電腦,幾乎所有用到電池的電器設(shè)備都需要用到充電器。充電器為人們的外 出旅行和出差辦公提供了極大的方便。隨著手機在世界范圍內(nèi)的普及使用,手機電池 充電器的使用也越來越廣泛。所謂智能充電器是單片機參與處理和控制,能根

15、據(jù)用戶的需要自主選擇充電方式,并 且在充電過程中能對被充電電池進行保護從而防止過電壓、電流和溫度過高的一種智 能化充電器。本課題將通過一個典型實例介紹 AT89S52單片機在實現(xiàn)手機電池充電器方面的應(yīng)用。此次設(shè)計所要實現(xiàn)的充電器是一種智能充電器,它在單片機的控制下,具有預(yù)充、充 電保護、自動斷電、電壓顯示和充電完成報警提示功能。2.3設(shè)計的功能模塊2.3.1單片機模塊智能的實現(xiàn)需要利用單片機控制,經(jīng)過分析后單片機芯片可以選擇Atmel公司的AT89S52,通過中斷控制光耦器件通電和斷電。2.3.2充電過程控制模塊鋰離子電池一般都具有管理芯片和充電控制芯片。其中管理芯片中有一系列的寄存器,用來存

16、儲電容容量、溫度、ID、充電狀態(tài)、放電次數(shù)等數(shù)值。這些數(shù)值在使用中會逐 漸變化。充電控制芯片主要控制電池的充電過程。鋰離子電池的充電過程分為兩個階段,恒流快充階段(電池指示燈呈黃色時)和恒壓電流遞減階段(電池指示燈呈綠色閃爍)。恒流快充階段,電池電壓逐步升高到電池的標準電壓,隨后在控制芯片下轉(zhuǎn)入恒壓階段, 電壓不再升高以確保不會過充現(xiàn)象,電流則隨著電池電量的上升逐步減弱到0,而最終完成充電。電量統(tǒng)計芯片通過記錄放電曲線(電壓、電流、時間)可以抽樣計算出電池的電量。 而鋰離子電池在多次使用后,放電曲線是會改變的,如果芯片一直沒有機會再次讀出 完整的一個放電曲線,其計算出來的電量也就是不準確的。所

17、以我們需要深充放來校 準電池的芯片。定時電容C和充電時間Tchg的關(guān)系式滿足:C=34.33 XTchg最大充電電流Imax和限流電阻Rset的關(guān)系式滿足:Imax = 1400/Rset2.3.3充電電壓提供模塊由于一般家用電壓是+220V 交流電壓,需要設(shè)計一個電壓轉(zhuǎn)換電路將 +220V交流電 壓轉(zhuǎn)換成+5V直流電壓。首先用變壓器將 220V交流電壓轉(zhuǎn)換成7V交流電壓,經(jīng)過 橋式整流變成直流電壓,再利用電壓轉(zhuǎn)換芯片 LM7805將7V直流電轉(zhuǎn)換為5V直流 電壓。2.3.4光耦模塊為了在充滿電后能及時關(guān)斷充電電源,貝嚅要引入一個光耦模塊芯片6N137 。6N137光耦合器是一款用于單通道的高

18、速光耦合器,其內(nèi)部由一個850 nm波長AIGaAs LED和一個集成檢測器組成,其檢測器由一個光敏二極管、高增益線性運放及一個肖特基鉗位的集電極開路的三極管組成。具有溫度、電流和電壓補償功能,高的 輸入輸出隔離,LSTTL/TTL兼容,高速(典型為10MBd),5mA的極小輸入電流 工作參數(shù):最大輸入電流,低電平:250uA最大輸入電流,高電平:15mA最大允許低電平電壓(輸出高):0.8v最大允許高電平電壓:Vcc最大電源電壓、輸出:5.5V扇出TTL負載):8個(最多)工作溫度范圍:-40 to +85 典型應(yīng)用:高速數(shù)字開關(guān),馬達控制系統(tǒng)和A/D轉(zhuǎn)換等6N137光耦合器的內(nèi)部結(jié)構(gòu)、管腳

19、如下圖所示圖1 6N137光耦合器6N137光耦合器的電源管腳旁應(yīng)有一個 O.luF的去耦電容。在選擇電容類型時,應(yīng)盡 量選擇高頻特性好的電容器,如陶瓷電容或鉭電容,并且盡量靠近6N137光耦合器的 電源管腳;另外,輸入使能管腳在芯片內(nèi)部已有上拉電阻,無需再外接上拉電阻。6N137光耦合器的引腳:第6腳Vo輸出電路屬于集電極開路電路,必須上拉一個電 阻;第2腳和第3腳之間是一個LED,必須串接一個限流電阻。6N137光耦合器的真值表如下:6N137光耦合器的真值輸入“ + ”ENOUTPUT輸入“ + ”ENOUTPUT1100010111NC01010NC1表1 6N137光耦合器的真值2.

20、3.5電壓測試模塊該部分采用AD轉(zhuǎn)換來實現(xiàn)充電電壓的現(xiàn)實。采用中斷觸發(fā),基本原理是將一段時間內(nèi)的輸入模擬電壓 Ui和參考電壓UR通過兩次積分,變換成與輸入電壓平均值成正比的時間間隔,再變換成正比于輸入模擬信號的數(shù)字量。把模擬信號轉(zhuǎn)換成數(shù)字信號,轉(zhuǎn)換原理為:其中,n為準換后的二進制位數(shù),dn-i do為具體二進制位。Ur為參考電壓,Ua為顯 示電壓。3設(shè)計方案充電過程3.1預(yù)充在安裝好電池之后,接通輸入直流電源,當充電其檢測到電池時將定時器復位,從而 進入預(yù)充過程,在此期間充電器以快充電流的10 %給電池充電,使電壓、溫度恢復到正常狀體,預(yù)充電時間由外接電容 C9確定,如果在預(yù)充時間內(nèi)電池電壓達

21、到 2.5V, 且電池溫度正常,則進入快充過程;如果超過預(yù)充時間后,電池電壓低于2.5V,則認為電池不可充電,充電器顯示電池故障,由單片機發(fā)出故障指令,LED指示燈閃爍。3.2快充快充就是以恒定電流對電池充電,恒流充電時,電池的電壓緩慢上升,一旦電池電壓 達到所設(shè)定的終止電壓時,恒流充電終止,充電電流快速遞減,充電進入滿充過程。3.3滿充在滿充過程中,充電電流逐漸遞減,直到充電速率降到設(shè)置值以下,或滿充超時時, 轉(zhuǎn)入頂端截止充電,頂端截止充電時,充電器以極小的充電電流為電池補充能量,由 于充電器在檢測電池電壓是否達到終止電壓時有充電電流通過電池電阻,盡管在滿充和頂端截至充電過程中充電電流逐漸下

22、降,減小了電池內(nèi)阻和其它串聯(lián)電阻對電池端 電壓的影響,但串聯(lián)在充電回路中的電阻形成的壓降仍然對電池終止電壓的檢測有影響,一般情況下,滿充和頂端截止充電可以延長電池5 %10 %的使用時間。3.4斷電當電池充滿后,MAX1898芯片的2腳/CHG發(fā)送的脈沖電平會由低變高,這將會被 單片機檢測到,引起單片機的中斷,在中斷中,如果判斷出充電完畢,則單片機將通 過P2.0 口控制光耦切斷L7805向MAX1898供電,從而保證芯片和電池的安全,同 時也減小功耗。3.5報警當電池充滿后,MAX1898芯片的2引腳/CHG發(fā)送。LED燈會閃爍。但是,為了安 全起見,單片機在檢測到充滿狀態(tài)的脈沖后, 不僅會

23、自動切斷MAX1898芯片的供電, 而且會通過蜂鳴器報警,提醒用戶及時取出電池。4鋰離子電池充電器硬件設(shè)計4.1單片機電路單片機控制設(shè)計,電路如下圖:SLCK 2DATA 7plo/tVccPI.l/TPl .2P0.0PL.3PO.lPL4P0.2plsP0.3Pl.6P0.4PL7 atbsssxP0.5P0.5RST/VPDP0.7EA/VPPLED10cii1314151617P3 0/RXDP3.1/TXDP3.2HHT0P3.3HWTIP3 4/TOP3 5/T1P3fmP3.?rRDALE/PROGPSEH30P13Tp20XTAL2XTAL1P2?P2.6F2 5P2.4P2.

24、3P2.2P2.1P2.0a30CLKr0252:START25 A24 B2322 P2J21 P2-0圖2單片機控制電路電路說明如下:P3.1腳控制發(fā)出報警聲提示。P3.0腳輸出控制光耦器件,在需要的時候可以及時關(guān)斷充電電源。外部中斷)由充電芯片MAX1898的充電狀態(tài)輸出信號經(jīng)過反向后觸發(fā)4.1.1 AT89S52123457891011121314眉宀17UU181920Pt 0/TVccP1.L/TP1.2POOPI.3P0.1P1.4P0.2P1JP03P16P0.4P17 AT&9S5X P05EST/VPDP0.6 P0 7P3 0/RXDEA/VPPP3.irrxD P3 2

25、/INTOALEZPROGP33/INT1PENP3.4/T0P3.smP2.7P3.6/WRP2.6P3.7/KDP25XTAL2P24 P2.3XT AllP2.2GmlP2.1 P20403?36373634323130歲2827262524232221圖 3 AT89S52AT89S52是一個低電壓,高性能 CMOS 8位單片機,片內(nèi)含8k bytes的可反復擦寫 的Flash只讀程序存儲器和 256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用 ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置 通用8位中央處理器和Flash存儲單元,AT89S

26、52單片機在電子行業(yè)中有著廣泛的應(yīng) 用。主要功能特性:兼容MCS51指令系統(tǒng)8kB可反復擦寫(大于1000次)Flash ROM32個雙向I/O 口256x8bit 內(nèi)部 RAM 3個16位可編程定時/計數(shù)器中斷-時鐘頻率)-24MHz2個串行中斷,可編程 UART串行通道2個外部中斷源,共8個中斷源2個讀寫中斷口線,3級加密位低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求管腳說明:VCC :供電電壓。GND :接地。P0 口: P0 口為一個8位漏級開路雙向I/O 口,每腳可吸收8TTL門電流。當P1 口的 管腳第一次

27、寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被 定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進 行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1 口: P1 口是一個內(nèi)部提供上拉電阻的8位雙向I/O 口,P1 口緩沖器能接收輸出4TTL 門電流。P1 口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1 口被外部下拉為低 電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在 FLASH編程和校驗時,P1 口作 為第八位地址接收。P2 口: P2 口為一個內(nèi)部上拉電阻的8位雙向I/O 口,P2 口緩沖器可接收,輸出4個 TTL門電流,當P2 口

28、被寫“ 1 ”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因 此作為輸入時,P2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2 口輸出地址的 高八位。在給出地址“ 1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進 行讀寫時,P2 口輸出其特殊功能寄存器的內(nèi)容。P2 口在FLASH編程和校驗時接收高八位地址信號和控制信號P3 口: P3 口管腳是8個帶內(nèi)部上拉電阻的雙向I/O 口,可接收輸出4個TTL門電流。 當P3 口寫入“ 1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部 下拉為低電平,P3

29、 口將輸出電流(ILL)這是由于上拉的緣故。P3 口也可作為AT89S52的一些特殊功能口,如下表 2所示:管腳備選功能P3.0/RXD(串行輸入口)P3.1/ TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)表 2 P3 口P3 口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持 RST腳兩個機器周期的高電平時間。ALE/PROG :當訪問外部存儲器時,地址鎖存允許的輸出電平用

30、于鎖存地址的地位字 節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。 如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX ,MOVC 指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效EA/VPP :當EA保持低電平時,則在此期間外部程序存儲器(OOOOH-FFFFH ),不管 是否有內(nèi)部程序存儲器。注意加密方式 1時,EA將內(nèi)部鎖定為RES

31、ET;當EA端保持 高電平時,此間內(nèi)部程序存儲器。在 FLASH編程期間,此引腳也用于施加 12V編程 電源(VPP )。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩 次PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的 PSEN信號將不出現(xiàn)。XTAL1 :反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2 :來自反向振蕩器的輸出。4.2充電部分該部分為設(shè)計的主核心部分,電路圖如下:T120VLIL210CS1000uF/50IODOuFjSQVCIO13!2l2ci.IKil20VlourR2D33YINOFTOKOlGNDQ3TRANS11C4B:

32、4C0N41猛0二殖42VE迥ICON4TOUT?NEZ-220uF07LM1Vin * *571占373O5C7Ifelg:6fflOOlODV14占0-2C?1-1705圖4智能充電器的主核心電路4.3充電電壓轉(zhuǎn)換,實現(xiàn)電路模塊如下:圖6充電電壓轉(zhuǎn)換電路首先用變壓器將220V交流電壓轉(zhuǎn)換成7V交流電,經(jīng)過橋式整流變成直流電,再利用 電壓轉(zhuǎn)換芯片LM7805將7V直流電壓轉(zhuǎn)換為5V直流電壓。4.4光耦控制部分,實現(xiàn)電路如下:圖7 6N137 光耦控制電路充電電壓顯示,該部分其實就是一個 AD轉(zhuǎn)換,原理圖如下:5鋰離子電池充電器軟件設(shè)計5.1程序功能單片機AT89S2052和LM7805的智能

33、電池充電器的程序需要完成以下的功能:通過CHG信號引起INTO外中斷。在兩次中斷中使用TO計數(shù),判斷是否充電完畢。如果充電完畢,則控制P1.2和P1.3引腳,輸出低電平。5.2程序流程圖智能充電器的程序流程圖簡介:外部中斷0設(shè)為邊沿觸發(fā);中斷*第一個下降沿 * TO開始計數(shù) *第二次下降沿 停止TO計數(shù)讀取TO計數(shù)器 中斷返回圖9等待外部信號輸入圖10外部中斷程序圖11定時程序5.3程序代碼及說明#in elude #i nclude /lcd12864相關(guān)控制#i nclude #in clude sbit CTRL_UP=P2P;sbit CTRL_DOWN=P2A1;sbit ADCOE

34、=P2A6;sbit ADCSTART=P2A7;sbit ADCALE=P2A5;sbit ADCA=P2A4;sbit ADCB=P2A3;sbit POWERKK=PM4;#defi ne ADCDATE P0sbit KEY仁 P3A7;sbit KEY2=P3A5;sbit KEY3=P3A6;void In itSys(); 初始化系統(tǒng)void In it In t();/初始化外部中斷void In itTimer();/ 初始化定時器,串口中斷void Sen dSerialData();/ 啟動并發(fā)送一組串口數(shù)據(jù)void StartADC();/ 選擇通道n ,開始轉(zhuǎn)換voi

35、d ShowAIITime();顯示完整的時間un sig ned char g_myPar15,g_CurSe nd;g_t10,g_t11,g_t20,g_t21,g_t30,g_t31,g_n,g_U0,g_U1p,g_U1f,g_U2,g_U3,g _Th,g_Tm,g_Ts;參數(shù)順序bit bSerialSe nding;un sig ned char g_time6;un sig ned char g_Curl n;un sig ned char code g_adda=0,1,1,0,1;unsigned char code g_addb=1,0,0,0,1;un sig ned

36、 char code g_ctrlu=1,1,1,0,0;un sig ned char code g_ctrld=0,1,0,1,1;un sig ned char g_tt10,g_tt11,g_tt20,g_tt21,g_tt30,g_tt31;un sig ned char CutState;bit CurTR0,Curctrlu,Curctrld;float SqrtDuty;un sig ned char g_Perce nt;void mai n()DelayMs(10);Delay4us(10);In itSys();DelayMs(1200);In itLCD();In it

37、LCDshow(0);Initlnt(); 初始化外部中斷0InitTimer(); 初始化定時器0,串口中斷bSerialSe nding = 0;/ bLi nking = 0;/WriteLCD(0,0 x80);DspNumber(123);StartADC();while(1)if(KEY1=0) 充電TR1 = 0;CutState = 0;POWERKK = 1;In itLCDshow(0);TR0 = 1;g_myPar0=g_tt10;g_myPar1=g_tt11;g_myPar2=g_tt20;g_myPar3=g_tt21;g_myPar4=g_tt10;g_myPa

38、r =g_tt11;/SqrtDuty = sqrt(float)g_myPar1/(g_myPar0+g_myPar1);Duty=g_myPar0*100/(g_myPar0+g_myPar1);TR1 = 1;StartADC();ShowAIITime();DelayMs(100);else if(KEY2=0) TR1 = 0;CutState = 1;POWERKK = 1;In itLCDshow(1);TR0 = 0; g_Curln = 0;CTRL_UP = 1;CTRL_DOWN = 0;TR1 = 1;StartADC();ShowAIITime();DelayMs(1

39、00);放電維護else if(KEY3=0)/TR1 = 0;POWERKK = 0;CutState = 2;In itLCDshow(2);TR0 = 1;g_myParO=Oxff;g_myPar1=0 xf0;g_myPar2=0 xfe;g_myPar3=0 x74;g_myPar4=0 xff;g_myPar =0 xf2;/SqrtDuty = sqrt(float)g_myPar1/(g_myPar0+g_myPar1);Duty=g_myPar0*100/(g_myPar0+g_myPar1);TR1 = 1;StartADC();ShowAIITime();DelayMs

40、(100);/初始化系統(tǒng)void In itSys()un sig ned char i;for(i=0;i6;i+)g_timei=;ADCOE = 1;ADCALE = 0;ADCSTART = 0;POWERKK = 1; g_myPar0=0 xff;/0 x30 g_myPar1=0 x30;g_myPar2=0 xff; g_myPar3=0 x30;/0 x30 g_myPar4=0 xff;g_myPar =0 x30;g_tt10 = 0 xff;g_tt11 = 0 x30;g_tt20 = 0 xff;g_tt21 = 0 x30;/*g_myPar0 = 0 x80;/

41、g_TH1g_myPar1 = 0 x00;/g_TH2g_myPar2 = 0 x00;/g_TH3*/g_myPar =6;SqrtDuty = sqrt(0.5);Duty=g_myPar0*100/(g_myPar0+g_myPar1);/初始化外部中斷void In itI nt()IT0 = 1;/ 0/1 低電平/下跳變PX0 = 1;/中斷優(yōu)先級/EX0 = 1;EA = 1;/初始化定時器,串口中斷void Ini tTimer()TMOD = 0 x11;/ 使用高4位0/1/2/3 13 位/16位/8位自動重載/雙8位TH0 = (65536 - 49235) / 25

42、6;TL0 = (65536 - 49235) % 256;PT0 = 1;TR0 = 1;/開啟定時器0ET0 = 1;TH1 = (65536 - 49235) / 256;TL1 = (65536 - 49235) % 256;TR1 = 1;/開啟定時器1ET1 = 1;TCLK=1;RCLK=1;TH2=0 xFF; /19200bps 22.1184MHz 的時鐘頻率TL2=0 xDC;RCAP2H=0 xFF; /方式1和方式3的波特率=fosc/(32-(65535-(RCAP2H,RCAP2L)RCAP2L=0 xDC;TR2=1;/ET2=1;SCON = 0 x50;/串

43、口方式1,允許接收PCON = 0 x00;/關(guān)閉波特率加倍PS = 1;/設(shè)置串口中斷為高優(yōu)先級ES = 1;/開串口中斷/TH1 = 0 xfd;/串口通信使用定時器1,設(shè)定波特率9600/TH1 = 0 xf3;/ 串口通信使用定時器1,設(shè)定波特率2400EA = 1;/開始發(fā)送串口數(shù)據(jù)void Sen dSerialData()if(!bSerialSe ndi ng)bSerialSe nding = 1;g_CurSe nd = 0;SBUF = g_myParg_CurSe nd;g_CurSe nd+;/開始ADC轉(zhuǎn)換void StartADC()CurTRO = TRO;TR

44、O = 0;g_Curl n=0;ADCA = g_addag_Curl n;ADCB = g_addbg_Curl n;CTRL_UP = g_ctrlug_Curl n;CTRL_DOWN = g_ctrldg_Curl n;Curctrlu = CTRL_UP;Curctrld = CTRL_DOWN;ADCALE = 1;ADCALE = 0;ADCSTART = 1;ADCSTART = 0;EX0 = 1;/倒序轉(zhuǎn)換un sig ned char Reverse( un sig ned char num)un sig ned char i,rtTmp;rtTmp = 0 x00;f

45、or(i=0; i8; i+)rtTmp = 1;return rtTmp;/顯示完整的時間void ShowAIITime()WriteLCD(0,0 x98+4);WriteLCD(1,g_time0); 時WriteLCD(1,g_time1);WriteLCD(1,:);WriteLCD(1,g_time2); 分WriteLCD(1,g_time3);WriteLCD(1,:);WriteLCD(1,g_time4);WriteLCD(1,g_time5);/外部中斷0服務(wù)程序void In t0() in terrupt 0g_myPar7+g_Curl n = ADCDATE;g

46、_Curl n+;if(g_Curl *5)ADCA = g_addag_CurI n;ADCB = g_addbg_CurI n;CTRL_UP = g_ctrlug_Curl n;CTRL_DOWN = g_ctrldg_CurI n;ADCALE = 1;ADCALE = 0;ADCSTART = 1;ADCSTART = 0;elseTR0 = CurTR0;EXO = 0;CTRL_UP = Curctrlu;CTRL_DOWN = Curctrld;/定時器0中斷服務(wù)程序void TimerO() in terrupt 1static un sig ned char i;stati

47、c bit j;if(j)j = 0;i+;if(ig_myPar6)i = 0;CTRL_UP = 1;CTRL_DOWN = 0;TH0 = g_myPar4;TL0 = g_myPar5;elseCTRL_UP = 1;CTRL_DOWN = 1;TH0 = g_myPar2;TL0 = g_myPar3;elsej = 1;CTRL_UP = 0;CTRL_DOWN = 1;TH0 = g_myParO;TL0 = g_myPar1;/定時器1中斷服務(wù)程序void Timer1() interrupt 3static un sig ned char i,j;un sig ned cha

48、r temp_data2;un sig ned char prese nce,k;TH1 = (65536 - 60730)/ 256;TL1 = (65536 - 60730) % 256;i+;if(i24)時間顯示i=0;g_time5+;g_myPar14+;if(g_time5 0 x39)/ 秒個位g_time 5 = 0 x30;g_time4+;if(g_time4 0 x35)/ 秒十位g_time4 = 0 x30;g_time3+;g_myPar14 = 0;g_myPar13+;if(g_time3 0 x39)/ 分個位g_time3 = 0 x30;g_time2+

49、;if(g_time2 0 x35)/ 分十位g_time2 = 0 x30;g_time1+;g_myPar13 = 0;時個位時十位g_myPar12+;if(g_time1 0 x33)/g_time1 = 0 x30;g_time0+;if(g_time0 0 x39)/g_time0 = 0 x30; g_myPar12=0;/時十位/時個位WriteLCD(0,0 x98+4);WriteLCD(1,g_time0);WriteLCD(1,g_time1); /分十位 WriteLCD(0,0 x98+5);WriteLCD(1,:);WriteLCD(1,g_time2);/分個

50、位WriteLCD(0,0 x98+6);WriteLCD(1,g_time3);/秒十位/秒個位WriteLCD(0,0 x98+7);WriteLCD(1,g_time4);WriteLCD(1,g_time5);/顯示充/放電狀態(tài)j+;switch(j)case 1:WriteLCD(0,0 x98+2);WriteLCD(1,);WriteLCD(1,);WriteLCD(1,);StartADC();break;case 2:WriteLCD(0,0 x98+2);WriteLCD(1,.);break;case 3:WriteLCD(0,0 x98+2);WriteLCD(1,.)

51、;WriteLCD(1,.);break;case 4:WriteLCD(0,0 x98+3);WriteLCD(1,.);j = 0;break;default:j = 0;prese nee = In it_DS18B20();if(prese nce=0)WriteOneChar(0 xCC); /跳過 ROM 匹配操作Delay4us(10);WriteO neChar(0 x44); /啟動溫度轉(zhuǎn)換prese nee = In it_DS18B20();if(prese nce=0)WriteOneChar(0 xCC); /跳過 ROM 匹配操作Delay4us(10);Write

52、 On eChar(OxBE); / 讀取溫度寄存器Delay4us(10);temp_data0 = Read On eChar(); / 溫度低 8 位Delay4us(10);temp_data1 = Read On eChar(); / 溫度高 8 位if(prese nce=0)if(temp_data1=0 xff) prese nce=1;if(g_Curln = 5)for(k=0;k100) g_Perce nt = 0;if(CutState=0)充電模式g_tt10 = (65536-5*(105-g_Perce nt)/256;g_tt11 = (65536-5*(10

53、5-g_Perce nt)%256; g_tt20 = (65536-5*(5+g_Perce nt)/256;g_tt21 = (65536-5*(5+g_Perce nt)%256;g_myPar0=g_tt10;g_myPar1=g_tt11;g_myPar2=g_tt20;g_myPar3=g_tt21;g_myPar4=g_tt10;g_myPar =g_tt11;SqrtDuty = sqrt(1-g_Perce nt/100.0);Duty=g_myPar0*100/(g_myPar0+g_myPar1);g_Curln = 0;if(CutState=2)維護WriteLCD(

54、0,0 x90);DspNumber(g_myPar7+2*156);電池電壓WriteLCD(1,V);/g_Perce nt = g_myPar4+2*1.56-48;DspPerce nt(g_Perce nt);if(prese nce=0)WriteLCD(0,0 x90+5);DspTemp(temp_data1,temp_data0);else if(CutState=1)放電/ 顯示參數(shù) g_U0,g_U1p,g_U1f,g_U2,g_U3, WriteLCD(0,0 x90);DspNumber(g_myPar7+2*156);電池電壓WriteLCD(1,V);g_Perc

55、e nt = g_myPar4+2*1.56-48;DspPerce nt(g_Perce nt);WriteLCD(0,0 x88+4);放電電流WriteLCD(1,:);DspNumber(g_myPar7+2-g_myPar7)*31);if(prese nce=0)WriteLCD(0,0 x90+5);DspTemp(temp_data1,temp_data0);else/充電/ 顯示參數(shù) g_U0,g_U1p,g_U1f,g_U2,g_U3, WriteLCD(0,0 x80);DspNumber(g_myPar7+2*156);電池電壓WriteLCD(1,V);g_Perce

56、 nt = g_myPar4+2*1.56-48;DspPerce nt(g_Perce nt);WriteLCD(0,0 x90+4);充電電流WriteLCD(1,:);DspNumber(g_myPar7+4-g_myPar7+3)*78)*SqrtDuty);WriteLCD(0,0 x88+4);WriteLCD(1,:);DspNumber(g_myPar7+4*156*SqrtDuty);充電電壓if(prese nce=0)WriteLCD(0,0 x80+5);DspTemp(temp_data1,temp_data0);/串口中斷服務(wù)程序void Serial() in t

57、errupt 4 if(RI)RI = 0;bSerialSe nding = 0;if(SBUF = 5)SBUF = 6;else if(SBUF = 6)Sen dSerialData();elseSBUF = 0 xff;elseTI = 0;if(bSerialSe nding)if(g_CurSe nd15)SBUF = g_myParg_CurSe nd;g_CurSe nd+;elsebSerialSe nding = 0;18B20程序:#i nclude un sig ned char data temp_data2;/DS18B20初始化un sig ned char I

58、n it_DS18B20(void)bit prese nee;DQ = 0; /單片機發(fā)出低電平復位信號Delay4us(120); / 延時 480usDQ = 1; /釋放數(shù)據(jù)線Delay4us(16); / 延時 64us,等待應(yīng)答 prese nee = DQ; / 接收應(yīng)答信號 Delay4us(15); / 延時 45us Delay4us(100); /延時400us,等待數(shù)據(jù)線出現(xiàn)高電平DQ = 1; /釋放數(shù)據(jù)線return (presenee); / 返回 presenee 信號/讀一個字節(jié)數(shù)據(jù)un sig ned char Read On eChar(void)un s

59、ig ned char i = 0;un sig ned char dat = 0;DQ = 1;for (i = 0; i = 1;DQ = 1; /釋放總線_nop_();_nop_();if (DQ)/讀總線電平狀態(tài)dat |= 0 x80;/最高位置1DQ = 1; /釋放總線,表示此次讀操作完成return (dat); /返回所讀得數(shù)據(jù)/寫一個字節(jié)數(shù)據(jù)void Write On eChar( un sig ned char dat)un sig ned char i = 0;for (i = 0; i 8; i+)/ 一個字節(jié)8個bitDQ = 0; /給低脈沖信號Delay4us

60、(1); / 延時 = 1; /數(shù)據(jù)右移一位,最低位移入CYDQ = CY; / 寫 1bit 數(shù)據(jù)Delay4us(15); / 延時 45usDQ = 1; /釋放總線,表示此次寫操作完成/*/溫度數(shù)據(jù)轉(zhuǎn)換子程序void Temperature_c on ver()un sig ned char minus = 0;WriteLCD(0,0 x88); for(i=0;i 127)/溫度為負值temp_dataO = (temp_dataO) + 1; /取反加一,將補碼變成原碼if (temp_dataO) = Oxff)temp_data1 = (temp_data1) + 1;els

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論