《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應用 > 基于S3C2440A的手持式分析診斷儀電池電量計模塊
基于S3C2440A的手持式分析診斷儀電池電量計模塊
來源:微型機與應用2012年第19期
趙勇飛,江志農(nóng)
(北京化工大學 診斷與自愈工程研究中心,北京100029)
摘要: 采用DS2786B芯片,設(shè)計并實現(xiàn)了一款基于S3C2440A處理器的手持式分析診斷儀電池電量計模塊。介紹了該模塊的硬件電路設(shè)計,以及基于Windows CE 5.0操作系統(tǒng)的驅(qū)動程序和應用程序的開發(fā)。實驗結(jié)果表明,該模塊工作穩(wěn)定可靠,能精確地測量電池電量并實時在用戶界面顯示,在嵌入式便攜設(shè)備中有很好的應用前景。
Abstract:
Key words :

摘  要: 采用DS2786B芯片,設(shè)計并實現(xiàn)了一款基于S3C2440A處理器的手持式分析診斷儀電池電量計模塊。介紹了該模塊的硬件電路設(shè)計,以及基于Windows CE 5.0操作系統(tǒng)的驅(qū)動程序和應用程序的開發(fā)。實驗結(jié)果表明,該模塊工作穩(wěn)定可靠,能精確地測量電池電量并實時在用戶界面顯示,在嵌入式便攜設(shè)備中有很好的應用前景。
關(guān)鍵詞: 電池電量計;DS2786B;S3C2440A;驅(qū)動;Windows CE

 現(xiàn)代的工業(yè)機械設(shè)備結(jié)構(gòu)越來越復雜,長期在高溫、高速狀態(tài)下運轉(zhuǎn)。運用狀態(tài)監(jiān)測與故障診斷技術(shù)對工業(yè)機械設(shè)備進行狀態(tài)分析和故障預警是保證設(shè)備安全平穩(wěn)運行的有效手段,因此,以嵌入式技術(shù)為核心的手持式分析診斷儀在工業(yè)企業(yè)中得到了廣泛使用。手持式儀器為了保證便攜性大都采用鋰電池供電,電池電量的精確測量可以給儀器的正常使用提供有效的保障。本文采用DS2786B芯片,設(shè)計并實現(xiàn)了一款基于S3C2440A處理器的手持式分析診斷儀電池電量計模塊。
1 硬件設(shè)計
1.1 S3C2440A處理器簡介

 S3C2440A是Samsung公司推出的由ARM公司設(shè)計的16/32 bit RISC微處理器,采用的ARM920T內(nèi)核實現(xiàn)了存儲器管理單元(MMU),先進微控制總線構(gòu)架AMBA總線和哈佛架構(gòu)的高速緩沖體系結(jié)構(gòu)[1]。該結(jié)構(gòu)具有獨立的16 KB指令高速緩存和16 KB數(shù)據(jù)高速緩存。S3C2440A采用全靜態(tài)設(shè)計,結(jié)構(gòu)簡潔,為手持設(shè)備和普通應用提供了低功耗和高性能的微控制器的解決方案,在嵌入式設(shè)備中得到了廣泛應用。
1.2 電池電量計模塊電路
 本文的手持式分析診斷儀電池電量計模塊采用的是一款由美國Maxim公司推出的基于開路電壓(OCV)的獨立式電量計量芯片——DS2786B。該芯片利用庫侖計與電池開路電壓的模型組合計算可充電鋰離子(Li+)電池的可用容量。根據(jù)電池閑置期間的OCV,利用存儲在片上EEPROM中的電池特性和應用參數(shù)可以得到電池準確的電量信息。電池在高速率放電時無法使用OCV測量,因此DS2786B使用庫侖計作為估算相對電量的第二種方法[2]。DS2786B也可以監(jiān)測電池電壓、電流和溫度信息。
 DS2786B內(nèi)部工作原理框圖如圖1所示。VDD為DS2786B芯片工作電源輸入引腳,輸入范圍為2.5 V~5.5 V;VIN為電池電壓輸入引腳;VSS為芯片地引腳,連接到檢流電阻的電池側(cè);SNS為電流檢測輸入,連接到檢流電阻的主機側(cè);VPROG引腳為芯片內(nèi)部EEPROM編程電壓輸入引腳,連接到外部電源編程可以修改EEPROM中儲存的電池模型參數(shù),正常工作期間連接至VSS;SDA為串行數(shù)據(jù)輸入/輸出引腳,SCL為串行時鐘輸入引腳;AIN0和AIN1為兩個輔助電壓輸入引腳;VOUT為電壓輸出引腳,給輔助輸入電壓測量分壓器供電。

1.3 電池特性描述
 電池電量計模塊對電池電量的精確測量依賴于DS2786B內(nèi)部EEPROM中儲存的OCV電池模型。OCV電池模型是對開路電壓與電池剩余電量關(guān)系的一種9點分段線性近似,可通過改變EEPROM中容量和電壓斷點寄存器進行修改。容量寄存器分辨率為0.5%,容量0固定為0%,容量8固定為100%,不得修改。電壓斷點寄存器分辨率為1.22 mV,每個電壓斷點需要MSB和LSB兩個字節(jié)。
 本文的手持式分析診斷儀使用容量為4.8 Ah的鋰電池,電池的OCV曲線如圖3所示,依據(jù)9點分段線性近似選取的電池OCV曲線的電壓斷點數(shù)據(jù)及對應寄存器值如表1所示。

2 軟件設(shè)計
2.1 驅(qū)動程序設(shè)計

 本文的手持式分析診斷儀采用的操作系統(tǒng)是微軟公司的32 bit實時嵌入式操作系統(tǒng)Windows CE 5.0。Windows CE可以在多種架構(gòu)的CPU上運行,內(nèi)核小占用內(nèi)存少,性能穩(wěn)定可靠。DS2786B芯片不是Windows CE系統(tǒng)支持的標準設(shè)備,為了保證電量計模塊硬件能與操作系統(tǒng)及應用程序進行數(shù)據(jù)交互,需要使用集成開發(fā)工具Platform Builder 5.0為DS2786B芯片開發(fā)驅(qū)動程序并添加到系統(tǒng)內(nèi)核中。
 本文為電池電量計模塊開發(fā)了流接口驅(qū)動程序。流接口驅(qū)動程序也叫可安裝的驅(qū)動程序,是一種用戶模式的動態(tài)鏈接庫(DLL),由設(shè)備管理器(device.exe)動態(tài)加載管理。流接口適合于任何在邏輯上被認為是一個數(shù)據(jù)源或數(shù)據(jù)存儲的I/O設(shè)備,即任何以產(chǎn)生或者消耗數(shù)據(jù)流作為主要功能的外圍設(shè)備。流接口驅(qū)動設(shè)備對應用程序表現(xiàn)為一個文件,應用程序通過文件API使用設(shè)備管理器和流接口驅(qū)動與硬件通信。開發(fā)流接口驅(qū)動需要實現(xiàn)一組標準的流接口函數(shù)[3]。下面給出為DS2786B芯片開發(fā)的流接口驅(qū)動兩個主要的函數(shù):
 (1)FGA_Init()函數(shù)完成為S3C2440A的I/O寄存器和I2C寄存器分配虛擬地址并映射到操作系統(tǒng)可以訪問的虛擬地址空間中,并對寄存器進行配置的初始化工作。部分代碼如下:
DWORD FGA_Init(DWORD dwContext)
{  
    v_pIOPregs = (volatile S3C2440A_IOPORT_REG*)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG),
MEM_RESERVE, PAGE_NOACCESS);
//為I/O寄存器分配虛擬地址空間
    if(!v_pIOPregs)    return NULL;
    if(!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT>> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE))
//完成地址空間映射
    return NULL;
    v_pIICRegs = (volatile S3C2440A_IICBUS_REG *)VirtualAlloc(0, sizeof(S3C2440A_IICBUS_REG),
        MEM_RESERVE, PAGE_NOACCESS);
//為I2C寄存器分配虛擬地址空間
    if(!v_pIICRegs)   return NULL;
    if(!VirtualCopy((PVOID)v_pIICRegs, (PVOID)(S3C2440A_BASE_REG_PA_IICBUS>>8),
        sizeof(S3C2440A_IICBUS_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE))//完成地址空間映射
    return NULL;
    v_pIOPregs->GPECON &=~(15<<28);
    v_pIOPregs->GPECON |=(10<<28);
//配置GPE14為IICSCL,GPE15為IICSDA
    v_pIICRegs->IICCON =(1<<7)|(1<<6)|(1<<5)| (0xf);//配置I2C控制寄存器
    return TRUE;
}
?。?) FGA_Read()函數(shù)完成對DS2786B芯片采集到的電池電量數(shù)據(jù)讀取。其中的I2C_WRITE()和IIC_READ()是根據(jù)DS2786B的I2C總線接口基本傳輸格式和S3C2440A的I2C總線接口主發(fā)送和主接收模式的操作流程(如圖4所示)編寫的I2C讀寫函數(shù)。代碼如下:
DWORD FGA_Read(DWORD hOpenContext,LPVOID pBuffer, DWORD Count)
{
    pTemp_Buff t=(pTemp_Buff)pBuffer;
    IIC_WRITE(Command,Com_Rcall);
//配置DS2786B命令寄存器為讀操作
IIC_READ(Relative_Capacity);
//讀取DS2786B相對容量寄存器
        t->data=IICDSData;
//將讀取到的電池電量數(shù)據(jù)傳遞給應用程序
    return 1;
}

 

 

 DS2786B的流接口驅(qū)動程序編寫完成后,使用Platform Builder對驅(qū)動工程進行編譯生成驅(qū)動的動態(tài)鏈接庫fuelgauge.dll文件,并將其集成到系統(tǒng)內(nèi)核NK.bin中。操作系統(tǒng)運行時,應用程序可以通過文件API調(diào)用驅(qū)動程序。
2.2 應用程序設(shè)計及驅(qū)動程序測試
 本文使用EVC++集成開發(fā)工具,根據(jù)MFC的消息映射機制[4]為手持式分析診斷儀開發(fā)了一個電池電量實時顯示程序BatCap.exe。BatCap.exe通過調(diào)用fuelgauge.dll實時獲取電池電量數(shù)據(jù),并在系統(tǒng)界面更新和顯示。程序運行界面如圖5所示。

 利用BatCap.exe程序可以對電池電量計模塊驅(qū)動程序進行測試。測試步驟如下:(1)根據(jù)BatCap.exe程序界面電池電量的顯示和圖2的電池OCV曲線圖,得出相應電池剩余電量百分比所對應電池OCV模型中理想開路電壓值;(2)用萬用表測得此時電池的實際開路電壓值,并將兩電壓值進行比較。實驗采用基本精度為±0.1%的UT56數(shù)字萬用表,選取電池剩余電量百分比為100%(滿電量)、80%、66%(2/3電量)、50%、33%(1/3電量)和5%(低電量報警電量)6個狀態(tài)進行測量,測試數(shù)據(jù)如表2所示。測試數(shù)據(jù)表明,電池電量模塊驅(qū)動程序測量電池剩余電量相對誤差范圍為±0.30%,能精確地測量電池剩余電量。

 本文采用DS2786B芯片,設(shè)計并實現(xiàn)了一款基于S3C2440A的手持式分析診斷儀電池電量計模塊,同時開發(fā)了電池電量計模塊在Windows CE 5.0操作系統(tǒng)下的驅(qū)動程序和桌面電池剩余電量實時顯示的應用程序,實現(xiàn)了完整的電池電量計軟硬件模塊。該模塊設(shè)計簡單、容易實現(xiàn),對電池剩余電量測量準確,工作穩(wěn)定可靠,在嵌入式便攜設(shè)備中有很好的應用前景。
參考文獻
[1] SAMSUNG Inc. S3C2440A 32-bit microprocessor user′s manual[Z]. SAMSUNG Inc, 2004.
[2] MAXIM. Stand-alone OCV-based fuel gauge DS2786B data sheet[Z]. Maxim Integrated Products, 2010.
[3] 張冬泉,譚南林, 蘇樹強.Windows CE 實用開發(fā)技術(shù)[M].北京: 電子工業(yè)出版社,2009.
[4] DOUGLAS B. Programming Microsoft Windows CE.NET[M].America: Microsoft Press, 2003.

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