基于DSP的自动代码生成及其在电池管理系统中的应用
2008-12-01
作者:陈金干,魏学哲
摘 要:按照V模式的开发方法对燃料电池车用动力蓄电池管理系统" title="电池管理系统">电池管理系统BMS进行了开发。根据BMS的功能和相应的算法在Simulink平台上对BMS进行了建模仿真。模型验证无误后,运用embedded target for TI C2000实现控制器的自动代码生成" title="自动代码生成">自动代码生成,并在硬件平台上对自动生成的代码进行了验证。
关键词:V-模式;DSP;自动代码生成;电池管理系统
汽车市场的激烈竞争要求设计者必须缩短产品开发周期。在传统的汽车电子控制器的设计开发中,控制器的总体设计、整体性能分析以及控制策略的优化通常需要大量的时间、人力和物力,投资大、效率低。此外,这种开发方法还容易出错,直到最终定标时才进入实时在线测试。如果在最初设计时出错而没有及时发现,则会导致大部分工作必须重新进行,开发周期变长。可见传统的研发方法无法满足市场的需要,必需有一种新的设计理念来适应市场的需求。
1 V模式的设计方法" title="设计方法">设计方法及自动代码生成
1.1 V模式的设计方法
如图1,与传统的设计方法相比,V模式的设计方法将系统工程学的原理应用于现代汽车电子系统开发中,它是一种循环的设计模式。其特点是无论进行开发、编程或者测试,总是在同一环境下工作,开发过程的每一步都可以得到验证[1]。它以功能强大的计算仿真工具为前提,整个设计过程都是在同一个平台下完成,实现从设计理念的提出,到快速原型设计(Prototype),再到ECU产品的无缝连接。采用该方法的最直接效果就是加速和简化了开发流程,及时消除错误,大大减轻了工程师的工作量。
1.2 运用Simulink实现自动代码生成
自动代码生成处于V模式的最底层,是整个开发过程中最为关键的一步,其目的是实现开发过程中的快速迭代以提高开发效率。代码生成的质量直接影响系统的可靠性和稳定性。
图2为基于MATLAB/Simulink" title="MATLAB/Simulink">MATLAB/Simulink的DSP自动代码生成流程[2]。Simulink是一种对于动态系统进行多域仿真和基于模型设计的平台,它提供了一个交互式的图形环境和丰富的模块库" title="模块库">模块库。根据系统的功能要求,首先在MATLAB/Simulink环境下搭建系统模型,并且进行仿真分析。使用Simulink调试器检查仿真结果以及定位和诊断模型中的意外行为。一旦结果得到了验证,便可以通过RTW(Real-time workshop)自动生成面向TI编译器的C语言工程文件,并进一步完成编译、连接和下载,最终在硬件平台上运行。
RTW是和MATLAB、Simulink一起使用的一个工具,运用它直接从Simulink模型生成代码并且自动建立可以实时运行的程序。在默认情况下,RTW生成的是高度优化和完全注释的C代码。除了MATLAB function模块和调用M文件S函数的模块以外,任何Simulink模型都可以生成代码,包括线性、非线性、连续、离散以及混合模型[3]。
从整个过程来看,工程师只需在Simulink中搭建模型和验证模型的正确性,不需要书写任何代码,即可得到可靠、准确的代码。
2 嵌入式Target for TI C2000工具箱
Target for TI C2000将TI公司的eXpressDSP工具集成到Simulink中,它是MATLAB与TI CCS的连接工具,可以使MATLAB、MATLAB工具箱、TI Code Composer Studio集成开发环境(CCS IDE)以及RTDX(Real-Time Data Exchange)协同工作。
Target for TI C2000工具箱由三部分组成[3]:常用工具、芯片外围设备模块库、优化库。常用工具包括实时数据交换通道模块、目标控制器基本参数设置模块和CAN通讯设置模块。该工具箱支持C281x系列、C280x系列以及C2400系列的DSP。优化库包含定点运算库和数字电机控制库。
Simulink可支持四类C280x DSP外围设备模块库:存储器的读写模块、中断管理模块、控制模块以及通讯模块。除了不支持IIC通讯模块以外,该模块库对C280x DSP板上所有的模块都提供了很好的支持。用户在调用DSP的这些模块时,只需对相应的模块进行参数设置和选择,不需要关心底层是如何实现,整个模型的搭建过程就像堆积木一样简单。
3 自动生成代码在电池管理系统中的应用
3.1 电池管理系统的功能描述
BMS燃料电池车用锂离子电池管理系统BMS(Battery Management System)是一个嵌入式实时监控系统,应具备以下功能[4]:电池状态监控,包括电池工作电压、工作电流和工作温度的测量和信号处理;特定状态下的最大充、放电功率计算;特定工况下电池组荷电状态SoC(State of Charge)、寿命状态SoH(State of Health)的估算;高压预充电、过充和过放保护、绝缘检测和漏电保护;电池的均衡和热管理;故障诊断以及与整车控制器通讯。图3为BMS系统框图。
由于汽车在处于停车状态时,BMS仍需每隔一定的时间对电池进行监控,所以在长时间停车时,BMS不可将蓄电池存储的电量耗完,否则汽车将无法启动。因此在停车时,BMS必须进入低功耗模式。当汽车开动时,从KL15传来的点火信号将控制器从低功耗模式唤醒,进入正常工作模式。
3.2 控制器的选择
从BMS的功能可以看出,控制器起控制作用的功能只占BMS的小部分,在实时参数估计、SoC估算中,算法复杂且运算量大,控制器需要在较短的时间间隔内完成复杂的递推运算,这对控制器的计算能力和计算速度要求更高。传统的电池管理系统采用单片机作为控制器,由于单片机侧重于控制而实时数据运算能力有限,所以无法很好地满足BMS的要求。TI公司的TMS320C2000系列DSP集微控制器和高性能DSP的特点于一身,具有强大的控制和信号处理能力,能够实现复杂的控制算法。该系列DSP上整合了Flash存储器、快速高精度的A/D转换器、两路增强的CAN模块、事件管理器、正交编码电路接口、多通道缓冲串口等外设。32位定点运算的C2808 DSP能够在一个周期内完成32×32位的乘法累加运算,或两个16×16位乘法累加运算。此外,可以在一个周期内对任何内存地址完成读取、修改、写入操作,使得效率和程序代码达到最佳,完全满足实时控制的要求[5]。
3.3 电池参数辨识和SoC估计算法
电池监控必需先进行建模,实时检测电池的电压、电流以及温度,根据这些数据对模型的参数进行辨识,从而间接地估计电池内部的情况。图4为锂离子动力电池模型[6],模型中利用C0描述电池的容量,R0描述电池的等效欧姆内阻,用时间常数较小的R1、C1环节描述锂离子在电极间传输时受到的阻抗,时间常数较大的R2、C2环节描述锂离子在电极材料中扩散时受到的阻抗。该模型中的参数都可以通过参数辨识的方法得到。
为了实现自适应控制和跟踪随时间变化的参数,在辨识过程中采用递推的最小二乘法。电池内部参数根据电压、电流信号每次的采样值进行更新,其基本思想是本次的估计值等于上一次的估计值加上一个修正项,修正项的大小取决于模型的输出与实际输出的差项。该方法要求在下次采样之前必须完成一步递推运算。
在装车运行时,整车控制器需要BMS提供高精度的SoC,一般估计精度要小于5%。电池的SoC是不能直接得到的,只能通过对电池电压、电流、温度、内阻等参数进行测量间接估算得到。而且这些参数又与电池老化程度、电池单体不均匀性等有关。目前常见的方法有开路电压法、电流积分法等。
3.4 基于CAN总线的标定模块
由于汽车上网络系统的广泛应用,基于网络连接的控制单元标定和传统的匹配标定方法有很大的不同。基于CAN的电子控制单元的标定是电池管理系统控制器开发的一个重要环节。CCP(CAN Cali-bration Protocol)是CAN总线的标定协议,目前已经得到汽车厂商的广泛应用。利用该协议可以快速有效地对控制器进行标定。在电池管理系统中,可以利用CCP实现实时在线测试、传感器的监测和标定、报警或出错阈值的调整以及通过CAN下载程序。
在传统的手写代码的控制器设计过程中,基于CCP协议的标定需要支持CCP协议的驱动程序。由于ECU底层程序和CCP协议的驱动程序各不相同,将CCP驱动程序结合到ECU中需要耗费大量时间。MATLAB 2007b中新增了基于CAN总线的标定模块。将该模块放入Simulink模型中,并设置好相关参数,便可以自动生成能够实现CCP标定的代码了。
3.5 在Simulink中建立模型
在建模的最开始必需把C2000 DSP chip support 中的F2808 eZdsp 模块放到模型中。该模块是对DSP的基本信息进行设置,包括芯片的选择、锁相环时钟频率的选择、存储器地址分配,以及外围设备的一些基本设置。
传感器输出模拟信号和数字信号,对于模拟信号可以用A/D转换模块进行转换,对于数字信号可以用GPIO或者CAP捕获模块处理。经硬件滤波后的模拟采样信号还不够理想,在该模型中可以对采样信号进行快速傅立叶变换,分析出噪声信号的频率特性,并设计出相应的数字滤波器,对采样信号进行进一步滤波。执行器的控制可以用GPIO或者PWM模块进行控制。
由于SoC和SoH以及控制算法较为复杂,可以用S-function模块实现。S-function是一个动态系统的计算机语言描述,是扩展Simulink模块库的有力工具,它采用一种特定的调用语法,实现函数和Simulink解法器之间的交互。Simulink中的电池管理系统模型如图5所示。
3.6 自动代码生成、编译以及运行
在Simulink中仿真运行无误后,便可以从模型直接生成控制算法代码了。Simulink在内部调用real-time workshop build 并且自动打开TI的集成开发环境CCS,生成的代码经过编译自动生成可执行的最终控制程序。通过USB接口仿真器和14pin标准JTAG调试连接线将程序烧入目标系统中。
C2808 DSP有两种运行模式,一种是通过仿真器将程序下载到RAM中运行,这种运行模式中可以通过仿真器在CCS中设置断点、单步运行、查看存储器等,对程序的运行情况进行实时监控和调试。另外一种模式是将程序下载到Flash中单独运行,这种运行模式不需要CCS 的介入。一般在实验调试阶段采用RAM模式,调试成功以后再采用Flash模式单独运行。
利用设计出的控制器进行电流和电压采样,电压采样精度为1/1000, 电流采样精度小于5/1000。设计的SoC算法能够在DSP上在30ms内完成一步递推运算,满足电池管理系统实时操作的要求。运行自动生成的代码并结合Vector公司的CANape工具成功实现CCP协议对RAM和Flash存储器中参数的在线标定。图6是测量电压和模型输出电压的比较。从图中可以看出,测量电压与模型输出电压相当吻合,证实了代码的正确性。
实践表明,应用DSP取代传统单片机作为BMS的控制器,其强大的控制能力和信号运算处理能力更能够满足电池管理系统的要求。在Matlab/Smulink平台下用嵌入式的Target for TI C2000实现控制器自动代码生成,极大地加快了电动汽车BMS系统的开发进程,缩短了开发周期。运行测试表明:自动生成的代码效率高而且可靠,控制器对电池系统的控制作用实时准确,可靠性高,对电池模型的参数估计满足精度要求。
参考文献
[1] 戴海峰,魏学哲,孙泽昌.V-模式及其在现代汽车电子系统开发中的应用[J].机电一体化,2006,(6):20-24.
[2] 齐星刚,赵刚,李原.在MATLAB/Simulink平台上DSP代码的自动生成[J].中国测试技术,2005,31(1):87-88.
[3] MATLAB R2007b Users Guide.The MathWorks Corp.,2007.
[4] PLETT G L,KLEIN M J.Advances in HEV Battery Management Systems.SAE,2006-21-0060.
[5] Texas Instruments TMS320F2808 User Manual.Texas Instruments Corp.,2005.
[6] 魏学哲,邹广楠,孙泽昌.燃料电池汽车中电池建模及其参数估计[J].电源技术,2004,28(10):605-608.