《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于S3C2440A的手持式分析诊断仪电池电量计模块
基于S3C2440A的手持式分析诊断仪电池电量计模块
来源:微型机与应用2012年第19期
赵勇飞,江志农
(北京化工大学 诊断与自愈工程研究中心,北京100029)
摘要: 采用DS2786B芯片,设计并实现了一款基于S3C2440A处理器的手持式分析诊断仪电池电量计模块。介绍了该模块的硬件电路设计,以及基于Windows CE 5.0操作系统的驱动程序和应用程序的开发。实验结果表明,该模块工作稳定可靠,能精确地测量电池电量并实时在用户界面显示,在嵌入式便携设备中有很好的应用前景。
Abstract:
Key words :

摘  要: 采用DS2786B芯片,设计并实现了一款基于S3C2440A处理器的手持式分析诊断仪电池电量计模块。介绍了该模块的硬件电路设计,以及基于Windows CE 5.0操作系统的驱动程序和应用程序的开发。实验结果表明,该模块工作稳定可靠,能精确地测量电池电量并实时在用户界面显示,在嵌入式便携设备中有很好的应用前景。
关键词: 电池电量计;DS2786B;S3C2440A;驱动;Windows CE

 现代的工业机械设备结构越来越复杂,长期在高温、高速状态下运转。运用状态监测与故障诊断技术对工业机械设备进行状态分析和故障预警是保证设备安全平稳运行的有效手段,因此,以嵌入式技术为核心的手持式分析诊断仪在工业企业中得到了广泛使用。手持式仪器为了保证便携性大都采用锂电池供电,电池电量的精确测量可以给仪器的正常使用提供有效的保障。本文采用DS2786B芯片,设计并实现了一款基于S3C2440A处理器的手持式分析诊断仪电池电量计模块。
1 硬件设计
1.1 S3C2440A处理器简介

 S3C2440A是Samsung公司推出的由ARM公司设计的16/32 bit RISC微处理器,采用的ARM920T内核实现了存储器管理单元(MMU),先进微控制总线构架AMBA总线和哈佛架构的高速缓冲体系结构[1]。该结构具有独立的16 KB指令高速缓存和16 KB数据高速缓存。S3C2440A采用全静态设计,结构简洁,为手持设备和普通应用提供了低功耗和高性能的微控制器的解决方案,在嵌入式设备中得到了广泛应用。
1.2 电池电量计模块电路
 本文的手持式分析诊断仪电池电量计模块采用的是一款由美国Maxim公司推出的基于开路电压(OCV)的独立式电量计量芯片——DS2786B。该芯片利用库仑计与电池开路电压的模型组合计算可充电锂离子(Li+)电池的可用容量。根据电池闲置期间的OCV,利用存储在片上EEPROM中的电池特性和应用参数可以得到电池准确的电量信息。电池在高速率放电时无法使用OCV测量,因此DS2786B使用库仑计作为估算相对电量的第二种方法[2]。DS2786B也可以监测电池电压、电流和温度信息。
 DS2786B内部工作原理框图如图1所示。VDD为DS2786B芯片工作电源输入引脚,输入范围为2.5 V~5.5 V;VIN为电池电压输入引脚;VSS为芯片地引脚,连接到检流电阻的电池侧;SNS为电流检测输入,连接到检流电阻的主机侧;VPROG引脚为芯片内部EEPROM编程电压输入引脚,连接到外部电源编程可以修改EEPROM中储存的电池模型参数,正常工作期间连接至VSS;SDA为串行数据输入/输出引脚,SCL为串行时钟输入引脚;AIN0和AIN1为两个辅助电压输入引脚;VOUT为电压输出引脚,给辅助输入电压测量分压器供电。

1.3 电池特性描述
 电池电量计模块对电池电量的精确测量依赖于DS2786B内部EEPROM中储存的OCV电池模型。OCV电池模型是对开路电压与电池剩余电量关系的一种9点分段线性近似,可通过改变EEPROM中容量和电压断点寄存器进行修改。容量寄存器分辨率为0.5%,容量0固定为0%,容量8固定为100%,不得修改。电压断点寄存器分辨率为1.22 mV,每个电压断点需要MSB和LSB两个字节。
 本文的手持式分析诊断仪使用容量为4.8 Ah的锂电池,电池的OCV曲线如图3所示,依据9点分段线性近似选取的电池OCV曲线的电压断点数据及对应寄存器值如表1所示。

2 软件设计
2.1 驱动程序设计

 本文的手持式分析诊断仪采用的操作系统是微软公司的32 bit实时嵌入式操作系统Windows CE 5.0。Windows CE可以在多种架构的CPU上运行,内核小占用内存少,性能稳定可靠。DS2786B芯片不是Windows CE系统支持的标准设备,为了保证电量计模块硬件能与操作系统及应用程序进行数据交互,需要使用集成开发工具Platform Builder 5.0为DS2786B芯片开发驱动程序并添加到系统内核中。
 本文为电池电量计模块开发了流接口驱动程序。流接口驱动程序也叫可安装的驱动程序,是一种用户模式的动态链接库(DLL),由设备管理器(device.exe)动态加载管理。流接口适合于任何在逻辑上被认为是一个数据源或数据存储的I/O设备,即任何以产生或者消耗数据流作为主要功能的外围设备。流接口驱动设备对应用程序表现为一个文件,应用程序通过文件API使用设备管理器和流接口驱动与硬件通信。开发流接口驱动需要实现一组标准的流接口函数[3]。下面给出为DS2786B芯片开发的流接口驱动两个主要的函数:
 (1)FGA_Init()函数完成为S3C2440A的I/O寄存器和I2C寄存器分配虚拟地址并映射到操作系统可以访问的虚拟地址空间中,并对寄存器进行配置的初始化工作。部分代码如下:
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;
}
 (2) FGA_Read()函数完成对DS2786B芯片采集到的电池电量数据读取。其中的I2C_WRITE()和IIC_READ()是根据DS2786B的I2C总线接口基本传输格式和S3C2440A的I2C总线接口主发送和主接收模式的操作流程(如图4所示)编写的I2C读写函数。代码如下:
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;
//将读取到的电池电量数据传递给应用程序
    return 1;
}

 

 

 DS2786B的流接口驱动程序编写完成后,使用Platform Builder对驱动工程进行编译生成驱动的动态链接库fuelgauge.dll文件,并将其集成到系统内核NK.bin中。操作系统运行时,应用程序可以通过文件API调用驱动程序。
2.2 应用程序设计及驱动程序测试
 本文使用EVC++集成开发工具,根据MFC的消息映射机制[4]为手持式分析诊断仪开发了一个电池电量实时显示程序BatCap.exe。BatCap.exe通过调用fuelgauge.dll实时获取电池电量数据,并在系统界面更新和显示。程序运行界面如图5所示。

 利用BatCap.exe程序可以对电池电量计模块驱动程序进行测试。测试步骤如下:(1)根据BatCap.exe程序界面电池电量的显示和图2的电池OCV曲线图,得出相应电池剩余电量百分比所对应电池OCV模型中理想开路电压值;(2)用万用表测得此时电池的实际开路电压值,并将两电压值进行比较。实验采用基本精度为±0.1%的UT56数字万用表,选取电池剩余电量百分比为100%(满电量)、80%、66%(2/3电量)、50%、33%(1/3电量)和5%(低电量报警电量)6个状态进行测量,测试数据如表2所示。测试数据表明,电池电量模块驱动程序测量电池剩余电量相对误差范围为±0.30%,能精确地测量电池剩余电量。

 本文采用DS2786B芯片,设计并实现了一款基于S3C2440A的手持式分析诊断仪电池电量计模块,同时开发了电池电量计模块在Windows CE 5.0操作系统下的驱动程序和桌面电池剩余电量实时显示的应用程序,实现了完整的电池电量计软硬件模块。该模块设计简单、容易实现,对电池剩余电量测量准确,工作稳定可靠,在嵌入式便携设备中有很好的应用前景。
参考文献
[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 实用开发技术[M].北京: 电子工业出版社,2009.
[4] DOUGLAS B. Programming Microsoft Windows CE.NET[M].America: Microsoft Press, 2003.

此内容为AET网站原创,未经授权禁止转载。