《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于SMBus協(xié)議的電池信息監(jiān)測(cè)系統(tǒng)
基于SMBus協(xié)議的電池信息監(jiān)測(cè)系統(tǒng)
2016年電子技術(shù)應(yīng)用第4期
何國(guó)鋒,,劉宇紅
貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,,貴州 貴陽(yáng)550025
摘要: 目前大部分智能電池都對(duì)外提供了SMBus協(xié)議接口。為了對(duì)智能電池的信息進(jìn)行監(jiān)測(cè),,首先對(duì)SMBus協(xié)議的時(shí)序進(jìn)行分析,,然后通過(guò)MSP430處理器的硬件接口模擬協(xié)議,,對(duì)以BQ3060電池信息管理芯片為核心的電池組進(jìn)行命令寫入與數(shù)據(jù)讀取,實(shí)現(xiàn)了智能電池信息監(jiān)測(cè)系統(tǒng),,可以對(duì)電池的電量,、溫度、電壓,、電流等多種信息進(jìn)行實(shí)時(shí)監(jiān)測(cè),。
中圖分類號(hào): TP277
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.04.014
中文引用格式: 何國(guó)鋒,劉宇紅. 基于SMBus協(xié)議的電池信息監(jiān)測(cè)系統(tǒng)[J].電子技術(shù)應(yīng)用,,2016,,42(4):49-52.
英文引用格式: He Guofeng,Liu Yuhong. Battery information monitoring system based on SMBus protocol[J].Application of Electronic Technique,,2016,,42(4):49-52.
Battery information monitoring system based on SMBus protocol
He Guofeng,Liu Yuhong
College of Big Data and Information Engineering,Guizhou University,,Guiyang 550025,,China
Abstract: Now most of smart batteries provide SMBus protocol interface for user.In order to monitor the information of the battery,the paper analyzed the timing of SMBus protocol at first,and then simulated the protocol through MSP430 processor′s hardware interface,to read data from or write commands to the battery pack based on power management chip BQ3060. At last a smart battery information monitoring system was realized,which could monitor batteries′ capicity,temperature,voltage,current and other information in real time.
Key words : SMBus;battery information monitoring,;BQ3060

0 引言

    SMBus協(xié)議是Intel公司(聯(lián)合其他公司)在PC-I2C基礎(chǔ)上研發(fā)出來(lái)的系統(tǒng)管理總線協(xié)議,。最初是為智能電池、充電電池和與其他系統(tǒng)通信的微控制器之間的通信鏈路而定義的[1],,后來(lái)也被用來(lái)連接各種設(shè)備,,包括電源相關(guān)設(shè)備,、系統(tǒng)傳感器、EEPROM通信設(shè)備等,。其被廣泛用于筆記本電腦上,,檢測(cè)各元件狀態(tài)并更新硬件設(shè)置引腳。它為系統(tǒng)和電源管理這樣的任務(wù)提供了一條控制總線,,使用SMBus總線的系統(tǒng),,設(shè)備之間發(fā)送和接收消息都是通過(guò)SMBus總線,而不是使用單獨(dú)的控制線,,這樣可以節(jié)省設(shè)備的管腳數(shù),。隨后,Intel公司聯(lián)合其他公司在此基礎(chǔ)上創(chuàng)建了智能電池管理標(biāo)準(zhǔn),,SMBus成為在智能電池及低速率管理設(shè)備上被廣泛采用的協(xié)議標(biāo)準(zhǔn),。

1 SMBus協(xié)議分析

    SMBus由兩根總線,即串行數(shù)據(jù)線(SDA)和串行時(shí)鐘線(SCL)構(gòu)成[2],,主要用于主從系統(tǒng),。由于 SMBus是雙向通信,因此在設(shè)計(jì)電路時(shí)兩條線上都需要外接上拉電阻,,數(shù)據(jù)可以在總線空閑時(shí)間進(jìn)行傳輸,。

1.1 SMBus啟動(dòng)和停止條件

    在總線處于空閑狀態(tài)時(shí),SMBus總線上的SCL和SDA都被上拉電阻拉至高電平,。此時(shí),,當(dāng)SDA由高電平變?yōu)榈碗娖剑偩€啟動(dòng)SMBus協(xié)議傳輸,。啟動(dòng)條件產(chǎn)生后,,總線就被視為忙的狀態(tài); 當(dāng)SCL為高電平時(shí),,SDA由低電平變?yōu)楦唠娖?,SMBus傳輸停止[3],停止條件發(fā)生一段時(shí)間后,,總線再次被視為空閑狀態(tài)。啟動(dòng)條件和停止條件總是由主設(shè)備產(chǎn)生,,圖1為模擬SMBus協(xié)議啟動(dòng)和停止的時(shí)序圖,,S表示啟動(dòng)條件,P表示停止條件,。

qrs2-t1.gif

1.2 數(shù)據(jù)的有效性

    SDA線上的數(shù)據(jù)必須在時(shí)鐘的高電平周期保持穩(wěn)定,,數(shù)據(jù)線上的電平只有在SCL線為低電平時(shí)才可以改變[3]。圖2為SMBus協(xié)議數(shù)據(jù)有效性的圖示,。

qrs2-t2.gif

1.3 SMBus數(shù)據(jù)傳輸

    圖3是SMBus數(shù)據(jù)傳輸協(xié)議時(shí)序圖,,當(dāng)SMBus啟動(dòng)信號(hào)產(chǎn)生后,,數(shù)據(jù)以串行方式進(jìn)行傳輸,每次傳輸以8 bit(1 B)為一組,,每次可發(fā)送的字節(jié)數(shù)不受限制,,但是每個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位。數(shù)據(jù)以高字節(jié)在前,、低字節(jié)在后的順序傳輸,,第9位為應(yīng)答位[2]

qrs2-t3.gif

    總線上的所有器件都有一個(gè)唯一地址,,并且都可以工作在接收或發(fā)送狀態(tài),,構(gòu)成了4種工作模式,即主發(fā)送,、主接收,、從發(fā)收、從接收[3],。SMBus總線還具有仲裁功能,,保證同一時(shí)刻只有一個(gè)器件在控制總線。

2 硬件實(shí)驗(yàn)環(huán)境

2.1 主機(jī)系統(tǒng)實(shí)現(xiàn)

    主機(jī)系統(tǒng)采用了以MSP430F149處理器為核心的開(kāi)發(fā)板,,MSP430是德州儀器公司推出的一款16位,、具有超低功耗芯片及精簡(jiǎn)指令集(RISC)的混合信號(hào)處理器(Mixed Signal Processor)[4],被廣泛用于智能便攜電子設(shè)備中,。開(kāi)發(fā)板上擁有較豐富的外設(shè)資源,,同時(shí)集成了RS232模塊,可以將測(cè)得的數(shù)據(jù)信息等通過(guò)串口實(shí)時(shí)發(fā)送到上位機(jī)中,,查看驗(yàn)證結(jié)果,。

2.2 智能電池

    目前大部分智能電池對(duì)外接口都遵循SMBus協(xié)議標(biāo)準(zhǔn),本設(shè)計(jì)采用的智能電池是一塊由4節(jié)鋰電池組成的智能電池組,,采用德州儀器的BQ3060電源管理芯片進(jìn)行電池管理,。BQ3060芯片可以對(duì)最多4節(jié)電池構(gòu)成的電池組進(jìn)行管理,將普通電池組變成智能電池,,并通過(guò)SMBus總線接口與處理器通信,。

    將MSP430處理器與智能電池以及其他外圍器件同時(shí)掛載到接有上拉電阻的SMBus總線上,如圖4所示,。MSP430處理器為主機(jī),,總線上的其他設(shè)備充當(dāng)從機(jī)。當(dāng)啟動(dòng)傳輸協(xié)議時(shí),,MSP430可以通過(guò)SMBus總線獲得4節(jié)鋰電池的相關(guān)信息,。

qrs2-t4.gif

3 SMBus協(xié)議軟件實(shí)現(xiàn)

3.1 SMBus啟動(dòng)

    在初始時(shí)刻,總線處于空閑狀態(tài),,數(shù)據(jù)線和時(shí)鐘線都被拉高,,此時(shí)拉低數(shù)據(jù)線,,SMBus啟動(dòng)。下面是模擬SMBus協(xié)議的啟動(dòng)代碼:

    void SMBus_Start()

    {

        SDA=1; delay(); //數(shù)據(jù)位置1

        SCL=1; delay(); //時(shí)鐘位置1

        SDA=0; delay(); //數(shù)據(jù)位置0,,啟動(dòng)

        SCL=0; delay(); //時(shí)鐘位置0

    }

3.2 SMBus停止

    在時(shí)鐘線為高時(shí),,當(dāng)數(shù)據(jù)線被拉高,SMBus停止,。以下是模擬SMBus協(xié)議停止代碼:

    void SMBus_Stop()

    {

        SDA=0;delay(); //數(shù)據(jù)位置

        SCL=1;delay(); //時(shí)鐘位置1

        SDA=1;delay(); //數(shù)據(jù)位置1,,停止

    }

3.3 SMBus檢測(cè)應(yīng)答

    在數(shù)據(jù)傳輸?shù)牡?個(gè)時(shí)鐘,主機(jī)需要檢測(cè)總線上SDA的電平是否被拉低,,如果規(guī)定的時(shí)鐘周期內(nèi)未檢測(cè)到低電平,,視為無(wú)應(yīng)答,說(shuō)明傳輸失??;如果檢測(cè)到低電平,說(shuō)明從機(jī)成功接收到數(shù)據(jù),,可以繼續(xù)下一步傳輸,。代碼如下:

    bit SMBus_CheckAck()

    {

        unsigned char i;

        SCL = 1;delay();

        while((SDA)&&(i<256)) //檢測(cè)有無(wú)應(yīng)答

            i++; //數(shù)據(jù)位置1

        SCL = 0;delay();

        if(255 != i) //超時(shí)檢測(cè)

            return 0;

        else

            return 1;

    }

3.4 SMBus發(fā)送應(yīng)答

    當(dāng)主機(jī)接收完從機(jī)發(fā)來(lái)的8 bit數(shù)據(jù)后,需要在第9個(gè)時(shí)鐘周期內(nèi)做出應(yīng)答,,并且告訴從機(jī)是否繼續(xù)通信,。如果繼續(xù)通信,則拉低SDA電平,;如果希望終止通信,,則拉高SDA上的電平。代碼如下:

    void SMBus_SendAck(bit n)

    {

        unsigned char i;

        if(n) SDA = 1;

        else  SDA = 0;

        SCL = 1;delay();

        SCL = 0;

    }

3.5 SMBus讀取字節(jié)

    從SMBus總線上讀取字節(jié)按照從高位到低位的順序逐位讀取,,編程時(shí)在時(shí)鐘為高時(shí)讀取到的值保存到變量中并返回,。

    unsigned SMBus_ReadByte()

    {

        unsigned char i,k=0;

        for( i = 0;i < 8;i++ ) //讀8 bit數(shù)據(jù)

        {

            SCL = 1;delay();

            k = (k << 1) | SDA; //按位讀取

            SCL = 0;delay();

        }

           return k; //返回字節(jié)

    }

3.6 SMBus寫入字節(jié)

    向SMBus總線上寫入字節(jié)時(shí)從高位到低位依次寫入,寫入完一個(gè)字節(jié)后將數(shù)據(jù)總線拉高,。

    void SMBus_WriteByte(unsigned char data)

    {

        unsigned char i;

        temp = data;

        for(i=0;i<8;i++)            //按位寫入

        {

            SCL = 0;delay();

            if((data<<i)&&0x80)

                SDA = 1;

            else

                SDA = 0;delay();

            SCL = 1;delay();

        }

        SCL=0,;delay();

        SDA=1,;delay()://拉高數(shù)據(jù)線,,為等待應(yīng)答做準(zhǔn)備

    }

3.7 SMBus通信協(xié)議幀

    使用SMBus協(xié)議對(duì)設(shè)備信息進(jìn)行讀取時(shí)有統(tǒng)一的標(biāo)準(zhǔn)要求,圖5是SMBus設(shè)備間通信協(xié)議幀結(jié)構(gòu)圖,。最先傳輸?shù)氖菃?dòng)條件S,,隨后發(fā)送第一幀數(shù)據(jù),由7位設(shè)備地址DevAdd,、1位寫標(biāo)志W(wǎng)和1位應(yīng)答Ack構(gòu)成。第二幀由8位設(shè)備內(nèi)的寄存器地址RegAdd和1位應(yīng)答Ack構(gòu)成,,如要讀取電池的溫度,,RegAdd則為溫度寄存器,。其中前兩幀都是主設(shè)備向總線上寫信息,告訴了總線要寫入的設(shè)備地址,,以及要獲得設(shè)備中哪個(gè)寄存器的內(nèi)容,。接下來(lái)要再次發(fā)送啟動(dòng)信號(hào)S進(jìn)行一次重啟。第三幀數(shù)據(jù)由7位設(shè)備地址DevAdd,、1位讀標(biāo)志位R,、1位應(yīng)答Ack構(gòu)成;第四幀由8位數(shù)據(jù)Data1和1位應(yīng)答Ack構(gòu)成,;第五幀也由8位數(shù)據(jù)Data2和1位應(yīng)答Ack構(gòu)成,。其中第三幀數(shù)據(jù)告訴了總線要對(duì)哪個(gè)設(shè)備進(jìn)行讀取操作,第四幀和第五幀則由主機(jī)從總線上兩次讀取數(shù)據(jù),,得到Data1和Data2,,這兩個(gè)字節(jié)分別為讀取值的高8位和低8位。最后是一位停止信號(hào)P,。

qrs2-t5.gif

    將協(xié)議中包含的數(shù)據(jù)幀按照?qǐng)D5格式進(jìn)行打包,,統(tǒng)一寫成函數(shù)以方便應(yīng)用。代碼如下:

    unsigned int SMBus_ReadAdd(unsigned char addr)

    {

        unsigned char data;

        SMBus_Start();//啟動(dòng)協(xié)議

        SMBus_WriteByte(DEV_ADDW);//設(shè)備地址

        SMBus_CheckAck();//等待應(yīng)答

        SMBus_WriteByte(addr);//Reg地址

        SMBus_CheckAck();//等待應(yīng)答

        SMBus_Start();//再次啟動(dòng)

        SMBus_WriteByte(DEV_ADDR);//設(shè)備地址

        SMBus_CheckAck();//等待應(yīng)答

        data = SMBus_ReadByte();//讀取低字節(jié)

        SMBus_SendAck(0);//發(fā)送應(yīng)答

        data+=SMBus_ReadByte()<<8;//讀取高字節(jié)

        SMBus_SendAck(1);//發(fā)送應(yīng)答

        SMBus_Stop();//停止讀取

        return data;//返回?cái)?shù)據(jù)

    }

3.8 主程序設(shè)計(jì)

    主程序中最先要通過(guò)SMBus總線向智能電池發(fā)送命令,,對(duì)BQ3060芯片進(jìn)行初始化配置,,然后調(diào)用SMBus_ReadAdd函數(shù)即可獲得電池相關(guān)信息,如電池電壓和相對(duì)電量Reg地址分別為0x09,、0x0d,,其他寄存器請(qǐng)參考芯片手冊(cè)。調(diào)用方法如下:

    void main()

    {

        Init_Config();//初始化

        Voltage =SMBus_ReadAdd(0x09)&0x7FFF;

        delay_ms();//讀取后要延遲一段時(shí)間

        PowerState=SMBus_ReadAdd(0x0d)&0x7F;

        delay_ms();

        UartSend(),;//從串口輸出

    }

    讀取字節(jié)時(shí),,SMBus_ReadAdd(0x09)&0x7FFF和SMBus_ReadAdd(0x0d)&0x7F因?yàn)殡妷悍祷刂捣秶?~20 000 mV,電量狀態(tài)范圍為0~100%,,為防止數(shù)據(jù)出錯(cuò),,要對(duì)有效位進(jìn)行選取,同時(shí)讀取數(shù)據(jù)后一定要進(jìn)行延時(shí)操作,,否則讀數(shù)結(jié)果會(huì)出現(xiàn)錯(cuò)誤,。

4 設(shè)計(jì)結(jié)果與分析

    IAR EW for MSP430是IAR公司為TI公司的MSP430系列處理器開(kāi)發(fā)的一款集成開(kāi)發(fā)環(huán)境,可對(duì)工程進(jìn)行有效管理,、編譯,、鏈接后生成目標(biāo)文件,并結(jié)合MSP專門的USB燒錄器進(jìn)行程序下載,。

    通過(guò)MSP430F149開(kāi)發(fā)板自帶的RS232模塊與筆記本USB口相連,,MSP430將監(jiān)測(cè)到的電池信息通過(guò)Uart0口發(fā)送到串口助手,最開(kāi)始測(cè)得的所有數(shù)值都存在錯(cuò)誤,,通過(guò)對(duì)程序進(jìn)行分析,,發(fā)現(xiàn)在使用SMBus進(jìn)行讀取數(shù)據(jù)時(shí)沒(méi)有設(shè)置一定的延時(shí)等待,,加上延時(shí)函數(shù)后結(jié)果正常,但依然錯(cuò)誤率很高,。在查閱了BQ3060數(shù)據(jù)手冊(cè)后才發(fā)現(xiàn)電壓的有效值是0~20 000 mV,,電量的有效值是0~100%,每次需要對(duì)讀到的值進(jìn)行有效位的提取,,如SMBus_ReadAdd(0x09)&0x7FFF和SMBus_ReadAdd(0x0d)&0x7F語(yǔ)句處理后,,輸出結(jié)果正確,如圖6,。

qrs2-t6.gif

    用電壓表測(cè)電池兩端的電壓為15.9 V,,與系統(tǒng)的15 943 mV一致,室內(nèi)空調(diào)顯示溫度為26 ℃,,考慮到電池使用過(guò)程會(huì)發(fā)熱,,因此溫度會(huì)比室溫高一些。通過(guò)檢測(cè)出來(lái)的數(shù)據(jù)可以看出,,用SMBus協(xié)議可以很方便地對(duì)智能電池信息進(jìn)行監(jiān)測(cè),,同時(shí)不需要處理器親自去檢測(cè)電池的各種信息,節(jié)省了處理器的時(shí)鐘,,可以使處理器更多的時(shí)間用在算法,、控制等處理上。

5 小結(jié)

    本文實(shí)現(xiàn)了一個(gè)使用SMBus協(xié)議對(duì)電池信息進(jìn)行實(shí)時(shí)監(jiān)測(cè)的系統(tǒng),,系統(tǒng)準(zhǔn)確監(jiān)測(cè)到電池電壓,、電量、溫度等重要信息,。在實(shí)際應(yīng)用中,,可以根據(jù)需要對(duì)電池的其他信息進(jìn)行監(jiān)測(cè),相關(guān)寄存器地址可以參考TI公司數(shù)據(jù)手冊(cè),。雖然使用以BQ3060為管理芯片的智能電池作為實(shí)驗(yàn)平臺(tái),,但是系統(tǒng)適合于對(duì)所有使用SMBus協(xié)議的智能電池進(jìn)行監(jiān)測(cè),TI公司BQ系列電源管理芯片基本都支持SMBus協(xié)議,,只需對(duì)設(shè)備地址,、寄存器地址做相應(yīng)改變就可達(dá)到通用的目的。

參考文獻(xiàn)

[1] 路鐵生.系統(tǒng)管理總線(SMBus)與智能充電[J].電源世界,,2011(8):36-39.

[2] 陳濤,,萬(wàn)亞坤.基于智能電池系統(tǒng)的SMBus總線研究及IP設(shè)計(jì)[J].中國(guó)集成電路.2008(11):48-51.

[3] 吳珍毅.基于SMBus的智能鋰動(dòng)力電池總線系統(tǒng)的實(shí)現(xiàn)[J].北京聯(lián)合大學(xué)學(xué)報(bào),2012,,26(4):15.

[4] 郝建國(guó).MSP430微控制器基礎(chǔ)和應(yīng)用[M].北京:電子工業(yè)出版社,,2014.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。