描述
<p>注:*为必填项。</p>
<p>【请在报名阶段填写 ↓】</p>
<h5>*** 简要介绍作品:**</h5>
<h6>核心部分为全新设计的电池管理系统(BMS),对大容量锂电池组进行有效管理和控制。以此为核心打造出积木式车载豪华平台,除已经搭载车载冰箱外,还有无数扩展的可能,包括车用装备(吸尘器、充气机)、出行装备(电热水器、温奶器),更可搭载逆变器,连接各种办公设备(笔记本电脑、打印机)。</h6>
<p><img src="//image.lceda.cn/pullimage/PhyOvbTtWLaUanz6yFswo92LsE3L7EaCIki9lIdv.png" alt="主图.png">
【请在竞赛阶段填写 ↓】</p>
<h5>* 一、作品详情;</h5>
<h6>本项目分为两个层面。</h6>
<h6>外层是漂亮甚至豪华的一层,主要是一组多功能供电口,由自带的大容量锂电池组供电,连接车载冰箱、电加热水杯、通过逆变器连接笔记本电脑、提供USB接口等,将爱车打造成一个适合旅游、移动办公的舒适环境。这一层面基本是购买现成产品进行组合,技术含量有限。</h6>
<h6>底层是本次项目的核心,为包含主被动均衡的电池管理系统(BMS)。</h6>
<h5>* <strong>二、描述作品所面临的挑战及所解决的问题</strong>;</h5>
<h6>动力锂电池进入实用场景,应该说处于方兴未艾的阶段。在新能源车领域,电动大巴为城市空气质量做出巨大贡献,电动出租车将燃油成本节省到极致,国家政策对此也有诸多鼓励。</h6>
<h6>另外很重要的一点,锂电池在淘汰换代时只是容量下降,并非不能使用,这就很适合作为备用电源,给不希望停电的各种场合供电,如电梯、信号基站等,这类应用在目前刚刚兴起,有着极好的商业前景。</h6>
<h6>众所周知,锂电池不能过充过放,而实际的电池组均为多个单体串联。以放电过程来说,如果其中一个单体放电到最低电压,则整个电池组就不能继续放电了,这就造成了电池组整体容量的浪费。充电过程也是如此。在备用电源的应用场景中,因为经常采用回收电池,各单体容量差异很大,这个问题就更突出。因此,这里BMS的均衡功能就成为重要角色。</h6>
<h6>目前国内大的BMS厂家产品,均以被动均衡为主,主动均衡产品屈指可数。而被动均衡通常电流很小,只适合较新的电芯,且需要电池组内都是同一批次产品,对容量不一致比较严重的回收电池来说就有些力不从心。同时主流的集成芯片绝大部分并不适合做主动均衡,会造成电路浪费、成本虚高。</h6>
<h5>* ** 三、描述作品硬件、软件部分涉及到的关键点;**</h5>
<h6>本项目根据自身情况(串数低及需要主动均衡),采用全新设计的分立元件的方案,集成了创新的被动均衡、电压检测和全新的主动均衡功能,并有专利在申请。</h6>
<h5>* ** 四、作品材料清单;**</h5>
<h6>主要芯片(均为立创商城直接搜索购买):STM32F103VET6;TPS54360;TPS55340;ACS758LCB-050B-PFF-T;WSP4884;ADS1118IDGSR;MAX8815AETB;UC3843;WSD30L120DN56;WSD30100DN56</h6>
<h5>*** 五、作品图片上传;(PCB上须有大赛logo标识并拍照上传,若无视为放弃参赛)**</h5>
<h5>*** 六、演示您的作品并录制成视频上传;(视频内容须包含:作品介绍;功能演示;性能测试;PCB上大赛logo标识特写镜头,若无视为放弃参赛)**</h5>
<h5>** 七、开源文档。**</h5>
<h6>项目分成三块电路板,其中的BMS核心模块完成单体电压的高精度检测、被动均衡、主动均衡功能,是项目的技术核心内容。主控板包含主控单片机、电芯切换电路,还包括对各路外接设备的管理,另外还有树莓派的接口板,主要完成电源转换和通讯口转换。</h6>
<ul>
<li><strong>BMS核心模块</strong></li>
</ul>
<p><img src="//image.lceda.cn/pullimage/8A7Rhna4GKeDxFis5qRAzgyEo9h9XDoK8osMsQbt.png" alt="1.png"></p>
<ul>
<li><strong>核心模块的具体功能包括以下部分:</strong></li>
</ul>
<h6>1,选通后,模块将与指定电芯单体相连,从该单体获得供电电压。根据电池材料不同,该电压设计范围为2.0~4.2V。</h6>
<h6>为保证后续电路可靠平稳工作,首先从电芯单体产生5V电压。这一功能由 MAX8815A 实现。电路如下:</h6>
<p><img src="//image.lceda.cn/pullimage/3p3jCJzDzdDRbTkygq5iCbOWvApT1C0W5upaBjDx.png" alt="3.png"></p>
<h6>接下来是BMS核心功能之一,单体电压测量。通常市面主流的集成芯片如nxp(3xxxx)、linear(6xxx)、TI等,芯片内部采用16位AD,实际应用时精度在几mV,因此这里也采用16位ADC。</h6>
<h6></h6>
<h6>ADS1118是一款16位ADC,内置高精度参考源,相比同价格产品,转换速率也比较高,成本合适,因此此次项目选择这个芯片。</h6>
<h6></h6>
<h6>前置滤波电路,按业内通用习惯,转折频率设置为几十Hz,一般2~3阶。这个选择是源于实际测量频率的需要,在不影响采样速率的情况下,尽可能降低转折频率,过滤掉各种噪声干扰。</h6>
<h6>由于选中的电芯为多串中的一个单体,因此该电芯的负极并不是电路整体的负极,这样,AD转换的结果需要隔离之后才能传到单片机。ADuM1401用于完成数字隔离功能。</h6>
<h6></h6>
<h6>这一部分电路如下:</h6>
<p><img src="//image.lceda.cn/pullimage/u5vQCyiACxvmMH6Gkuy9balz7YqClOIMwMxo1pAL.png" alt="4.png"></p>
<h6></h6>
<h6>另一个主要部分是主动均衡,其原理其实相当于一个充电器电路,只不过按照产品功能规划,其供电电源来源不同。对于很多车用方案来说,系统中存在一个DC 24V,在动力电切断的情况下仍会给BMS等多种外围电路供电。此时采用此24V作为供电电源比较合适。</h6>
<h6></h6>
<h6>而对本项目和其它一些低串应用(如小物流车)来说,系统可能没有这个额外的供电电源,此时该电源只能来自于电池组本身。也就是说,本项目中,如果有一节电芯单体电压过低,将从4串电芯的总正、总负取电,给它充电。</h6>
<h6></h6>
<h6>整体方案是通用的3843,同样因为供电和被充电的电平不同,所以需要隔离。另外,由于是电池供电,处处都要考虑功耗问题,所以用一个MOSFET控制整个充电电路的通断。</h6>
<h6></h6>
<h6>主动均衡电路如下:</h6>
<p><img src="//image.lceda.cn/pullimage/Rv0bE4tW9oeQWK3cnSB4pitsW7hVCZ8U89ZYZqhA.png" alt="5.png"></p>
<h6></h6>
<h6>被动均衡相对简单得多,用MOSFET将一个功率电阻连接到电芯两端,让单体电压过高的电芯通过该电阻放电。在通用的集成芯片方案中,如前述NXP等等,每个电芯需要一个功率电阻,这就使得电路变得十分臃肿。本方案所有电芯共用一个电阻,大大减小了电路规模。</h6>
<h6></h6>
<h6>以上是均衡模块,完成BMS最核心的功能,也包含了技术上相对麻烦的部分,而且尚有很大的进一步优化的余地,因此独立出来做成一个模块。</h6>
<p><img src="//image.lceda.cn/pullimage/l7ZiDNumd6nNG5XnDkU617WYzO2GA23h5G5N7V3H.png" alt="ABM TOP.png"> <img src="//image.lceda.cn/pullimage/mVq0pMnVXwS2NVq4mmoKVM6eFwSrKdySnHXIipAK.png" alt="ABM BOT.png"></p>
<h6></h6>
<p>立创的 logo 是必须的,嘿嘿</p>
<h6></h6>
<h6>******************************************************************************************************</h6>
<h6></h6>
<p>下面是切换电路,用于分时将不同电芯连接到均衡模块。每一路都是如此,将对应的电芯通过MOSFET连接到均衡模块:
<img src="//image.lceda.cn/pullimage/arfLR1UQEQNR0hJLW5EhGhFYec4L0B8UcG6FeeOx.png" alt="sel.png"></p>
<h6>其中CC+ 和CC- 就是前面均衡模块中的CC+和CC-,可以看到直接用于测量电压、主被动均衡。</h6>
<h6></h6>
<h6>注意到选通使用的是N沟道MOSFET,对于最高一两个电芯,它的正压接近或等于系统内最高电压,其对应的MOSFET的G极,无法再提供更高的电压上拉。</h6>
<h6>对于最高串,可以采用P-MOS,用下拉来驱动,但对中间两串,无论上拉下拉,电压都显不足,尤其是考虑到锂电池空和满之间电压变化很大。</h6>
<h6>因此,额外用了一片TPS55340,用于生成HV,将驱动电压上拉。</h6>
<h6></h6>
<h6>系统设计了多个对外接口,特性不完全相同。</h6>
<h6>为车载冰箱和热水杯设计的接口,在不受控制时导通,主要是考虑,如系统只有这类负载,则 BMS 系统可以每次长时间休眠后再唤醒、测量短暂时间,然后继续休眠。</h6>
<h6>这样有个隐患,即万一 BMS 故障,此类负载不能关断,时间久了可能会导致电池过放而损坏。那么这个设计就是一个权衡,各有利弊。在产品设计过程中,重要的一点就是将此类问题明确拿出来考虑,这类问题将成为产品定位的 “feature”。</h6>
<p><img src="//image.lceda.cn/pullimage/ltG8fGnQ3EBN5leS4IU75c3LzhaSCst2jGFLdpII.png" alt="冰箱.png"></p>
<h6>树莓派则相反,不控制时关断。只有单片机明确控制,才会导通。因为这个耗电实在太大了,另外,与冰箱不同的是,人不在车上,它就没用,甚至人在车上也只是非常偶尔地才会操作一下</h6>
<h6>该控制电路如下</h6>
<p><img src="//image.lceda.cn/pullimage/cgNFcgZi8PaOs1ySe3Ieod6O1Beh9NGOzrrgCQRw.png" alt="pi.png"></p>
<h6>整个板子:</h6>
<p><img src="//image.lceda.cn/pullimage/sT9VKIGJq2iEnVfKpNJocIG4oytmyk8rrbg4Zvn9.png" alt="ab.png">
<img src="//image.lceda.cn/pullimage/bYlX6dknwzBa7t1Adyg9DRFAZKVPAmTXHFatqtLt.jpeg" alt="AB.jpg">
<img src="//image.lceda.cn/pullimage/PLFzr7Klz96VCXKW1IYMgUDl2IBJMtYj0aNyc3BE.jpeg" alt="LOGO.jpg"></p>
<h6></h6>
<h6>电路部分的整体内容大概就是如此,核心仍然时均衡模块,开关控制部分比较简单。</h6>
<h6>各部分电路测试的视频见附件。</h6>
<h5><strong>*************************************************************************</strong></h5>
<h5><strong>************************* 树莓派软件部分 ***************************</strong></h5>
<h5><strong>*************************************************************************</strong></h5>
<h6></h6>
<h6>树莓派软件采用 Python + PyQt,好处一是代码简洁,各种库使用方便,二是跨平台特性,这一次真是帮了我的大忙,给大家讲讲我的糗事。</h6>
<h6>本次大赛截至周日,结果我在周五调试的时候,镊子一滑,烧掉了我手里的树莓派。没什么可说的,赶紧从立创又买了一块,顺丰过来,这已经是周六,然后发现,USB口和显示的HDMI口都不一样了。忙的要死,事先忘了确认,怎么办呢,又买转接头,又顺丰,可是,这次顺丰到了已经是周日傍晚了。</h6>
<h6>那我这临门一脚,这两天时间,耽搁了吗?并没有!!原来的树莓派烧了,但SD卡没事,我把文件拷到笔记本电脑的win10 + PyCharm环境,竟然只需要改一个地方,就是原来的树莓派GPIO口改成了USB转485卡的口,以前是“/dev/serial0”(不是网上说的ttyAMA0,这是另一个故事了),到笔记本上换了设备,改成“COM4",其它原封不动,正常调试,时间基本没耽搁!</h6>
<h6>等周日晚上,我其实觉得如果时间赶不上就算了,用笔记本演示也是没办法的办法,毕竟树莓派还没点亮过!(没有显示,没有配置无线网,中间试过按网上说的用putty连,用网线连,但是都没连上,也不应该花太多时间在这个上)</h6>
<h6>但是,奇迹发生了,hdmi转接头到了之后,很顺利启动了系统(原来sd卡不能用,提前重新做系统,在官网,很简单的几步),插上USB转485卡,到/dev下找到对应的名字,在程序中改成这个名字,别的完全没动,直接一次运行成功!</h6>
<h6>这就是跨平台。。。</h6>
<h6></h6>
<h6>好了,言归正传,说说软件。软件其实可说的不多,几个小坑基本在上面提过了,一是找到串口的设备名在python中用,不是网上说的 /dev/ttyAMA0,而是/dev/serial0(Pi 3B)。对于外插的USB设备,有个小技巧,先 ls /dev,然后再插设备,然后再一次 ls /dev,多出来的那个名字,直接抄到代码中应该就可以了。</h6>
<h6>二是原来的三代的sd卡似乎不能启动四代,需要重新做系统。</h6>
<h6>软件部分值得一提的应该是UI的设计,从配色到布局,简直烧掉了我无数脑细胞。还不错吧,嘿嘿</h6>
<p><img src="//image.lceda.cn/pullimage/zYMHagLSX4ktaxGnczRGQ5ZYgcNgKqTxYCTYRFRH.png" alt="ui.png"></p>
<h6>左下的数字是单体电压,右下是剩余电量。</h6>
<h6>比较创新的地方是,考虑到行车安全,通常的按钮太小,根本不适合开车过程中操作,这次将屏幕划分为九宫格,除中间和右下区域外,其它区域,每个区域整个相当于一个按钮,在触摸屏上按一下就可以操作对应的开关,十分便于开车时操作。本设计正申请专利。</h6>
<h6>代码中一些关键部分:</h6>
<pre><code>
def rs485Routine():
global serState, dtRcv, dtTrans
stdlen = 30 # length, one rcved frame should be, including head 0x55,0xaa and check sum
buflen = ser.inWaiting() if buflen == 0:
print('serial empty')
return
if serState == 0: dtRcv = list(ser.read(1))
if dtRcv[0] == 0x55:
serState = 1 # 1 means already have 0x55, the first byte of a frame
print('serState = 1') else:
print('serState = 0, a byte read, but not 0x55,its %x' % dtRcv[0])
if serState == 1:
if buflen </code></pre>
评论(6)