爱问 爱问共享资料 爱问分类
首页 > > > 单片机锂电池充电器中文设计文档PDF下载(文字清晰.pdf

单片机锂电池充电器中文设计文档PDF下载(文字清晰.pdf

单片机锂电池充电器中文设计文档PDF下载(文字清晰.pdf

上传者: 小杨
638次下载 0人收藏 暂无简介 简介 2011-03-07 举报

简介:AVR450中文版 可以充4种常用的电池 很系统的充电器设计文档

1AVR450:为SLA、NiCd、NiMH和Li-Ion电池设计的充电器特点•完整的电池充电器设计方案•模块化的“C”源代码和极紧凑的汇编代码•低成本•支持多数电池类型•快速充电算法•10位ADC实现高精度测量•可选的串行接口•充电参数极易修改•片内EEPROM可用于存储电池信息说明本参考设计完全实现了电池充电器设计的最新技术,可以对各种流行的电池类型进行快速充电而无须修改硬件,从而围绕单个硬件平台实现一个完整的充电器产品系列。只需要将新的充电算法通过ISP下载到处理器的FLASH存储器就可以得到新的型号。很显然,这种方法可以大大缩短新产品上市的时间,而且只需要库存一种硬件。本设计提供完整的适合SLA、NiCd、NiMH和Li-Ion电池的库函数。Figure1.电池充电器参考设计8位微处理器应用实例Rev.1659A-CA–AVR–03/022AVR4501659A-CA–AVR–03/02参考设计实现了两个充电器,分别由高端产品AT90S4433和高集成度、低成本的8引脚器件ATtiny15构成。当然,也可以用任意一款带A/D转换器、PWM输出、具有足够程序存储器的AVR器件来实现电池充电器。介绍随着越来越多的手持式电器的出现,对高性能、小尺寸、重量轻的电池充电器的需求也越来越大。电池技术的持续进步也要求更复杂的充电算法以实现快速、安全的充电。因此需要对充电过程进行更精确的监控,以缩短充电时间、达到最大的电池容量,并防止电池损坏。AVR已经在竞争中领先了一步,被证明是下一代充电器的完美控制芯片。AtmelAVR微处理器是当前市场上能够以单片方式提供Flash、EEPROM和10位ADC的最高效的8位RISC微处理器。由于程序存储器为Flash,因此可以不用象MASKROM一样,有几个软件版本就库存几种型号。Flash可以在发货之前再进行编程,或是在PCB贴装之后再通过ISP进行编程,从而允许在最后一分钟进行软件更新。EEPROM可用于保存标定系数和电池特性参数,如保存充电记录以提高实际使用的电池容量。10位A/D转换器可以提供足够的测量精度,使得充好后的容量更接近其最大容量。而其他方案为了达到此目的,可能需要外部的ADC,不但占用PCB空间,也提高了系统成本。AVR是目前唯一的针对象“C”这样的高级语言而设计的8位微处理器。AT90S4433参考设计就是用“C”写的,说明用高级语言进行软件设计是多么的简单。C代码似的此设计很容易进行调整以适合当前和未来的电池。而ATtiny15参考设计则是用汇编语言写的,以获得最大的代码密度。3AVR4501659A-CA–AVR–03/02工作原理电池充电是通过逆向化学反应将能量存储到化学系统里实现的。由于使用的化学物质的不同,电池有自己的特性。设计充电器时要仔细了解这些特性以防止过度充电而损坏电池。AVR8位RISCMCU参考设计包括两个独立的充电器。一个使用的是AT90S4433,另一个使用的是ATtiny15。AT90S4433设计用于说明用C实现电池充电器的高效性,而ATtiny15设计则是目前市场上可以得到的集成度最高、成本最低的电池充电器。AT90S4433可通过UART与PC接口以监控电池电压和温度。表1说明了两个设计的不同。电池技术现代消费类电器主要使用如下四种电池:•密封铅酸电池(SLA)•镍镉电池(NiCd)•镍氢电池(NiMH)•锂电池(Li-Ion)在正确选择电池和充电算法时需要了解这些电池的背景知识。密封铅酸电池(SLA)密封铅酸电池主要用于成本比空间和重量更重要的场合,如UPS和报警系统的备份电池。SLA电池以恒定电压进行充电,辅以电流限制以避免在充电过程的初期电池过热。只要电池单元电压不超过生产商的规定(典型值为2.2V),SLA电池可以无限制地充电。镍镉电池(NiCd)NiCd电池目前使用得很普遍。它的优点是相对便宜,易于使用;缺点是自放电率比较高。典型的NiCd电池可以充电1,000次。失效机理主要是极性反转。在电池包里第一个被完全放电的单元会发生反转。为了防止损坏电池包,需要不间断地监控电压。一旦单元电压下降到1.0V就必须停机。NiCd电池以恒定电流的方式进行充电。镍氢电池(NiMH)在轻重量的手持设备中如手机、手持摄象机,等等镍氢电池是使用最广的。这种电池的容量比NiCd的大。由于过充电会造成NiMH电池的失效,在充电过程中进行精确地测量以在合适的时间停止是非常重要的。和NiCd电池一样,极性反转时电池也会损坏。NiMH电池的自放电率大概为20%/月。和NiCd电池一样,NiMH电池也为恒定电流充电。锂电池(Li-Ion)和本文中所述的其他电池相比,锂电池具有最高的能量/重量比和能量/体积比。锂电池以恒定电压进行充电,同时要有电流限制以避免在充电过程的初期电池过热。当充电电流下降到生产商设定的最小电流时就要停止充电。过充电将造成电池损坏,甚至爆炸。Table1.设计差异AT90S4433ATtiny15编程语言C汇编代码大小1.5K字节<350字节电流测量需外部运放调节增益片内具有差分增益调节功能PWM频率14kHz,8位100kHz,8位时钟外部晶体,7.3MHz片内经过标定的RC振荡器,1.6MHz串行接口YesNoISPYesYes4AVR4501659A-CA–AVR–03/02电池的安全充电现代的快速充电器(即电池可以在小于3个小时的时间里充满电,通常是一个小时)需要能够对单元电压、充电电流和电池温度进行精确地测量,在充满电的同时避免由于过充电造成的损坏。充电方法SLA电池和锂电池的充电方法为恒定电压法要限流;NiCd电池和NiMH电池的充电方法为恒定电流法,且具有几个不同的停止充电的判断方法。最大充电电流最大充电电流与电池容量(C)有关。最大充电电流往往以电池容量的数值来表示。例如,电池的容量为750mAh,充电电流为750mA,则充电电流为1C(1倍的电池容量)。若涓流充电时电流为C/40,则充电电流即为电池容量除以40。过热电池充电是将电能传输到电池的过程。能量以化学反应的方式保存了下来。但不是所有的电能都转化为了电池中的化学能。一些电能转化成了热能,对电池起了加热的作用。当电池充满后,若继续充电,则所有的电能都将转化为电池的热能。在快速充电时这将使电池快速升温,若不及时停止充电就会造成电池的损坏。因此,在设计电池充电器时,对温度进行监控并及时停止充电是非常重要的。5AVR4501659A-CA–AVR–03/02停止充电的判别方法电池的不同应用场合及工作环境限制了对判断停止充电的方法的选择。有时候温度不容易测得,但可以测得电压,或者是其他情况。本文以电压变化率(-dV/dt)为基本的判断停止充电的方法,而以温度和绝对电压值为辅助和备份。但是本文所描述的硬件支持以下讲述的所有的方法。t–时间这是决定何时停止充电的最简单的方法。通常用于快速充电时的后备方案。有时也作为普通充电(14-16小时)方法的基本方案。适用于各种电池。V–电压当电压超出上限时停止充电。通常与恒定电流充电配合使用。最大电流由电池决定,通常为1C。为了防止充电时电流过大导致电池过热,此时电流限制是非常关键的。这个方法是锂电池的基本充电和停止方案。实际锂电池充电器往往在达到最大电压之后还继续进行第二阶段的充电,以达到100%的电池容量。对于NiCd电池和NiMH电池本方法可以作为后备的判断停止充电方案。-dV/dt–电压变化率这个判断停止充电的方法利用了负的电压变化率。对于某些类型的电池,当电池充满后继续充电将导致电压的下降。此时本方案就非常合适了。这个方法通常用于恒定电流充电,适用于对NiCd电池和NiMH电池的快速充电。I–电流当充电电流小于某个预先设定的数值时停止充电。通常用于恒定电压充电法。适用于SLA电池和锂电池。T–温度绝对温度可以作为NiCd电池和NiMH电池停止充电的依据,但是更适合于作为备份方案。温度超出设定值时任何电池都得停止充电。dT/dt–温度上升速率快速充电时温度的变化率可以作为停止充电的依据。请参考电池生产商的规范(NiCd电池的典型值为1oC/min)–适用于NiCd电池和NiMH电池。DT–超出环境温度的温度值当电池温度和环境温度之差超过一定门限时需要停止充电。此方法可以作为NiCd电池和SLA电池停止充电的方案。在寒冷环境中充电时这个方法比绝对温度判定法更好。由于大多数系统往往只有一个温度探头,只好将充电之前的温度作为环境温度。dV/dt=0–零电压差这个方法与-dV/dt方法极其类似,而且在电压不会再升高的情况下更准确。适用于NiCd电池和NiMH电池。6AVR4501659A-CA–AVR–03/02硬件实现参考设计包括两个完整的电池充电器设计。如图2所示,本设计可以分为5个主要的模块。Figure2.电池充电器参考设计的主要模块电源包括模拟基准源、按键和LED。输入电压由D9-D12进行整流,然后通过C13进行滤波。整流后的输入电压可以在板上标有“VIN”处测得。VIN同时提供给BUCK转换器和LM7805。LM7805为单片机提供5V电源。此电压可以在标有襐CC”的测试点处测得。若标有“5VOK”的LED亮则说明电源就绪。PC接口与AT90S4433的UART相连,可用来获取电池充电时的数据。这些数据可以导入到spreadsheet以显示电池特性。进一步的信息请参阅应用手册“VR451:DataLoggerforBatteryChargerReferenceDesign”,以获取例子的源代码以及用于导入数据的MicrosoftExcelspreadsheet。使用ATtiny15电池充电器时也可以用AT90S4433来获取数据。LED和按键电路板上有几个LED和按键用于调试和监控。在目前的应用中只用到了几个。•LED0:与AT90S4433的PortB0连接,用于指示当前充电模式为快速模式还是涓流模式。•LED1:与AT90S4433的PortB2连接•LED2:与AT90S4433的PortB3连接•LED3:与AT90S4433的PortB0连接,用于指示系统出现了错误•LED4:无连接•LED5:无连接•LED6:与ATtiny15的PortB1连接,用于指示当前的PWM频率。•VCCPower:指示当前的电源状态•SW0:与AT90S4433的PortD4连接,用于启动充电器•SW1:与AT90S4433的PortD5连接•SW2:与AT90S4433的PortD6连接7AVR4501659A-CA–AVR–03/02•SW3:与AT90S4433的PortD7连接•RESET:复位程序以便从错误中恢复ISP接口两个充电器都有10引脚的ISP插座。可以通过AVRISPPC软件对程序FLASH和EEPROM数据存储器进行编程。ATtiny15及100kHzBuck变换器ATtiny15的特性使其非常适合于设计电池充电器。片内的100kHzPWM与buck变换器相连。高速开关频率以及高精度降低了对外围线圈和电容的要求。电路板上加入了测试点以便于监控PWM输出,输入电压和输入电流。ATtiny15具有内部增益调节功能以放大两个ADC引脚之间的差分信号,从而避免了使用外部运放。充电电流流过0.25W的电阻,并由两个ADC取得差分信号。充电器的电源在附录2里说明。AT90S4433及14kHzBuck变换器90S4433型充电器使用了外部运放来放大电流信号,以保证精度。充电器可以与PC进行通讯,用来监控充电参数及调试充电算法。充电器可以对SLA、NiCd、NiMH和Li-Ion电池进行充电。充电算法包括快充模式和涓流模式,以最大限度减少充电时间,获得最大容量。充电器的电源在附录2里说明。Buck变换器AT90S4433方案和ATtiny15方案中的buck变换器是类似的,都包括一个由AVR通过双极性NPN晶体管驱动的P沟道MOSFET开关管。开关管与电感、二极管和电容相连(参见Figure3)。一个额外的二极管用来防止在断电时电池向微处理器供电。当开关管接通时(在下图中以一个开关表示),电流以Figure3A的方式流动。电容通过电感被充电(电感也吸收了能量)。当开关管打开时(Figure3B),电感试图保持电流,从而导致电流流过二极管、电感和电容。这就是一个工作周期。如果减少占空比开通时间减少,断开时间增加,输出电压也将下降。反之输出电压将增加。在占空比为50%时buck变换器的效率最高。Figure3.Buck变换器开关原理电压基准电压基准由TL431CPK提供。AREF通过电阻R34和R10设置。计算公式为:这个数值是高精度(AREF的数值小一些)与高信噪比(AREF的数值大一些)的折中。本例两个参考设计的电压基准是一样的。电池温度电池温度通过负温度系数(NTC)电阻测量。其阻值在25C近似为10kW。NTC为分压器的一部分,由基准电压供电。NTC两端电压的精度和从电压测量电路取得的一样。精度:V3.67K107K412.495RR1VA1034REFREF=øöççèæ+=øöççèæ+=stepmVstepsV58.3102467.3=8AVR4501659A-CA–AVR–03/02量化单位数目(step)可以由下面的公式得到:由于NTC的电阻不是线性的,从ADC返回的结果很难计算出实际的温度。此时可以利用查询表来查找对应的温度(参见表2)。表中数据说明,在ADC数值为400到675时,单位温度间隔为0.5C。当ADC数值为400时温度近似为37C,675则近似为8.6C。利用这个表并对头文件B_DEF.H做一些小改动就可以实现对各种NTC电阻的操作。ATtiny15电池充电器参考设计假定测温电阻的线性度足以测量温度变化,因此它采用与常数进行比较的方式对温度进行监控。表中的数据是按照NTC数据手册以及NTC分压器计算得到的。AT90S4433电池充电器这一节讲述基于AT90S4433的电池充电器的工作原理。参数振荡器频率:fOSC=7.3728MHz饱和电压:Vsat=0.5V输入电压:VI=15V输出电压:VO=1.5V最大输出电流:IO,max=1.5A8位PWM:Table2.NTC温度分级ADC读数温度(C)多少个0.5CNTC(W)阻值6758.651934165011417380625146156646001651415157518.851280655021.251160352523.651052150026.25954247528.84865245032678404253447095400375641037539.455778W+=kRRNNTCNTC101024sfTOSCm==199.695109AVR4501659A-CA–AVR–03/02占空比为50%时:电感值:计算得占空比为:AT90S4433测量电路电池电压为了监控电池正负两极之间的充电电压,参考设计使用了一个运放。为了选择合适的测量范围,需要决定电池的类型以及电池里有多少个电池单元,还要选择合适的输入电压(V1-V2)和分压电阻。测量电池电压的运放电路为普通的差分运放电路。运放的输出电压公式如后面所示。ADC的测量范围为AGND~AREF(3.67V),而运放的输出电压(VBAT2)应该界于下式决定的范围之间:.式中:•VBAT2是运放输出电压(AVRA/D的输入)•V1为电池正极•V2为电池负极•Ra和Rb是用来为运放设置增益的电阻•Ra等于R10和R12•Rb等于R6和R7最大充电电压为:sstonm=m=60.342199.69()()HAsVVVItVVVLoonsatImm9.1495.1260.345.15.0152max,0=--=--=sVVVAHVVVILtOsatIOonm=--m=--=83.335.12.01531502max%9.48489.0199.6983.33===ssTtonmm()21*2VVRbRaVBAT-=VkkARaRbVVREF1.1267.3*1033*)21(=WW==-10AVR4501659A-CA–AVR–03/02运放增益为:电池测量精度为:充电电流充电电流通过0.033W的敏感电阻(R1)获取。为了提高测量精度,这个电压通过运放放大,然后馈送到ADC。电压放大系数为:从而运放输出电压为:亦即:能够测量的最大电流:精度为:从而可计算得到某一个量化单位数目对应的电流值:而电流值对应的量化单位数目为:303.033101=WW==kkRbRaGBUstepmVmVGionADCresolutBU82.11303.058.31==4.58680391125=WW+=+kRR62521RIRRVShuntIbatøöççèæ+=ShuntIbatIV=926.12AIBAT0.2926.158.3max==stepmAstepsmA95.110242000=stepmANIShunt95.1=stepmAINShunt95.1=11AVR4501659A-CA–AVR–03/02ATtiny15电池充电器这一节介绍基于ATtiny15的参考设计的工作原理。片内1.6MHz的RC振荡器通过PLL产生25.6MHz的PWM振荡频率。参考设计没有使用分压用的电阻,从而最大电压限制为3.67V,适合包含1-2个电池单元的NiCd电池或NiMh电池。如果想得到更高的电压,只要简单地加上分压电阻,使被测电压限制于0-3.67V即可。本节在最后将介绍如何计算这些电阻值。参数振荡器频率:fOSC=25.6MHz饱和电压:Vsat=0.5V输入电压:VI=12V输出电压:VO=1.5V最大输出电流:IO,max=1.5A8位PWM:占空比为50%时开态时间为:电感为:计算得到占空比为:SfTOSCm==96.9255Sstonm=m=43.4296.9()()HAsVVVItVVVLoonsatIm=m--=--=1.215.1243.45.15.0152max,0SVVVAHVVVILtOsatIOonm=--m=--=88.45.15.0153222max%9.44449.096.988.4==mm=ssTton12AVR4501659A-CA–AVR–03/02ATtiny15测量电路电池电压充电电压直接从电池正极测得。使用高于基准电压(3.67V)的充电电压时,需要增加两个电阻将其分压到0-3.67V的范围。这个输入引脚也是测量充电电流时的差分输入负端,如图4所示。电流信号经过0.25W的敏感电阻转换为电压信号,然后输入到20x增益放大阶段。所有的测量值的精度为10比特(1024级)。Figure4.测量电压和电流电压精度由AREF决定。精度:为了选择合适的测量范围,需要决定要充什么类型的电池,以及电池里有几个单元。ADC的测量范围为AGND~AREF(3.67V)。分压器的输出电压(VADC)范围是.式中:•VADC是分压器的输出电压(AVRA/D的输入)•Vb为电池电压•Ra和Rb是对电池电压进行分压的电阻•Ra等于R8•Rb等于R16用来分压的电阻R9和R17必须分别等于R8和R16。在参考设计中R8=R9=3.7kW,R16=R17=2.2kW.。stepmVstepsV58.3102467.3=()VbRbRaRbVADC*+=13AVR4501659A-CA–AVR–03/02最大充电电流为:充电电流充电电流的测量是通过0.25W的敏感电阻实现的。电阻上的电压首先要放大20倍以提高精度,然后再进行A/D转换。ADC输入电压为:式中:•VIbat是ADC的模拟输入电压•Ishunt是流经0.25敏感电阻的电流•Ra和Rb是用来对敏感电阻上的电压进行分压的电阻。分压比与电压通路是一样的•Ra=R9•Rb=R17能够测量的最大电流是:精度为:电流的量化单位数目为:量化单位数目的电流为:软件实现本节介绍AT90S4433参考设计的C代码软件实现。ATtiny15的汇编代码也遵从同样的原理。具体请参考汇编程序的说明。在编译时要确定电池类型。Vbat1R8R16---------+èøæöVADC13.72.2--------+èøæö3.679.8V===1820RIRRRVshuntABBIbatøöççèæ+=shuntIbatIV=864.1AIshunt96.1864.167.3max==stepmAstepsmA92.110241968=stepmAINBAT92.1=stepmANIBAT92.1=14AVR4501659A-CA–AVR–03/02软件可以进行扩展以支持多个电池同时充电。一个直接的方案是在进行涓流充电时对各个电池进行分时充电。若每个电池的电池单元数目一样,则SLA电池和Li-Ion电池可以恒定电压的方式并行充电。每个电池单元的充电电流是受限的,电压也一样。“电池特性”(b_car.h)的所有数据都根据标度因子计算得到。这些数据在包含文件里定义,在编译时计算,在程序运行时以常数方式处理。所有从ADC输出的数据都可以直接与这些常数进行比较。也就是说,在程序运行过程当中不需要进行实时计算,从而节省了计算时间和程序空间。计算公式以及数据都是从“测量电路”一节获取的。请参见第9页的"AT90S4433测量电路“和第12页的"ATtiny15测量电路“。对于NiCd电池,如果电池温度在允许范围之内,充电程序就会启动。在温度超出限制,或电压超过最大值,或超出最大快速充电时间时停止。检测电池已经充满的普通方法是检测温度上升速率(dT/dt)和电压降低速率(-dV/dt)。因此,充电器会每隔一分钟检测一次温度,每隔一秒钟检测一次电压。这些数据将与上一次数据进行比较。一旦电池充满,充电状态就自动切换到涓流充电,充电程序跳转到trickle_charge()函数。trickle_charge()循环检测充电状态、温度/电压的改变,并适当地调节充电电流。一旦温度或电压超标,错误标志置位,函数终止。若没有错误,用户也没有改变充电状态,函数将一直循环工作。用户设置本充电器是一个多用途充电器,可以对四种电池进行充电,一次可以充多个电池单元。开发人员只要简单地在编译代码时修改某些参数即可。为了防止对电池和环境造成破坏,在编译前一定要注意选择正确的参数。改变电池类型每一个电池类型都有一个C文件和h文件。在编译之前将需要的电池文件添加到编译器里,并在B_Def.h文件里将其他电池类型的定义屏蔽掉。改变电池数目修改B_Def.h文件的“cells”参数改变电池容量修改B_Def.h文件的“capacity”参数改变锂电池单元电压修改B_Def.h文件的“cell_voltage”参数改变ADC量化单位的数值如果根据测量一节修改了电阻值,B_Def.h文件的“voltage_step”参数和“current_step”参数必须得到正确的修改。这很重要,否则可能损坏充电器。源代码文件以下为Atmel提供的源代码文件。Table3.C源代码文件文件名说明代码大小(1)Io4333.hAT90S4333的头文件cstartup.s90C编译器的Start-up文件Lnk0t.xcl链接器的命令文件,针对AT90S4433进行了优化B_def.h定义电池类型,电压,容量和电压单位数值Bc.h常数和宏定义的头文件Bc.c主程序,使用所有的电池类型474字节SLA.hSLA电池的头文件,包含充电器参数和函数声明SLA.cSLA电池的的源代码446字节NiCd.hNiCd电池的头文件,包含充电器参数和函数声明15AVR4501659A-CA–AVR–03/02Note:1.是version1.0的代码大小,以IARCVer.1.41C编译,选择最高一级代码大小优化.NiCd.cNiCd电池的的源代码548字节NiMh.hNiMh电池的头文件,包含充电器参数和函数声明NiMh.cNiMh电池的的源代码514字节Liion.hLi-ion电池的头文件,包含充电器参数和函数声明Liion.cLi-ion电池的的源代码690字节Table4.汇编源代码文件名说明代码大小bc.inc寄存器、A/D通道和常数声明tn15def.incATtiny15的头文件NiCd.incNiCd电池的头文件,包含充电器参数NiCd.asmNiCd电池的的源代码324字节NiMh.incNiMh电池的头文件,包含充电器参数NiCd.asmNiMh电池的的源代码328字节Liion.incLi-ion电池的头文件,包含充电器参数Liion.asmLi-ion电池的的源代码340字节Table3.C源代码文件文件名说明代码大小(1)16AVR4501659A-CA–AVR–03/02BC.C这个C模块包含主程序、设置函数、UART函数、实时时钟函数以及中断处理例程。“setup”函数处理所有的初始化工作。其中UART被初始化,实时时钟设置为0。之后程序以空闲模式循环,直至全局状态变量改变。PWM运行后实时时钟启动,并随着PWM停止而停止。这保证了只有在充电时时间才有意义。另一方面,这个方法的缺点是与时间有关的测量数据(dV/dt或dT/dt)有可能不准确。用户可以通过按按钮来切换充电状态并将引发中断。在中断例程中,按照所按的不同按钮,系统或者切换到快速充电模式,或者切换到涓流充电模式。主程序按照变量“chargestatus”调用不同的函数。BC.C还包括某些适用于各种电池类型的公共函数。最重要的两个为17AVR4501659A-CA–AVR–03/02Figure5.Main()函数18AVR4501659A-CA–AVR–03/02intbattery(UnsignedCharValue)这个函数在进行A/D转换时被调用,并按照要求控制ADC寄存器和PWM。它从ADC读取8位的结果并求平均值,然后将这个平均值传回给调用函数。Figure6.Battery()函数19AVR4501659A-CA–AVR–03/02voidstable_ADC(Void)测量电池电压和温度时stable_ADC被调用。它保证ADC数据在定义的范围内是稳定的。这对于精确的测量是非常重要的。函数一直循环到获得三个ADC数据,而且最大值比最小值不能超出一个量化单位。Figure7.stable_ADC()函数BC.H模块包含各种处理位操作的宏定义,以及各种充电状态和停止充电的位屏蔽常数。“chargestatus”指示当前充电器的实际状态:快速充电、涓流充电,或出现了错误。对于Li-Ion电池和SLA电池,有变量指示充电模式,包括电压常数和电流常数,以及锂电池是否处于快速充电模式的最后阶段(称为“延迟”)。“termination”则定义了停止快速充电的原因,或者是在什么地方检测到了错误,以用来调试。B_DEF.H这个模块定义了需要充电的电池类型。设计什么类型的充电器就需要使用什么类型的电池定义。电池类型决定了充电及停止充电的算法。由于所有的电池都使用相同的函数,即battery()、fast_charge()和trickle_charge(),若同时选择了多种电池类型,在程序编译时将出错。如果没有选择电池类型也会造成编译出错。电池单元的数目决定了电池的电压以及相关的常数。在此假定所有的电池单元是串联在一起的。0个单元并不是合理的现象,但是参考设计对此并不在意:它将简单地输出0安培的充电电流。BUCK变换器的电压范围以及电压测量电路决定了电流的上限。电池容量(以mA为单位)定义了充电电流及相关的常数。除了SLA电池,其他类型的电池在快速充电时工作于1C的保守方式。SLA电池的充电电流为2C。这也就为电池容量设定了上限。BUCK变换器最大可以输出1.5A的电流。SLA的最大容量为750mAh,其他电池类型则为1500mAh。如果需要对NiCd电池和NiMH电池以更大的充电电流进行充电,BUCK变换器必须做适当调整。电流大于2A时电流测量电路也需要修改。如果需要对一个容量超出了上面的计算值的电池进行充电,一个方法是改变BUCK变换器,或者是降低充电电流。20AVR4501659A-CA–AVR–03/02对于锂电池,根据不同的生产商存在着两种单元电压。在编译时必须对这个电压值(4.1V或4.2V)进行编辑。选择锂电池后这个值将自动包含进代码里。如果选择了错误的数值,虽然在编译时不会出错,但在实际应用中将导致错误的充电算法,最终损坏电池和充电器。ADC量化单位的数值需要按照实际的测量电路进行修改。详见测量电路一节。NTC表定义了ADC的量化单位数值。一个量化单位代表0.5C的温度变化。这个查询表适用于NiCd电池。若选择了其他NTC,这个表也需要修改。SLA.C充电方法SLA电池的快速充电算法采用恒定电压法。在充电之前首先用一个简单的(但出人意料地有效)方法确定出充电电压:给电池加载1C(10mA)的恒定电流,测量到的电池电压即为充电电压。电池首先用恒定电压进行充电(电流可以变化)。当电流下降到0.2C以下时快速充电结束,开始涓流充电。涓流充电同样为恒定电压方式,只是电压比快速充电时稍低。涓流充电的时间可以是一个固定值。充电参数简介快速充电:固定的快速充电电压=电池单元数*2450mV涓流充电:固定的涓流充电电压=电池单元数*2250mV一般充电过程结束的判别标准:绝对最低温度T=0C绝对最高温度T=45C快速充电过程结束的判别标准:最小电流门限I=0.2C快速充电过程的错误:快速充电时的最高温度T=30C最大快速充电时间t=60min,充电电流为1C最大的快速充电电流I=2C涓流充电过程结束的判别标准:无21AVR4501659A-CA–AVR–03/02Figure8.SLA电池的Trickle_charge()函数22AVR4501659A-CA–AVR–03/02Figure9.SLA电池的Fast_charge()函数,第一部分(2)23AVR4501659A-CA–AVR–03/02Figure10.SLA电池的Fast_charge()函数,第二部分(2)NiCd.C充电方法NiCd电池的快速充电算法采用恒定电流法。在快速充电模式下充电电流设置为1C;在涓流模式下则为C/40。判断充电过程结束的方法是电压下降(-dV/dt)法。备用的结束充电判别方案还有最大充电电压、温升(dT/dt)以及最大充电时间。电池充满后自动切换到涓流模式,MCU开始执行trickle_charge()函数。充电参数简介充电条件:快速充电:快速充电电流=1C涓流充电:涓流充电电流=0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C绝对最大充电电压V=电池单元数*1500mV24AVR4501659A-CA–AVR–03/02快速充电过程结束的判别标准:电压下降门限-dV/dt=20mV/min/单元温升门限dT/dt=1C/min快速充电过程的错误:快速充电时的最低温度T=15C最大快速充电时间t=90min,充电电流为1CFigure11.NiCd电池的Trickle_charge()函数25AVR4501659A-CA–AVR–03/02Figure12.NiCd电池的Fast_charge()函数,第一部分(2)26AVR4501659A-CA–AVR–03/02Figure13.NiCd电池的Fast_charge()函数,第二部分(2)27AVR4501659A-CA–AVR–03/02NiMH.C充电方法NiMH电池的快速充电算法采用恒定电流法。在快速充电模式下充电电流设置为1C;在涓流模式下则为C/40。判断充电过程结束的方法是电压下降(-dV/dt)法和温升(dT/dt)法。最大充电电压以及最大充电时间可以作为备用方案。电池充满后自动切换到涓流模式,MCU开始执行trickle_charge()函数。充电参数简介充电条件:快速充电:快速充电电流=1C涓流充电:涓流充电电流=0.025C最大涓流充电时间t=90min,充电电流为0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C绝对最大充电电压V=电池单元数*1500mV快速充电过程结束的判别标准:温升门限dT/dt=0.5C/min快速充电过程的错误:快速充电时的最低温度T=15C最大快速充电时间t=90min,充电电流为1C28AVR4501659A-CA–AVR–03/02Figure14.NiMH电池的Trickle_charge()函数29AVR4501659A-CA–AVR–03/02Figure15.NiMH电池的Fast_charge()函数,第一部分(2)30AVR4501659A-CA–AVR–03/02Figure16.NiMH电池的Fast_charge()函数,第二部分(2)31AVR4501659A-CA–AVR–03/02LiIon.C充电方法Li-Ion电池是需要充电的最先进的电池。快速充电首先以恒定充电电流1C开始,直到电池单元电压达到4.1或4.2V50mV。然后以恒定电压法充电,直至充电电流下降到Imin。为了精确测量电池电压(而不是充电电压)在测量时要关闭PWM。由于充电算法要由恒定电流法切换到恒定电压法,因此还需要监控充电电压。这也就是为什么需要测量两个电压的原因,一个是在关闭PWM时测得的,一个是在PWM工作时测得的。涓流充电在原理上与快速充电是一样的。只是电流要小得多,恒定电压阶段则通过定时器确定何时结束。充电参数简介充电条件:快速充电:绝对最大充电电压V=电池单元数*单元电压电压容限=电池单元数*50mV快速充电电流=1C最小电流门限=50mA/电池单元涓流充电:涓流充电电流=0.025C最大涓流充电时间t=90min,充电电流为0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C快速充电过程结束的判别标准:参见充电条件快速充电过程的错误:快速充电时的最低温度T=10C最大快速充电时间t=90min,充电电流为1C32AVR4501659A-CA–AVR–03/02Figure17.锂电池的Trickle_charge()函数33AVR4501659A-CA–AVR–03/02Figure18.锂电池的Fast_charge()函数,第一部分(2)34AVR4501659A-CA–AVR–03/02Figure19.锂电池的Fast_charge()函数,第二部分(2)35AVR4501659A-CA–AVR–03/02建议的改进NiCd电池具有记忆效应–充几次电之后就无法充满了。为了复位记忆,可以增加一个泄放电阻,允许MCU在充电之前先对其进行放电处理。36AVR4501659A-CA–AVR–03/02附录1:原理图Figure20.主模块的方框图37AVR4501659A-CA–AVR–03/02Figure21.电源和基准电压原理图38AVR4501659A-CA–AVR–03/02Figure22.ATtiny15及100kHzBuck变换器原理图39AVR4501659A-CA–AVR–03/02Figure23.AT90S4433及14kHzBuck变换器原理图40AVR4501659A-CA–AVR–03/02附录2:电源下面的原理图为电源部分,它为电池充电器提供+15V,为AVR处理器提供+5V。充电器的电源以PowerIntegration公司的TOP224为架构。由于采用了flyback技术,电源更加紧凑和有效。输入电压为85VAC~265VAC(50-60Hz)。Figure24.电源原理图41AVR4501659A-CA–AVR–03/02变压器T301以Philips的EFD20骨架构成。原边绕组和偏置绕组使用AWG26(0.40mm)的线;次级绕组使用AWG20(0.80mm)的线。初级绕组和偏置绕组与两个次级绕组用绝缘带隔离开。5V绕组为15V绕组的一部分。绕制方向必须遵照原理图给出的方向。Table5.电源部分的器件列表器件类型说明R3016,2WC306的串联电阻(U301的电源)R302100W光耦的的串联电阻R303100W电压基准的的串联电阻R30610kW反馈电阻R30422kW反馈电阻(5V)R30591kW反馈电阻(15V)C3041n0/Y1Y1电容(可以用2*2.2nFY2电容代替)C305100nFC309100nFC301100nF/400VX电容C302100nF/400VX电容C310100µF/35V后级LC滤波器C311100µF/35V后级LC滤波器C303100µF/400V原边电容C3071000µF/35VC3081000µF/35VL3023.3µH后级LC滤波器L3033,3µH后级LC滤波器L30133mH输入噪声抑制器D3011.2A/500V整流桥D302P6KE200钳位Zener二极管D303BYV26C钳位二极管的阻隔二极管D304PBYR1645整流二极管-15VD305PBYR1645整流二极管-5VD3061N4148偏置电压的整流二极管/U301的电源U301TOP224U302TL431基准电压源U303PC817光耦T301PhillipsEFD20变压器42AVR4501659A-CA–AVR–03/02Table6.电源变压器绕组绕组圈数线型初级绕组86AWG26偏置绕组8AWG26次级绕组(5V)4AWG20次级绕组(15V)8(4+4)AWG20Printedonrecycledpaper.AtmelCorporation2002.AtmelCorporationmakesnowarrantyfortheuseofitsproducts,otherthanthoseexpresslycontainedintheCompany’sstandardwarrantywhichisdetailedinAtmel’sTermsandConditionslocatedontheCompany’swebsite.TheCompanyassumesnoresponsibilityforanyerrorswhichmayappearinthisdocument,reservestherighttochangedevicesorspecificationsdetailedhereinatanytimewithoutnotice,anddoesnotmakeanycommitmenttoupdatetheinformationcontainedherein.NolicensestopatentsorotherintellectualpropertyofAtmelaregrantedbytheCompanyinconnectionwiththesaleofAtmelproducts,expresslyorbyimplication.Atmel’sproductsarenotauthorizedforuseascriticalcomponentsinlifesupportdevicesorsystems.AtmelHeadquartersAtmelOperationsCorporateHeadquarters2325OrchardParkwaySanJose,CA95131TEL1(408)441-0311FAX1(408)487-2600EuropeAtmelSarLRoutedesArsenaux41CasaPostale80CH-1705FribourgSwitzerlandTEL(41)26-426-5555FAX(41)26-426-5500AsiaAtmelAsia,Ltd.Room1219ChinachemGoldenPlaza77ModyRoadTsimhatsuiEastKowloonHongKongTEL(852)2721-9778FAX(852)2722-1369JapanAtmelJapanK.K.9F,TonetsuShinkawaBldg.1-24-8ShinkawaChuo-ku,Tokyo104-0033JapanTEL(81)3-3523-3551FAX(81)3-3523-7581MemoryAtmelCorporate2325OrchardPark

单片机锂电池充电器中文设计文档PDF下载(文字清晰.pdf

单片机锂电池充电器中文设计文档PDF下载(文字清晰.pdf

上传者: 小杨
638次下载 0人收藏 暂无简介 简介 2011-03-07 举报

简介:AVR450中文版 可以充4种常用的电池 很系统的充电器设计文档

1AVR450:为SLA、NiCd、NiMH和Li-Ion电池设计的充电器特点•完整的电池充电器设计方案•模块化的“C”源代码和极紧凑的汇编代码•低成本•支持多数电池类型•快速充电算法•10位ADC实现高精度测量•可选的串行接口•充电参数极易修改•片内EEPROM可用于存储电池信息说明本参考设计完全实现了电池充电器设计的最新技术,可以对各种流行的电池类型进行快速充电而无须修改硬件,从而围绕单个硬件平台实现一个完整的充电器产品系列。只需要将新的充电算法通过ISP下载到处理器的FLASH存储器就可以得到新的型号。很显然,这种方法可以大大缩短新产品上市的时间,而且只需要库存一种硬件。本设计提供完整的适合SLA、NiCd、NiMH和Li-Ion电池的库函数。Figure1.电池充电器参考设计8位微处理器应用实例Rev.1659A-CA–AVR–03/022AVR4501659A-CA–AVR–03/02参考设计实现了两个充电器,分别由高端产品AT90S4433和高集成度、低成本的8引脚器件ATtiny15构成。当然,也可以用任意一款带A/D转换器、PWM输出、具有足够程序存储器的AVR器件来实现电池充电器。介绍随着越来越多的手持式电器的出现,对高性能、小尺寸、重量轻的电池充电器的需求也越来越大。电池技术的持续进步也要求更复杂的充电算法以实现快速、安全的充电。因此需要对充电过程进行更精确的监控,以缩短充电时间、达到最大的电池容量,并防止电池损坏。AVR已经在竞争中领先了一步,被证明是下一代充电器的完美控制芯片。AtmelAVR微处理器是当前市场上能够以单片方式提供Flash、EEPROM和10位ADC的最高效的8位RISC微处理器。由于程序存储器为Flash,因此可以不用象MASKROM一样,有几个软件版本就库存几种型号。Flash可以在发货之前再进行编程,或是在PCB贴装之后再通过ISP进行编程,从而允许在最后一分钟进行软件更新。EEPROM可用于保存标定系数和电池特性参数,如保存充电记录以提高实际使用的电池容量。10位A/D转换器可以提供足够的测量精度,使得充好后的容量更接近其最大容量。而其他方案为了达到此目的,可能需要外部的ADC,不但占用PCB空间,也提高了系统成本。AVR是目前唯一的针对象“C”这样的高级语言而设计的8位微处理器。AT90S4433参考设计就是用“C”写的,说明用高级语言进行软件设计是多么的简单。C代码似的此设计很容易进行调整以适合当前和未来的电池。而ATtiny15参考设计则是用汇编语言写的,以获得最大的代码密度。3AVR4501659A-CA–AVR–03/02工作原理电池充电是通过逆向化学反应将能量存储到化学系统里实现的。由于使用的化学物质的不同,电池有自己的特性。设计充电器时要仔细了解这些特性以防止过度充电而损坏电池。AVR8位RISCMCU参考设计包括两个独立的充电器。一个使用的是AT90S4433,另一个使用的是ATtiny15。AT90S4433设计用于说明用C实现电池充电器的高效性,而ATtiny15设计则是目前市场上可以得到的集成度最高、成本最低的电池充电器。AT90S4433可通过UART与PC接口以监控电池电压和温度。表1说明了两个设计的不同。电池技术现代消费类电器主要使用如下四种电池:•密封铅酸电池(SLA)•镍镉电池(NiCd)•镍氢电池(NiMH)•锂电池(Li-Ion)在正确选择电池和充电算法时需要了解这些电池的背景知识。密封铅酸电池(SLA)密封铅酸电池主要用于成本比空间和重量更重要的场合,如UPS和报警系统的备份电池。SLA电池以恒定电压进行充电,辅以电流限制以避免在充电过程的初期电池过热。只要电池单元电压不超过生产商的规定(典型值为2.2V),SLA电池可以无限制地充电。镍镉电池(NiCd)NiCd电池目前使用得很普遍。它的优点是相对便宜,易于使用;缺点是自放电率比较高。典型的NiCd电池可以充电1,000次。失效机理主要是极性反转。在电池包里第一个被完全放电的单元会发生反转。为了防止损坏电池包,需要不间断地监控电压。一旦单元电压下降到1.0V就必须停机。NiCd电池以恒定电流的方式进行充电。镍氢电池(NiMH)在轻重量的手持设备中如手机、手持摄象机,等等镍氢电池是使用最广的。这种电池的容量比NiCd的大。由于过充电会造成NiMH电池的失效,在充电过程中进行精确地测量以在合适的时间停止是非常重要的。和NiCd电池一样,极性反转时电池也会损坏。NiMH电池的自放电率大概为20%/月。和NiCd电池一样,NiMH电池也为恒定电流充电。锂电池(Li-Ion)和本文中所述的其他电池相比,锂电池具有最高的能量/重量比和能量/体积比。锂电池以恒定电压进行充电,同时要有电流限制以避免在充电过程的初期电池过热。当充电电流下降到生产商设定的最小电流时就要停止充电。过充电将造成电池损坏,甚至爆炸。Table1.设计差异AT90S4433ATtiny15编程语言C汇编代码大小1.5K字节<350字节电流测量需外部运放调节增益片内具有差分增益调节功能PWM频率14kHz,8位100kHz,8位时钟外部晶体,7.3MHz片内经过标定的RC振荡器,1.6MHz串行接口YesNoISPYesYes4AVR4501659A-CA–AVR–03/02电池的安全充电现代的快速充电器(即电池可以在小于3个小时的时间里充满电,通常是一个小时)需要能够对单元电压、充电电流和电池温度进行精确地测量,在充满电的同时避免由于过充电造成的损坏。充电方法SLA电池和锂电池的充电方法为恒定电压法要限流;NiCd电池和NiMH电池的充电方法为恒定电流法,且具有几个不同的停止充电的判断方法。最大充电电流最大充电电流与电池容量(C)有关。最大充电电流往往以电池容量的数值来表示。例如,电池的容量为750mAh,充电电流为750mA,则充电电流为1C(1倍的电池容量)。若涓流充电时电流为C/40,则充电电流即为电池容量除以40。过热电池充电是将电能传输到电池的过程。能量以化学反应的方式保存了下来。但不是所有的电能都转化为了电池中的化学能。一些电能转化成了热能,对电池起了加热的作用。当电池充满后,若继续充电,则所有的电能都将转化为电池的热能。在快速充电时这将使电池快速升温,若不及时停止充电就会造成电池的损坏。因此,在设计电池充电器时,对温度进行监控并及时停止充电是非常重要的。5AVR4501659A-CA–AVR–03/02停止充电的判别方法电池的不同应用场合及工作环境限制了对判断停止充电的方法的选择。有时候温度不容易测得,但可以测得电压,或者是其他情况。本文以电压变化率(-dV/dt)为基本的判断停止充电的方法,而以温度和绝对电压值为辅助和备份。但是本文所描述的硬件支持以下讲述的所有的方法。t–时间这是决定何时停止充电的最简单的方法。通常用于快速充电时的后备方案。有时也作为普通充电(14-16小时)方法的基本方案。适用于各种电池。V–电压当电压超出上限时停止充电。通常与恒定电流充电配合使用。最大电流由电池决定,通常为1C。为了防止充电时电流过大导致电池过热,此时电流限制是非常关键的。这个方法是锂电池的基本充电和停止方案。实际锂电池充电器往往在达到最大电压之后还继续进行第二阶段的充电,以达到100%的电池容量。对于NiCd电池和NiMH电池本方法可以作为后备的判断停止充电方案。-dV/dt–电压变化率这个判断停止充电的方法利用了负的电压变化率。对于某些类型的电池,当电池充满后继续充电将导致电压的下降。此时本方案就非常合适了。这个方法通常用于恒定电流充电,适用于对NiCd电池和NiMH电池的快速充电。I–电流当充电电流小于某个预先设定的数值时停止充电。通常用于恒定电压充电法。适用于SLA电池和锂电池。T–温度绝对温度可以作为NiCd电池和NiMH电池停止充电的依据,但是更适合于作为备份方案。温度超出设定值时任何电池都得停止充电。dT/dt–温度上升速率快速充电时温度的变化率可以作为停止充电的依据。请参考电池生产商的规范(NiCd电池的典型值为1oC/min)–适用于NiCd电池和NiMH电池。DT–超出环境温度的温度值当电池温度和环境温度之差超过一定门限时需要停止充电。此方法可以作为NiCd电池和SLA电池停止充电的方案。在寒冷环境中充电时这个方法比绝对温度判定法更好。由于大多数系统往往只有一个温度探头,只好将充电之前的温度作为环境温度。dV/dt=0–零电压差这个方法与-dV/dt方法极其类似,而且在电压不会再升高的情况下更准确。适用于NiCd电池和NiMH电池。6AVR4501659A-CA–AVR–03/02硬件实现参考设计包括两个完整的电池充电器设计。如图2所示,本设计可以分为5个主要的模块。Figure2.电池充电器参考设计的主要模块电源包括模拟基准源、按键和LED。输入电压由D9-D12进行整流,然后通过C13进行滤波。整流后的输入电压可以在板上标有“VIN”处测得。VIN同时提供给BUCK转换器和LM7805。LM7805为单片机提供5V电源。此电压可以在标有襐CC”的测试点处测得。若标有“5VOK”的LED亮则说明电源就绪。PC接口与AT90S4433的UART相连,可用来获取电池充电时的数据。这些数据可以导入到spreadsheet以显示电池特性。进一步的信息请参阅应用手册“VR451:DataLoggerforBatteryChargerReferenceDesign”,以获取例子的源代码以及用于导入数据的MicrosoftExcelspreadsheet。使用ATtiny15电池充电器时也可以用AT90S4433来获取数据。LED和按键电路板上有几个LED和按键用于调试和监控。在目前的应用中只用到了几个。•LED0:与AT90S4433的PortB0连接,用于指示当前充电模式为快速模式还是涓流模式。•LED1:与AT90S4433的PortB2连接•LED2:与AT90S4433的PortB3连接•LED3:与AT90S4433的PortB0连接,用于指示系统出现了错误•LED4:无连接•LED5:无连接•LED6:与ATtiny15的PortB1连接,用于指示当前的PWM频率。•VCCPower:指示当前的电源状态•SW0:与AT90S4433的PortD4连接,用于启动充电器•SW1:与AT90S4433的PortD5连接•SW2:与AT90S4433的PortD6连接7AVR4501659A-CA–AVR–03/02•SW3:与AT90S4433的PortD7连接•RESET:复位程序以便从错误中恢复ISP接口两个充电器都有10引脚的ISP插座。可以通过AVRISPPC软件对程序FLASH和EEPROM数据存储器进行编程。ATtiny15及100kHzBuck变换器ATtiny15的特性使其非常适合于设计电池充电器。片内的100kHzPWM与buck变换器相连。高速开关频率以及高精度降低了对外围线圈和电容的要求。电路板上加入了测试点以便于监控PWM输出,输入电压和输入电流。ATtiny15具有内部增益调节功能以放大两个ADC引脚之间的差分信号,从而避免了使用外部运放。充电电流流过0.25W的电阻,并由两个ADC取得差分信号。充电器的电源在附录2里说明。AT90S4433及14kHzBuck变换器90S4433型充电器使用了外部运放来放大电流信号,以保证精度。充电器可以与PC进行通讯,用来监控充电参数及调试充电算法。充电器可以对SLA、NiCd、NiMH和Li-Ion电池进行充电。充电算法包括快充模式和涓流模式,以最大限度减少充电时间,获得最大容量。充电器的电源在附录2里说明。Buck变换器AT90S4433方案和ATtiny15方案中的buck变换器是类似的,都包括一个由AVR通过双极性NPN晶体管驱动的P沟道MOSFET开关管。开关管与电感、二极管和电容相连(参见Figure3)。一个额外的二极管用来防止在断电时电池向微处理器供电。当开关管接通时(在下图中以一个开关表示),电流以Figure3A的方式流动。电容通过电感被充电(电感也吸收了能量)。当开关管打开时(Figure3B),电感试图保持电流,从而导致电流流过二极管、电感和电容。这就是一个工作周期。如果减少占空比开通时间减少,断开时间增加,输出电压也将下降。反之输出电压将增加。在占空比为50%时buck变换器的效率最高。Figure3.Buck变换器开关原理电压基准电压基准由TL431CPK提供。AREF通过电阻R34和R10设置。计算公式为:这个数值是高精度(AREF的数值小一些)与高信噪比(AREF的数值大一些)的折中。本例两个参考设计的电压基准是一样的。电池温度电池温度通过负温度系数(NTC)电阻测量。其阻值在25C近似为10kW。NTC为分压器的一部分,由基准电压供电。NTC两端电压的精度和从电压测量电路取得的一样。精度:V3.67K107K412.495RR1VA1034REFREF=øöççèæ+=øöççèæ+=stepmVstepsV58.3102467.3=8AVR4501659A-CA–AVR–03/02量化单位数目(step)可以由下面的公式得到:由于NTC的电阻不是线性的,从ADC返回的结果很难计算出实际的温度。此时可以利用查询表来查找对应的温度(参见表2)。表中数据说明,在ADC数值为400到675时,单位温度间隔为0.5C。当ADC数值为400时温度近似为37C,675则近似为8.6C。利用这个表并对头文件B_DEF.H做一些小改动就可以实现对各种NTC电阻的操作。ATtiny15电池充电器参考设计假定测温电阻的线性度足以测量温度变化,因此它采用与常数进行比较的方式对温度进行监控。表中的数据是按照NTC数据手册以及NTC分压器计算得到的。AT90S4433电池充电器这一节讲述基于AT90S4433的电池充电器的工作原理。参数振荡器频率:fOSC=7.3728MHz饱和电压:Vsat=0.5V输入电压:VI=15V输出电压:VO=1.5V最大输出电流:IO,max=1.5A8位PWM:Table2.NTC温度分级ADC读数温度(C)多少个0.5CNTC(W)阻值6758.651934165011417380625146156646001651415157518.851280655021.251160352523.651052150026.25954247528.84865245032678404253447095400375641037539.455778W+=kRRNNTCNTC101024sfTOSCm==199.695109AVR4501659A-CA–AVR–03/02占空比为50%时:电感值:计算得占空比为:AT90S4433测量电路电池电压为了监控电池正负两极之间的充电电压,参考设计使用了一个运放。为了选择合适的测量范围,需要决定电池的类型以及电池里有多少个电池单元,还要选择合适的输入电压(V1-V2)和分压电阻。测量电池电压的运放电路为普通的差分运放电路。运放的输出电压公式如后面所示。ADC的测量范围为AGND~AREF(3.67V),而运放的输出电压(VBAT2)应该界于下式决定的范围之间:.式中:•VBAT2是运放输出电压(AVRA/D的输入)•V1为电池正极•V2为电池负极•Ra和Rb是用来为运放设置增益的电阻•Ra等于R10和R12•Rb等于R6和R7最大充电电压为:sstonm=m=60.342199.69()()HAsVVVItVVVLoonsatImm9.1495.1260.345.15.0152max,0=--=--=sVVVAHVVVILtOsatIOonm=--m=--=83.335.12.01531502max%9.48489.0199.6983.33===ssTtonmm()21*2VVRbRaVBAT-=VkkARaRbVVREF1.1267.3*1033*)21(=WW==-10AVR4501659A-CA–AVR–03/02运放增益为:电池测量精度为:充电电流充电电流通过0.033W的敏感电阻(R1)获取。为了提高测量精度,这个电压通过运放放大,然后馈送到ADC。电压放大系数为:从而运放输出电压为:亦即:能够测量的最大电流:精度为:从而可计算得到某一个量化单位数目对应的电流值:而电流值对应的量化单位数目为:303.033101=WW==kkRbRaGBUstepmVmVGionADCresolutBU82.11303.058.31==4.58680391125=WW+=+kRR62521RIRRVShuntIbatøöççèæ+=ShuntIbatIV=926.12AIBAT0.2926.158.3max==stepmAstepsmA95.110242000=stepmANIShunt95.1=stepmAINShunt95.1=11AVR4501659A-CA–AVR–03/02ATtiny15电池充电器这一节介绍基于ATtiny15的参考设计的工作原理。片内1.6MHz的RC振荡器通过PLL产生25.6MHz的PWM振荡频率。参考设计没有使用分压用的电阻,从而最大电压限制为3.67V,适合包含1-2个电池单元的NiCd电池或NiMh电池。如果想得到更高的电压,只要简单地加上分压电阻,使被测电压限制于0-3.67V即可。本节在最后将介绍如何计算这些电阻值。参数振荡器频率:fOSC=25.6MHz饱和电压:Vsat=0.5V输入电压:VI=12V输出电压:VO=1.5V最大输出电流:IO,max=1.5A8位PWM:占空比为50%时开态时间为:电感为:计算得到占空比为:SfTOSCm==96.9255Sstonm=m=43.4296.9()()HAsVVVItVVVLoonsatIm=m--=--=1.215.1243.45.15.0152max,0SVVVAHVVVILtOsatIOonm=--m=--=88.45.15.0153222max%9.44449.096.988.4==mm=ssTton12AVR4501659A-CA–AVR–03/02ATtiny15测量电路电池电压充电电压直接从电池正极测得。使用高于基准电压(3.67V)的充电电压时,需要增加两个电阻将其分压到0-3.67V的范围。这个输入引脚也是测量充电电流时的差分输入负端,如图4所示。电流信号经过0.25W的敏感电阻转换为电压信号,然后输入到20x增益放大阶段。所有的测量值的精度为10比特(1024级)。Figure4.测量电压和电流电压精度由AREF决定。精度:为了选择合适的测量范围,需要决定要充什么类型的电池,以及电池里有几个单元。ADC的测量范围为AGND~AREF(3.67V)。分压器的输出电压(VADC)范围是.式中:•VADC是分压器的输出电压(AVRA/D的输入)•Vb为电池电压•Ra和Rb是对电池电压进行分压的电阻•Ra等于R8•Rb等于R16用来分压的电阻R9和R17必须分别等于R8和R16。在参考设计中R8=R9=3.7kW,R16=R17=2.2kW.。stepmVstepsV58.3102467.3=()VbRbRaRbVADC*+=13AVR4501659A-CA–AVR–03/02最大充电电流为:充电电流充电电流的测量是通过0.25W的敏感电阻实现的。电阻上的电压首先要放大20倍以提高精度,然后再进行A/D转换。ADC输入电压为:式中:•VIbat是ADC的模拟输入电压•Ishunt是流经0.25敏感电阻的电流•Ra和Rb是用来对敏感电阻上的电压进行分压的电阻。分压比与电压通路是一样的•Ra=R9•Rb=R17能够测量的最大电流是:精度为:电流的量化单位数目为:量化单位数目的电流为:软件实现本节介绍AT90S4433参考设计的C代码软件实现。ATtiny15的汇编代码也遵从同样的原理。具体请参考汇编程序的说明。在编译时要确定电池类型。Vbat1R8R16---------+èøæöVADC13.72.2--------+èøæö3.679.8V===1820RIRRRVshuntABBIbatøöççèæ+=shuntIbatIV=864.1AIshunt96.1864.167.3max==stepmAstepsmA92.110241968=stepmAINBAT92.1=stepmANIBAT92.1=14AVR4501659A-CA–AVR–03/02软件可以进行扩展以支持多个电池同时充电。一个直接的方案是在进行涓流充电时对各个电池进行分时充电。若每个电池的电池单元数目一样,则SLA电池和Li-Ion电池可以恒定电压的方式并行充电。每个电池单元的充电电流是受限的,电压也一样。“电池特性”(b_car.h)的所有数据都根据标度因子计算得到。这些数据在包含文件里定义,在编译时计算,在程序运行时以常数方式处理。所有从ADC输出的数据都可以直接与这些常数进行比较。也就是说,在程序运行过程当中不需要进行实时计算,从而节省了计算时间和程序空间。计算公式以及数据都是从“测量电路”一节获取的。请参见第9页的"AT90S4433测量电路“和第12页的"ATtiny15测量电路“。对于NiCd电池,如果电池温度在允许范围之内,充电程序就会启动。在温度超出限制,或电压超过最大值,或超出最大快速充电时间时停止。检测电池已经充满的普通方法是检测温度上升速率(dT/dt)和电压降低速率(-dV/dt)。因此,充电器会每隔一分钟检测一次温度,每隔一秒钟检测一次电压。这些数据将与上一次数据进行比较。一旦电池充满,充电状态就自动切换到涓流充电,充电程序跳转到trickle_charge()函数。trickle_charge()循环检测充电状态、温度/电压的改变,并适当地调节充电电流。一旦温度或电压超标,错误标志置位,函数终止。若没有错误,用户也没有改变充电状态,函数将一直循环工作。用户设置本充电器是一个多用途充电器,可以对四种电池进行充电,一次可以充多个电池单元。开发人员只要简单地在编译代码时修改某些参数即可。为了防止对电池和环境造成破坏,在编译前一定要注意选择正确的参数。改变电池类型每一个电池类型都有一个C文件和h文件。在编译之前将需要的电池文件添加到编译器里,并在B_Def.h文件里将其他电池类型的定义屏蔽掉。改变电池数目修改B_Def.h文件的“cells”参数改变电池容量修改B_Def.h文件的“capacity”参数改变锂电池单元电压修改B_Def.h文件的“cell_voltage”参数改变ADC量化单位的数值如果根据测量一节修改了电阻值,B_Def.h文件的“voltage_step”参数和“current_step”参数必须得到正确的修改。这很重要,否则可能损坏充电器。源代码文件以下为Atmel提供的源代码文件。Table3.C源代码文件文件名说明代码大小(1)Io4333.hAT90S4333的头文件cstartup.s90C编译器的Start-up文件Lnk0t.xcl链接器的命令文件,针对AT90S4433进行了优化B_def.h定义电池类型,电压,容量和电压单位数值Bc.h常数和宏定义的头文件Bc.c主程序,使用所有的电池类型474字节SLA.hSLA电池的头文件,包含充电器参数和函数声明SLA.cSLA电池的的源代码446字节NiCd.hNiCd电池的头文件,包含充电器参数和函数声明15AVR4501659A-CA–AVR–03/02Note:1.是version1.0的代码大小,以IARCVer.1.41C编译,选择最高一级代码大小优化.NiCd.cNiCd电池的的源代码548字节NiMh.hNiMh电池的头文件,包含充电器参数和函数声明NiMh.cNiMh电池的的源代码514字节Liion.hLi-ion电池的头文件,包含充电器参数和函数声明Liion.cLi-ion电池的的源代码690字节Table4.汇编源代码文件名说明代码大小bc.inc寄存器、A/D通道和常数声明tn15def.incATtiny15的头文件NiCd.incNiCd电池的头文件,包含充电器参数NiCd.asmNiCd电池的的源代码324字节NiMh.incNiMh电池的头文件,包含充电器参数NiCd.asmNiMh电池的的源代码328字节Liion.incLi-ion电池的头文件,包含充电器参数Liion.asmLi-ion电池的的源代码340字节Table3.C源代码文件文件名说明代码大小(1)16AVR4501659A-CA–AVR–03/02BC.C这个C模块包含主程序、设置函数、UART函数、实时时钟函数以及中断处理例程。“setup”函数处理所有的初始化工作。其中UART被初始化,实时时钟设置为0。之后程序以空闲模式循环,直至全局状态变量改变。PWM运行后实时时钟启动,并随着PWM停止而停止。这保证了只有在充电时时间才有意义。另一方面,这个方法的缺点是与时间有关的测量数据(dV/dt或dT/dt)有可能不准确。用户可以通过按按钮来切换充电状态并将引发中断。在中断例程中,按照所按的不同按钮,系统或者切换到快速充电模式,或者切换到涓流充电模式。主程序按照变量“chargestatus”调用不同的函数。BC.C还包括某些适用于各种电池类型的公共函数。最重要的两个为17AVR4501659A-CA–AVR–03/02Figure5.Main()函数18AVR4501659A-CA–AVR–03/02intbattery(UnsignedCharValue)这个函数在进行A/D转换时被调用,并按照要求控制ADC寄存器和PWM。它从ADC读取8位的结果并求平均值,然后将这个平均值传回给调用函数。Figure6.Battery()函数19AVR4501659A-CA–AVR–03/02voidstable_ADC(Void)测量电池电压和温度时stable_ADC被调用。它保证ADC数据在定义的范围内是稳定的。这对于精确的测量是非常重要的。函数一直循环到获得三个ADC数据,而且最大值比最小值不能超出一个量化单位。Figure7.stable_ADC()函数BC.H模块包含各种处理位操作的宏定义,以及各种充电状态和停止充电的位屏蔽常数。“chargestatus”指示当前充电器的实际状态:快速充电、涓流充电,或出现了错误。对于Li-Ion电池和SLA电池,有变量指示充电模式,包括电压常数和电流常数,以及锂电池是否处于快速充电模式的最后阶段(称为“延迟”)。“termination”则定义了停止快速充电的原因,或者是在什么地方检测到了错误,以用来调试。B_DEF.H这个模块定义了需要充电的电池类型。设计什么类型的充电器就需要使用什么类型的电池定义。电池类型决定了充电及停止充电的算法。由于所有的电池都使用相同的函数,即battery()、fast_charge()和trickle_charge(),若同时选择了多种电池类型,在程序编译时将出错。如果没有选择电池类型也会造成编译出错。电池单元的数目决定了电池的电压以及相关的常数。在此假定所有的电池单元是串联在一起的。0个单元并不是合理的现象,但是参考设计对此并不在意:它将简单地输出0安培的充电电流。BUCK变换器的电压范围以及电压测量电路决定了电流的上限。电池容量(以mA为单位)定义了充电电流及相关的常数。除了SLA电池,其他类型的电池在快速充电时工作于1C的保守方式。SLA电池的充电电流为2C。这也就为电池容量设定了上限。BUCK变换器最大可以输出1.5A的电流。SLA的最大容量为750mAh,其他电池类型则为1500mAh。如果需要对NiCd电池和NiMH电池以更大的充电电流进行充电,BUCK变换器必须做适当调整。电流大于2A时电流测量电路也需要修改。如果需要对一个容量超出了上面的计算值的电池进行充电,一个方法是改变BUCK变换器,或者是降低充电电流。20AVR4501659A-CA–AVR–03/02对于锂电池,根据不同的生产商存在着两种单元电压。在编译时必须对这个电压值(4.1V或4.2V)进行编辑。选择锂电池后这个值将自动包含进代码里。如果选择了错误的数值,虽然在编译时不会出错,但在实际应用中将导致错误的充电算法,最终损坏电池和充电器。ADC量化单位的数值需要按照实际的测量电路进行修改。详见测量电路一节。NTC表定义了ADC的量化单位数值。一个量化单位代表0.5C的温度变化。这个查询表适用于NiCd电池。若选择了其他NTC,这个表也需要修改。SLA.C充电方法SLA电池的快速充电算法采用恒定电压法。在充电之前首先用一个简单的(但出人意料地有效)方法确定出充电电压:给电池加载1C(10mA)的恒定电流,测量到的电池电压即为充电电压。电池首先用恒定电压进行充电(电流可以变化)。当电流下降到0.2C以下时快速充电结束,开始涓流充电。涓流充电同样为恒定电压方式,只是电压比快速充电时稍低。涓流充电的时间可以是一个固定值。充电参数简介快速充电:固定的快速充电电压=电池单元数*2450mV涓流充电:固定的涓流充电电压=电池单元数*2250mV一般充电过程结束的判别标准:绝对最低温度T=0C绝对最高温度T=45C快速充电过程结束的判别标准:最小电流门限I=0.2C快速充电过程的错误:快速充电时的最高温度T=30C最大快速充电时间t=60min,充电电流为1C最大的快速充电电流I=2C涓流充电过程结束的判别标准:无21AVR4501659A-CA–AVR–03/02Figure8.SLA电池的Trickle_charge()函数22AVR4501659A-CA–AVR–03/02Figure9.SLA电池的Fast_charge()函数,第一部分(2)23AVR4501659A-CA–AVR–03/02Figure10.SLA电池的Fast_charge()函数,第二部分(2)NiCd.C充电方法NiCd电池的快速充电算法采用恒定电流法。在快速充电模式下充电电流设置为1C;在涓流模式下则为C/40。判断充电过程结束的方法是电压下降(-dV/dt)法。备用的结束充电判别方案还有最大充电电压、温升(dT/dt)以及最大充电时间。电池充满后自动切换到涓流模式,MCU开始执行trickle_charge()函数。充电参数简介充电条件:快速充电:快速充电电流=1C涓流充电:涓流充电电流=0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C绝对最大充电电压V=电池单元数*1500mV24AVR4501659A-CA–AVR–03/02快速充电过程结束的判别标准:电压下降门限-dV/dt=20mV/min/单元温升门限dT/dt=1C/min快速充电过程的错误:快速充电时的最低温度T=15C最大快速充电时间t=90min,充电电流为1CFigure11.NiCd电池的Trickle_charge()函数25AVR4501659A-CA–AVR–03/02Figure12.NiCd电池的Fast_charge()函数,第一部分(2)26AVR4501659A-CA–AVR–03/02Figure13.NiCd电池的Fast_charge()函数,第二部分(2)27AVR4501659A-CA–AVR–03/02NiMH.C充电方法NiMH电池的快速充电算法采用恒定电流法。在快速充电模式下充电电流设置为1C;在涓流模式下则为C/40。判断充电过程结束的方法是电压下降(-dV/dt)法和温升(dT/dt)法。最大充电电压以及最大充电时间可以作为备用方案。电池充满后自动切换到涓流模式,MCU开始执行trickle_charge()函数。充电参数简介充电条件:快速充电:快速充电电流=1C涓流充电:涓流充电电流=0.025C最大涓流充电时间t=90min,充电电流为0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C绝对最大充电电压V=电池单元数*1500mV快速充电过程结束的判别标准:温升门限dT/dt=0.5C/min快速充电过程的错误:快速充电时的最低温度T=15C最大快速充电时间t=90min,充电电流为1C28AVR4501659A-CA–AVR–03/02Figure14.NiMH电池的Trickle_charge()函数29AVR4501659A-CA–AVR–03/02Figure15.NiMH电池的Fast_charge()函数,第一部分(2)30AVR4501659A-CA–AVR–03/02Figure16.NiMH电池的Fast_charge()函数,第二部分(2)31AVR4501659A-CA–AVR–03/02LiIon.C充电方法Li-Ion电池是需要充电的最先进的电池。快速充电首先以恒定充电电流1C开始,直到电池单元电压达到4.1或4.2V50mV。然后以恒定电压法充电,直至充电电流下降到Imin。为了精确测量电池电压(而不是充电电压)在测量时要关闭PWM。由于充电算法要由恒定电流法切换到恒定电压法,因此还需要监控充电电压。这也就是为什么需要测量两个电压的原因,一个是在关闭PWM时测得的,一个是在PWM工作时测得的。涓流充电在原理上与快速充电是一样的。只是电流要小得多,恒定电压阶段则通过定时器确定何时结束。充电参数简介充电条件:快速充电:绝对最大充电电压V=电池单元数*单元电压电压容限=电池单元数*50mV快速充电电流=1C最小电流门限=50mA/电池单元涓流充电:涓流充电电流=0.025C最大涓流充电时间t=90min,充电电流为0.025C一般充电过程结束的判别标准:绝对最低温度T=5C绝对最高温度T=40C快速充电过程结束的判别标准:参见充电条件快速充电过程的错误:快速充电时的最低温度T=10C最大快速充电时间t=90min,充电电流为1C32AVR4501659A-CA–AVR–03/02Figure17.锂电池的Trickle_charge()函数33AVR4501659A-CA–AVR–03/02Figure18.锂电池的Fast_charge()函数,第一部分(2)34AVR4501659A-CA–AVR–03/02Figure19.锂电池的Fast_charge()函数,第二部分(2)35AVR4501659A-CA–AVR–03/02建议的改进NiCd电池具有记忆效应–充几次电之后就无法充满了。为了复位记忆,可以增加一个泄放电阻,允许MCU在充电之前先对其进行放电处理。36AVR4501659A-CA–AVR–03/02附录1:原理图Figure20.主模块的方框图37AVR4501659A-CA–AVR–03/02Figure21.电源和基准电压原理图38AVR4501659A-CA–AVR–03/02Figure22.ATtiny15及100kHzBuck变换器原理图39AVR4501659A-CA–AVR–03/02Figure23.AT90S4433及14kHzBuck变换器原理图40AVR4501659A-CA–AVR–03/02附录2:电源下面的原理图为电源部分,它为电池充电器提供+15V,为AVR处理器提供+5V。充电器的电源以PowerIntegration公司的TOP224为架构。由于采用了flyback技术,电源更加紧凑和有效。输入电压为85VAC~265VAC(50-60Hz)。Figure24.电源原理图41AVR4501659A-CA–AVR–03/02变压器T301以Philips的EFD20骨架构成。原边绕组和偏置绕组使用AWG26(0.40mm)的线;次级绕组使用AWG20(0.80mm)的线。初级绕组和偏置绕组与两个次级绕组用绝缘带隔离开。5V绕组为15V绕组的一部分。绕制方向必须遵照原理图给出的方向。Table5.电源部分的器件列表器件类型说明R3016,2WC306的串联电阻(U301的电源)R302100W光耦的的串联电阻R303100W电压基准的的串联电阻R30610kW反馈电阻R30422kW反馈电阻(5V)R30591kW反馈电阻(15V)C3041n0/Y1Y1电容(可以用2*2.2nFY2电容代替)C305100nFC309100nFC301100nF/400VX电容C302100nF/400VX电容C310100µF/35V后级LC滤波器C311100µF/35V后级LC滤波器C303100µF/400V原边电容C3071000µF/35VC3081000µF/35VL3023.3µH后级LC滤波器L3033,3µH后级LC滤波器L30133mH输入噪声抑制器D3011.2A/500V整流桥D302P6KE200钳位Zener二极管D303BYV26C钳位二极管的阻隔二极管D304PBYR1645整流二极管-15VD305PBYR1645整流二极管-5VD3061N4148偏置电压的整流二极管/U301的电源U301TOP224U302TL431基准电压源U303PC817光耦T301PhillipsEFD20变压器42AVR4501659A-CA–AVR–03/02Table6.电源变压器绕组绕组圈数线型初级绕组86AWG26偏置绕组8AWG26次级绕组(5V)4AWG20次级绕组(15V)8(4+4)AWG20Printedonrecycledpaper.AtmelCorporation2002.AtmelCorporationmakesnowarrantyfortheuseofitsproducts,otherthanthoseexpresslycontainedintheCompany’sstandardwarrantywhichisdetailedinAtmel’sTermsandConditionslocatedontheCompany’swebsite.TheCompanyassumesnoresponsibilityforanyerrorswhichmayappearinthisdocument,reservestherighttochangedevicesorspecificationsdetailedhereinatanytimewithoutnotice,anddoesnotmakeanycommitmenttoupdatetheinformationcontainedherein.NolicensestopatentsorotherintellectualpropertyofAtmelaregrantedbytheCompanyinconnectionwiththesaleofAtmelproducts,expresslyorbyimplication.Atmel’sproductsarenotauthorizedforuseascriticalcomponentsinlifesupportdevicesorsystems.AtmelHeadquartersAtmelOperationsCorporateHeadquarters2325OrchardParkwaySanJose,CA95131TEL1(408)441-0311FAX1(408)487-2600EuropeAtmelSarLRoutedesArsenaux41CasaPostale80CH-1705FribourgSwitzerlandTEL(41)26-426-5555FAX(41)26-426-5500AsiaAtmelAsia,Ltd.Room1219ChinachemGoldenPlaza77ModyRoadTsimhatsuiEastKowloonHongKongTEL(852)2721-9778FAX(852)2722-1369JapanAtmelJapanK.K.9F,TonetsuShinkawaBldg.1-24-8ShinkawaChuo-ku,Tokyo104-0033JapanTEL(81)3-3523-3551FAX(81)3-3523-7581MemoryAtmelCorporate2325OrchardPark
  • 相关资料
  • 该用户的其他资料
  • 名称/格式
  • 下载次数
  • 资料大小
  • 名称/格式
  • 下载次数
  • 资料大小

空空如也,TA还未上传其他资料~ ~

用户评论

0/200
暂无评论
上传我的资料
关闭

请选择举报的类型

关闭

提示

提交成功!

感谢您对爱问共享资料的支持,我们将尽快核实并处理您的举报信息。

关闭

提示

提交失败!

您的举报信息提交失败,请重试!

关闭

提示

重复举报!

亲爱的用户!感觉您对爱问共享资料的支持,请勿重复举报噢!

全屏 缩小 放大
收藏
资料评价:

/ 0
所需积分:0 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!