最近公司的一个案子是要测量电芯的直流内阻,费了相当大的力气,主要是对直流内阻这种测量玩法不太清楚。
一直以来测试的要么是电芯的电压,要么是电芯的电阻,或者是电芯边电压,它们都是直接测量,并且一次搞定。
直流内阻不同,它需要两个步骤,第一次取放电前的电压,第二次取放电后的电压,而且放电后需要间隔指定时间再取电压。
然后通过公式算出直流内阻(DCIR),通过这个DCIR,可以判断电池的好坏。
有关电芯的内阻参数的介绍贴子见: 关于电池的内阻知道这几点就够了?
这个是8511+表的品牌
其26字节格式的参考手册是这个,自己去下,这是个图片:
it8511+表的指令分为两种格式。
ASCII串形式(还有一种专业术语称呼,勇哥忘记了,所以这个名字是我起的)
26个字节的指令格式
ASCII串形式指令集如下:
SYST:REM 远程模式
MODE CURR 设置定电流模式
CURR 10 设置放电电流
MEAS:VOLT:DC? 读取电压值
INP 1 打开电子负载
MEAS:VOLT:DC? 读取电压值
INP 0 关闭电子负载
MEAS:CURR? 读取电流
这些指令可以用串口助手调试,但是需要特殊的串口助手,它必须能有按一定时间间隔轮发的功能。
可以参考:
工业自动化行业软件工程师们的常用软件(一)
这个文章中介绍的那个 串口调试软件4.5 软件
26字节指令格式如下:
标准帧长度为26字节:
字节1:同步头
字节2:负载地址
字节3:命令字
字节4-25:相关信息内容
字节26: 校验码
由于这个项目使用的是字节指令完成的,所以勇哥在这里详细解释一下:
整个测量分为10步指令交互:
1.设置远程控制
2.允许本地操作
3.设置定电流模式
4.开启远端传感器数据接收
5.读取放电前当前电压的数值
6.设置定电流模式
7.打开
8.设置放电电流
9.读取放电后电压数
10.关闭
我来详细解释一下,童鞋们连参考手册都不用翻了。
1.设置远程控制
发送:AA,00,20,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,CB
参考返回:AA 00 12 80 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
20H 设置负载操作模式
字节4:操作模式(0 为面板操作模式,1为远程操作模式)
字节5-25:系统保留
2.允许本地操作
发送:AA,00,55,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
参考返回:AA 00 12 80 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
55H 设置是否允许LOCAL键使用,若LOCAL键允许使用,则负载在REMOTE操作模式时,用户可以按面板上的SHIFT+LOCAL键使负载返回到LOCAL操作模式。
字节4:LOCAL 键状态(0为禁止,1为允许)
字节5-25:系统保留
3.设置定电流模式
发送:AA,00,28,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,D2
参考返回:AA 00 12 80 0e 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
28H 设置负载的操作模式(CC,CV,CW,CR)
字节4:负载模式(0为CC,1为输出CV,2为CW,3为CR)
字节5-25:系统保留
4.开启远端传感器数据接收
发送:AA,00,56,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01
参考返回:AA 00 12 80 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
56H 设置负载的远端测量模式的状态
字节4: 远端测量状态(0为关闭,1为打开)
字节5-25:系统保留
5.读取放电前当前电压的数值
发送:AA 00 5F 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A
参考返回:
AA 00 12 90 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 9C
AA 00 5F D6 0E 00 00 7F 00 00 00 30 00 00 00 35 40 20 40 20 1B 00 00 00 00 AC
按下面指令解释,返回值中字节4-7位是测量的电压值,也就是D6 0E 00 00 这4个字节
算出来是3.798,跟表的实际屏幕显示是一致的。
第9条指令读的是放电后的电压,其指令和第5条是相同的。
勇哥来谈谈,我是怎么样算出是3.798的。
请下载这个小工具。
先注意一点:这个表返回的值不是浮点数,而是整数。
所以我们应该在软件界面上红框的位置输入00 00 0E D6, 按下10<-16按钮,就可以把十六进制数转为十进制数。
为什么不是输入D6 0E 00 00呢?
这是因为计算的内存在表示数字的字节顺序有关系。有时候低字节在前 高字节在后,有时候又是反的,这个大家可以试试。
也就是四种排列组合的可能。
这个结果3798要除1000,得到单位V,因为这个值默认单位是毫伏。
如果你希望用C#编码来转换,可以使用netMarketing类库的函数。
00111100
010000000000000000
5FH 读取负载的输入电压,输入电流,输入功率及相关状态
字节4-7:实际输入电压值(低字节在前,高字节在后)
字节8-11:实际输入电流值(低字节在前,高字节在后)
字节12-15: 实际输入功率值(低字节在前,高字节在后)
字节16:操作状态寄存器
字节17-18:查询状态寄存器
字节19-20:系统保留
字节21:散热器温度
字节22:工作模式(0 为Fixed, 1为short,2为Transition,3为list )
字节23:当前的list步数
字节24-25:当前list的循环次数
6.设置定电流模式
发送:AA,00,2A,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,D4
参考返回:AA 00 12 80 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
2AH设置负载的最大定电流值
字节4:电流值的低字节
字节5:电流的次低字节
字节6:电流值的次高字节
字节7:电流值的高字节
字节8-25:系统保留
7.打开
发送:AA,00,21,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,CC
参考返回:AA 00 12 90 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 9C
21H 设置负载的输出状态(on/off)
字节4:负载输入状态(0为输出off,1为输出on)
字节5-25:系统保留
8.设置放电电流
发送:AA,00,2A,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
参考返回:AA 00 12 90 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 9C
2AH: 设置负载的最大定电流值
字节4:电流值的低字节
字节5:电流的次低字节
字节6:电流值的次高字节
字节7:电流值的高字节
字节8-25:系统保留
9.读取放电后电压数
发送:AA,00,5F,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,09
参考返回:
5FH 读取负载的输入电压,输入电流,输入功率及相关状态
字节4-7:实际输入电压值(低字节在前,高字节在后)
字节8-11:实际输入电流值(低字节在前,高字节在后)
字节12-15: 实际输入功率值(低字节在前,高字节在后)
字节16:操作状态寄存器
字节17-18:查询状态寄存器
字节19-20:系统保留
字节21:散热器温度
字节22:工作模式(0 为Fixed, 1为short,2为Transition,3为list )
字节23:当前的list步数
字节24-25:当前list的循环次数
10.关闭
发送:AA,00,21,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,CB
参考返回:AA 00 12 80 0E 00 00 56 4A 00 00 0B 1B 00 00 3C 40 00 00 00 00 00 00 00 00 8C
21H 设置负载的输出状态(on/off)
字节4:负载输入状态(0为输出off,1为输出on)
字节5-25:系统保留
直流电阻的算法
DCIR=(放电前的电压-放电一定时间后的电压)/放电电流
放电前的电压是上面的第5步取得
放电一定时间后(通常为200ms,各个公司可能会有差别)的电压由第9步取得
放电电流大小由第8步设置
遇到的坑
上面10条指令的发送例子,第26个字节内容可能不都是正确的。
第26个字节是校验码,是前面1-25个字节的累加和,如果累加和超出FF,则取低字节
由于勇哥不想再重新算校验,所以各位不要直接把上面那10条指令拿来用,要自己算一下校验码。正确了再用。
一些经验
测量直流电阻,会遇到测量放电后电压不稳定的现象。
比如标准的放电电压是3.7V左右,如果你多次放电测量,会发现有3.5, 3.6, 3.7, 3.8 这样的随机波动现象。
这个问题跟表的测量频率设置有直接关系。
另外,还可能会出现测量电压稳定,但是其值偏低的现象,这个跟线路有关系,你要把表的测量端应该直接引线到探针上去,不能转接。
还会出现测量时接触不可靠的问题,这个就需要增加接触面,比如使用大面积的压块(铜制)代替探针,机器动作上需要在测量失败时再次抬起下压的动作,而不是仅仅靠重新触发表的测量。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

