便携式电子设备(无论是个人电子,远程科学仪器,还是简单的车库手电筒)都有一个共同点:电池。可以是镍镉电池,镍氢电池,锂电池,或任何其他可充电电池。本文将讨论一种灵活的电池充电系统,其可以应用于各种电压,化学成分,和充电特性的电池。
当使用不同的电池容量给多种电池充电时,在不同的充电阶段,电池电压可能高于或低于电源电压。因此需要电源电压升压或降压来匹配电池电压。例如,当3.3伏的电源电压给一节镍氢电池(通常是1.25 V)充电时需要降低。当给锂电池(4.1 V)充电时,则需要升高输入电压。要处理这种情况,主充电路径要选择为单端初级电感变换器(SEPIC)。开关型DC-DC转换具备比较大范围的降压和升压能力,可以提供灵活的供电电压。
这篇文章将会以两种不同的可充电电池—镍氢电池(NiMH)和锂电池(Li-Ion)为例进行介绍。这两种化学物质的电池需要不同的充电特性,但这两者都能容易的使用相同灵活的充电结构为我们服务。从一种电池切换到另一种既灵活又简单,可以用微控制器在软件上实现。通过设计模块化的充电子系统,把功能封装到各种组件,根据系统需求,同样的应用程序可以使用不同的微控制器实现。组件的使用简化了设计,这里输入和/或输出可以是硬件和/或软件。这种方法使得开发者可以把电池充电功能作为一个额外特色加到主应用中,如马达控制,准确医学测量等。
电池充电器必须要确定电池状态(如电压、电流、温度)并控制充电电流。确定电池状态的硬件是通用的。电池电压可以高于或低于微控制器的输入范围,因此,电压测量通常是使用一个电阻分压电路来弱化电压。电流测量可以在高端(要进入电池的电流),或低端 (从电池出来的电流),如果是SEPIC变换器,在二次侧电感使用一个电阻。电池通常有一个嵌入式热敏电阻,其提供精确电池温度状态。有时在一些商业电池上为了降低成本就把它省掉了。在这种情况下,可以在接触电池的外部放置一个热敏电阻。
在此基础上测量的参数,电池充电电流由微控制器确定并控制。从充电器的角度来看,不同化学成分电池的主要区别是充电特性。锂和镍氢电池的充电特性如图1所示
图1:锂电池和镍氢电池的充电特性
如图1所示,电流由微控制器控制,电池的电压和温度会发生变化。锂电池使用恒流恒压充电。通常电池容量一般用 “CA”表示。在启动阶段,如果电池电压低于恒流阈值(Vrapid_start),充电器供应少量电流(大约0.1 CA)。这是预处理阶段,电池电压随着这个小充电电流逐渐增加。当电压达到快速充电阈值,充电电流由微控制器增加到约1 CA。这是恒流阶段,这个阶段一直持续到电池电压达到指定电压(Vfull)。然后电池充电器进入恒压阶段,这时充电电流较小,而电池电压维持在Vfull。电流降低一直到结束,同时保持电池电压,电池充电终止。在整个充电过程电池电流会有几个°C的变化。如果有任何一个电池状态(电压、电流或温度)超出充电器相应规定范围,为了安全,充电器都会停止充电。
镍氢电池的前两个充电阶段类似于锂电池:激活电流(0.2 CA)和恒定电流(1 CA)。镍氢电池的恒流阶段结束由电池电压下降(并降温)来检测,而电流是不变的。电压下降后,镍氢充电进入充电顶峰关闭阶段,这时电流减少到滴流水平(大约0.05 CA)。在这个阶段,会有一段时间的少量充电电流一直到充电结束。
基于上述充电需求,可以使用状态机(带预定义的电压、电流、温度、超时值)大大简化电池充电。电池状态和需要为电池充电提供的电流数量由微控制器状态机来控制。用于这两种类型的电池充电的简化状态机如图2所示。这个框图显示了充电的不同阶段。
图2:充电过程不同阶段框图
根据选择的电池化学物质,微控制器检查特定的电池状态机并控制充电电流。电池充电曲线可预编程,预启动,或自动决定。对于前两种,电池类型是由用户选择的。在预编程中,电池充电类型需要在组件中选择,软件和微控制器根据所需的充电曲线编程。这种类型应用于电池充电作为现有产品的一个额外功能的情况下。在这种应用中,电池类型是已知的,或不同类型的电池用于相同产品的不同版本。
在预启动中,微控制器既有电池充电曲线又有要实现的充电曲线选择,通过条件控制完成。这个控制可以简单成一个开关位置在启动期间选中。自动决定是由微控制器启动后完成的,通过检测电池类型选择充电器充电曲线。例如,一节镍氢电池典型的工作电压范围是0.9 V ~ 1.25 V之间,而一节锂电池电压范围是2.7V ~ 4.2 V之间。同样地,两者之间的温度范围也不同,这些值可以保存,并在启动的时候进行比较。自动检查方法局限于很特殊的条件。一般来说,大多数应用中选择预编程和预执行。在这篇文章中,我们会重点介绍预编程,并把注意力集中在电池充电是附加功能的应用中。
如前所述,两种电池充电器的感测和控制部分硬件是相同。电池充电器所需的外部硬件原理图如图3所示。
图3:电池充电器的简化原理图
要确定电池状态,就要进行电压、电流、温度的测量,把他们通过复用器输入微控制器中的ADC。根据这些值,在固件中确定状态,充电电流通过改变PWM占空比来控制。PWM输出连接到SEPIC变换器(其控制流进电池的电流)里的MOSFET门。这些步骤关系到CPU,因此有些延迟。不同的电池,特别是锂电池,对于过充电非常敏感,在高电压下可能变得非常不稳定。要额外增加过电压和过电流保护,硬件保护电路就要增加比较器。这些比较器会关闭充电直到用户复位或达到一个安全的工作环境。
根据测量到的参数值和电池类型,CPU决定电池状态和相应的PWM占空比。传统上,CPU检测充电曲线所需的条件,可以在代码中定义为常数,并可手动修改。例如以下代码。
当充电曲线需要改变时,BATTERY_PROFILE设置为0或1以在两种充电曲线之间进行切换。所有状态的电压、电流、温度限制都保存为常数,并可以作出相应改变。如果同一电池类型需要不同的电平,需要修改代码键入新参数。这意味着这种应用的用户需要注意代码改变充电曲线和充电器限制。通过使用组件式方法,当开发人员选择合适的IP模块时,可以键入参数来改变电池充电器充电曲线。例如,锂电池和镍氢电池组件如图4所示。
图4:可以为不同电池键入参数的GUI
使用这些组件,应用工程师可以添加充电器组件到已有的应用中,并设置适当的充电曲线。所有其他的硬件(比较器,PWM等)和软件(状态机)也都由组件生成。使用可编程结构,例如赛普拉斯的PSoC,通过软件程序,硬件组件就可编程并实现。这种方法可以用于实现图3中锂电池和镍氢电池的充电器硬件。在项目中增加一个USB部件,电池参数就可以送到计算机。数据绘制实现使用C#软件工具。其他任何通讯方式和类似工具都可以用来绘制数据。电池模拟器可以用来模拟锂电池和镍氢电池的实时获得图形。得到的图形如图5所示。
图5:锂电池和镍氢充电图形
在电流中看到的噪声是使用电压仿真器改变电压时的开关噪声。由于使用电压仿真器,电压改变特别快,对应电压的变化,PWM输出的建立时间和响应就可以看到上面的噪声结果。在电池中电压变化是非常缓慢的,从而开关噪声并不明显。
图1和图2锂电池和镍氢电池的充电阶段可以在图5中看到。因此可以看出,只需简单改变SoC固件,就可以使用同样的硬件实现多种充电器。通过简单部件,就可以增加充电功能到主要应用中。