引言
电动汽车由于在节能和环保方面的优势,成为汽车产业发展的主要方向。动力电池组作为一种新能源,是电动汽车的能量源和重要组成部分,而电池管理系统(Battery Management System, BMS)是动力电池和整车之间的桥梁[1]。
电动汽车的电池管理系统的基本功能是采集电池的电压、电流、温度等参数,通过对这些信号的处理判断电池的故障状态,并进行荷电状态等的计算。电池管理系统采集到的监控数据根据其不同的处理方式,主要可分为检测量和诊断量两类[2]:检测量包括采集的单体电池的电压、温度以及电池包的总电流、总电压等;诊断量是指由主控模块对检测量进行计算处理后获得的状态数据,如电池荷电状态、电池健康状态、故障码等。
本文设计的数据存储系统可以作为电池管理系统中的一个模块,用于对电池管理系统产生的检测量和诊断量进行存储。对这些数据有效的记录有利于离线分析电池性能、进行电池故障的诊断以及对电池管理系统的优化。
1 硬件电路设计
为了满足数据存储的要求,硬件电路部分主要由飞思卡尔公司的MC9S08DZ60单片机和SanDisk公司的SD卡组成。通过单片机接收CAN总线上传输的数据,然后存储至SD卡内。电路结构示意图如图1所示。
图1 电路结构示意图
1.1 单片机选用
HCS08系列单片机兼备高性能和低功耗的特点,选用32引脚的MC9S08DZ60,其优势在于:片内置8位CPU,总线频率可达20 MHz,运算速度完全可以满足SD卡高速读写的需求;有60 KB Flash和4 KB RAM,可以满足高速通信和海量运算的需求;片内串行外围接口SPI可用于与SD卡之间通信,其高电平为3.3 V,满足SD卡工作电压;具有多达32个中断,包括2个CAN中断,可以实现BMS与存储系统之间的高速通信。
1.2 SD读写设计
SD卡是一种基于半导体的存储设备,体积很小但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性等特点。工作电压范围为2.0~3.6 V,可变时钟频率为0~25 MHz,并可实现10万次编程/擦除[3]。
根据通信方式的不同,SD卡支持两种操作模式[4]:SPI模式和SD模式。SD模式支持4位并行输出,其速度较SPI模式略快,但SPI模式通信稳定可靠,且MC9S08DZ60单片机集成SPI模块接口,接口电路更为简洁。相比于SD模式下使用的3根电源线和6根通信线,SPI模式只使用4根通信线,分别对应连接MC9508DZ60的4个SPI引脚:主出从入引脚MOSI、主入从出引脚MISO、串行时钟引脚SCK和从机片选引脚SS[5]。本文所选用的SPI模式下SD卡接口引脚的定义及功能如表1所列。SD卡与单片机的连接电路如图2所示。
表1 SD卡在SPI模式下引脚定义
图2 SD卡硬件连接电路
2 软件程序设计
数据存储系统的软件程序以数据写入SD卡的存储程序为核心,其程序具有层次性,从下往上依次设计为SD卡的硬件驱动、FAT文件系统和BMS对存储系统的应用。其整体过程流程如图3所示,其中SD卡的初始化和写操作以及FAT文件系统的使用将进行重点介绍。
图3 数据存储系统整体程序流程
2.1 SD卡的驱动
MC9S08DZ60与SD卡通过SPI通信,MC9S08DZ60发送命令至SD卡后,SD卡会响应返回值,返回值正确则实现操作命令。其中发送的所有CMD命令长度都是6字节,通用的命令格式如表2所列。具体包括起始位“01”和结束位“1”。SPI数据传输较稳定,驱动过程中未使用CRC校验。
表2 CMD命令格式
通过对CMD命令集的调用可实现多种功能,如对SD卡的初始化,对SD卡状态的读取以及数据的读写和擦除。SD卡的初始化以调用基本命令为主,其流程如图4所示。
图4 SD卡初始化流程图
SD卡以单个块即512字节进行读写,通过发送读命令CMD17和写命令CMD24,完成读写流程,如图5所示。相似地,可通过发送多块读/写命令CMD18和CMD25分别对多个数据块进行读和写操作。
图5 SD卡读/写流程图
2.2 FAT文件系统
FAT文件系统[6]在建立低于32G的FAT文件系统时具有结构简单、兼容性好等不可忽视的特点。FAT16相比于FAT32,其目录区大小和偏移地址固定,但16位的FAT区将一个文件的大小限制于2G。由于使用的SD卡自身容量有限,而FAT16的程序编写更为简单易行,因而在本设计中采用FAT16文件系统。
若将SD卡格式化为FAT16格式,则根据卡内的地址分为5个区:主引导记录区MBR、系统引导记录区DBR、文件配置表FAT1及其备份FAT2、目录区DIR和DATA数据区。
MBR和DBR定义了卡内数据存储的基本规则,如簇和各区大小的定义。对于文件的具体信息存放在目录区DIR,文件内容存放在数据区DATA内。FAT区即对数据区的索引,FAT区为特殊的链式结构,对于FAT16系统,每个FAT单元为2字节,分别对应着数据区相同序号的簇,存放内容为未完文件所在的下一簇序号,直到该单元存放0xFFFF,则该簇为文件链尾。磁盘结构及FAT16的文件存储实现示意图如图6所示。
图6 磁盘分区表及FAT16文件系统实例示意图
FAT文件系统在数据存储系统中实现的功能为:将写入SD卡的数据进行文件化处理。通过对目录区、FAT区和数据区的分别写入,可完成文件的自动创建和数据的自行保存。其实现过程如图7所示。
图7 FAT16文件系统的数据存储流程图
3 基于电池管理系统关键数据的存储实验
电池管理系统采集的数据具有种类多、数据量大、传输速率快等特点,部分数据如图8所示。为了测试本系统存储BMS数据的性能,本文对CAN总线上两个主要的报文进行存储:报文一包括电池总电流、总电压、平均温度和SOC等;报文二包括电池模块的最高电压/最低电压、模块温度和故障码等。
图8 数据样例
每一条监控数据的存储格式设定为“时间+报文ID+数据”,即包括3字节的监控时间、4字节的报文ID号以及8个字节的监控数据,整理为ASCII码后每条数据共30字节。每次写入一个扇区即512字节的数据,可包括16条接收数据,存储在文本文件中数据的格式和内容详见表3。
表3 监控数据存储格式
注:单个字节内容以ASCII形式存入文本文件后,表现为两字节。
本文搭建的实验平台通过BMS采集电池组数据,由数据存储系统将数据存储进SD卡,再经由PC上位机查看和处理。实现了在SD卡内自动创建文件BMSDAT01.txt,考虑到文件过大时上位机查看困难,当文件大于给定值50 MB时生成新文件。再次使用时可继续上次数据进行记录,通过PC机可直接查看文件中数据及其记录的时间和来源报文ID,也可以直接对卡中数据文件进行删除等操作而不影响再次使用。目前本数据存储系统可实现对CAN总线上每100 ms发出的数据的完全无遗漏记录,更高频率下对数据的完全记录还有待完善。综上所述,本数据存储系统对2G的SD卡具有较高的利用率,短时间内可存储大量数据且具有较高稳定性,因此可以较好地应用于电池管理系统中。
结语
本文设计了一种基于SD卡的BMS数据存储系统,并详细叙述了系统硬件电路和软件程序设计。该系统使用了SD卡和飞思卡尔8位单片机MC9S08DZ60,实现了创建文件并无遗漏地完全记录CAN总线上每100 ms发出的数据。数据存储使用了FAT16文件系统,因而具有稳定性高、可移植性强等优点。通过基于电池管理系统中应用实验,证明该数据存储系统能够满足对电池监控数据的稳定高效存储。