武杰 发表于 2017-2-26 10:34:58

造福中国模友,NEO版B6系充电器固件及详细使用手册

话说楼主本来对充电没什么兴趣更没有啥研究,直至最近几个月因为要装12S的Goblin 570所以入了个二手200W的Dynamite Passport充电器。到手发现USB接口有烧蚀的痕迹,散热风扇也少了颗螺丝,后来折腾了半天总算是收拾的像个样子了(详见《入了个二手充电器,大家帮忙看看我的电池有没有问题》)。一切似乎看着都很正常,可是用了没多久发现内置温度传感器数值不正确,这倒不要紧,要紧的是,电池电压检测不准。主要表现为,常温下冷机状态电压显示值与万用表实际测得值几乎一致,最多0.01V的差距,然而当内部温度升高时,显示的电压会比实际值要低0.02V-0.03V。这对于不能设置充电截止电压的原厂固件来说真是有点要命,毕竟电池面临过充的危险。于是就想着校准充电器试试,可所有能试的方法都试了,对B6有效但对Dynamite完全没用。。网上搜了下发现第三方开源固件Cheali Charger可以校准充电器的各项数据,对此我很感兴趣就下载了下来。刷到充电器之后发现真的很不错,功能比原厂的强大了不止一点,不仅可以校准电压电流,居然还能校准温度,实在是太完美了!
然而完美主义的我很快就感觉,这个固件虽然功能强大,但界面文字实在是没有美感可言,于是乎下载了源码自己修改并编译。怎奈AVR编程从未接触过,上一次玩还是直接在Windows下用Keil C直接编译HEX文件刷到STC单片机里,这跟Cheali Charger的编译方式完全不一样。好在七折腾八折腾的把固件在Cygwin下面编译了出来,先是刷到B6当中,没发现任何问题,可当我刷到Dynamite上时,发现系统对第6片电芯的检测值不断波动(详见《充电器刷了开源固件,发现第六个电芯电压检测波动很大》)。当时非常苦恼,因而与固件作者交流了很多次,对方也非常用心的给我提出建议并给出解决方案,很是感激。可是狗血的是,当我对若干电阻以及运放芯片做了详细的测量之后发现(当时怀疑是硬件故障),源代码不做任何修改直接用CMake + MHV AVR Tools编译出来居然没有任何问题!那一刻觉得自己有种被Cygwin愚弄的感觉,当然我知道这不是它的问题,一定是AVR编译器的版本没有选好或者哪里设置不对导致的。

不管怎样,正常了就好啊!接下来把源程序的文字全部重做,尤其是大小写问题(B6系充电,包括所有以B6做基础的增强版,都采用1602液晶显示器,这玩意问题在于大小写的高度都差不多,看着很是别扭,不如全部大写看的舒服),另外很多没有对齐的地方也做精细调整。最要命的是,调试程序不像在电脑上直接运行那么直观,每次都是刷到充电器运行测试(保守估计我的单片机被擦写了不下300次),很是花了一番功夫。就当我打算开始享受新固件给我带来的喜悦时,发现Dynamite的电压检测即便是校准了,但随着内部温度的变化还是会存在偏移,数值大约在0.02V左右,真的很让人沮丧。。仔细分析发现是采样电阻的热稳定性较差所导致的,具体表现是温度越高则显示值低于实际值,反之则高于实际值。后果是啥呢?就是充电会过充,保存的时候则截止电压会高于设定的电压(如设置在3.8V,结果保存结束,测得电池电压在3.82V)。如果所有电芯电压都是这样也就罢了,咱把满电电压改低一点不就行了么?事实证明我还是太单纯了,这玩意每片电芯的采样电阻温漂程度还不一致,我去!没办法,既然已经开始折腾,那就折腾到底吧(其实花点钱买个好点的充电器是最省事的做法,可谁叫咱就好折腾呢!)。一不做二不休,既然充电器内置温度传感器,那何不用这个作为参考来对电压值进行补偿呢?想法很简单,但做起来有点难——毕竟程序不是我写的,规模也算庞大。咋办?一点一点看呗!经过几天的琢磨、编码、调试、测试,最终这个功能按照既定的目标正常的运行了,现在每片电芯的电压误差不超过0.003V,处于可以接受的范围,当然我也没耐心继续调整了,否则精度还可以更高一些。

东西弄好了,就想着和大家分享一下,一来这类充电器固件的刷写教程,尤其是中文的教程不多而且也不够详尽;二来固件的界面都是英文,很少有具体的中文资料会对每个设置项进行详细的解释。在这样的初衷下,楼主花了很多天的时间写了一本该固件的使用手册,专门针对本人仔细修改并加入新功能的固件做了深入细致的介绍,从固件的刷写到充电器参数的设置、从创建一个电池充电方案到具体充电屏幕的各项数据的含义、从自制温度感应线到连接电脑实时观测充电数据等等,都用大量的篇幅做了解说,最大程度的帮助使用者利用好这个优秀的固件。由于改动较多,楼主也花了很多的时间和精力,经过原作者的同意,现将该版本的固件命名为NEOSUNRISE充电器固件(简称NEO固件),在充电器开机时,会显示“NEOSUNRISE SMART CHARGER”的字样。

以下是NEO固件在2.00版Cheali Charger的基础上所做的修改:

[*]将除了电池缩写(如LiPo,LiFe,NiHM)之外的界面文字全部改成大写,同时调整了全部英文表述,并将界面文字对齐;
[*]对开机之后的电池列表信息进行了调整,原固件为“Lipo 2000/6”,修改之后为“LiPo 6S 2000mAh”,类似的细节还很多,这里不一一列出;
[*]为参数设置菜单中恢复初始设置及EEPROM恢复初始设置增加了确认提醒,防止误操作;
[*]调整了蜂鸣器发声频率,改善了原固件的按键及警示提醒音效;
[*]针对带有内置温度传感器的充电器设计了电压检测温度补偿功能,以抵消电压采样电阻的自身温漂问题。

NEO固件的主要功能有:

[*]支持电池类型:镍铬(NiCd)、镍氢(NiHM)、镍锌(NiZn)、铅酸(Pb)、锂离子(Li-Ion)、锂铁(LiFe)、聚合锂电池(LiPo),以及自定义电池类型
[*]镍铬、镍氢电池功能:充电、放电、循环
[*]镍锌电池功能:充电、快速充电、充电+平衡、放电、平衡
[*]铅酸电池功能:充电、快速充电、放电、循环
[*]锂电池功能:充电、快速充电、充电+平衡、平衡、保存、保存+平衡、放电
[*]电池内阻检测、单片电芯内阻检测
[*]电池连线电阻检测
[*]内部温度及外部温度监测
[*]过充过放监测
[*]20组电池设置
[*]电压、电流、温度校准
[*]电压检测温度补偿(包括输入电压、输出电压以及1-6芯单片独立调整)
[*]支持LogView (用于在计算机上实时观测记录充电器运行数据)

注意:本固件理论上支持所有以B6为基础、以ATmega32单片机为核心的4键充电器,固件目前提供两个版本的下载:50W(没有内置温度传感器、液晶屏背光不可调)以及200W(有内置温度传感器、背光可调)。若要使用电压温度补偿功能,必须有内置温度传感器并刷写200W版本的固件才可以。当然如果你希望在外部温度接口那里接个温度传感器并装到充电器内部,以此作为温度补偿的参考,我也可以帮你完成这个目标,直接在本帖回复即可。

声明:该固件仅供学习与交流之用,禁止用于任何商业目的。分享的初衷是希望大家可以更好地使用手头现有的充电器,在刷写新固件之前请一定要记住备份原有固件,以防新固件不兼容。此外,使用者请自己判断充电器是否适用该固件,本人不对使用该固件造成的一切后果承担任何责任。如果你不接受本声明,请不要使用本固件!

启动画面


电池选择界面


USBASP线制作


温度感应线制作


充电器校准


电压补偿展示(电芯1)


充电数据实时监测与记录


文章转自
neosunrise大神http://bbs.5imx.com/forum.php?mod=viewthread&tid=1241525

武杰 发表于 2017-2-26 10:35:41

此楼为固件更新专用
2016-12-19:iMaxB6-NEO-V110.rar 该固件允许用户自定义充电器最大充放电功率,请详细阅读压缩包内的说明文件来进行设置。
2016-12-16:iMaxB6-NEO-50W-10W-Discharge.hex 该固件将放电功率提升到10W,最大放电电流为2A,充电功率不变。

2016-11-12:
主贴中所述固件以及使用说明书下载地址:http://pan.baidu.com/s/1boFI1af
该压缩包内含以下文件:
iMaxB6-NEO.ini(LogView配置文件)
iMaxB6-NEO-50W.hex(50W充电器固件,不支持内部温度检测、背光调节以及电压温度补偿)
iMaxB6-NEO-200W.hex(200W充电器固件,支持内部温度检测、背光调节以及电压温度补偿)
iMaxB6-Stock.bin(B6原厂固件)NEOSUNRISE固件用户手册.docx(使用手册)

希拉穆仁 发表于 2017-2-28 11:16:48

看看看 不懂

武杰 发表于 2017-3-1 14:54:52

希拉穆仁 发表于 2017-2-28 11:16
看看看 不懂

刷固件。。

迷路的小男孩 发表于 2017-5-19 23:52:19

B6刷完了会比原来好什么?_?
页: [1]
查看完整版本: 造福中国模友,NEO版B6系充电器固件及详细使用手册