找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 32956|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)太陽(yáng)能充電器設(shè)計(jì)文檔

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
完整的太陽(yáng)能充電器文檔下載地址(word格式可編輯):
http://www.torrancerestoration.com/bbs/dpj-79109-1.html

下面是部分內(nèi)容預(yù)覽:
----------------------------------------------------------------------------------------
名稱  基于單片機(jī)的太陽(yáng)能充電器的設(shè)計(jì)            

隨著環(huán)境保護(hù)意識(shí)的增強(qiáng),尋求潔凈能源的現(xiàn)實(shí)問(wèn)題也日益顯現(xiàn)出來(lái)。具有清潔可再生的太陽(yáng)能已經(jīng)越來(lái)越受到人們的關(guān)注。本文提出了一個(gè)基于單片機(jī)的太陽(yáng)能充電器的設(shè)計(jì),它不但能環(huán)保節(jié)能,還可以在沒(méi)有電源充電時(shí)對(duì)手機(jī)進(jìn)行應(yīng)急充電。
喜歡外出或游玩的人通常會(huì)有手機(jī)沒(méi)電的經(jīng)歷,提供充電的地方也不會(huì)到處都有,因此會(huì)出現(xiàn)手機(jī)因沒(méi)有電無(wú)法正常使用的情況。本次設(shè)計(jì)介紹一種通過(guò)單片機(jī)控制的太陽(yáng)能手機(jī)充電器,它能將太陽(yáng)能通過(guò)電路變換成穩(wěn)定的直流電從而給手機(jī)充電,還可以在電池充好電以后有自動(dòng)停止充電的功能,并且能當(dāng)作一般的直流電源,讓我們減弱對(duì)市電的依靠,從而得到通信的自由。與傳統(tǒng)的充電器對(duì)比,太陽(yáng)能充電器的優(yōu)勢(shì)日益發(fā)揮出來(lái)。

目錄
摘  要
Abstract
目錄
1 緒論
1.1 本課題研究背景及現(xiàn)狀
1.2 課題設(shè)計(jì)思想
1.3 文檔結(jié)構(gòu)
2 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)總體方案設(shè)計(jì)
2.1 設(shè)計(jì)方案一
2.2 設(shè)計(jì)方案二
2.3基于單片機(jī)的太陽(yáng)能充電器的設(shè)計(jì)的總體設(shè)計(jì)方案
3 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的硬件設(shè)計(jì)
3.1太陽(yáng)能電池板的選用
3.2 LM7805穩(wěn)壓電路
3.3 充電主電路的設(shè)計(jì)
3.4 信號(hào)采集處理電路
3.6 單片機(jī)AT89C51介紹
3.7 單片機(jī)電路
3.7.1單片機(jī)復(fù)位電路
3.7.2 單片機(jī)時(shí)鐘電路
3.7.3 單片機(jī)A/D轉(zhuǎn)換電路
3.7.4按鍵電路
3.7.5數(shù)碼管顯示電路
3.8鋰電池充電原理
4 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的軟件設(shè)計(jì)
4.1 設(shè)計(jì)思想
4.2 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的整體程序設(shè)計(jì)
4.3 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的子程序的設(shè)計(jì)
4.3.1電路啟動(dòng)初始化
4.3.2按鍵采集程序
4.3.3數(shù)據(jù)采集及模數(shù)轉(zhuǎn)換程序
4.3.4數(shù)碼管顯示子程序
4.3.5 充電子程序的設(shè)計(jì)
4.3.6電源子程序的設(shè)計(jì)
5 仿真與調(diào)試
5.1 充電電路仿真
5.2 電流采樣處理電路仿真
5.3系統(tǒng)做直流電源使用時(shí)電路仿真圖
5.4 系統(tǒng)做充電器使用時(shí)仿真結(jié)果
總結(jié)與展望
參考文獻(xiàn)
附錄A 整體電路圖
附錄B 整體程序
致謝

1 緒論
1.1 本課題研究背景及現(xiàn)狀
當(dāng)代社會(huì)隨著一些不可再生資源如煤炭,石油等日益減少,使得各國(guó)社會(huì)經(jīng)濟(jì)越來(lái)越受能源問(wèn)題的約制,因此許多國(guó)家開始逐漸的實(shí)行“陽(yáng)光計(jì)劃”,開發(fā)潔凈的能源如太陽(yáng)能,用以成為本國(guó)經(jīng)濟(jì)發(fā)展的新動(dòng)力。
首先讓我們想到的是太陽(yáng)能電池,因?yàn)樗粫?huì)消耗水,燃料等物質(zhì),并且不會(huì)釋放任何對(duì)環(huán)境有污染的氣體,是直接通過(guò)太陽(yáng)光與材料的相互作用釋放出電能,這種無(wú)污染資源對(duì)環(huán)境的保護(hù)有著相當(dāng)重要的意義[1]。由于無(wú)公害的作用,目前世界太陽(yáng)能電池產(chǎn)業(yè)已經(jīng)出具規(guī)模,1995年到2004年的十年內(nèi)平均年增長(zhǎng)率達(dá)到30%以上。隨著新型太陽(yáng)能電池的涌現(xiàn),以及傳統(tǒng)硅電池的不斷革新,新的概念已經(jīng)開始在太陽(yáng)能電池技術(shù)中顯現(xiàn),從某種意義上講,預(yù)示著太陽(yáng)能電池技術(shù)的發(fā)展趨勢(shì)[2]。世界各國(guó)對(duì)光伏發(fā)電也越來(lái)越重視,目前全世界已超過(guò)一百個(gè)國(guó)家使用光伏發(fā)電系統(tǒng),其中以歐洲為代表的發(fā)達(dá)國(guó)家為主,占總市場(chǎng)的80.1%,早在09年的時(shí)候,世界各國(guó)總的光伏新加裝機(jī)容量接近800萬(wàn)千瓦,截至當(dāng)年低,世界光伏裝機(jī)容量總共接近2700萬(wàn)千瓦[3]。隨著并網(wǎng)光伏發(fā)電市場(chǎng)的迅速發(fā)展,讓它受到了世界各地的關(guān)注。
目前,太陽(yáng)能電池的應(yīng)用已經(jīng)逐漸廣泛得到推廣,眾所周知,沙漠地區(qū)由于氣溫特別高,因此最具有大規(guī)模開發(fā)太陽(yáng)能的潛力,這使得沙漠等偏遠(yuǎn)地區(qū)對(duì)其的使用更加方便,并且能減低甚至節(jié)省昂貴的輸電線路,從長(zhǎng)遠(yuǎn)發(fā)展?fàn)顩r來(lái)看,隨著改善太陽(yáng)能電池制造技術(shù)和新的光 - 電轉(zhuǎn)換裝置發(fā)明,國(guó)家環(huán)保和清潔能源,光伏發(fā)電系統(tǒng)和太陽(yáng)能發(fā)電的巨大需求恢復(fù)將繼續(xù)利用太陽(yáng)輻射能比較實(shí)用方法,這可以為人類以后能使用太陽(yáng)能提供了廣闊的開辟前景[4]。
當(dāng)代社會(huì)太陽(yáng)能手機(jī)充電器得到了一定的使用,它具有運(yùn)用方便,環(huán)保,節(jié)能,格外使用于應(yīng)急場(chǎng)合,高效率充電,性價(jià)比較高,讓大家無(wú)論身處何處,都不會(huì)受到手機(jī)沒(méi)電的困擾[5]。借此太陽(yáng)能手機(jī)充電器的眾多優(yōu)點(diǎn),因此提出本課題。
1.2 課題設(shè)計(jì)思想
基于單片機(jī)的太陽(yáng)能充電器的設(shè)計(jì)是本次探導(dǎo)的課題。首先,由于太陽(yáng)能電池板的電壓會(huì)隨太陽(yáng)光的強(qiáng)度波動(dòng),強(qiáng)烈的太陽(yáng)光的太陽(yáng)能電池板的電壓是高的數(shù),當(dāng)太陽(yáng)光弱的強(qiáng)度,所述太陽(yáng)能電池板的輸出電壓低時(shí),從太陽(yáng)能電池板的輸出到穩(wěn)定的電壓[6]。本設(shè)計(jì)采用了穩(wěn)壓器LM7805 , LM7805輸出端口可以輸出穩(wěn)定的5V電壓,因?yàn)殡娏梢杂糜趩涡酒推渌酒,其次,作為下一個(gè)電源電壓轉(zhuǎn)換電路。第二,考慮到電池的充電過(guò)程的電壓要求各不相同,不能簡(jiǎn)單穩(wěn)定的直流輸出,因此提出了利用DC / DC轉(zhuǎn)換器電路的,通過(guò)控制關(guān)斷時(shí)間的占空比,以調(diào)節(jié)輸出電壓。 SCM是控制中心,在控制信號(hào)產(chǎn)生電路是由充電過(guò)程的一個(gè)外部狀態(tài)產(chǎn)生的,外部充電電壓的比較信號(hào)和充電電流與理想充電過(guò)程中,占空比調(diào)節(jié)。單個(gè)微控制器設(shè)計(jì)用于該目的,所述電壓檢測(cè)電路和一個(gè)電流檢測(cè)電路,并且為了方便用戶知道系統(tǒng)的狀態(tài),設(shè)計(jì)設(shè)置在顯示模塊和指標(biāo)。
1.3 文檔結(jié)構(gòu)
    本文檔第一部分介紹了當(dāng)前的形勢(shì)和太陽(yáng)能電池和太陽(yáng)能光伏發(fā)電系統(tǒng),本研究的背景,并提出了設(shè)計(jì)思路的發(fā)展前景;第二部分論述整個(gè)系統(tǒng)的設(shè)計(jì)方案;第三部分介紹了系統(tǒng)的硬件電路設(shè)計(jì);第四部分進(jìn)行了系統(tǒng)軟件設(shè)計(jì);第五部分進(jìn)行了系統(tǒng)仿真分析;第六部分分析了該設(shè)計(jì)的成果和前景。

基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)總體方案設(shè)計(jì)
2.1 設(shè)計(jì)方案一
方案一方框圖如圖2.1所示

圖2.1方案一方框圖
該程序使用的DC / DC轉(zhuǎn)換電路,將太陽(yáng)能電池板輸出的電壓變換為需要的電壓值給手機(jī)電池充電,同時(shí)單片機(jī)可以控制電路變換,還可采用按鍵設(shè)定某些值,有顯示部分,可以設(shè)定為顯示電路狀態(tài)?梢詮脑搱D中的框圖中可以看出,該程序能夠控制DC / DC變換器電路,顯示模塊,但該程序是沒(méi)有實(shí)時(shí)檢測(cè)的外部電路,而不是用DC / DC實(shí)時(shí)控制根據(jù)外部電路的條件轉(zhuǎn)換電路。
2.2 設(shè)計(jì)方案二
借于方案一存在的缺點(diǎn),所以在此提出第二種方案,方案二方框圖如下圖2.2。
圖2.2 方案二方框圖
如從圖2可以看出,以彌補(bǔ)設(shè)計(jì)用于檢測(cè)電路的狀態(tài)的方案的缺點(diǎn),并通過(guò)模擬轉(zhuǎn)換到數(shù)字的轉(zhuǎn)換模塊的信號(hào)到微控制器。 PWM控制芯片微控制器可以產(chǎn)生施加PWM波轉(zhuǎn)換電路的控制主要模塊和顯示模塊,但此次方案是將生成PWM部分用芯片替換,這使得電路復(fù)雜硬件部分的設(shè)計(jì),它是更好地使用軟件允許硬件電路簡(jiǎn)單,而且還能充分利用單片機(jī)的功能。
2.3基于單片機(jī)的太陽(yáng)能充電器的設(shè)計(jì)的總體設(shè)計(jì)方案
綜合以上兩種方案提出本次設(shè)計(jì)的整體設(shè)計(jì)框圖如下圖2.3所示。
圖2.3 整體設(shè)計(jì)框圖   
相對(duì)于前兩種方案,此整體方案顯示的優(yōu)點(diǎn),不僅能對(duì)充電電路進(jìn)行檢測(cè),單片機(jī)還可以根據(jù)充電電路的關(guān)鍵電路的信號(hào)處理后的分析來(lái)檢測(cè)的情況進(jìn)行控制可以選擇系統(tǒng)可以實(shí)現(xiàn)功能。顯示電路可以顯示用于實(shí)現(xiàn)本方案的電路中,PWM控制信號(hào)的工作狀態(tài),從而使硬件電路非常簡(jiǎn)單,節(jié)省資源,提高系統(tǒng)的性能。

3 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的硬件設(shè)計(jì)3.1太陽(yáng)能電池板的選用
太陽(yáng)能電池板是通過(guò)吸收太陽(yáng)光,將太陽(yáng)輻射能通過(guò)光電效應(yīng)或者光化學(xué)效應(yīng)直接或間接轉(zhuǎn)換成電能的裝置,大部分太陽(yáng)能電池板的主要材料為“硅”,但因制作成本很大,以致于它還不能被大量廣泛和普遍地使用。硅太陽(yáng)能電池分為晶體硅電池板,非晶硅電池板等幾種。單晶硅太陽(yáng)能電池的光電轉(zhuǎn)換效率為15%左右,最高通?梢赃_(dá)到24%,它是所有種類的太陽(yáng)能電池中光電轉(zhuǎn)換效率最高的,但制作成本很大,以致于它還不能被普遍地使用,因?yàn)閱尉Ч柰ǔ?huì)用鋼化玻璃和防水樹脂包裝起來(lái),所以會(huì)十分耐用,通常能用十幾年,最長(zhǎng)可以用25年。多晶硅太陽(yáng)電池的制作過(guò)程與單晶的差不多,可相對(duì)而言起光電轉(zhuǎn)換效率要比單晶降低很多,其效率大概在12%左右 (其中世界上最高的多晶硅轉(zhuǎn)換效率為14.8%)[7]。但如果我們從制作費(fèi)用上來(lái)講,多晶硅的由于制造簡(jiǎn)單,節(jié)能節(jié)電,因此其生產(chǎn)費(fèi)用就會(huì)降低不少,從而得到了一定的發(fā)展。另外,其使用年限沒(méi)有單晶硅太陽(yáng)能電池那么長(zhǎng)。如果從性價(jià)比來(lái)說(shuō),自然是單晶硅太陽(yáng)能電池還略好。接下來(lái)我們說(shuō)下非晶硅太陽(yáng)電池,它是1976年出現(xiàn)的新型薄膜式太陽(yáng)電池,其制造過(guò)程得到了很多簡(jiǎn)化,對(duì)硅材料的使用很少,電耗也更低,它突出的優(yōu)點(diǎn)是在很多情況下都能發(fā)電包括弱光時(shí)候。但它也有一定的問(wèn)題,就是光電轉(zhuǎn)換效率相對(duì)而言偏低,就算國(guó)際上的先進(jìn)水平也只大約在10%,不夠穩(wěn)定,時(shí)間越久,其轉(zhuǎn)換效率會(huì)衰減。
根據(jù)所需要的不同數(shù)目的太陽(yáng)能電池,其轉(zhuǎn)換效率是通過(guò)光,溫度和結(jié)晶型太陽(yáng)能電池的制造工藝和其他因素的影響,2010年中國(guó)平均效率接近為18%,一般的太陽(yáng)能電池電壓有很多種,其主要用于太陽(yáng)能發(fā)電。
太陽(yáng)能電池板的太陽(yáng)能發(fā)電系統(tǒng)是其工作的基礎(chǔ),是充電器的第一部分,其功能是將太陽(yáng)光轉(zhuǎn)為電能,如今更多種類型的便攜式數(shù)字設(shè)備,電壓和電流范圍所需的輸入功率較大的器件,面積較大,必須使用太陽(yáng)能電池板,這給了攜帶不便。因此,模塊化設(shè)計(jì)的組合,可根據(jù)不同的負(fù)載充電需求,太陽(yáng)能電池板組合起來(lái)以實(shí)現(xiàn)一組光伏電池在某個(gè)期望的輸出功率和輸出電壓。本文通過(guò)一些常用的小功率設(shè)備例如手機(jī),來(lái)講解太陽(yáng)能充電器設(shè)計(jì)的過(guò)程。
3.2 LM7805穩(wěn)壓電路
由于太陽(yáng)能電池板的電壓會(huì)隨太陽(yáng)光的強(qiáng)度波動(dòng),強(qiáng)烈的太陽(yáng)光會(huì)使太陽(yáng)能電池板的電壓變高,當(dāng)太陽(yáng)光強(qiáng)度變?nèi)鯐r(shí),自然會(huì)使電池板輸出電壓變低。為了獲得到穩(wěn)定的輸出,本設(shè)計(jì)應(yīng)用穩(wěn)壓管LM7805,其輸出口能輸出穩(wěn)定的所需要電壓(5V),以便能保持穩(wěn)定的輸出電壓。典型LM7805的應(yīng)用電路圖如圖3.1所示。


圖3.1 LM7805穩(wěn)壓電路圖
圖中C4、C7的是用于清除因長(zhǎng)期連接時(shí)由于電感效應(yīng)產(chǎn)生的自激振蕩,降低了紋波電壓,在其輸出端接上電容C6、C5的作用是清除電路高頻產(chǎn)生的噪聲,以便提高所用負(fù)載的瞬態(tài)響應(yīng)。一般來(lái)說(shuō)電容的耐壓性都會(huì)比電源輸入、輸出電壓要強(qiáng)。此外,在穩(wěn)壓器輸入、輸出端之間加上二極管,可以避免對(duì)穩(wěn)壓器的破壞,從而實(shí)現(xiàn)對(duì)LM7805的保護(hù)。
LM7805輸入電壓在7V至37V之間,其最大工作電流可達(dá)1.5A,且擁有電路精簡(jiǎn),電流輸出高,運(yùn)行工作穩(wěn)定,即使電壓不穩(wěn)定,也能使太陽(yáng)能電池?fù)碛胁蛔兊妮敵鲭妷海?V),最后能讓單片機(jī)控制的電路正常穩(wěn)定的運(yùn)行,并且性價(jià)比高,不需要消耗多余的材料。
3.3 充電主電路的設(shè)計(jì)
充電主電路圖如圖3.2所示。


圖3.2電池充電電路圖
DC/DC變換是將直流電能(DC)轉(zhuǎn)換成另一種固定電壓或電壓可調(diào)的直流電能,又可稱成直流斬波[8]。若其輸出電壓較輸入之電源電壓低,則稱為降壓式(Buck )直流斬波器即頻率調(diào)制(1)Buck電路,若其輸出電壓較輸入之電源電壓高,則稱為升壓式(Boost)直流斬波器。主電路核心由圖可以看出,主要由三部分組成即電感L1,三極管區(qū)和續(xù)流二極管D1,其也就形成了一個(gè)完整的BUCK降壓DC/DC轉(zhuǎn)換電路;上圖Q2是具有將PWM信號(hào)打開變大,從而到達(dá)驅(qū)動(dòng)Q1開關(guān)管的功能。
3.4 信號(hào)采集處理電路
為了使鋰電池能完成安全充電,本設(shè)計(jì)的電流取樣處理電路圖如下圖3.3所示

圖3.3電流取樣處理電路圖

電池電壓與單片機(jī)A/D接口相連,通過(guò)A/D轉(zhuǎn)換和微控制器即單片機(jī),以獲得測(cè)量的電壓值得到計(jì)算處理。此次充電電流通過(guò)0.1Ω的取樣電阻,產(chǎn)生的電壓再使用LM358,將電流取樣電壓放大相應(yīng)的倍數(shù)后輸?shù)絾纹瑱C(jī)A/D接口進(jìn)行采集。電壓檢測(cè)輸出電壓直接進(jìn)行模數(shù)轉(zhuǎn)換之后被發(fā)送到A/D輸入接口的單片機(jī)進(jìn)行處理。
3.5 單片機(jī)選型
單片機(jī)型號(hào)眾多,但大家熟悉了解的就那么幾種類型。我們?cè)趯W(xué)校接觸到的也就是C51系列,C51是51單片機(jī)C語(yǔ)言程序設(shè)計(jì)的簡(jiǎn)稱,由于接觸到的單片機(jī)以型號(hào)為AT開頭的為多,所以選用了型號(hào)是AT89C51為此次設(shè)計(jì)的單片機(jī)。
3.6 單片機(jī)AT89C51介紹
AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)[9]。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。AT89C51單片機(jī)引腳圖如下圖3.4所示。
圖3.4 單片機(jī)引腳圖
以下為其引腳功能及作用
VCC:供電電壓。
GND:接地。
P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須接上拉電阻。
P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為低八位地址接收。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下表所示:
口管腳 備選功能
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(計(jì)時(shí)器0外部輸入)
P3.5 T1計(jì)時(shí)器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)
P3.7 /RD外部數(shù)據(jù)存儲(chǔ)器讀選通)
P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。
/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
XTAL2:來(lái)自反向振蕩器的輸出。
3.7 單片機(jī)電路
3.7.1單片機(jī)復(fù)位電路
單片機(jī)復(fù)位電路圖如圖3.5所示。
圖3.5復(fù)位電路圖
當(dāng)系統(tǒng)正常工作時(shí),由于上圖使用的是按鍵復(fù)位,當(dāng)電源給電容充電的過(guò)程中,會(huì)使電容存儲(chǔ)的電能增加,致使單片機(jī)復(fù)位端電平減低,這時(shí)候得人為的按下鍵,才能使電平變高,單片機(jī)收集到信號(hào)后就會(huì)自動(dòng)復(fù)位。
3.7.2 單片機(jī)時(shí)鐘電路
單片機(jī)可作為驅(qū)動(dòng)時(shí)鐘定時(shí)邏輯電路,在其工作過(guò)程中可以看出,所有的工作都是在時(shí)鐘信號(hào)的控制下進(jìn)行的,當(dāng)執(zhí)行一個(gè)指令事,CPU控制器必須發(fā)出一系列特定的控制信號(hào)。單片機(jī)時(shí)鐘電路圖如圖3.6所示
圖3.6單片機(jī)時(shí)鐘電路圖
3.7.3 單片機(jī)A/D轉(zhuǎn)換電路
ADC0809是8位的采樣分辨率,以模擬數(shù)字轉(zhuǎn)換的逐次逼近原理。ADC0809由一個(gè)8通道模擬開關(guān),地址鎖存器,解碼器, A/D轉(zhuǎn)換器。內(nèi)部有一個(gè)8通道多路復(fù)用器,它能根據(jù)信號(hào)的地址鎖存譯碼后,門控8模擬輸入信號(hào)的A/D轉(zhuǎn)換。多路開關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用A/D轉(zhuǎn)換器轉(zhuǎn)換。數(shù)字鎖存器的A/D轉(zhuǎn)換完成三態(tài)輸出鎖存器,當(dāng)OE端為高電平,可以從三態(tài)輸出鎖存器的數(shù)據(jù)轉(zhuǎn)換。A/D轉(zhuǎn)換的數(shù)據(jù)要發(fā)送數(shù)據(jù)后,應(yīng)該傳給單片機(jī)進(jìn)行處理。關(guān)鍵的問(wèn)題是如何確定數(shù)據(jù)的A/D轉(zhuǎn)換完成轉(zhuǎn)移,因?yàn)橹挥写_認(rèn)完成后,可以發(fā)送。A/D轉(zhuǎn)換電路圖如圖3.7所示
     圖3.7 A/D電路圖
ADC0809的引腳功能及作用
IN0~I(xiàn)N7:8路模擬量輸入端。
2-1~2-8:8位數(shù)字量輸出端。
ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路。
ALE:地址鎖存允許信號(hào),輸入端,高電平有效。
START: A/D轉(zhuǎn)換啟動(dòng)脈沖輸入端,輸入一個(gè)正脈沖(至少100ns寬)使其啟動(dòng)(脈沖上升沿使0809復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換)。
EOC: A/D轉(zhuǎn)換結(jié)束信號(hào),輸出端,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸出一個(gè)高電平(轉(zhuǎn)換期間一直為低電平)。
OE:數(shù)據(jù)輸出允許信號(hào),輸入端,高電平有效。當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸入一個(gè)高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。
CLK:時(shí)鐘脈沖輸入端。要求時(shí)鐘頻率不高于640KHz。
REF(+)、REF(-):基準(zhǔn)電壓。
Vcc:電源(+5V)。
GND:接地。
3.7.4按鍵電路
按照鍵盤與單片機(jī)的連接方式分為獨(dú)立式鍵盤和矩陣式鍵盤[11]。獨(dú)立式鍵盤相互獨(dú)立,每個(gè)按鍵占用一根I/O口線,每根I/O口線上的按鍵工作狀態(tài)對(duì)其他按鍵的工作狀態(tài)不會(huì)產(chǎn)生不好作用。這種按鍵軟件程序簡(jiǎn)單,但占用I/O口線較多(一根口線只能接一個(gè)鍵),適用于鍵盤應(yīng)用數(shù)量較少的系統(tǒng)中。矩陣式鍵盤又稱行列式鍵盤,與獨(dú)立式鍵盤對(duì)比,單片機(jī)口線資源利用率提高了一倍。
按鍵接線圖如圖3.8所示。

圖3.8按鍵電路圖

鍵盤抖動(dòng)的時(shí)間一般為5~10ms,抖動(dòng)現(xiàn)象會(huì)引起CPU對(duì)一次鍵操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤,因而必須設(shè)法消除抖動(dòng)的不良后果。通過(guò)去抖動(dòng)處理,可以得到按鍵閉合與斷開的穩(wěn)定狀態(tài)。為了準(zhǔn)確判斷閉合鍵的位置,要對(duì)每個(gè)按鍵進(jìn)行編碼。根據(jù)矩陣式鍵盤的結(jié)構(gòu),采用行掃描的鍵位識(shí)別方法。使某條列線為低電平,如果這條列線上沒(méi)有閉合鍵,則各行線的狀態(tài)都為高電平;如果列線上有鍵閉合,則相應(yīng)的那條行線即變?yōu)榈碗娖。于是就可以根?jù)行線號(hào)與列線號(hào)計(jì)算出閉合鍵的鍵碼。掃描時(shí)由第一列開始,即由PA口先輸出0FEH,然后由PC口輸入行線狀態(tài),判斷哪一行有鍵閉合,若無(wú)鍵閉合,再輸出0FDH檢測(cè)下一列各行鍵閉合狀態(tài),由此一直掃描下去。
在這個(gè)設(shè)計(jì)中,按鍵的數(shù)量設(shè)置為3,它們中的一個(gè)作為一個(gè)復(fù)位按鈕;另一個(gè)作為電壓按鍵,這樣的設(shè)計(jì)提供3V,3.5V,4.0V,4.5V為周期的四個(gè)電壓值,可以“電壓選擇”鍵選擇一個(gè)電壓輸出;另一個(gè)開始充電,裝上一個(gè)電池為電池充電,當(dāng)按下“開始充電”按鈕,系統(tǒng)開始為鋰電池充電。因此,使用一個(gè)獨(dú)立的密鑰的方法,它可以減少編程的難度。
3.7.5數(shù)碼管顯示電路
LED數(shù)碼管組成的多個(gè)發(fā)光二極管打包在一起,以形成“8”字狀的裝置中,連接導(dǎo)線已在內(nèi)部做好,只要能導(dǎo)致它們導(dǎo)出各自的筆劃,公共電極。
數(shù)碼管顯示電路圖如圖3.9所示

圖3.9 數(shù)碼管顯示電路圖

本設(shè)計(jì)使用四位LED數(shù)碼管數(shù)碼管段加小數(shù)點(diǎn)為7或8個(gè)數(shù)碼管,數(shù)碼管有兩種陰陽(yáng),本設(shè)計(jì)采用共陰極數(shù)碼管,8段LED陰極接地連接在一起,陽(yáng)極當(dāng)某一高電平時(shí),二極管被點(diǎn)亮而發(fā)光,設(shè)計(jì)時(shí)允許數(shù)碼管陽(yáng)極的某一組合被設(shè)置高。
3.8鋰電池充電原理
鋰電池充電的工作原理就是指其充放電原理。充電時(shí)鋰離子由正極向負(fù)極運(yùn)動(dòng)而嵌入石墨層中。放電時(shí),鋰離子從石墨晶體內(nèi)負(fù)極表面脫離移向正極。所以,在該電池充放電過(guò)程中鋰總是以鋰離子形態(tài)出現(xiàn),而不是以金屬鋰的形態(tài)出現(xiàn)。一般而言電池容量指的就是放電容量?梢钥吹,鋰電池在充放電的過(guò)程中,鋰離子是存在于正極 → 負(fù)極 → 正極的運(yùn)動(dòng)狀態(tài)。如果我們把鋰電池形象地比喻為一把搖椅,搖椅的兩端為電池的兩極,而鋰離子就象優(yōu)秀的運(yùn)動(dòng)健將,在搖椅的兩端來(lái)回奔跑。
鋰蓄電池的充電特性曲線圖如圖3.10所示:

圖3.10鋰電池充電特性曲線圖
為保證安全充電,對(duì)鋰離子電池充電要求首先是在充電時(shí)保持電流不變,電池電壓會(huì)在充電過(guò)程中漸漸升高,當(dāng)電池端電壓達(dá)到4.2V(4.1V),會(huì)改變充電狀態(tài),即變化為電壓不變的恒壓充電。電流會(huì)依照電芯的飽和程度,隨著充電過(guò)程的漸漸降低,當(dāng)降低到0.01CA時(shí),認(rèn)為充電終止。大家注意,其中C是以電池標(biāo)稱容量對(duì)照電流的一種表示方法,如電池是1000mAh的容量,1C就是充電電流1000mA,注意是mA而不是mAh,0.01CA就是10mA。當(dāng)然,規(guī)范的表示方式是0.01C5A。



4 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的軟件設(shè)計(jì)
4.1 設(shè)計(jì)思

首先主程序由初始化段和循環(huán)主體段兩部分組成,在執(zhí)行循環(huán)體時(shí),需要一個(gè)個(gè)的調(diào)用所需的任務(wù)模塊,不會(huì)直接去執(zhí)行程序,其中每一個(gè)任務(wù)為一個(gè)子函數(shù),這種機(jī)制也叫稱為輪詢機(jī)制。舉個(gè)例子說(shuō)明:就是當(dāng)一個(gè)正在被主程序執(zhí)行的子函數(shù),它會(huì)自動(dòng)確認(rèn)其執(zhí)行條件有無(wú)可行性,如果可以就執(zhí)行,反之,就會(huì)返回。按鍵處理是以10ms為周期的選擇一次。PWM的控制調(diào)節(jié)不能過(guò)快,最好以200ms為周期,如果太快,會(huì)影響到數(shù)碼管刷屏,A/D采樣速度也是一樣。
子程序主要由4部分組成,包括初始化程序,PWM波程序,按鍵采集程序,信號(hào)采集與轉(zhuǎn)換程序;如果從系統(tǒng)表現(xiàn)出的功能來(lái)看,又可以分成充電子程序、電源子程序,這兩程序都會(huì)用到子程序的4個(gè)程序。
本次設(shè)計(jì)使用的PWM波是可以掌控開關(guān)管的占空比,它的生成是運(yùn)用了輸出在低電平和高電平的轉(zhuǎn)換、延時(shí)。即當(dāng)輸出為低電平時(shí),將輸出信號(hào)放大驅(qū)動(dòng)開關(guān)管斷開,反之,如果其為高電平時(shí),開關(guān)管則會(huì)打開。開關(guān)管的占空比是通過(guò)低電平和高電平的時(shí)間的比值(即PWM波的占空比)來(lái)控制。
本設(shè)計(jì)單片機(jī)采用AT89C51芯片,由于其內(nèi)部沒(méi)有AD轉(zhuǎn)換模塊,單片機(jī)需外接轉(zhuǎn)換模塊,本設(shè)計(jì)采用ADC0809,模擬信號(hào)輸入有兩路,一路是電壓信號(hào),一路是電流信號(hào)。ADC0809 在對(duì)多路輸入的模擬量進(jìn)行模數(shù)轉(zhuǎn)換時(shí)采用分時(shí)復(fù)用的方法,即AD轉(zhuǎn)換器對(duì)兩路信號(hào)輪換采集轉(zhuǎn)換。輪換周期根據(jù)模數(shù)轉(zhuǎn)換時(shí)間和控制的情況設(shè)定。

4.2 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的整體程序設(shè)計(jì)            
本設(shè)計(jì)由單片機(jī)程序控制來(lái)實(shí)現(xiàn)整體工作,其工作過(guò)程主要為:電路啟動(dòng)初始化,電路功能的選擇,輸出選擇及確定輸出,單片機(jī)集合計(jì)算輸出PWM信號(hào),定時(shí)采集數(shù)據(jù)及處理調(diào)節(jié)PWM信號(hào)占空比等,程序整體框架圖如下圖4.1所示。


圖4.1 程序整體框架流程圖
4.3 基于單片機(jī)的太陽(yáng)能充電器系統(tǒng)的子程序的設(shè)計(jì)
4.3.1電路啟動(dòng)初始化
初始化設(shè)置初始運(yùn)行環(huán)境為單片機(jī)運(yùn)行,主要完成以下任務(wù):清理片內(nèi)RAM,每一個(gè)微控制器上電,上電復(fù)位將導(dǎo)致單片機(jī)操作。在復(fù)位操作完成后,單芯片寄存器將被設(shè)置為不同的值,該值的一個(gè)相當(dāng)大的部分是未知的。在微控制器的復(fù)位完成這些未知的值,正式工作后,會(huì)產(chǎn)生不能讓程序員掌握的后果,甚至?xí)䲟p壞系統(tǒng)。因此,微控制器運(yùn)行后,先設(shè)置為0,這樣的初始參數(shù)設(shè)置,方便編程人員掌握,以方便系統(tǒng)的工作。設(shè)置系統(tǒng)運(yùn)行所需的參數(shù),設(shè)置定時(shí)器和中斷設(shè)置。
初始化程序流程圖如下圖4.2所示。
圖4.2 初始化程序流程圖
4.3.2按鍵采集程序
鍵盤子程序用于檢測(cè)開關(guān),是否在有效的開關(guān)狀態(tài)來(lái)決定是否啟動(dòng)系統(tǒng)運(yùn)行。讀線、讀取、連接到該端口,它的值存儲(chǔ)處理后確定相關(guān)的緩存?赐甓丝谠谄渲凶隽艘欢ǖ难舆t,以排除引起的誤動(dòng)作鍵晃動(dòng)。按鍵子程序結(jié)構(gòu)流程圖如圖4.3所示。
圖4.3按鍵子程序結(jié)構(gòu)流程圖
4.3.3數(shù)據(jù)采集及模數(shù)轉(zhuǎn)換程序
數(shù)據(jù)收集主要是由單片機(jī)控制ADC0809來(lái)完成,該方案分為數(shù)據(jù)初始化,發(fā)送一個(gè)命令到開始轉(zhuǎn)換,等待轉(zhuǎn)換結(jié)束,接收數(shù)據(jù),處理且存儲(chǔ)在緩存中,程序流程如圖4.4所示。

圖4.4 數(shù)據(jù)采集子程序結(jié)構(gòu)流程圖
4.3.4數(shù)碼管顯示子程序
開機(jī)時(shí),先讓數(shù)碼管初始化,通過(guò)串口為“0”字形碼輸出使數(shù)碼管顯示“O”。然后來(lái)確認(rèn)按鍵是否被按下,如果沒(méi)有鍵被按下繼續(xù)確認(rèn)。
顯示子程序時(shí)要先初始化串口,以致串口工作會(huì)顯示在方式0,以便讀取顯示緩沖區(qū)的數(shù)據(jù)(其用來(lái)存儲(chǔ)數(shù)據(jù)也就是將被顯示出來(lái)的數(shù)據(jù)),然后找到通過(guò)字形碼查表相應(yīng)的方式,再將字形碼寫入串口寄存器SBUF通過(guò)串口方式0發(fā)送出去顯示。子程序是如何顯示在緩沖區(qū)中的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的字形碼呢?具體方法是,從小型字形碼到每一位十六進(jìn)制數(shù)到大的順序固定區(qū)域,以便存儲(chǔ)在表單中顯示出來(lái)碼表的記憶。當(dāng)要顯示的字符,該表的起始地址到數(shù)據(jù)指針DPTR寄存器為基地,在顯示緩沖區(qū)中的數(shù)據(jù)作為偏移到索引寄存器A,查表“MOVCA,@ A + DPTR“,在取出相應(yīng)數(shù)字的字形碼其是通過(guò)累加器A得到的結(jié)果。

4.3.5 充電子程序的設(shè)計(jì)
充電過(guò)程分兩階段進(jìn)行,第一階段為預(yù)充電,充電電流以0.01CA的小電流進(jìn)行充電;第二階段,當(dāng)充電電壓達(dá)到3V時(shí)轉(zhuǎn)入第二階段(一般認(rèn)為三分鐘后電池電壓大于3V),以0.5CA的電流進(jìn)行恒流充電方式,。電流降到小于0.01CA時(shí),表明電池已充到額定容量,如果繼續(xù)充下去,充電電流會(huì)慢慢降低到零,電池完全充滿[4]。充電過(guò)程中,“充電”指示燈亮;充滿時(shí),“充飽”指示燈亮,“充電”指示燈滅,通過(guò)按鍵設(shè)置可控制充電時(shí)間。充電子程序流程圖如圖4. 5所示。
圖4.5 充電子程序圖
4.3.6電源子程序的設(shè)計(jì)            
與傳統(tǒng)的手機(jī)充電器相比,本次設(shè)計(jì)的太陽(yáng)能手機(jī)充電器最大的優(yōu)點(diǎn)是不僅能夠?yàn)殡姵刂苯映潆姡部捎米饕话阒绷麟娫。該系統(tǒng)存在并且可以有3V,3.5V,4V,4.5V四種電壓輸出,這可以用來(lái)選擇一個(gè)按鈕作為輸出電壓。直流輸出可直接給手機(jī)充電,或作為電源等小型電子設(shè)備,如MP4。輸出電壓可以是一個(gè)數(shù)字顯示,以及完善一個(gè)過(guò)流保護(hù)作用,以確保能安全使用的電子產(chǎn)品。
電源程序流程圖如圖4.6所示。


圖4.6 電源子程序結(jié)構(gòu)流程圖



5
仿真與調(diào)試
5.1 充電電路仿真
總所周知buck斬波電路中調(diào)整輸出電壓值的變化是由控制開關(guān)管開通與關(guān)斷時(shí)間控制, multisim仿真電路如下圖5.1所示

              圖5.1電壓檢測(cè)仿真圖
5.2 電流采樣處理電路仿真
上面提出將電流采樣電壓是采用LM358電路讓其放大到相應(yīng)倍后再輸送到單片機(jī)的A/D接口,輸入的電壓是5V時(shí),輸出時(shí)的電壓則為125V,這樣就能看出其電路所具有放大多少倍(計(jì)算可得21倍)的功能。如下圖5.2所示
圖5.2電流采樣處理電路仿真圖

5.3系統(tǒng)做直流電源使用時(shí)電路仿真圖
Protues軟件因?yàn)椴淮嬖谔?yáng)能電池模擬模塊,所以在仿真時(shí)我們把穩(wěn)壓輸出電壓值用直流電源電壓為5V的來(lái)更換,當(dāng)數(shù)字到達(dá)3時(shí),表示充電已經(jīng)完成。按復(fù)位鍵會(huì)顯示0,點(diǎn)開始鍵表示開始充電。整體電路仿真圖如下圖5.4所示


圖5.3 整體電路仿真圖
5.4 系統(tǒng)做充電器使用時(shí)仿真結(jié)果
充電器在運(yùn)行過(guò)程中它會(huì)隨著充電的進(jìn)行,充電電壓會(huì)漸漸升高,指示燈會(huì)從0逐漸變成3,此過(guò)程可表示充電從開始到結(jié)束。仿真結(jié)果如下圖5.4、5.5、5.6所示。

圖5.4 充電過(guò)程仿真

圖5.5 充電過(guò)程仿真


圖5.6 充電過(guò)程仿真

總結(jié)與展望
時(shí)光飛逝,離開大學(xué)的日子也漸漸向我們走來(lái),隨之而來(lái)的設(shè)計(jì)也即將完成。通過(guò)一段時(shí)間的努力,我的設(shè)計(jì)的任務(wù)終于結(jié)束了。設(shè)計(jì)是對(duì)我們整個(gè)大學(xué)期間學(xué)習(xí)的一次總結(jié)性的檢驗(yàn),通過(guò)設(shè)計(jì)的過(guò)程能檢驗(yàn)我們大學(xué)期間的基礎(chǔ)理論學(xué)習(xí)是否扎實(shí),各種知識(shí)間的結(jié)合是否靈活,能否嚴(yán)格,全面,系統(tǒng)的結(jié)合所學(xué)的知識(shí)解決實(shí)際的問(wèn)題。經(jīng)過(guò)此次設(shè)計(jì),我才明白學(xué)習(xí)是一個(gè)長(zhǎng)期積累的過(guò)程,在以后的工作、生活中都應(yīng)該不斷的學(xué)習(xí),努力提高自己知識(shí)和綜合素質(zhì)。根據(jù)本次設(shè)計(jì)方案,我設(shè)計(jì)了一個(gè)由單片機(jī)控制的充電器,在充電過(guò)程中我們會(huì)看到方形波帶寬會(huì)逐漸變寬,并且會(huì)顯示出“1”,“2”,“3”數(shù)字,在充電完成后波形消失,顯示成一條直線,我設(shè)置了一個(gè)復(fù)位鍵,當(dāng)我按下鍵時(shí),它會(huì)重新充電。
本次設(shè)計(jì)能初步完成以上功能,但設(shè)計(jì)不足之處很多。主要表現(xiàn)在以下幾點(diǎn):第一、本此設(shè)計(jì)顯示模塊采用了數(shù)碼管,不如采用液晶顯示,硬件電路簡(jiǎn)單,能省去一些I/O口來(lái)實(shí)現(xiàn)更多的功能。第二,沒(méi)有采用溫度檢測(cè),一般快速充電電流會(huì)比較大,在不超過(guò)允許充電電流的情況下,電池溫度也會(huì)升高,若能加溫度監(jiān)測(cè)模塊,當(dāng)溫度超過(guò)允許值時(shí),終止充電會(huì)減少因溫度過(guò)高給電池帶來(lái)的危害。第三、沒(méi)有采用電能存儲(chǔ)裝置,不能存儲(chǔ)電能備天氣狀況不好并且沒(méi)有市電的情況使用,若有電能存儲(chǔ)功能,可以將系統(tǒng)閑置時(shí)太陽(yáng)能電池板轉(zhuǎn)化的電能存儲(chǔ)起來(lái),作為電源給別的用電設(shè)備使用,這樣可以即方便又節(jié)能環(huán)保。能源的日益緊張,太陽(yáng)能電池板、充放電控制器、蓄電池等構(gòu)成的產(chǎn)品都有了相對(duì)成熟的發(fā)展,相信不久之后太陽(yáng)能手機(jī)充電器的應(yīng)用將會(huì)變得普遍[9]。

附錄A 整體電路圖


致謝
在此要感謝周建華對(duì)我悉心的指導(dǎo),感謝給我的幫助。在設(shè)計(jì)過(guò)程中,我通過(guò)查閱大量有關(guān)資料,與同學(xué)交流經(jīng)驗(yàn)和自學(xué),不斷問(wèn)問(wèn)題,也非常細(xì)心仔細(xì)的教導(dǎo)我。這使自己學(xué)到了不少知識(shí),自然會(huì)經(jīng)歷了不少艱辛,但收獲同樣巨大。在整設(shè)計(jì)中讓我收獲頗多,不僅培養(yǎng)了我獨(dú)立工作的能力,也樹立了對(duì)自己一些能力的信心,相信會(huì)對(duì)今后的學(xué)習(xí)工作生活有非常重要的幫助。這也提高了動(dòng)手的能力,使我充分體會(huì)到了在創(chuàng)造過(guò)程中探索的艱難和成功時(shí)的喜悅?傊舜雾樌瓿,我由衷的感謝大家對(duì)我的幫助與支持。

源程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4.   sbit   P3_3=P3^3;              //開始充電
  5.   sbit   P3_4=P3^4;              //電壓切換
  6.   sbit   PWM=P3^5;
  7.   sbit EOC=P3^1;                                          //定義ADC0808的控制引腳/
  8.   sbit OE=P3^0;
  9.   sbit START=P3^2;
  10.   sbit P3_6=P3^6;
  11.   sbit P3_7=P3^7;
  12.   sbit wela=P2^1;
  13.   sbit dula=P2^0;
  14.   uchar   time=0,time1=0;  
  15.   uchar   period=40;  
  16.   uchar   high=6,high1=12;
  17.   uchar   th0=0;
  18.   uchar   tl0=1;
  19.   uchar   i=0,j=0;
  20.   uint x,z,n;
  21.   uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  22.   //uchar   n=0;
  23.   //uchar flag1;
  24.   //unsigned char volatile g_delay_count;
  25.   uchar disp[4]={0,0,0,0};  //顯示數(shù)據(jù),保存段碼,四位/
  26. //================================/
  27. void delay(uchar z)                            //100us延時(shí)子程序/
  28. {

  29. while(z--);
  30. }
  31. //==============================/
  32. void display()                            //定義顯示子函數(shù)/ 可以使用鎖存器實(shí)現(xiàn)
  33. {
  34. for(n=0;n<4;n++)
  35. {
  36. P0=0x00;
  37. dula=1;
  38. P0 =disp[1];       //顯示第一位小數(shù)
  39. dula=0;            
  40. wela=1;
  41. P0=0xfb;
  42. wela=0;
  43. delay(2);
  44. P0=0x00;
  45. dula=1;
  46. P0=disp[2];  //顯示第二位小數(shù)
  47. dula=0;            
  48. wela=1;
  49. P0=0xfd;                                                      
  50. wela=0;
  51. delay(2);
  52. P0=0x00;
  53. dula=1;
  54. P0 =disp[3];       //顯示第三位小數(shù)
  55. dula=0;            
  56. wela=1;
  57. P0=0xfe;
  58. wela=0;

  59. delay(2);
  60. P0=0x00;
  61. dula=1;
  62. P0 =disp[0]+0x80;      
  63. dula=0;            
  64. wela=1;
  65. P0=0xf7;
  66. wela=0;

  67. delay(2);
  68. }
  69. }
  70. //===============================/
  71. uint ADC0808()                              //定義ADC0808讀入數(shù)據(jù)子函數(shù),并通過(guò)函數(shù)返回/
  72. {
  73. uchar d ;
  74. uchar value;
  75. START=1;START=0;  //啟動(dòng)ADC0808,開始A/D轉(zhuǎn)換/
  76. while(!EOC);                                          //等待ADC0808,轉(zhuǎn)換結(jié)束,即EOC為高電平/
  77. OE=1;
  78. if(time1<high1)
  79. {d=P1;                                                                      //讀入數(shù)據(jù)/
  80. if(high1==16)
  81. {
  82.               value=0.4*d;
  83. }
  84.   else if(high1==20)
  85. {
  86.               value=0.5*d;
  87. }
  88.   else if(high1==24)
  89. {
  90.               value=0.6*d;
  91.   }
  92.   else if(high1==28)
  93. {
  94.               value=0.7*d;
  95.   }
  96.     else if(high1==32)
  97. {
  98.               value=0.8*d;
  99.   }
  100.     else if(high1==36)
  101. {
  102.               value=0.9*d;
  103.   }
  104. }                                                                      //允許ADC0808輸出數(shù)據(jù)  /
  105. if(time<high)
  106. {d=P1;                                                                      //讀入數(shù)據(jù)/
  107. if(high==8)
  108. {
  109.               value=0.2*d;
  110. }
  111.   else if(high==10)
  112. {
  113.               value=0.25*d;
  114.   }
  115. else if(high==12)
  116. {
  117.               value=0.3*d;
  118.   }
  119. else if(high==14)
  120. {
  121.               value=0.35*d;
  122.   }
  123. else if(high==16)
  124. {
  125.               value=0.4*d;
  126.   }
  127. else if(high==18)
  128. {
  129.               value=0.45*d;
  130.   }
  131. else if(high==20)
  132. {
  133.               value=0.5*d;
  134.   }
  135. else if(high==22)
  136. {
  137.               value=0.55*d;
  138.   }
  139. else if(high==24)
  140. {
  141.               value=0.6*d;
  142.   }
  143.    else if(high==26)
  144. {
  145.               value=0.65*d;
  146.   }
  147. else if(high==28)
  148. {
  149.               value=0.7*d;
  150.   }
  151. else if(high==30)
  152. {
  153.               value=0.75*d;
  154.   }
  155. else if(high==32)
  156. {
  157.               value=0.75*d;
  158.   }
  159. else if(high==34)
  160. {
  161.               value=0.8*d;
  162.   }
  163. else if(high==36)
  164. {
  165.               value=0.85*d;
  166.   }
  167. }
  168. OE=0;                                                                         //禁止ADC0808數(shù)據(jù)輸出/
  169. return value;                                                           //返回A/D轉(zhuǎn)換數(shù)據(jù)/
  170. }            
  171. //=================================/
  172. void convert(uint x)              //定義顯示碼轉(zhuǎn)換子函數(shù)/
  173. {
  174. uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};              //定義0~9顯示碼/
  175. x=x*1.0/255*5000;                                          //              處理數(shù)據(jù)使其在0~5v范圍內(nèi)/
  176. disp[3]=dispcode[x%10];              //第三位小數(shù),最低位/
  177. disp[2]=dispcode[x/10%10];              //第二位小數(shù)/
  178. disp[1]=dispcode[x/100%10];   //第一位小數(shù)/
  179. disp[0]=dispcode[x/1000];                //整數(shù)部分/
  180. }   
  181.   void   timer0()   interrupt   1   using   1  
  182.   {  
  183.             TH0=0xff;     /*定時(shí)器初值重裝載*/  
  184.             TL0=0xf6;           
  185.             time++;
  186.                                           if(time==high)   /*高電平持續(xù)時(shí)間結(jié)束,變低*/  
  187.                                           {  PWM=th0;                              /*經(jīng)過(guò)反相器反相*/
  188.                                                         }                                                           
  189.             else   if(time==period)     /*周期時(shí)間到,變高*/  
  190.                 {   time=0;  
  191.                     PWM=tl0;              /*經(jīng)過(guò)反相器反相*/            
  192.                 }
  193.                     }
  194.   void   timer1()   interrupt   3   using   3  
  195.   {  
  196.             TH1=0xff;     /*定時(shí)器初值重裝載*/  
  197.             TL1=0xf6;           
  198.             time1++;
  199.                                           if(time1==high1)   /*高電平持續(xù)時(shí)間結(jié)束,變低*/  
  200.                                                    
  201.                                              {  PWM=th0;                              /*經(jīng)過(guò)反相器反相*/
  202.                                                         }                                                           
  203.             else   if(time1==period)     /*周期時(shí)間到,變高*/  
  204.                 {   time1=0;  
  205.                     PWM=tl0;              /*經(jīng)過(guò)反相器反相*/            
  206.                 }
  207.                     }
  208. void main()  
  209.   {  
  210.         OE=0;                                             //ADC0808初始化/
  211.                   START=0;
  212.                             EOC=1;                                          //將單片機(jī)的引腳(EOC輸入端)置成輸入狀態(tài)/
  213.                             P3_3=0;
  214.                   P3_4=0;
  215.         P3_6=1;
  216.                             P3_7=1;
  217.         TMOD=0x11;   /*定時(shí)器0方式1*/  
  218.         TH0=0xff;     /*定時(shí)器裝載初值,設(shè)置脈沖信號(hào)的占空比為1/5*/  
  219.         TL0=0xf6;
  220.                             ET0=1;
  221. //                            TR0=1;
  222.       TH1=0xff;     /*定時(shí)器裝載初值,設(shè)置脈沖信號(hào)的占空比為1/5*/  
  223.         TL1=0xf6;
  224.                             ET1=1;
  225. //                            TR1=1;
  226.         while(1)   
  227.         {                                          
  228.                                           if(P3_3==1)
  229.                                {
  230.                                   EA=1;  /*開CPU中斷*/
  231.                                             TR0=1;
  232.                                             TR1=0;
  233.                                   P3_4=0;
  234.                             du: for(i=0;i<14;i++)
  235.                                              {      
  236.                                    P3_7=1;
  237.                                                                                       high1=0;
  238.                                                         high=high+2;
  239.                                                         for(j=0;j<5;j++)
  240.                                                         {              P3_6=0;
  241.                                                         convert(ADC0808());                 //每1s啟動(dòng)A/D轉(zhuǎn)換一次,把讀入數(shù)據(jù)轉(zhuǎn)換為顯示數(shù)據(jù)/
  242.                                                   display();
  243.                                                         delay(10);                  //              調(diào)用顯示子函數(shù)/
  244.                                                         }                              
  245.                                              }
  246.                                           if(high==34)
  247.                                           {
  248.                                                    P3_6=1;
  249.                                          P3_7=0;
  250.                                                                       delay(100);
  251.                                                                       TR0=0;
  252. }
  253.                                              }
  254.                               
  255.                             if(P3_4==1)
  256.                                           { TR0=0;
  257.                                             TR1=1;
  258.                                           P3_6=1;
  259.                                           EA=1;
  260.                                           high1=high1+4;
  261.                                           if(high1==40)
  262.                                           high1=16;
  263.                                           if(P3_3==1)
  264.                                           {P3_7=1;            
  265.                                           goto du;
  266.                                           }
  267.                                           while(P3_4!=0)
  268.                                  {};
  269.                                           convert(ADC0808());                 //每1s啟動(dòng)A/D轉(zhuǎn)換一次,把讀入數(shù)據(jù)轉(zhuǎn)換為顯示數(shù)據(jù)/
  270.                                             display();              //              調(diào)用顯示子函數(shù)/
  271.                                                         }
  272.                                           convert(ADC0808());                 //每1s啟動(dòng)A/D轉(zhuǎn)換一次,把讀入數(shù)據(jù)轉(zhuǎn)換為顯示數(shù)據(jù)/
  273.                                             display();              //              調(diào)用顯示子函數(shù)/                                         
  274.                               }               
  275.   }
復(fù)制代碼


評(píng)分

參與人數(shù) 2黑幣 +2 收起 理由
@常佩婷663730 + 1 共享資料的黑幣獎(jiǎng)勵(lì)!
201730645473 + 1 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏32 分享淘帖 頂4 踩
回復(fù)

使用道具 舉報(bào)

17#
ID:1028811 發(fā)表于 2023-12-20 22:26 來(lái)自手機(jī) | 只看該作者
膜拜,好厲害,不過(guò)我能在網(wǎng)上查看這些文獻(xiàn)嗎?
回復(fù)

使用道具 舉報(bào)

16#
ID:824664 發(fā)表于 2023-3-14 08:40 | 只看該作者
思路清晰,值得好好學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

15#
ID:1009425 發(fā)表于 2022-10-6 14:09 | 只看該作者
真厲害。能夠把簡(jiǎn)單的電路寫成幾千字的文章
回復(fù)

使用道具 舉報(bào)

14#
ID:1009680 發(fā)表于 2022-3-11 13:30 | 只看該作者
zqy181818 發(fā)表于 2017-3-16 10:30
挺好的,感謝分享。

這個(gè)挺好的 不錯(cuò)
回復(fù)

使用道具 舉報(bào)

13#
ID:23303 發(fā)表于 2022-3-10 14:27 | 只看該作者
學(xué)習(xí)一下,請(qǐng)樓主多幫助,謝謝!
回復(fù)

使用道具 舉報(bào)

12#
ID:975653 發(fā)表于 2021-10-28 17:12 | 只看該作者

大佬,可以提供一下proteus里面可以打開的仿真圖么
回復(fù)

使用道具 舉報(bào)

11#
ID:693628 發(fā)表于 2020-3-22 20:00 來(lái)自手機(jī) | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

10#
ID:713378 發(fā)表于 2020-3-22 14:16 | 只看該作者
非常有用謝謝
回復(fù)

使用道具 舉報(bào)

9#
ID:608425 發(fā)表于 2020-1-4 15:27 | 只看該作者
可以的
回復(fù)

使用道具 舉報(bào)

8#
ID:626139 發(fā)表于 2019-10-18 13:55 | 只看該作者
厲害&#128077;
回復(fù)

使用道具 舉報(bào)

7#
ID:487837 發(fā)表于 2019-3-19 19:06 | 只看該作者
膜拜大神
回復(fù)

使用道具 舉報(bào)

6#
ID:457099 發(fā)表于 2018-12-28 15:28 | 只看該作者
可以提供一下proteus里面可以打開的仿真圖么
回復(fù)

使用道具 舉報(bào)

5#
ID:414011 發(fā)表于 2018-11-6 13:23 | 只看該作者
好樣的
回復(fù)

使用道具 舉報(bào)

地板
ID:418175 發(fā)表于 2018-10-30 21:39 | 只看該作者
超級(jí)棒,這個(gè)總的電路原理圖有嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:310363 發(fā)表于 2018-5-3 10:54 | 只看該作者
能提供一下,原始圖檔嗎?方便我們更好的學(xué)習(xí),謝謝!
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:300456 發(fā)表于 2018-4-30 11:21 | 只看該作者
仿真圖有沒(méi)有更大更清晰的啊
回復(fù)

使用道具 舉報(bào)

樓主
ID:130231 發(fā)表于 2017-3-16 10:30 | 只看該作者
挺好的,感謝分享。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表