基于SMBus的智能電池系統
摘要: 本文概要地介紹了智能電池系統,并介紹了一種典型芯片——Max1660的電量計數及電池保護等功能,給出了一個應用實例。
關鍵詞:智能電池 電量計數 SMBus Max1660
現代社會對產品壽命需求和對產品的性能和功能的要求迅速提高。最新的掌上電腦要求把最多的功能壓到最少的空間中去,這就驅使電池的設計者不得不考慮在產品設計方面做顯著的變化。這包括;使用低壓器件,關掉未在使用的子系統,對應用程序進行管理,發展智能電池和電池管理系統等。
新的智能電池的設計需要各種不同甚至相反的領域的知識,在某些應用中甚至是全新領域的知識。這些領域包括關于電池運行的電池化學知識;關于系統各零件相互作用的系統工程知識和使用者怎樣操作一個特殊設備的設計知識。因此,一個規范或者說一個標準將必不可少,它可以簡化設計,提高系統的可移植性。
智能電池規范
電池的智能化是最近才發展起來的,這就使得智能電池的實現方案多種多樣。因而,一些標準開始出現。這些標準一般是由便攜電腦制造商推動的。但在一些單電池系統中,例如在蜂窩式移動電話系統中,成本問題限制了電池系統一些操作,使智能電池標準的發展復雜化了。
一線接口 電池包與系統的通訊是一個很重要的需要考慮的因素。這個接口要有盡可能少的信號線以減少電池包的連線數。因而,許多單電池系統采用一線接口(1-wire),例如,蜂窩移動電話。在1-wire接口中,0或1取決于信號線上0的有效周期。這種類型的接口提供了一個異步連接。當前有三種不同的一線接口(1-Wire),它們之間只有輕微的差別。由于其內在特點,一線接口的傳輸速率很慢。在低成本系統中,這樣的速率是可接受的,因為只有極少的信息需要傳遞給主機。但在多電池系統中,就有更多的信息需要傳遞給主機,這是就要求有更快的接口速度了。 SMBus接口 1996年,Intel(聯合其它公司)推出了一個由PC-I2C變異而來的系統管理總線(SMBus)。它與I2C總線一樣有兩根通訊線,但是加入了低電平選擇并且對器件對總線的控制實踐做了嚴格規定。作為系統管理總線(SMBus)發展的一部分,Intel與其合作伙伴創建了智能電池標準。這個規范在SMBus接口頂層增加了一個協議,定義了一系列的命令以用于電池包、電池充電器、電池選擇器和主機之間的通訊。而這些命令和協議并非必需的,可以選用。
基于MAX1660的智能電池應用實例:
MAX1660 是美信公司生產的一種能夠精確測量流入充電和流出放電系統電池組的電量計數芯片,它能將電池電量存入內部兩個獨立的32 位充電和放電計數器。它通過強大的數字比較功能,判斷當充電或放電計數器達到主機設定值時,中斷主CPU,來完成主機設定得功能。該器件也可以在電流方向發生變化時通知主機,并具備保護電池組短路及過流的功能。MAX1660 提供一個兼容于SMBUSTM系統管理總線的二線串行接口來訪問充電放電量計數器和內部寄存器,同時也能夠給主機提供一條可用作中斷信號的系統管理總線報警線SMBALERT。
1. MAX1660 的引腳及功能
MAX1660 的引腳排列如圖1 主要引腳功能如下:
u INT,中斷信號漏極開路輸出,低電平有效,INT接上拉電阻100k至VL引腳。 u REF,2.00V 精密電壓基準輸出,REF對AGND 接10nF旁路電容。 u SHDN,關斷控制輸入,低電平有效。 u CS,電流檢測電阻輸入。 u ODI,放電過流檢測輸入。 u OCI,充電過流檢測輸入。 u VL,3.3V 5mA線性電壓輸出VL對GND接0.33mF旁路電容。 u BATT,電源輸入。 u ODO,高壓漏極開路MOSFET柵極驅動輸出,ODO控制電池放電信道的開/關。 u OCO,高壓漏極開路MOSFET柵極驅動輸出,OCO控制電池充電信道的開/關。 u RST,上電復位輸出,低電平有效RST接上拉電阻100k至VL引腳。 u SDA,串行數據輸入/輸出,在SDA和VL 之間接10k電阻。 u SCL,串行時鐘輸入,在SCL和VL之間接10k電阻。
2.MAX1660的控制、狀態與讀寫時序
MAX1660有一個16位的狀態字和一個16位的控制字,主機可通過讀狀態字來判斷電池狀態,寫控制字來控制電池系統。其狀態字的定義如表1,控制字定義為如表2
表1
位名稱 |
位 |
上電復位狀態 |
說明 |
—— |
8--15 |
1 |
未使用通常返回1。 |
ODSTATUS |
7 |
0 |
過流中斷狀態位,當放電過流時,此位置位。當軟關斷、上電復位或控制字CLRINT位置位時,此位清零。 |
OCSTATUS |
6 |
0 |
過流中斷狀態位,當充電過流時,此位置位。當軟關斷、上電復位或控制字CLRINT位置位時,此位清零。 |
COMPSTATUS |
5 |
0 |
COMPINT中斷狀態位,當COMPINT中斷發生時,此位置位。當軟關斷、上電復位或控制字CLRINT位置位時,此位清零。 |
COUNTSTATUS |
4 |
— |
SETCOUNT狀態指示位,當控制字SETCOUNT置位時此位置位。當SETCOUNT位清零時,此位清零。 |
SHDNSTATUS |
3 |
0 |
軟關斷狀態指示位,當器件處于軟關斷模式時返回1,否則返回0 |
CHARGESTATUS |
2 |
0 |
充電狀態指示位,充電狀態檢測時此位置位,放電狀態檢測時此位清零。 |
DIRCHANGE |
1 |
0 |
當電流方向發生變化時,此位置位。當軟關斷、上電復位或控制字CLRINT位置位時,此位清零。祥見參考文獻1的電流變化檢測部分。 |
—— |
0 |
0 |
未使用通常返回1。 |
表2
位名稱 |
位 |
上電復位狀態 |
說明 |
—— |
11--15 |
1 |
未使用。 |
DIRINTENABLE |
10 |
0 |
電流方向變化允許位。此位置位允許方向變化中斷發生,清零則禁止此功。祥見Direction-Change Detection Function section。 |
SOFTSHDN |
9 |
1 |
軟關斷允許位,此位置位允許軟關斷,清零恢復正常操作。祥見參考文獻1的Shutdown Modes section。 |
CLRCOUNTER |
8 |
1 |
清計數器,寫1將放電計數器和充電計數器全都清零。 |
CLRINT |
7 |
0 |
清中斷,寫1使ODSTATUS, OCSTATUS, COMPSTATUS, 和DIRCHANGE.清零 |
SETCOUNT |
6 |
0 |
計數器選擇位,用來選擇將哪個計數器的值傳輸到COUNT寄存器,置1選擇充電計數器,清零則選者放電計數器。祥見文獻1的Charge and Discharge Counters section。 |
OFFSETMEAS |
5 |
0 |
偏移量測量允許位,置位時使CS端與內部電路斷開,短接到AGEND。清零時CS端重新接到內部電路,恢復正常操作。參看文獻1的internal Offset Measurementsection。 |
COMPENABLE |
4 |
— |
比較中斷允許位。置1允許數字比較中斷功能,清零則禁止此功能。參見文獻Digital Compare Function section. |
ODHI |
3 |
0 |
ODO兩位輸出狀態控制位的第一位,參見文獻1的Overcurrent Detection section。 |
ODLO |
2 |
0 |
ODO兩位輸出狀態控制位的第二位。為保證恰當的過流保護狀態ODLO應該總是保持為零。參見文獻1的Overcurrent Detection section。 |
OCHI |
1 |
0 |
OCO兩位輸出狀態控制位的第一位,參見參考文獻1的Overcurrent Detection section. |
OCLO |
0 |
0 |
OCO兩位輸出狀態控制位的第一位。為保證恰當的過流保護狀態OLO應該總是保持為零。參見文獻1的Overcurrent Detectionsection. |
其讀寫時序見參考文獻1,傳輸時以字節為單位。每次傳輸時首字節為SLVEADDRESS——即從器件地址。對于不同種類的SMBus器件,該地址是固定的,在出廠時就已經固化到器件中。但也有一些器件可以通過地址端的不同接法選擇該地址。MAX1660的SLAVEADDRESS是1000111,最后一位空出,用來選擇讀或寫。其中0為讀出,1為寫入。第二個字節為命令字,從第三個字節開始是要讀出或寫入的數據。
命令字可分為兩種:一為讀命令,包括讀計數寄存器和讀狀態字;一為寫命令,包括寫比較寄存器和寫控制字。計數寄存器需要分兩次讀出,命令字為:0x82(低16位)、0x83(高16位);比較寄存器也要分兩次寫入,其命令字分別為:0x00(低16位),0x01(高16位);讀狀態字和寫控制字的命令字分別為:0x84和0x04。需要注意的是:在讀計數器時,當前供電狀態決定了計數器中的數值是充電還是放電計數值。而且,更為重要的一點:在讀計數器時兩個命令必須連續執行且必須先讀低位后讀高位,如果中間夾有其他命令或順序顛倒,在執行這個命令時Max1660就會當作讀高16位的命令已執行而將計數器清零。
3. MAX1660的最大充電和放電電流
MAX1660本身不能控制電池充電電流,只能控制最大充電電流值和最放電電流值。它可以通過以下方法設定設定:
設定最大充電電流值:如圖所示,
式中 ICHG,MAX即是最大充電電流值 VREF=2.0V。R5選擇1MΩ左右的電阻。
1) 設定最大放電電流值:如圖所示,
式中IDISCHG,MAX 為最大放電電流值,R3選擇1MΩ左右的電阻。
4.應用MAX1660設計電量指示監控充電電路
本電路是作為一個便攜式嵌入系統的附屬電源模塊設計的,由于系統成本限制,采用用了鎳氫電池。Mam1660即可監控鋰電池又可監控鎳基電池,而其他類電池監控芯片大所為鋰電池監控芯片,因此本系統采用Max1660來搭建系統。系統軟件采用查詢機制,其程序框圖如圖5。
系統力求精簡,用51單片機控制。單片機通過SDA、SCA、INT三根線與MAX1660通訊線用于對發出中斷信號,SCA、SDA分別為的時鐘線和數據線。利用max1660的數字比較功能,程序設定一個電量值,每當電量計數器達到設定值時即對單片機發出中斷,從而把單片機解放出來。計數值與電量的關系與敏感元件微電阻有關,微電阻越小則可測電流越小,但電流分辨率也越小,反之則可測電流值受限,而電流分辨率增大。
系統主要包括兩部分:首先是通訊部分,主要是SMBus總線的驅動程序。這里參考了文獻2中的I2C總線驅動程序,按照系統需求作了局部改動。程序包括啟動、停止、發送應答、發送非應答、應答位檢查、發送和接收等共9個函數。最后組成兩個函數:SMBusReadWord和SMBusWriteWord。通過這兩個函數即可實現SMBus總線的全部讀寫操作,實現對任何SMBus總線器件的控制。這兩個函數的參數依次為:器件地址,命令字,讀/寫內容。
其次為主程序部分。如圖5所示,當中斷條件滿足時,由max1660向單片機發出中斷請求,單片機則讀取max1660的狀態字判斷為何種中斷,各狀態字的定義如表1,部分中斷功能可通過控制字關閉。然后對各種中斷作相應處理。其中當前的供電方式可通過CHARGESTATUS讀出。該位為1時為充電狀態,為0時為放電狀態。
文獻1提供了一個簡單的系統硬件原理圖,只需在這個原理圖上作簡單的拓展即可使用。限于篇幅,無法將本系統的原理圖詳細列出,這里只作簡單介紹:Max1660本身帶有3.3V電源輸出,但由于這里使用了51單片機必須采用5V電源,因此這一電源沒有使用,而是在pack+和pack-之間接入7805來得到5伏的電源,而在用于整個系統時,其電源也應從這兩端輸出。
電量的顯示最好通過LCD,調試階段用LED較好,比較直觀,同時易于排除問題。本系統在調試階段用P1口輸出電量狀態指示,LED亮時表示充電已到該位,各燈逐次點亮,充滿時全亮,放電時正相反。
結束語
本文介紹的基于SMBus的智能電池檢測系統既可用于鋰電池,也可用于鎳基電池,對電池的要求較低,系統作為便攜式儀器的電源解決方案在實際應用中已得到驗證。系統運行可靠,功能強大顯示直觀,能夠與其他功能協調工作。隨著各種便攜式電子產品的廣泛應用,電池的智能化已成為一種必不可少的功能。因此本文所介紹的智能電池系統具有較強的實用性
評論