随着新能源和环境污染问题在全球发展过程中被高度关注,作为清 洁 能源的动 力 电池越 来 越受到重视。锂离子电池 以 其能 量 密 度 高、平 均输出电 压高、输出功率大、循环性能优越、可快速充放电、无记忆效应等特点,将成为未 来 电动汽车 动 力 电 池 的市场主力。一个有效的电池管理系统能对动力电池进行保护、延长其使用寿命及提高行驶里程,是电动汽车产业发 展 和 推 广 的 一 项 非 常 关 键 的 系 统 工程。在串联的动力电池组中,单体锂电池的电池状态,如电压和温度的监测,是电池管理系统中的关键组成部分。单体电压的数据最为丰富,能够表 征电池组内每一个单体状态和特征的物理量,还可 以反应电池组整体的状态,如一致性等。此外,对单体电池进行监测,还能防止过冲和过放。因此,电池单体电压采集对采集的准确性和实时性都有比较高的要求。
分别对电池的单体测量方法进行了总结,包括电阻分 压、光 耦 隔 离 运 放、利用线性 光电耦合器进行 模 拟 信号传 导,以及模拟 开 关 配 合电容传输模拟 信 号 的方案等 方 法。此 外,市 场 上已出现单体电 池 测 量专用 芯片,如世界 上 著 名 的芯片厂 商 Linear公 司 开 发 的 LTC6803芯 片,内 部自带多路选通开关 ADC,可以在13ms内完成多达12个串联电池的电压的测量,最大总测量误差为0.25%。
本文采用两片 LTC6803级联方式采集24只单体锂离子电池电压,单 片 机 利 用 SPI 总 线 启 动LTC6803电压测量并读取电压。
系统组成与工作原理
系统组成
本文研究的串联的锂离子电池采集系统能够实现24只动力电池的在线单体电压监测。该系统主要包括以 LTC6803为核心的单体电压采集部分,以及以 MC9S12C32为 核 心 的 SPI通 信 和 CAN 通 信部分,还有一些外围电路。
LTC6803是 Linear公司的第二代的完整电池监视IC,内置一个12位的 ADC、一个精准型电压基准、一个高电压输入多路 复 用 器 和一 个 串 行 SPI接口。每个 LTC6803能够测量多达12个串接电池或者超级电筒的电压。通过一个独特的电位移位接口可以把多个 LTC6803器件串联起来,而无需光耦隔离器,以监视长串的串联电池中的每只单体电压。每个电池输入都具有一个相关联的 MOSFET 电源开关,用于过度充电的电池进行放电。LTC6803还提供了一种用于将电源电流减小至12μA 的 待 机模式。LTC6803 采 用 SPI(SerialPeripheralInter-face)方式与外部 MCU 通信,具有高抗 EMI以及低功耗能力。其结构原理图如图1所示:
MC9S12C32是 Freescale公 司 的 一 款48引 脚16位的单片机,功 能 强大、资源丰富。内部有32KFlash,8通道的10位 ADC,1路SPI模块,1路支持CAN2.0 A 和 CAN2.0B 的 CAN 模 块,6 通 道PWM,8通道的16位定时器模块,满足本文单体电压采集系统对 MCU 的需求。
工作原理
MC9S12C32 通 过 SPI 总 线 来 启 动 两 片LTC6803采集 并 读 取 24 只串联的单体电池的电压。采集系统与上级控制系统通过 CAN 总 线 通信,实现对动力电池单体电压的在线监测,并实现对采集系统的休眠与启动控制。整个采集系统通过MC9S12C32的定时器来实现对电压的测量,CAN信息的发送以及错误的判断等的时序控制。
电压采集硬件电路设计
电压采集功能是由两片 LTC6803实 现 的。在本文的采集系 统 中,未 开 启 LTC6803的 均 衡 功 能、以及 GPIO、TEMP 引脚的温度采集功能。 两 片LTC6803可 采 用 并 联,亦可采用菊花 链式连接。LTC6803通 过IS07421,实 现 电 池 与 MCU 之 间 的电气 隔 离;LTC6803与 MC9S12C32通 过 SPI方 式进行通信。LTC6803电压采集电路如图2所示:
当两片LTC6803使用菊花链式串联连接时,片选端只需 MCU 的一个IO 口即可,三个二极管需焊
接,顶 端 LTC6803 的隔离芯片可不焊,顶 端LTC6803的 TOS引脚拉高,Vmode引脚拉低,底端LTC6803的 TOS引脚拉低,Vmode引脚拉高;当两片 LTC6803使用并联方式 连接时,片选端 需 MCU两个IO 口,两 片 隔 离 芯 片 需 接 入,去 除 三 个 二 极管,两片6803的 TOS引 脚 均 拉 低、Vmode引 脚 均拉高。
由于 LTC683具有内置噪声滤波器的 ΔΣ转换器,抗 EMI的能力 也 较 高,故无需使用其他的信号调理电路。由于本文中的电池管理系统暂时还未具有充电均衡管理功能,故将6803的均衡引脚做悬空处理,不使用其放电控制功能。
LTC6803的SPI通信
采集系统的单体电池的电压,是通过 LTC6803采集的。LTC6803与 MC9S12C32之间是 通 过 SPI进行通 信 的。为 了 实 现 SPI通 信,首 先 要 弄 清 楚LTC6803的读写时序。LTC6803的读、写时序如图3和图4所示。
由读写时序可见,每个 字 节发 送 时 都是高 位 先发送。写时 序 时,SDI引脚的逻辑状态在 SCKI的上升沿被所 存。读 数 据 时,在 SCKI的 上 升 沿 被 所存。读时序中,在SCKl的上升沿 SDO 引脚的逻辑状态 是 有 效 的,另外需要注意的是,LTC6803的 是时钟相位和极性要求:LTC6803的 SPI的接口被配置为工作在 CPHA=I和 CPOL=I的模式下。
本文中两片LTC6803串联方式连接,故在由单片 机 往 LTC6803 发 送 命 令 时,是 先 发 送 高 位LTC6803的 命 令 数 据,再 发 送 低 位 LTC6803的 命令数 据;LTC6803往 单 片 机 时,单片机先接受的是低位 LTC6803的 数 据,而 后 是 高 位 6803 的 数 据。根据 LTC6803 的 SPI的 通 讯 方 式,本 文 以 两 片LTC6803 菊花链式连接为例,可 以 写 出MC9S12C32的SPl初始 化、收发 程 序;向 LTC6803写配置或 者 命 令;从 LTC6803 中读取寄存器值的程序。
(1)MC9S12C32的SPI初始化、收发程序
MC9S12C32的SPI模 块 的 SS可 设 为 普 通IO口 功 能。 本文中采用其余通用 IO 口,实 现LTC6803的 CSBI引脚的拉高和拉低。
voidSPI_Init(void)
{CS_dir=1; ∥通用片选引脚为输出引脚
SPICR1=0x5c; ∥主机模式;高位起始传送
SPICR2=0x00; ∥主模式故障模式使能禁止
SPIBR=0x02; ∥总线8M,将SPI时钟分频
至1MHz
}
voidSPI_Send(unsignedcharsenddata)
{unsignedchartemp_spi;
while(!SPISR_SPTEF); ∥等 待 数 据 寄 存
器空
SPIDR=senddata;∥将数据写入数据寄存器
while(!SPISR_SPIF);∥等待数据发送完成
temp_spi=SPIDR; ∥清空标志
}
unsignedcharSPI_Receive(void)
{unsignedcharreceive_data;
while(!SPISR_SPIF); ∥等待接收完成
receive_data=SPIDR; ∥读取数据寄存器
return(receive_data);
}
(2)向 LTC6803写命令
向LTC6803中写数据,需先发送相应的寄存器命令 和 PEC 码,经 校验 无误 后,再写 入数据。6803采用菊花链式连接时,先写入的数据为顶端6803的数据,然后是中间的6803的数据,最后是底端6803的数据。以6803初始化程序为例,编写程序如下:
voidLTC6803_Init(void)
{unsignedchari;
unsignedchartop_cfg[7]={};
unsignedcharbottom_cfg[7]={};
CS=O; ∥拉低片选,启动写入数据
SPI_Send(0x01);SPI_Send(0x01); ∥ 发 送
写入寄存器命令和 PEC码
for(i=0;i<7;i++)SPI_Send(top_cfg[i]);
for(i=0;i<7;i+ +)SPl_Send(bottom_cfg
[i]);
CS=1; ∥拉高片选,锁存所写数据
}
(3)从 LTC6803读取数据
从LTC6803中读取数据,也需先发送相应的读取寄存器命令和 PEC 码,经 校验 无 误 后,再 读 取 数据。6803采用菊花链式连接时,先 读 取 的 是 底 端6803的数据,然后是中间6803的数据,最后是顶端6803的数据。LTC6803在 每 读 取1字 节 的 数 据 之前,需由发送8位 空 字 节 启 动 SPI传 送 功 能。以 读取6803的配置寄存器值为例,编写程序如下:
voidLTC6803_Read(void)
{unsignedi;
CS=0;
SPI_Send(0x02);SPl_Send(0xce);∥发送读取
寄存器命令和 PEC码
for(i=0;i<7;i++)
{while(!SPI_SPTEF);SPIDR=0x00; ∥写
入空字节,启动SPI传送
bottom_cfg[i]=SPI_Receive();}
……
CS=l;
}
MC9S12C32主要调用以上几 个基本的函数,实现对 LTC6803的一系列 的 读写控制。采 集 系 统的整体流程图如图5所示。首先,对系统时钟、SPI、CAN、定时器等初始化;循环从读取24只单体电池电压开始,到 最 终 通 过 CAN 总线将单体电压数据上传至上级控制 器,时序 由 定 时 器控 制。单体 电 池电压测量程序流程图如图5所示。
图6是一组电池组通过下位机 LTC6803采 集的单体电压值与用万用表测量值的比较,可以 看 出下位机的单体电池电压采集精度达到要求。
为了节约电源,本采集 系 统还 设 计 了采集 系 统休眠的功能。当整车 在长时 间静置时,由上级控 制器通过 CAN 广播方式,做出采集系统休眠的命令:通过SPI可先将LTC6803配置为低电流方式,然后禁止 MC9S12C32的SPI功能;甚至可禁止 CAN 发送功能,只使能 CAN 接收中断功能。
本文 采 用 MC9S12C32 和 LTC6803 设 计 锂 离子单体电池采集 系 统。该系 统能采集24只串 联动力电池的电 压,并 通 过 高 速 的 CAN 总 线 与 上 级 控制系统通信。经过实 际测试,该 系统的 电压采集精度在+3mV。该系统工作稳定可靠,与其他的控制系统集成后,已经试验装车,实现预计功能。
评论
查看更多