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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          作者: 時(shí)間:2013-03-17 來源:網(wǎng)絡(luò) 收藏

          引言

          電池節(jié)能和污染正日益成為人們關(guān)注的問題。在傳統(tǒng)電池領(lǐng)域中,鉛酸電池和鎳氫電池在實(shí)際使用過程中存在一系列問題:如比容小,不適應(yīng)快速充電和大電流發(fā)電或者是鎳氫電池在串聯(lián)電池組時(shí)管理問題比較多。相反,鋰電池不僅比容要好于鉛酸電池和鎳氫電池,而且還具有無記憶效應(yīng)、使用壽命長(zhǎng)和單節(jié)電芯電壓高等優(yōu)點(diǎn)。

          在礦用產(chǎn)品中,鋰電池逐步替代了鉛酸電池和鎳氫電池。但鋰電池在使用時(shí)也存在一個(gè)重要的問題,它在過充電或是在過放電時(shí)電池可能會(huì)發(fā)生爆炸,因此需要良好的保護(hù)電路來配合使用,這樣可以杜絕電池爆炸的問題。本文研究的就是利用f103單片機(jī)和LTC6802-1芯片對(duì)鋰電池組進(jìn)行管理保護(hù)。這樣可以既可以發(fā)揮鋰電池的優(yōu)勢(shì),也可以杜絕使用鋰電池產(chǎn)生的一些問題。

          LTC6802介紹

          在眾多電池管理芯片中,LTC6802性能出眾,其獨(dú)特的內(nèi)部設(shè)計(jì)使其能同時(shí)檢測(cè)多達(dá)12節(jié)電池電壓,而且其簡(jiǎn)單的外部電路配置能使我們方便的搭建系統(tǒng),有利于降低成本和開發(fā)時(shí)間。

          LTC6802內(nèi)部有高精度的模數(shù)轉(zhuǎn)換器,位數(shù)多達(dá)12位,單個(gè)LTC6802能同時(shí)檢測(cè)12節(jié)串聯(lián)單體電池電壓,也可以測(cè)量電池組總電壓,在電池中,我們可以將多個(gè)LTC6802芯片組成鏈?zhǔn)诫娐?,方便我們監(jiān)測(cè)多于12節(jié)或大于60V的電池組,采用這種可堆疊式架構(gòu)使得我們測(cè)量或管理1000V電池系統(tǒng)成為可能,利用其雙熱敏電阻輸入、板上溫度傳感器等多種渠道可以實(shí)時(shí)監(jiān)測(cè)鋰電池組溫度。

          LTC6802與微處理器之間的通信是由一個(gè)兼容式串行接口實(shí)現(xiàn),在鏈?zhǔn)诫娐分?,每個(gè)LTC6802都能通過簡(jiǎn)單的二極管隔離實(shí)現(xiàn)數(shù)據(jù)通信。其SPI時(shí)序圖如圖1所示。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)
          圖1 SPI通信時(shí)序

          LTC6802有多種工作模式,如待機(jī)模式、測(cè)量模式以及監(jiān)視模式;每一種模式都有其獨(dú)特的工作狀態(tài):

          待機(jī)模式:系統(tǒng)上電時(shí),LTC6802默認(rèn)處于待機(jī)狀態(tài),此時(shí),除串口和穩(wěn)壓器電路外,其他電路都處在關(guān)閉狀態(tài),這時(shí)LTC6802電流處在最小狀態(tài)。

          測(cè)量模式:通過命令對(duì)寄存器CDC位進(jìn)行設(shè)置,可以使LTC6802處在測(cè)量模式中,此時(shí),對(duì)單體電池的電壓進(jìn)行正常監(jiān)視,通過寄存器能判斷其是否過壓或欠壓。

          監(jiān)視模式:LTC6802只監(jiān)視處于過壓或欠壓狀態(tài)的單體電池,串口通信電路處于關(guān)閉狀態(tài);

          它廣泛應(yīng)用于電動(dòng)汽車和混合動(dòng)力汽車、大功率可攜帶設(shè)備、備用電源、高壓數(shù)據(jù)采集系統(tǒng),本文中主要將其應(yīng)用在備用電源中,取得良好效果。

          硬件系統(tǒng)的設(shè)計(jì)

          在圖2中,LTC6802鏈?zhǔn)诫娐房梢詼y(cè)量多節(jié)(12節(jié)或更多)鋰電池電芯值,通過這些電壓或溫度值,可以判斷電池是過充、過放還是過溫。F103主控芯片通過自帶動(dòng)SPI總線模塊從LTC6802中讀取所需要的值,利用充放電控制單元對(duì)鋰電池組進(jìn)行保護(hù),同時(shí)也可以在LCD人機(jī)界面上顯示。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖2 硬件系統(tǒng)框圖

          F103控制單元

          該款單片機(jī)是基于Cortex-M3內(nèi)核設(shè)計(jì)的ARM芯片,內(nèi)部集成SPI總線模塊、USB模塊、16路ADC采樣等等外設(shè)。其時(shí)鐘頻率最大可以達(dá)到72MHz,這樣的頻率可以滿足大部分場(chǎng)合的需要。內(nèi)置512KB的高速存儲(chǔ)器以及64KB的SRAM,豐富的增強(qiáng)I/O端口和連接到APB總線的外設(shè)均使得STM32F103成為一款非常優(yōu)秀的單片機(jī)。

          這些豐富的外設(shè)資源,使得STM32F103系列單片機(jī)適合于多種場(chǎng)合:

          ①電機(jī)驅(qū)動(dòng)和應(yīng)用控制;

          ②醫(yī)療和手持設(shè)備;

          ③PC外設(shè)和GPS平臺(tái);

          ④工業(yè)應(yīng)用:可編程控制器、變頻器、打印機(jī)和掃描儀;

          ⑤警報(bào)系統(tǒng)、視頻系統(tǒng)、備用電池系統(tǒng)等等。

          在本系統(tǒng)中,STM32F103單片機(jī)主要應(yīng)用在電池中,也就是備用電源。STM32F103通過自身的SPI外設(shè)來設(shè)置LTC6802工作方式,通過LTC6802讀取電池組電芯電壓值、電芯溫度值,以及設(shè)置電池過壓、欠壓和過溫等報(bào)警標(biāo)志,并利用這些獲得的值對(duì)電池進(jìn)行充放電管理,這樣可以達(dá)到保護(hù)電池的作用。

          在硬件系統(tǒng)框圖中,我們可以看到系統(tǒng)模塊有:?jiǎn)纹瑱C(jī)最小系統(tǒng)、LTC6802鏈?zhǔn)诫娐?、電池均衡電路、電池測(cè)溫單元電路、通信電路等。

          在該電路中,STM32F103單片機(jī)主要負(fù)責(zé)對(duì)LTC6802信息的讀寫,控制均衡電路,也就是充放電控制單元,同時(shí)可以檢測(cè)電池溫度,將這些有用信息在人機(jī)界面上面顯示。電路如圖3所示。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖3 STM32F103控制電路

          LTC6802鏈?zhǔn)诫娐?/P>

          LTC6802鏈?zhǔn)诫娐吩诙嚯姵匦畔z測(cè)中有著重要的作用,我們知道一塊LTC6802芯片只能管理12個(gè)單個(gè)電池,一般情況下也就是36V左右。在某些時(shí)候,可能需要電池電壓遠(yuǎn)遠(yuǎn)大于36V,這個(gè)時(shí)候我們就可以利用LTC6802鏈?zhǔn)诫娐穪磉_(dá)到這個(gè)要求,如圖4所示。

          在圖4中,SPI TOP和SPI BOTTOM就是連接頂端LTC6802和底端LTC6802。這樣就可以組成多級(jí)LTC6802鏈?zhǔn)诫娐贰?/P>

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖4 LTC6802鏈?zhǔn)诫娐?/P>

          控制均衡電路

          均衡電路在電池管理過程發(fā)揮著至關(guān)重要的作用,我們所做的一切,都是為了方便管理電池電壓、電量的平衡,均衡電路的作用就在于保持電池電壓的平衡,這樣就保護(hù)了電池。電路如圖5所示,這里只給出了部分均衡電路。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖5 均衡電路

          電池測(cè)溫單元電路

          每個(gè)芯片都有自己的工作溫度范圍,LTC6802的溫度范圍是85℃,而且當(dāng)其內(nèi)部溫度超過105℃時(shí),LTC6802采樣性能就會(huì)降低,更為嚴(yán)重的是,如果其溫度達(dá)到150℃,LTC6802芯片極有可能被燒壞。因此,為了保護(hù)LTC6802芯片,必須要用溫度檢測(cè)電路,其圖如6所示。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖6 電池測(cè)溫單元電路

          這里VTEMP2處接NTC,我們通過NTC就可以獲得實(shí)際溫度值。

          通信電路

          STM32F103與LTC6802的通信電路比較簡(jiǎn)單,主要是SPI通信。如圖7所示。

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖7 通信電路

          軟件設(shè)計(jì)

          本電池采用模塊化編程方式,利用高級(jí)語言編程,主要流程圖如圖8所示。

          圖8中給出的是單個(gè)LTC6802進(jìn)行數(shù)據(jù)處理的軟件編程,LTC6802芯片可以連接成鏈?zhǔn)诫娐?,這時(shí),通過STM32F103由高到低逐次向各級(jí)LTC6802發(fā)送讀寫指令,寫指令時(shí),數(shù)據(jù)由高到低傳送,讀數(shù)據(jù)則相反。

          LTC6802有多個(gè)指令寄存器,如電壓寄存器、溫度寄存器、標(biāo)志寄存器、命令寄存器。每個(gè)寄存器都有其特殊的功能,如通過配置電壓寄存器,我們可以設(shè)置過壓大小、欠壓大小等;配置命令寄存器,我們可以設(shè)置電池測(cè)量個(gè)數(shù)等。表1列出了命令寄存器。

          表1 命令寄存器

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖8 程序流程圖

          基于STM32的多節(jié)鋰電池管理系統(tǒng)的設(shè)計(jì)

          圖9 LTC6802的管理效果

          系統(tǒng)中采用單片機(jī)作為主控制器,利用其本身自帶的SPI外設(shè)與LTC6802進(jìn)行數(shù)據(jù)交換。這里給出一部分程序清單,如下:

          void Ltc6802_Init(void)

          {

          GPIO_Configuration();

          SPI_Configuration();

          Ltc6802_Write();

          }

          測(cè)試結(jié)果

          我們可以使用專門的軟件來查看LTC6802的管理效果,從圖9我們可以看出電池組中共

          模數(shù)轉(zhuǎn)換器相關(guān)文章:模數(shù)轉(zhuǎn)換器工作原理


          三維掃描儀相關(guān)文章:三維掃描儀原理
          熱敏打印機(jī)相關(guān)文章:熱敏打印機(jī)原理

          上一頁 1 2 下一頁

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