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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的通用型智能充電器設(shè)計(jì)

          基于單片機(jī)的通用型智能充電器設(shè)計(jì)

          ——
          作者:白三中 黃念慈 宋婷婷 時(shí)間:2007-06-14 來源:電源世界 收藏
          1 概 述

          電子信息技術(shù)的快速發(fā)展使得各種各樣的電子產(chǎn)品不斷涌現(xiàn),并朝著便攜和小型輕量化的趨勢發(fā)展,這也使得更多的電氣化產(chǎn)品采用基于電池的供電系統(tǒng)。目前,較多使用的電池有鎳鎘、鎳氫、鉛蓄電池和鋰電池,由于它們各自的優(yōu)缺點(diǎn)使得它們在相當(dāng)長的時(shí)期內(nèi)將共存發(fā)展[4]。由于不同類型的電池的充電特性不同,目前通常對不同類型,甚至不同電壓、容量等級的電池使用不同的充電器,這在實(shí)際使用中有諸多不便。本文設(shè)計(jì)了一種通用型的充電器,可對電壓等級為1.2V~48V的鎳鎘、鎳氫、鉛蓄電池和鋰電池進(jìn)行充電。為達(dá)到如此寬的充電范圍,充電電源采用二級電路拓?fù)?,并使用同一PWM信號源對兩級電路進(jìn)行聯(lián)動(dòng)控制。該電源在 85VAC~265VAC的通用輸入范圍內(nèi)均可實(shí)現(xiàn)1.2V(0.3A)~60V(1.6A)的寬范圍輸出。同時(shí)使用單片機(jī)進(jìn)行充電控制,先進(jìn)的慢脈沖快速充電法[4],并綜合使用定時(shí)控制、電壓控制和溫度控制來中止快速充電,確保不會(huì)因過充電而損傷電池。

          充電電源拓?fù)?src="/news/upload/20070614073221938.gif"

          2 充電電源的拓?fù)浣Y(jié)構(gòu)和控制方案

          由于要求充電電源的輸出變化范圍為1.2V(0.3A)~60V(1.6A),采用單級變換器很難實(shí)現(xiàn)這 么大的變化范圍,故采用了兩級結(jié)構(gòu),電源主電路如圖1所示,交流輸入經(jīng)整流濾波得到穩(wěn)定的直流電壓DCin,首先經(jīng)單端反激變換器預(yù)穩(wěn)壓,并實(shí)現(xiàn)輸入級與輸出級的隔離,然后再經(jīng)BUCK變換器進(jìn)一步降壓,得到所需輸出電壓。為了保證單端反激變換器能穩(wěn)定工作,加入了假負(fù)載R2。由于電池等效于一個(gè)大電容,故輸出端可不加濾波電容。 

          為簡化控制,采用同一PWM信號對兩級變換器進(jìn)行聯(lián)動(dòng)控制。單端反激變換器的的占空比一般應(yīng)不超過0.5,以減小開關(guān)管電壓應(yīng)力,而BUCK變換器則希望盡量提高占空比,以改善輸出電壓波形和動(dòng)態(tài)響應(yīng),因此,在保證能夠?qū)崿F(xiàn)所要求的輸出變化范圍的情況下,應(yīng)盡量提高BUCK變換器的占空比,這樣就不能采用完全相同的PWM信號同時(shí)控制兩級變換器。為此,本文給出了一種相對簡單的控制策略,使用同一 PWM信號變換出占空比不同的兩路PWM信號,分別控制兩級變換器,具體實(shí)現(xiàn)方法如下所述。

          對于任一方波信號,要改變其占空比(對應(yīng)于導(dǎo)通時(shí)間,即信號處于高電平狀態(tài)的時(shí)間),一般有兩種實(shí)現(xiàn)途徑:一是改變其導(dǎo)通時(shí)間而頻率保持不變,二是改變其頻率而導(dǎo)通時(shí)間保持不變。本文采用后一種途徑,即用PWM控制器輸出的信號直接控制BUCK變換器,而在保持導(dǎo)通時(shí)間不變的情況下將其信號進(jìn)行二分頻,得到占空比減半的信號來控制單端反激變換器。具體實(shí)現(xiàn)電路如圖2(a)所示,源信號經(jīng)分頻器二分頻,得到頻率減半的信號,再與源信號相與,即得到導(dǎo)通時(shí)間不變而頻率減半的信號。電路中各點(diǎn)波形參見圖2(b)。

          聯(lián)動(dòng)PWM控制信號的產(chǎn)生

          3 充電控制方案

          近年來,如何對電池高效、快速地充電成為充電技術(shù)研究的熱點(diǎn),國內(nèi)外研究人員也提出了不少快速充電方法,本文即參考了其中一種較實(shí)用的慢脈沖快速充電法,這種方法能確保在充電過程中及時(shí)消除或降低電池極化,電池析氣量少,溫升低,充電效率高。整個(gè)充電過程由恒流和恒壓充電兩個(gè)階段組成,在每一階段均以周期為幾秒到幾十秒的電流或電壓脈沖進(jìn)行充電。而兩階段的轉(zhuǎn)換時(shí)刻則由電池的充電狀態(tài)所決定。

          由于充電方法相對較復(fù)雜,且需要對多種類型和規(guī)格的電池進(jìn)行充電,故需要采用可編程器件進(jìn)行控制,而單片機(jī)以其相對強(qiáng)大的功能和低廉的價(jià)格成為首選。本文選用Motorola公司推出的 MC68HC908GP32作為主控元件,整個(gè)系統(tǒng)的組成框圖如圖3所示,反映電池充電狀態(tài)的充電電流、電池電壓和溫度信號經(jīng)采樣電路送入單片機(jī)的A/D 轉(zhuǎn)換口,單片機(jī)根據(jù)充電算法,通過D/A轉(zhuǎn)換口輸出信號控制充電電源的電壓或電流給定,從而達(dá)到控制充電電源輸出的目的。

          系統(tǒng)框圖

          軟件系統(tǒng)采用模塊化設(shè)計(jì)方法,整個(gè)程序由主程序模塊、各類電池充電子程序模塊以及錯(cuò)誤處理模塊組成,各模塊相對獨(dú)立,以便于算法改進(jìn)及功能擴(kuò)充,其中主程序模塊構(gòu)架了軟件系統(tǒng)的骨架,通過其對其他模塊的調(diào)用來實(shí)現(xiàn)完整的充電過程控制,其流程圖見圖4。

          主程序流程圖

          為確保充電安全,在開始充電前檢測電池電壓和溫度,以排除電池接反、用戶選擇的電池規(guī)格有誤等錯(cuò)誤,并判斷電池的狀態(tài)是否適合快速充電,如電池電壓或溫度過低,則需要進(jìn)行小電流預(yù)充電,待電池電壓、溫度達(dá)到正常范圍后再開始快速充電。在整個(gè)充電過程中均實(shí)時(shí)檢測電池電壓和溫度,并綜合采用最高電壓控制、電壓零增量控制、最高溫度控制和定時(shí)控制等方法來終止快速充電,以確保電池不被過充。 

          4 實(shí)驗(yàn)及結(jié)論 

          本文采用清華大學(xué)Motorola單片機(jī)應(yīng)用開發(fā)研究中心推出的MC68HC908GP32 IDK作為開發(fā)系統(tǒng)[2],對該充電器進(jìn)行了實(shí)驗(yàn)測試,在整個(gè)負(fù)載范圍內(nèi)均有穩(wěn)定的輸出,開關(guān)管的最小導(dǎo)通時(shí)間(對應(yīng)于最小負(fù)載)約為1.2us,而開關(guān)管(MTP4N80)的開關(guān)時(shí)間和反向恢復(fù)時(shí)間之和小于0.7us,故充電電源能穩(wěn)定工作。 

          本文設(shè)計(jì)了一個(gè)通用型智能充電器,給出了寬范圍充電電源的一種實(shí)現(xiàn)方法,并充分利用了單片機(jī)強(qiáng)大的控制功能,絕大部分功能由軟件編程實(shí)現(xiàn),使得系統(tǒng)對硬件的依賴性較小,便于功能的擴(kuò)充及改進(jìn)。 



          關(guān)鍵詞:

          評論


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