手上有台EBC-B10电池容量测试仪,挺好的国货。可以用来测试电池容量,也可以用来给锂电池充电。
对于有数块1S,3S电池的人来说,充电参数略多设置有些麻烦。好在可以通过串口接电脑设置参数。不过想着还是通过手机操作要方便快捷。
大体上有2个方案:
1.自己写下位机固件,工作量有些大,目前看也没有太大必要。
2.实现通信协议与下位机交互(zke可以考虑开源下协议,如果可以固件代码也开源下)。网上没有找到它的通信协议,想来也不会太复杂。毕竟是单片机的方案。
尝试分析一下:
整理结果如下:
1. 可能是充电时,干扰大。通信采用9600bps 5V TTL电平,使用了奇偶校验位(好像是奇校验)。如果奇偶校验不对,下位机是不会有反应的。
2. 上位机命令。
连接命令
FA 05 00 00 00 00 00 00 05 F8
停止命令
FA 02 00 00 00 00 00 00 02 F8
断开连接命令
FA 06 00 00 00 00 00 00 06 F8
启动命令(带4个参数)
示例参数:charge mode 1.33 A(85h) 4.13v(19d) 0.56a(38h)
消息头 | 工作模式 | 最大充电电流max current | 最大电压(voltage) | 截止电流(min current) | 校验字节 | 消息尾 |
FA | 11(charge mode) | 00 85 | 01 AD | 00 38 | 0 | F8 |
检验算法:
1.就是有效载荷数据作一个按字节异或操作。
u8 TX_CheckSum(u8 *buf, u8 len) //buf为数组,len为数组长度
{
u8 i, ret = 0;
for (i = 0; i<len; i++)
{
ret ^= *(buf++);
}
return ret;
}
注:一开始以为就是常用的crc8校验,然而不是的,找遍了crc8都不配。看了下数据规律,发现不可能是crc;然后猜测是checksum(8),然而不是的。最后观察数据规律。发现是简洁的按字节异或操作(伽罗华域checksum?)。
参数设置的小坑。
电压电流参数,每2.4v,或者2.4A都会补一个0x10的偏移。猜测是线性修正偏差?
试验数据如下:
FA 11 01 00 04 EF 00 96 6D F8 //2.4a(f0) ->2.4a is point
FA 11 00 EF 04 EF 00 96 83 F8 // 2.39a(ef)
FA 11 00 C8 01 00 00 96 4E F8 //2.40 v(f0) -->+0x10
FA 11 00 C8 00 EF 00 96 A0 F8 //2.39v (ef)
FA 11 01 A0 04 DD 01 6E 06 F8 //11.81v(49dh) 40h=11.81/2.4=4.92
3. 下位机回传参数
消息头 | (machine type) | 当前充电电流 | timestamp? | (capacity) | (?) | (max current) | now voltage | min current) | 校验字节 | 消息尾 |
FA charge mode 1.33 A(85h) 4.13v(19d) 0.56a(38h) | 0B | 00 50 | 11 1D | 00 04 | 00 00(?) | 00 50 | 01 B4 | 00 32 | 8 | F8 |