《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于SMBus協議的電池信息監測系統
基于SMBus協議的電池信息監測系統
2016年電子技術應用第4期
何國鋒,劉宇紅
貴州大學 大數據與信息工程學院,貴州 貴陽550025
摘要: 目前大部分智能電池都對外提供了SMBus協議接口。為了對智能電池的信息進行監測,首先對SMBus協議的時序進行分析,然后通過MSP430處理器的硬件接口模擬協議,對以BQ3060電池信息管理芯片為核心的電池組進行命令寫入與數據讀取,實現了智能電池信息監測系統,可以對電池的電量、溫度、電壓、電流等多種信息進行實時監測。
中圖分類號: TP277
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.04.014
中文引用格式: 何國鋒,劉宇紅. 基于SMBus協議的電池信息監測系統[J].電子技術應用,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協議是Intel公司(聯合其他公司)在PC-I2C基礎上研發出來的系統管理總線協議。最初是為智能電池、充電電池和與其他系統通信的微控制器之間的通信鏈路而定義的[1],后來也被用來連接各種設備,包括電源相關設備、系統傳感器、EEPROM通信設備等。其被廣泛用于筆記本電腦上,檢測各元件狀態并更新硬件設置引腳。它為系統和電源管理這樣的任務提供了一條控制總線,使用SMBus總線的系統,設備之間發送和接收消息都是通過SMBus總線,而不是使用單獨的控制線,這樣可以節省設備的管腳數。隨后,Intel公司聯合其他公司在此基礎上創建了智能電池管理標準,SMBus成為在智能電池及低速率管理設備上被廣泛采用的協議標準。

1 SMBus協議分析

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

1.1 SMBus啟動和停止條件

    在總線處于空閑狀態時,SMBus總線上的SCL和SDA都被上拉電阻拉至高電平。此時,當SDA由高電平變為低電平,總線啟動SMBus協議傳輸。啟動條件產生后,總線就被視為忙的狀態; 當SCL為高電平時,SDA由低電平變為高電平,SMBus傳輸停止[3],停止條件發生一段時間后,總線再次被視為空閑狀態。啟動條件和停止條件總是由主設備產生,圖1為模擬SMBus協議啟動和停止的時序圖,S表示啟動條件,P表示停止條件。

qrs2-t1.gif

1.2 數據的有效性

    SDA線上的數據必須在時鐘的高電平周期保持穩定,數據線上的電平只有在SCL線為低電平時才可以改變[3]。圖2為SMBus協議數據有效性的圖示。

qrs2-t2.gif

1.3 SMBus數據傳輸

    圖3是SMBus數據傳輸協議時序圖,當SMBus啟動信號產生后,數據以串行方式進行傳輸,每次傳輸以8 bit(1 B)為一組,每次可發送的字節數不受限制,但是每個字節后必須跟一個響應位。數據以高字節在前、低字節在后的順序傳輸,第9位為應答位[2]

qrs2-t3.gif

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

2 硬件實驗環境

2.1 主機系統實現

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

2.2 智能電池

    目前大部分智能電池對外接口都遵循SMBus協議標準,本設計采用的智能電池是一塊由4節鋰電池組成的智能電池組,采用德州儀器的BQ3060電源管理芯片進行電池管理。BQ3060芯片可以對最多4節電池構成的電池組進行管理,將普通電池組變成智能電池,并通過SMBus總線接口與處理器通信。

    將MSP430處理器與智能電池以及其他外圍器件同時掛載到接有上拉電阻的SMBus總線上,如圖4所示。MSP430處理器為主機,總線上的其他設備充當從機。當啟動傳輸協議時,MSP430可以通過SMBus總線獲得4節鋰電池的相關信息。

qrs2-t4.gif

3 SMBus協議軟件實現

3.1 SMBus啟動

    在初始時刻,總線處于空閑狀態,數據線和時鐘線都被拉高,此時拉低數據線,SMBus啟動。下面是模擬SMBus協議的啟動代碼:

    void SMBus_Start()

    {

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

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

        SDA=0; delay(); //數據位置0,啟動

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

    }

3.2 SMBus停止

    在時鐘線為高時,當數據線被拉高,SMBus停止。以下是模擬SMBus協議停止代碼:

    void SMBus_Stop()

    {

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

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

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

    }

3.3 SMBus檢測應答

    在數據傳輸的第9個時鐘,主機需要檢測總線上SDA的電平是否被拉低,如果規定的時鐘周期內未檢測到低電平,視為無應答,說明傳輸失敗;如果檢測到低電平,說明從機成功接收到數據,可以繼續下一步傳輸。代碼如下:

    bit SMBus_CheckAck()

    {

        unsigned char i;

        SCL = 1;delay();

        while((SDA)&&(i<256)) //檢測有無應答

            i++; //數據位置1

        SCL = 0;delay();

        if(255 != i) //超時檢測

            return 0;

        else

            return 1;

    }

3.4 SMBus發送應答

    當主機接收完從機發來的8 bit數據后,需要在第9個時鐘周期內做出應答,并且告訴從機是否繼續通信。如果繼續通信,則拉低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讀取字節

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

    unsigned SMBus_ReadByte()

    {

        unsigned char i,k=0;

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

        {

            SCL = 1;delay();

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

            SCL = 0;delay();

        }

           return k; //返回字節

    }

3.6 SMBus寫入字節

    向SMBus總線上寫入字節時從高位到低位依次寫入,寫入完一個字節后將數據總線拉高。

    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()://拉高數據線,為等待應答做準備

    }

3.7 SMBus通信協議幀

    使用SMBus協議對設備信息進行讀取時有統一的標準要求,圖5是SMBus設備間通信協議幀結構圖。最先傳輸的是啟動條件S,隨后發送第一幀數據,由7位設備地址DevAdd、1位寫標志W和1位應答Ack構成。第二幀由8位設備內的寄存器地址RegAdd和1位應答Ack構成,如要讀取電池的溫度,RegAdd則為溫度寄存器。其中前兩幀都是主設備向總線上寫信息,告訴了總線要寫入的設備地址,以及要獲得設備中哪個寄存器的內容。接下來要再次發送啟動信號S進行一次重啟。第三幀數據由7位設備地址DevAdd、1位讀標志位R、1位應答Ack構成;第四幀由8位數據Data1和1位應答Ack構成;第五幀也由8位數據Data2和1位應答Ack構成。其中第三幀數據告訴了總線要對哪個設備進行讀取操作,第四幀和第五幀則由主機從總線上兩次讀取數據,得到Data1和Data2,這兩個字節分別為讀取值的高8位和低8位。最后是一位停止信號P。

qrs2-t5.gif

    將協議中包含的數據幀按照圖5格式進行打包,統一寫成函數以方便應用。代碼如下:

    unsigned int SMBus_ReadAdd(unsigned char addr)

    {

        unsigned char data;

        SMBus_Start();//啟動協議

        SMBus_WriteByte(DEV_ADDW);//設備地址

        SMBus_CheckAck();//等待應答

        SMBus_WriteByte(addr);//Reg地址

        SMBus_CheckAck();//等待應答

        SMBus_Start();//再次啟動

        SMBus_WriteByte(DEV_ADDR);//設備地址

        SMBus_CheckAck();//等待應答

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

        SMBus_SendAck(0);//發送應答

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

        SMBus_SendAck(1);//發送應答

        SMBus_Stop();//停止讀取

        return data;//返回數據

    }

3.8 主程序設計

    主程序中最先要通過SMBus總線向智能電池發送命令,對BQ3060芯片進行初始化配置,然后調用SMBus_ReadAdd函數即可獲得電池相關信息,如電池電壓和相對電量Reg地址分別為0x09、0x0d,其他寄存器請參考芯片手冊。調用方法如下:

    void main()

    {

        Init_Config();//初始化

        Voltage =SMBus_ReadAdd(0x09)&0x7FFF;

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

        PowerState=SMBus_ReadAdd(0x0d)&0x7F;

        delay_ms();

        UartSend();//從串口輸出

    }

    讀取字節時,SMBus_ReadAdd(0x09)&0x7FFF和SMBus_ReadAdd(0x0d)&0x7F因為電壓返回值范圍是0~20 000 mV,電量狀態范圍為0~100%,為防止數據出錯,要對有效位進行選取,同時讀取數據后一定要進行延時操作,否則讀數結果會出現錯誤。

4 設計結果與分析

    IAR EW for MSP430是IAR公司為TI公司的MSP430系列處理器開發的一款集成開發環境,可對工程進行有效管理、編譯、鏈接后生成目標文件,并結合MSP專門的USB燒錄器進行程序下載。

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

qrs2-t6.gif

    用電壓表測電池兩端的電壓為15.9 V,與系統的15 943 mV一致,室內空調顯示溫度為26 ℃,考慮到電池使用過程會發熱,因此溫度會比室溫高一些。通過檢測出來的數據可以看出,用SMBus協議可以很方便地對智能電池信息進行監測,同時不需要處理器親自去檢測電池的各種信息,節省了處理器的時鐘,可以使處理器更多的時間用在算法、控制等處理上。

5 小結

    本文實現了一個使用SMBus協議對電池信息進行實時監測的系統,系統準確監測到電池電壓、電量、溫度等重要信息。在實際應用中,可以根據需要對電池的其他信息進行監測,相關寄存器地址可以參考TI公司數據手冊。雖然使用以BQ3060為管理芯片的智能電池作為實驗平臺,但是系統適合于對所有使用SMBus協議的智能電池進行監測,TI公司BQ系列電源管理芯片基本都支持SMBus協議,只需對設備地址、寄存器地址做相應改變就可達到通用的目的。

參考文獻

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

[2] 陳濤,萬亞坤.基于智能電池系統的SMBus總線研究及IP設計[J].中國集成電路.2008(11):48-51.

[3] 吳珍毅.基于SMBus的智能鋰動力電池總線系統的實現[J].北京聯合大學學報,2012,26(4):15.

[4] 郝建國.MSP430微控制器基礎和應用[M].北京:電子工業出版社,2014.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 污黄视频 | 动漫精品专区一区二区三区不卡 | 国产丰满老妇伦子www | 中文字幕视频一区二区 | 青草热久精品视频在线观看 | 三级欧美日韩 | 亚洲大香伊人蕉在人依线 | 国产在线观看网址在线视频 | 深夜福利国产 | 国产视频资源在线观看 | 综合网久久 | 一级小视频 | 涩涩在线 | 成人国产在线看不卡 | 98精品国产高清在线xxxx | 97在线视频99播放 | 伊人久久大香线蕉免费视频 | 亚洲视屏一区 | 亚洲激情五月 | 黄篇免费看 | 精品欧美一区二区三区精品久久 | 欧美成人xxx| 欧美一区二区视频在线观看 | 成人特黄午夜性a一级毛片 成人网18免费软件 成人网免费 | 2017天天操 | 日本一道高清不卡免费 | 99精品视频免费 | 成人在线免费观看视频 | 国产二区视频在线观看 | 欧美成 人激情视频 | 日本污污网站 | 日本a在线观看 | 免费色黄网站 | 日韩在线视频播放 | 日韩精品在线视频观看 | 农村寡妇女人一级毛片 | 免费三级黄色片 | 波多野结衣gvg-238 | 亚洲男女在线 | 激情综合色综合久久综合 | 免费一级录像 |