操作——测量电池电流
DS2438模数转换器以通过测量外部检测电阻两端的电压,来有效地检测流入和流出电池组的电流为特点。
模数转换器将在后台以每秒36.41次的频率采样,因此不需要命令启动电流测量。
然而,DS2438只会在状态配置寄存器中IAD位置1的时候才启动电流模数转换。
DS2438通过VSENS管脚测量流入和流出电池的电流,VSENS+管脚到VSENS-管脚的电压被认为是电流检测电阻RSENS两端的电压。
VSENS+端与RSENS电阻直接相关,然而,对于VSENS-,我们建议在该管脚和RENS的接地端之间接一个RC低通滤波电路。
用一个阻值为100K的电阻和一个0.1µF的钽电容器,该滤波器的截止频率是15.9Hz.电流模数转换器以36.41次/s或每27.46ms一次的频率采样。
这个滤波器能消除大部分的尖峰毛刺的影响,从而允许电流累加器准确的反映流入和流出电池的总电荷。
模数转换器测量检测电阻RSENS两端的电压,并将结果以二进制补码格式保存在电流寄存器中。
转换结果的符号位,表明充电还是放电,存储在电流寄存器的最高有效位中,见表3.查看“存储器映射”找到电流寄存器地址。
6of29
(这个寄存器实际上存储的是检测电阻RSENS两端的电压。
这个值带入下面的公式可以计算出电池的电流。
)电池组的电流能够由电流寄存器中的值经这个方程计算得出。
I=CurrentRegister/(4096*RSENS)(RSENS的单位是Ω)
例如,如果流入电池组的电流是1.25A,电池组使用一个0.025Ω的检测电阻,DS2438向电流寄存器写入的值为128(十进制)。
根据这个值,电池组电流能够被计算为:
I=128/(4096*0.025)=1.25A
随着时间的推移,整合的电流会因为小电流模数转换器存在偏置误差可以有一个大的累积效应,DS2438在电流模数转换器中提供了一种抵消偏置误差的方法。
在每次电流测量完成后,测量值被加到偏置寄存器的内容中,结果随后被存储在电流寄存器。
偏移寄存器是一个两字节非易失性的读/写寄存器,是以二进制补码形式存储的。
这个寄存器的高四位最高有效位包含偏置的符号,如表4所示。
下面的步骤可以用来调整电流模数转换器。
1.向偏置寄存器写全0
2.驱动零电流通过RSENS电阻
3.读取电流寄存器值
4.通过在状态/配置寄存器置"0"IAD位,关闭电流模数转换器。
5.改变当前读取的电流寄存器的值的符号,转换成二进制补码的形式,并将结果写入偏置寄存器中。
6.通过将状态/配置寄存器中的IAD位置1,开启电流模数转换器。
注意:
当写入偏置寄存器时,必须禁止电流测量(IAD位置0)。
在每一个DS2438设备装载之前,电流模数转换器完成校准过程。
然而,为了达到最好的效果,在最初的电池组测试中,电池组制造商应该校准电流模数转换器,并且主机系统应该尽可能的校准(例如,在电池充电期间)。
7of29
操作——电流累加器
DS2438用集成电流累加器(ICA)跟踪一块电池的剩余容量。
ICA保持流进和流出电池的电流总和的净累积。
因此,存储在这个寄存器中的值是在一个电池中剩余容量的一个指标,可能被用在执行燃料评估函数。
此外,DS2438还有另外的寄存器用来存储总充电电流和总放电电流。
CCA和DCA给主机系统提供决定可充电电池的寿命结束的信息,这些信息是基于在其生命周期的总充放电电流。
电流测量描述的是每27.46ms检测电阻RSENS两端测得的电压。
这个值用于增加或减少ICA寄存器的值,如果电流是正的,增加CCA的值,如果电流时负的,减少DCA的值。
ICA是一个按比例的8位易失二进制计数器,累计了电阻RSENS两端的电流。
如果状态/配置寄存器IAD位置1,ICA递增或递减。
表5展示了ICA的内容。
查看“存储器映射”找到ICA寄存器地址。
表5ICA寄存器格式
(这个寄存器累积了RSENS两端的电压值,这个值通过以下这个方程可以计算出电池剩余量。
)
剩余的电池容量能过用这个方程由ICA的值计算得出。
剩余容量=ICA/(2048*RSENS)(RSENS单位为Ω)
例如,如果电池组的剩余容量值为0.625,电池组用0.025Ω的检测电阻,ICA的值将是32。
根据这个值,剩余容量能够被计算为:
剩余容量=32/(2048*0.025)=0.625Ahr
因为电流模数转换器精度是正负2最低有效位,所以测量很小的电流时很可能不精确。
因为当累计足够长的时间这些不精确可能变成大的ICA错误,DS2438提出了一种方法用于滤除这些潜在的错误小信号以致他们不被累积。
DS2438的阈值寄存器指定一个电流测量级(在抵消取消后),在此之上测量值将在ICA,CCA和DCA上累积,低于阈值将不被累积。
阈值寄存器的格式如表6所示。
接通电源的默认阈值的寄存器值是00h(没有阈值)。
注意:
当写入阈值寄存器时,电流测量必须被禁用(IAD位设置为“0”)。
8of29
阈值寄存器格式表6
充电电流累积器(CCA)是一个两字节的非易失的读/写计数器,它表示在电池生命周期中的总充电电流。
它只有当正电流通过RSENS时更新;即电池正在充电时更新。
同样,放电电池累积器(DCA)是一个两字节非易失性计数器,它表示电池生命周期中的总放电电流。
CCA和DCA能够被配置成三种模式中的任意一种:
禁用,启动映射到EEPROM,启动但不映射到EEPROM。
当CCA和DCA被禁用时(通过设置状态/配置寄存器中IAD位或CA位为0),通用数据存储可随意存储在第七页中的寄存器中。
当CCA和DCA被启用(通过设置IAD和CA为“1”),第七页为这些寄存器预留,第七页中的任何字节都不能通过单总线被写入。
当CCA和DCA启用时,它们的值自动映射到EEPROM,通过设置状态/配置寄存器中EE位为1。
当这些寄存器被配置映射到EEPROM时,电池组生命历程中积累的信息将累积不会被丢失,即使电池处于放电状态。
当EE位置0时,映射到EEPROM禁用。
表七阐述了CCA和DCA寄存器的格式。
表8总结了ICA,CCA和DCA的操作模式。
9of29
图2阐述了电池组在一个采样充/放电周期间,ICA,CCA和DCA的活动,假设ICA被DS2438配置成工作,CCA和DCA工作并将数据映射到EEPROM。
为了简化累积器的图解,它们被视为模拟值,尽管它们是在DS2438中是数字计数器。
注意当电池完全放电时,即ICA的值为0时,CCA和DCA寄存器的值将保持不变。
电流累加器活动图2
检测电阻选择
RSENS的选择涉及一个折中。
一方面,电阻的阻值必须尽可能的小,为了避免在峰值电流要求间产生过高的电压降。
另一方面,RSENS的阻抗应该尽可能的大,为电流测量和积累实现最好的分辨率。
表9列出了RSENS的几个典型值,流经RSENS的电流为2A(作为一个例子)时,电流累加器的低八位值为(1/(4096*RSENS)),剩余容量的低八位累积值为(1/(2048*RSENS))。
用户应该仔细考虑最大电流时的压降,选择RSENS时,解决电流测量/累积的要求。
操作——历时计数器
一个内部振荡器用作计时功能的时基。
双缓冲的历时计数功能,允许主机读取历时时间,当它被读取的时候,数据保持不变。
为了实现这个目标,计数器数据的快照被转移到用户可访问的保持寄存器。
这在重新调用寄存器命令的第八位后触发。
历时计数器是一个4字节的二进制计数器,带有1s解决。
历史计数器翻转之前能累积136年的时间。
时间/日期由秒数表示,因为有一个用户决定的参考点。
例如,1970年1月1日上午12:
00可以作为一个参考点。
10of29
其他两个与时间相关的功能是可用的。
第一个是断开时间戳,任何时候它检测到DQ线保持低电平接近两秒时,DS2438向这个时间戳写数据。
这种情况将被视为电池组从系统中移除;发生的此刻被写入断开时间戳寄存器,所以被置换进系统,系统能够决定设备多长时间被存储,从而促进自放电修正剩余电池容量。
在断开被检测到后,DS2438恢复睡眠模式,在这期间除了实时时钟,其他均被关闭。
其他的时间戳是电荷结束时间戳,任何时候检测到充电完成后(当电流变化方向),该时间戳被DS2438写入。
这个时间戳允许用户去计算电池处于放电和充电状态的时间,在此促进自放电计算。
历时计数器,断开寄存器,充电结束寄存器如表10所示。
参阅“存储器映射”找到时间相关寄存器的地址。
64位光刻ROM
每一个DS2438包含一个64位长的唯一的ROM码。
前八位是单总线系列码(DS2438码是26h)。
接下来的48比特是一个独特的序列号。
最后八位是前56位的CRC。
(见图三)。
64位ROM和ROM功能控制部分允许DS2438作为单总线设备操作和遵循单总线系统部分的单总线协议。
直到ROM函数协议得到满足,DS2438控制部分的函数才有访问权限。
图5ROM函数协议流程图描述了这个协议。
单总线主机必须先执行四种ROM函数命令中的一种,1)读ROM,2)匹配ROM,3)搜索ROM,或4)跳过ROM。
在一个ROM函数序列已经被成功执行后,DS2438特定的函数才有访问权限,主机可以执行六种寄存器和控制函数命令中的任意一种。
11of29
循环冗余码产生
DS2438有一个8位的循环冗余码存储在64位ROM中的最高有效字节中。
主机能够从64位ROM中的前56位中计算出一个循环冗余值,并与DS2438存储的值进行比较,来决定是否主机正确接收了ROM中的数据。
这个CRC对应的多项式函数是:
CRC=X8+X5+X4+1
DS2438用同样的多项式函数产生一个8位的CRC值,并提供这个值到主机,验证数据传输字节无误。
CRC用于数据传输验证的每种情形,主机必须用以上给出的多项式函数计算出一个CRC值,并将计算值和DS2438中存储在64位ROM中的8位CRC值或DS2438内部计算的8位CRC值进行比较。
(当暂存被阅读的时间将是9位。
)CRC值的比较决定了完全由主机控制的操作是否继续。
在DS2438中没有一个内部电路能够阻止一个指令序列执行,如果存储在DS2438中的循环冗余值和主机计算出的值不匹配。
按图6流程图所示的CRC的适当使用,可以形成一个非常高水平完整性的通信信道。
用如图4所示包括移位寄存器和异或门的多项式产生器能过产生单总线的CRC码。
关于达拉斯单总线CRC的附加信息是有效的,在应用程序注意27题为“用达拉斯半导体触摸存储器产品理解和使用CRC。
移位寄存器位被初始化为0。
然后从系列码的最低有效位开始,逐位移入。
在系列码的第八位进入之后,序列码开始进入。
第48位的序列码进入后,移位寄存器包含了CRC值。
12of29
只读存储器(程序存储器)函数流程图图5
MasterTxResetPulse:
主机发送复位脉冲
DS2438TxPresensePulse:
从机发送应答脉冲
MasterTxROMFunctioncommand:
主机发送程序存储器函数命令
33hReadROM:
33h读取程序存储器
DS2438TxFamilyCode1Byte:
DS2438发送一个字节的系列码
DS2438TxSerialNumber6Byte:
DS2438发送六个字节的序列号
DS2438TxCRC1Byte:
DS2438发送一个字节的循环冗余码
MasterTxMemory/ControlFunction:
主机发送存储/控制函数
55hMatchROM:
55h匹配程序存储器
MasterTxBit0:
主机发送0比特位
Bit0Match?
:
0比特位匹配吗?
MasterTxBit1:
主机发送1比特位
Bit1Match?
:
1比特位匹配吗?
……
MasterTxBit63:
主机发送63比特位
Bit63Match?
:
63比特位匹配吗?
F0hSearchRom:
F0h搜索程序存储器
DS2438TxBit0:
DS2438发送比特0
DS2438Tx~(Bit0):
DS2438发送非比特0
DS2438TxBit1:
DS2438发送比特1
DS2438Tx~(Bit1):
DS2438发送非比特1
DS2438TxBit63:
DS2438发送比特63
DS2438Tx~(Bit63):
DS2438发送非比特63
CChSkipROM:
CCh跳过程序存储器
13of29
存储/控制函数流程图图6
MasterTxMemory/ControlFunction:
主机发送存储/控制函数
4EhWriteSP:
4Eh写堆栈指针
BEhReadSP:
BEh读堆栈指针
48hCopySP:
48h复制堆栈指针
MasterTxPage#:
主机发送页#
DS2438SetsAddressCount=0:
DS2438将地址计数器置0
MasterTxDataByte:
主机发送数据字节
MasterTxReset?
:
主机发送复位信号吗?
Address=7?
:
地址等于7吗?
DS2438IncrementsAddress:
DS2438地址自增
DS2438TxPresencePulse:
DS2438发送应答脉冲
MasterRx8BitCRC:
主机收到8位的循环冗余码
MasterRxAll“1’s”:
主机接收所有的”1’s”
DS2438ShadowsSPPageXToEEPROM/SRAMPageX:
DS2438将堆栈指针页X映射到EEPROM/SRAM页X。
NVMemoryBusy?
:
NVMEMORY,ACELECTRICALCHARACTERISTICSNV寄存器,模拟电流电特性
14of29
44hConvertT:
44h温度转换
DS2438BeginsConversion:
DS2438开始转换
TempConvertBusy?
:
温度转换忙吗?
B4hConvertV:
B4h电压转换
VConvertBusy?
:
电压转换忙吗?
B8hRecalMemory:
重调寄存器
DS2438StoresEEPROMPageXinSPPageX:
DS2438将EEPROMPageX存入SPPageX中
内存映射
DS2438的存储器分配如图7所示。
存储器由一个暂存寄存器和静态存储器/电可擦可编程只读存储器。
这个暂存寄存器能确保数据完整性,当在单总线上通信时。
数据首先被写入暂存,它可以被读回。
在数据被验证后,一个复制暂存寄存器的命令将会把数据传到存储器中合适的页。
(0-2页为主要是易失性的静态存储器,3-7页为EEPROM)。
当修改寄存器时该过程确保数据完整性。
这个DS2438的存储器被组织为64字节的存储器,8个8字节的页。
每个页面都有自己的暂存空间,组织为8字节的内存。
当阅读一个暂存时,有一个第9字节,这可以用一个读取暂存命令来读。
这个字节包含一个循环冗余校验(CRC)字节,在当前的选择中这个字节是这八个字节的CRC。
这个CRC比较流行的实现如”CRC产生“部分描述的一样。
15of29
第0页(00h)
第一页包含了DS2438中最经常访问的信息,除了状态/配置寄存器(0字节)和阈值寄存器(7字节),大多数的位置是易失的只读字节。
状态/配置寄存器是一个非易失性的读/写字节,这里定义了DS2438那些特性是启动的,以及他们将会怎样工作。
寄存器的格式如下所示:
IAD=电流A/D控制位。
”1“=电流A/D和ICA启用,电流测量将以36.41HZ的频率采样;“0”=电流A/D和ICA被禁用。
这一位的默认值是一个“1”(电流A/D和ICA启用)。
CA=电流累加器配置。
“1”=CCA/DCA启用,数据将被存储,并能从第7页,4-7字节取回数据。
“0”=CCA/DCA被禁用,第7页可以用于通用EEPROM存储。
该位的默认值是”1“(电流CCA/DCA启动)。
EE=电流累加器映射选择位。
“1”=每次相应的寄存器递增时,CCA/DCA计数器数据能够被映射到EEPROM。
“0”=CCA/DCA计数器数据将不会映射到EEPROM。
随着电池组放电,CCA/DCA可能会丢失。
如果状态/配置寄存器的CA位置0,EE位对DS2438功能上没有影响。
这位的默认值是“1”。
(电流CCA/DCA数据映射到EEPROM)。
AD=电压A/D输入选择位。
“1”=电池输入(VDD)被选作DS2438电压A/D转换器的输入,“0”=通用A/D输入(VAD)被选作DS2438电压A/D转换器的输入。
对于任一种设置,电压转换命令将会初始化电压A/D转换器。
该位