分享

【动手做个移动电源】1234

 风舞狂鲨 2014-04-13

1、关于业余,关于架构

2012-11-5 尾生

(1)写在开头的一些话

        在大学的时候,基本没怎么好好上过课,大部分时间在实验室自学单片机、硬件电路、软件~也参加过各种比赛,做过一些项目……刚出学校的时候还是有点牛气的,可是到工作后才发现,大学哪怕接触过再多这方面的东西,还是缺乏工程的思想。近公司后做了好几个项目,大的公司除了开发流程最为令人称道之外,能接触到的各种技术也十分令人称道。好在有前辈领路,慢慢的摸上了一些道,现在带着项目,也想在业余再做点东西、学点东西。

        三年软件,十年硬件。这句话想来非常精确的反应了软件和硬件修炼的难易程度,很多时候,真的是时间堆出来的,但是光有时间又不行,很多人都说硬件是一个吃经验的活,越到后面越轻松,但其实并不是这样的,特别是通信电子/消费电子,实在是变化太快了,很多时候,要做一个新的项目,要接触的了解的掌握的东西实在是太多了,甚至还包括底层软件。当然,买个某家芯片公司的单芯片解决方案来实现一个产品,长期这样也就不叫硬件设计人员了,最多只能算的上是硬件工人。如果能进一个小公司做硬件,那好好学做事,能接触到很多,到大公司也能学习到很多,而两者的共同点都是,如果不自学好好学点东西,很快你就会发现,没有底蕴而且后劲不足,时代变化的太快了,昨天还在做USB2.0,马上3.0就要启动了,协议几百页都还没有看完,咋搞……

         从硬件工程师成长为硬件系统架构师,再了解一点软件的层级以及开发思想,恭喜你,你肯定成为了一个超级牛x的系统工程师了。

         以前,技术纯粹是一种爱好,后来有些波折的岗位选取,还是到公司来做硬件了,也算是缘分。现阶段在器件高度集成化的同时,各种技术的低门槛造成新产品上需要上各种高新技术以提高竞争力。而在这个过程中,很多人就喜欢越尖端越好,但其实,我们都认为老板有一句话是真理:我们只做领先一两年的技术……我们要做工程商人……不是工程研究员,而是工程商人……这样的创新和技术才能实现最大的社会价值……

(2)移动电源的需求

        换手机后,一直想自己做个移动电源,想了想,就开始做了,以此来让业余那些浪费在Dota上的时间变得宝贵。当然了,其他做菜和运动的时间不能少,这样自己的时间非常不充裕,所以只能慢慢来了,没周做一点,慢点做,同时希望能够在博客里和大家做一个分享,把整个的设计制作过程展现出来,只有实现了社会价值的制作才有意义。当然,是从硬件的角度来阐述怎样把一个产品从无到有的制作出来。

         首先是对这个移动电源的定位吧!也就是传说中产品开发的需求——这个产品要做成什么样子的?第一个肯定是电池容量了,当然越大越好了,但是其实普通开发者比如我这样的很难搞到物美价廉的电池,所以………定个3000mAH吧,相比现在市面上已经100块钱10000mAH的移动电源这个容量确实有点小,但是木有办法啊,私人买不到简装电池哦……

        对应这个容量,小就小点哈,其实只要接口留出来了,把若干个电池都放电到同一电压然后直接并接在一起,就是个电池了。

        然后就是充电时间和放电时间了,这两个参数都取决于电芯的容量,比如单节2000mAH的电池,充放电电流一般可以做到0.7C(C代表电池的容量)也就是1.4A,这样一节电池用最大充电电流和稳压状态,就能够在2小时内充满电了(具体的充电模型后面再说,多节电池的并接充电也后面再说)。

(3)系统规格分解

         移动电源TP01(TravelPower01)系统设计简要规格如下:

        a) 支持多节同类电芯的电池并接扩展容量,留出并联焊点,TP01版本的移动电源就采用3000mAH为基本单元来做(可并接x*3000mAH来增大容量,但是需要考虑温度的采样问题以及电池差异带来的充放电差异影响电池寿命);

        b) 充电电流0.7C(正常工作环境温度),以并接10*1000mAH电池计算,C(单电池容量)指的是单电池的容量,充电电流不能大于任一电芯的充电电流,放电是可以更大的。所以充电电流=700mA,这样充满电的时间T=10000/700≈15hour,呵呵,很长时间啊……放电的话单节=0.7C,多节的时候可以大于0.7C

        c) 环境工作温度定义为-10~40度吧,电池本身的温升加上环境温度不能超过50度(我不太记得了,要查一下资料看),也就是要监控电池温度,电池属于敏感器件,不正常的温度下容易损坏甚至爆炸,所以温度范围一定要监控好,这就是上面说的并了多节电池的情况下需要保护好器件

(4)实现

        既然是业余制造,那么肯定是要从深层次去挖掘一些深入的技术了,那就用这样一个架构吧

        a) 以MCU做主控,ARM就不考虑了,做为一篇给初学者看的博客,给老婆学习的笔记,还是要从最简单的51单片机开始。现在国产的STC系列单片机做了个小小的工艺架构升级,在原来的51架构上做了一些改进,最大的差异就是原来一个机器周期对应12个时钟周期,老51的速度和其他单片机没办法比。现在的STC系列51架构,一个机器周期对应一个时钟周期,速度提上去了,用起来也比较好用了,入门简单,应用广泛

        b) 充电芯片就用TI的Bq2416x吧,通用系列,采用IIC控制,恰好这个资料比较多,而且对这个需要深入学习

        c) DCDC的话,想来想去还是自己搭一个吧,用现成的不太有技术含量,业余制作嘛主要是锻炼技术的。自己搭DCDC的话开关频率几百KHz甚至上MHz的,用单片机肯定玩不动,需要再搭个频率发生器,用单片机控制调频或者找个能输出PWM的管脚,等差芯片资料的时候再说了……

        d) 输出的话必须限流,要不抽电流太狠了有碍电池健康,也用分立器件搭吧~

        e) 温度检测可以用ADC+温敏电阻,也可以用专门的温度采集芯片,前者误差有点大,后者成本会高一点,但是校准啥的都比较方便。

        f) 需要带状态指示灯,比如电量指示,充电指示,放电指示,可以复用的;

        g) 充电接口采用MicroUSB接口,放电接口用大的USB-A型头母座,这也是为了方便现在大多数用户手上的带USB-A型公头转MicroA型公头的线缆,可以用手机的充电器给这个电源充电,也可以拔下适配器带的线来接到充电宝上给书记充电……

        h) 大于5V时过压保护,因本身充电芯片可以抗到12V,可以在输入输出端都加上过压保护器件,防止接反。

        想来想去,在自搭的那些电路上需要兼容上集成器件,这样板子很快就能用了,也同时可以把器件选型和DIY设计放在一个板上,需求和设计现在有点大了,尽量做全一点……

        所以,最后搭出来的这个电路肯定有点占地方,如果用小封装拼一下的话,其实还好,再随便买个外壳,PCB设计的时候匹配一下,基本就产不多了

2、初步系统架构

 

前面啰嗦了半天,总的啰嗦的意思就是要做个充电宝,同时把整个的设计过程思路做个分享,本人水平有限,文中错别字比较多~~~各种问题都欢迎大家指正。好了,先上个图吧,初步的系统架构如下,详细的介绍啊选型啊什么的我在后面再介绍吧。然后就是实在是太忙了,公司各种事情非常多,可能进度会非常缓慢,争取在年前搞出来吧带火车上玩着……
同时这几天想想,就不自己搭的电路了,一个是时间和进度,一个是分立元件的方案都是需要调比较久的,稳定性是需要长期验证的,像这个东西是要做出来实际用的,安全性啥的不允许有不成熟的方案,然后就是板子要尽量做小,所以还是用集成器件吧。

如上图所示整体的一个架构就是,采用一个STC的低压51单片机(STC12LE5A60S2)做为程序主控,完成对Charge充电芯片的控制,同时完成电池电压(10AD)的采样,以及电池温度的采样开控制充电。

电源为5V输入,经过2416x后转成4.2V供电,因MCU正常供电为3.6~2.2V,需要加一级Buck或者LDO(都属于常用的两种DCDC),这次设计因为想自己做一个,考虑到这个东西要快速能用的,所以在设计中会考虑兼容集成芯片,比如TI公司的TPS系列DCDC芯片,比较便宜。该路DCDC固定输出3V,这样可以保证我在电池3.3V欠电时关机(可以猛闪红灯然后熄灭关机)

输入输出都加上过压保护,输出端加过流保护。这样一调试出来就可以用了……

灯的话准备放一个单色灯,两个三色灯(大家可以分别用分立的灯拼),单色灯是充电宝工作指示灯,也就是把电源开关打开单板就开始工作,一个三色灯用来指示电池电量(可以用不同的色彩组合来表示不同的电量,比如绿色是电量充足等等),另一个三色灯用来指示充电宝的状态(比如绿灯闪烁是正在充电,红灯闪烁是异常,红蓝轮流闪烁是xx异常,总之就是各种用~

以上就是初步整的一个架构框图,基本就是充电的时候充电并指示电量状态,单片机 一直采电压(可适当进入休眠模式降低功耗),同时完成充电和放电监控,放电时,控制打开电池通道,经过一个Boost型(升压型)的DCDC升压到5V(可以稍微升压到高一点,比如5.1V,这样经过线的压降后到终端设备的电压就在5V左右,效率会高一点)。

移动电源要求安全性,所以,必须加限流和电池监控(温度加电压)相关。基本的就这么多,后面具体介绍每一个小部分的设计~~~

 

3、51单片机简介

 

好的,前面大概阐述了一整个的设计思路,下面就分系统开始介绍一下器件选型的思路吧,简单介绍一下选型需求,为什么选这样的器件。

这小节主要介绍一下MCU,虽然各路英雄都不只一次的说过,但我还是唠叨一下吧。对于移动电源这样的消费电子产品来说,首先要实现的是功能,然后是成本,功能上为了实现电池的充放电,充电时需要判断电池电压和温度以保证电池不会过充和过温,这是最基本的安全功能,必须满足,放电的时候要保证电池不过放、电流不超过电池的放电速率,同时保证电池温度不超过安全温度(前面说的是50度针对的是新工艺的一些电池,现在市面上其实大部分都是标定的45度安全温度,并不是说超过45度就一定会有问题,只是在超过这个温度后电池的充放电特性会产生较大改变……)所以,需要有AD功能,同时能提供基本的数字逻辑。

综上,其实这个系统不需要加这么多东西,一个最普通的充电芯片+一个比较电路+一些逻辑电路就OK了,但是考虑到设计的方便性,以及做这个东西的初衷,还是采用入门级最通用的51单片机来实现,以达到最多的功能。

(1)关于51单片机

说到单片机,最开始上学的时候接触到这个东西,一直就这个概念纠结了很久,也没见什么书上开篇就讲的很透彻的。一段时间之后,自己的理解就是:其实就是一个集成的数字芯片,芯片里把CPU、内存、外存以及其他一些常有的数字逻辑电路集成在了一起,方便小系统拥有的一个逻辑控制系统,MCU就可以理解为单片机。

一般在ARM7以上架构的系统不叫单片机,主要的原因是因为在那样的速度上,很少有器件会内部集成匹配这样速度的内外存器件。

单片机和电脑对应:电脑有CPU,单片机里面集成了CPU核完成指令调度管理;电脑要加内存条,单片机里面会集成一定容量的RAM(比如普通51里面有512个字节的空间),这个内存是用于程序运行过程中的变量缓存的,比如你做一个算法,CPU在读程序的时候发现你定义了一个变量,这个变量的值就回占用RAM空间来做中间暂存和处理的;电脑有硬件,我们装系统都是装在硬盘里的,同理,单片机有内部EEPROM或者Flash这样的外存空间,就是用于烧写程序的……

以上是对什么是单片机的一些自己的理解,有误之处请见谅,个人能力,呵呵。还有个要说的就是,很多初学者在图书管买书的时候都发现有很多芯片的型号,都是51单片机,不太理解。实际上,不管是51430ARM架构等等,这个名字都是针对的硬件系统的架构来的,每个公司在定义了一个新的架构时会取一个名字,比如ARM公司针对CPU定义的M3M0ARM7ARM9A15等等,51单片机也是如此,最早时某公司(我也不太记得哪个公司了)开发了一个MCU的架构取了个名字叫51,后来好多家公司都做这个芯片,不同的型号,比如AT89C51,大家看到最多的一个名字。实际上,随着芯片技术的发展,这种老的器件早就被淘汰了,当然,可能有些小公司还一直在坚持着用,但是实际上,这个器件已经没有任何优势了。

目前国内说51单片机,最多的指的是STC51系统单片机,国内的一家公司(生产供应不明,研发不明,各种不明的一家个人主义及其浓烈的xx公司,我不好评价)。这些芯片基本上功能都差不多,用法也差不多,没次我和大家提到这个,首要阐述的观点就是:不会的先查器件资料,看全了器件资料你就会了。所以,大家学习的话可以直接到官网上去down个器件资料好好看看,看着看着再辅助其他一些资料就会明白的。

这里出于成本和功能的考虑,直接用国内这个STCSTC12LE5A60S2,当然,大家可以随便用的,功能都能实现的。

(2)关于STC系列的我准备用的这个器件

用一个器件,首先需要看器件资料。所以,我们先到官网上去down一个器件资料吧。说到官网,我就啰嗦一下,STC系列的器件在百度里搜索宏晶就可以了,第一个连接就是,叫宏晶科技,点进去之后,看到那个非常土鳖的页面,大家也别惊讶,不要以为进错了,http://www./没有错的,我不得不吐槽一下这家公司的烂主页,我第一次打开的时候,一度以为自己进错了或者浏览器异常,这尼玛再没钱也不用整成这个样子吧,一家公司的官网烂到这种程度深刻的让人怀疑他们的专业水准啊!找个学生,给了几千块钱做的也比这个好。这个网站实在是烂到可以,当然,唯一的优点是因为基本都是文本html,打开速度比较快。

在这里也不是说要给这个企业抹上污点,实在是这个网站做的太烂了一点,存文本啊,摆的格式啊……希望我支持了这么多年的国产单片机能稍微给点力,降成本怎么会降到这种地步啊~~~

(3)关于最小系统

很多时候,都有人说单片机的最小系统,我的理解就是:CPU正常加载程序需要的最小单元。前面我们提到,MCU可以类似对应为一个主板上放了CPU+内存+硬盘,那么,这么让这个CPU正常加载程序呢(假设硬盘里已经有了程序,外面外面接了一个显示器看log标志)?

a) 供电

不用说大家肯定也清楚,最重要的条件之一是电源。正确的电压+足够的供流能力,这样,CPU才能正常起机;

b) 时钟

CPU等等都是从晶体管发展起来的数字电路,数字电路最最重要的一个特点就是需要时钟源提供数字逻辑的跳变等等,我们通常所说的CPU的频率,其实就是通过主板上的一个晶体接入一个倍频系统提供时钟的,51单片机这样的低速单片机中需要采用xxMHz的晶振。这就是数字系统的核心——时钟;

c) 正常的复位时序

因单片机系统中存在的一些逻辑顺序等等,正常的复位时序是不可少的

(4)51单片机的最小系统

我们进入宏晶的官网,找到这次制作需要用到的STC12LE5A60S2的资料下载下来,里面的最小系统如下:

后续在原理图部分详细讲解!这里的7805就不要用了,实在是效率太低了,T_T只是给个示意哈~等每个部分都大概介绍了一下后再详细讲吧~

    4、更优架构讨论、Charger简介

   在发这个博客第一节的时候,老婆问我,这准备做的这个移动电源所采用的方案有什么优点吗?我把我存在电脑的草图拿出来再看了一遍,想了半天,回答道:成本不低、系统太不简单,压根就不是一个最佳商品化的移动电源方案,唯一的优点是可能会体现稍微深入一些的技术……所以这里就回答一下一些网友发过来的建议,实际上最简单的方案莫过于包括电源检测温度检测全部用硬件最简单的方案实现,不需要主控,不需要这么好的充电芯片……纯粹的移动电源方案大家可以私信huzylover@126.com讨论……

        但是,我从开始对这个东西的定义就是,这个移动电源不是为了特定的某款电池做的,也就是需要有兼容性,能够将锂电池的充放电特性都做好,而不是像万能充一样随便用个简单的电压比较模式控制充电。我希望在这个制作中,体现一整个的关于锂电池应用方面的技术。这也就是我选择单片机+24161的原因,在锂电池的实际应用场合中,都是用在移动设备中的,也就是说,一定是一个主控+MCU的架构,传统的锂电池充电芯片,除了单一充电外,并不能实现自动分配电流(也就是系统边充电边工作的场合)。而现在我的文章中讲的这种架构,适用于任一带锂电池的移动设备。

        好了,接下来就是大概描述一下另一个重要的部分,就是Ti公司的24161的充电芯片。(再无聊的插一句:在整个制作过程中,方案是会有变动的,比如用的DCDC器件,LED灯的整体功能,是不是要加手电筒……想着可以就可以加的)

(1)充电芯片BQ24161的应用结构解析

        看一个器件,先从整个应用框图看起,从TI的官网上Down下24161的器件手册很明显会发现应用框架如下:

图片1.jpg

         看到这个框图的时候,如果有对电源芯片比较了解的兄弟看到的话,肯定会说上面看上去怎么很熟悉。其实,充电芯片本质上就是一个输出可变的DCDC,给一个电池充电,实际上可以看成如下等效模型: 

无标题.jpg
         电容可以等效为一个100mohm的电阻和一个超级电容串联,当没有电源接入或者电池电量充足而不充电的时候,芯片内部有一个Out输出端到电池的Mos开关,将该通路关断,同时该Mos器件自身体二极管(或者认为在该mos管DS间并接一个从电池流向Out端的肖特基二极管)用来作为电池向系统供电的通路。
        当电池电压较低达到充电门限时,假设这时电池电压为3.2V,当接入适配器启动充电后,实际情况是,charger的DCDC输出会调整到稍微高于当前电池电压的一个值,这个差值电压就能使得电流从DCDC输出给到锂电池(这个具体我在下一节再说一下电池的充电管理)。这个电压会一直跟随者电池电压知道达到充满(通用充满电压时4.2V,但是现在有一些高压电池可以充电到4.35V)、
(2)动态路径管理
       前文说道,选用这个芯片的考虑之一也是因为这个芯片的特色功能之一为动态路径管理功能,什么叫动态路劲管理呢,简单的说就是:如前文,Charger本身就是一个给系统供电的同时给电池充电的DCDC,那么充电本身有一个充电电流,电流越大,充满电的时间肯定就越短,但是有个问题,假设我前段接的是电脑的USB,Charger输出最大500mA的电流,那么如果我充电用了300mA,而给系统200mA电流,当系统因为某些突发任务(开显示器,开灯等等动作),瞬间需要的电流达到400mA,没有动态路径管理功能的Charger可能会出现输出被拉低的情况,而有动态路径管理功能的Charger会重新分给system400mA的电流,而只用100mA去充电,这个过程是动态持续的……
(3)输入电源检测
       如上面框图中所示,有两个输入,一个输入是适配器输入,另一个输入时USB输入。这个地方就必须要提到适配器的供流能力,我们知道,USB输入因早期的规格定义以及接口问题,标称的是最大500mA电流,虽然现在越来越多的大电流USB口出现(比如某些快充手机所标配的线),但是不可否认,每一个设备商再设计的时候都要考虑用户家里的电脑USB口的输出电流。当设备启动时需要的电流超过5V*0.5A=2.5W时,过大的负载容易使电脑USB口保护,更严重的是有可能直接把电脑拉挂掉(重启/黑屏),所以,Charger芯片当用在输出电流大于500mA的场合时,必须考虑适配器类型识别。
        24161提供了这样一种识别方案,将输入口的电源分别接在适配器和USB电源口,两根信号线连接在D+、D-管脚,这样当接入电脑USB时,因电脑USB的信号线D+线是被拉低(我可能记错了,回头查一下看USB协议)的。所以会识别成USB口,芯片通过中断脚上报中断,MCU通过IIC去查询芯片生成的中断标志是什么。而大部分适配器均是将D+/D-信号线短接或者电阻分压的(比如苹果的适配器区分就是这个原理)。
        通过这样的方式,24161就区分出了到底是标志USB输入还是适配器输入,对于我们加了ID电阻的适配器,可以放心的将电流放大到最大的标志规格,而对于标志USB口,芯片是会启动限流将最大电流限制在500mA的

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多