自动代码生成在列车空调电源软件中的应用

2021-06-22 11:12侯运昌杨东军甄远伟赵许强申磊沈壮壮
电气传动 2021年12期
关键词:代码生成接触器时序

侯运昌,杨东军,甄远伟,赵许强,申磊,沈壮壮

(中车青岛四方车辆研究所有限公司,山东 青岛 266000)

自动代码生成作为一种图形化的软件编写方法,因易编写、易仿真验证等优点,近年来广泛应用在汽车、轨道交通、电力等行业的电控系统[1-8],为电控软件的编写带来极大便利。Matlab Embedded Coder是一款实现自动代码生成的主流软件工具,可生成产品级的具有可读性、执行速度快的嵌入式代码,支持多种行业软件标准,包括 ASAP2,AUTOSAR,DO—178,IEC 61508,ISO 26262,以及MISRA—C等[9]。

文献[1]在Simulink自动代码生成环境下,采用图形化编程的方式建立主机控制单元与气缸控制单元的控制策略模型,并执行代码的自动生成过程,进而实现汽车电控单元(electronic control unit,ECU)的集成;文献[2]研究了 Matlab/Simulink的代码生成原理,分层设计了驱动和模块,通过电机控制器开发的示例,验证了自动代码生成工具和标定系统这2项关键工具的工作效果;文献[3]提出了一种基于由驱动电机和测功机构成的平台上模拟道路工况进行电动汽车测试的方案,并搭建了硬件在环(hardware-in-the-loop,HIL)仿真平台进行了相关试验,验证新系统的实际效果;文献[4]将多旋翼飞行器控制器模型和硬件接口模型集成,使用定制的自动生成代码环境,生成了软件源代码并编译链接成可执行文件,在目标飞控计算机上成功运行;文献[5]用Matlab搭建永磁同步电机矢量控制算法模型,用HIL仿真平台搭建主电路模型,对算法设计进行验证;文献[6]通过快速控制原型仿真实现了控制算法参数的在线优化配置,利用自动代码生成技术将控制算法下载至真实的控制器中;文献[7]利用基于Matlab的FPGA代码生成工具SG,搭建了三相电网电压锁相环模型,并在实验室中对锁相的性能做了验证;文献[8]用Matlab搭建空间矢量脉宽调制(space vector pulse width modulation,SVPWM)模型,与TI C2000 DSP驱动模块结合,一键生成软件工程。以往的文献一般针对代码自动生成的单个细节做探讨,较少涉及在实际产品和整体电控软件中的应用流程,本文借助160 km/h标准动车组空调电源项目的软件开发,对自动代码生成在电控软件中的运用方法和过程做详细介绍。

本文首先简要介绍自动代码生成的原理和工作流程;然后搭建160 km/h标准动车组空调逆变电源控制软件的Simulink模型,着重介绍了使用Stateflow工具箱、Simulink工具箱建立启停工作时序模型和SVPWM调制模型;经过软件在环仿真验证后,将Simulink模型自动生成代码,与控制器TMS320F28335驱动代码结合,并下载至控制器运行;通过上机试验,验证了自动代码生成在该电源产品上的有效性。

1 自动代码生成的原理和流程

1.1 原理

Embedded Coder是一款借助Matlab软件实现自动代码生成的主流软件工具,在自动代码生成的过程中,Embedded Coder首先对搭建的控制软件模型进行编译,生成.rtw格式的模型描述文件(model description file),然后目标语言编译器(target language compiler)读取.rtw文件,并依据目标文件(target files)生成C代码。其原理如图1所示。

图1 自动代码生成原理Fig.1 Principles of automatic code generation

1.2 工作流程

在运用自动代码生成时,首先根据控制软件设计需求,搭建软件Simulink模型,并将模型自动生成代码。自动生成的代码往往只是软件的应用部分,需要将自动生成的代码与控制器底层驱动程序结合,才能下载至目标控制器使用。如图2所示,底层驱动程序对微控制器(micro controller unit,MCU)进行配置,通过数据接口将控制器采集数据传递给应用程序,并执行应用程序发出的指令。底层驱动程序可以在IDE集成开发环境中手动编写,也可以通过搭建Simulink硬件驱动模块来实现。将Simulink硬件驱动模块添加至Simulink应用软件模型,可以实现一键自动生成完整软件工程。开发一款MCU的硬件驱动模块既需要熟悉MCU的内部架构,又需要对TLC和目标文件语法有具体研究[10],开发时间成本高,但使用效果并不明显高于手写驱动,因而本文采用手写驱动的方法。

图2 软件工程组成Fig.2 The composition of the software engineering

1.3 特点

在电控控制软件的设计中,自动代码生成的高效主要体现在其软件编写图形化和软件可仿真两方面。软件编写图形化使得开发者能够把控较复杂的控制逻辑设计;而通过仿真,设计漏洞在软件部署前即可被发现和解决,大幅缩短了后期软件上机调试时间,也大幅降低了调试成本。

2 搭建空调电源控制软件模型

160 km/h标准动车组空调逆变电源为该型号列车的三相设备供电,包括空调、厨房电器等。空调逆变电源的电气参数如下:输入电压为DC 500~660 V,输出电压为AC 380(1±5%)V,输出频率为(50±1)Hz,容量为35 kV·A,THD<10%。其主电路包括三相逆变桥、预充电电路、中间支撑电路和输出滤波电路等,如图3所示。

图3 空调逆变电源主电路Fig.3 Main circuit of air conditioning inverter

依据设备的控制需求,使用Simulink工具箱和Stateflow工具箱搭建设备的控制软件模型,包括工作时序、故障保护、故障冗余逻辑和闭环逆变控制等。

2.1 启停机时序

根据客车电源技术条件[11],使用Matlab Stateflow工具箱,搭建了逆变电源启停时序的状态机如图4所示。初始化时,电源进入待机状态“wait”,在该状态内输入输出接触器均断开,逆变模块不工作;当检测到输入电压在正常范围内(Uin_ok==1),系统跳转进入预充电状态“precharge”,闭合预充电接触器K1(cmd_K1=1),开始预充电;当检测到中间电压达到设定值后(flag_prechrg==1),进入状态“prechrg_finish”,闭合主输入接触器K2(cmd_K2=1),结束预充电;等待0.5 s,进入软启动状态“softstart”,开始软启动,开启PWM信号(pwm_en=1),同时闭合输出接触器K3(cmd_K3=1);当检测到电源发生故障时,跳转进入“Fault”状态,断开接触器K1,K2和K3,关闭PWM信号。

图4 工作时序状态机Fig.4 State machine of working sequence

2.2 SVPWM调制

常见的逆变方法有正弦PWM(SPWM)调制、SVPWM调制等,因SVPWM方法具有较高的母线电压利用率,故采用七段式SVPWM调制方法。SVPWM原理是利用逆变器各桥臂开关控制信号的不同组合,使逆变器的输出电压空间矢量的运行轨迹尽可能接近圆形,如图5所示。下文使用Simulink工具箱搭建SVPWM软件模型。

图5 SVPWM原理示意图Fig 5 Schematic diagram of SVPWM

SVPWM模型如图6所示,模型输入为交流电压在静止两相坐标系下的给定值Uα和Uβ,输出为三相桥臂的PWM占空比,模型分3个子模块。

图6 SVPWM模型Fig.6 Model of SVPWM

1)扇区判断(Sector_judge)。该模块由Uα和Uβ计算空间矢量所在的扇区,参见图7。

图7 扇区判断Fig.7 Sector judgment

2)相邻矢量作用时间(Vector_time)。该模块根据交流电压给定值Uα,Uβ和扇区编号,计算相邻矢量的作用时间,如图8所示。

图8 相邻矢量作用时间Fig 8 Action time of adjacent vectors

3)三相桥臂占空比计算(UVW_Time)。该模块根据扇区编号和相邻矢量作用时间,进一步计算三相桥臂的调制波,如图9所示。

图9 占空比计算Fig.9 Duty cycle calculation

2.3 冗余逻辑

160 km/h标准动车组每个车厢内安装2台空调逆变电源(逆变电源A,B),冗余电路如图10所示,每台逆变电源为各自负载供电。在输出端通过冗余接触器相连,当其中1台电源故障停机时,闭合冗余接触器K4,实现冗余供电。

图10 冗余电路Fig.10 Redundant circuit

利用Stateflow工具箱,搭建互备逻辑状态机。冗余逻辑如图11所示。逆变电源在故障停机后,发出供电请求信号(cmd_request=1),另一台电源接收到该请求信号(flag_supply_request==1)后,状态机通过触发事件“restart”触发系统重新启动,并闭合冗余接触器K4(cmd_K4=1)。

图11 冗余逻辑Fig.11 Redundant logic

3 仿真和部署

3.1 仿真验证

将以上搭建的控制软件模型与主电路模型结合,对软件功能进行仿真,以验证工作时序、闭环控制、冗余等逻辑是否与设计需求一致。仿真模型如图12所示,仿真模型为了确保由模型自动生成代码时不出现错误,依照Embedded Coder工具箱提供的软件在环(SIL)仿真流程,将软件Simulink模型自动生成代码,对代码反向编译,重新得到Simulink模型,进行仿真,即SIL仿真。

图12 整体仿真模型Fig.12 Overall simulation model

仿真逆变电源启停时序波形如图13所示,Uuv为故障模块输出U,V两相的线电压。在施加输入电压后,逆变电源经过预充电和软启动过程,输出电压波形达到稳定;在输入电压降为0时,逆变电源封锁;输入电压恢复后,逆变电源可正常重启。该仿真验证了软件中启停相关逻辑与设计预期一致。

图13 工作时序仿真波形Fig.13 Simulation waveforms of working sequence

仿真逆变电源冗余供电逻辑如图14所示,当一台逆变电源故障停机后,发出供电请求指令,冗余接触器闭合,另一台逆变电源重新启动,为故障电源对应的负载供电。

图14 冗余逻辑仿真波形Fig.14 Simulation waveforms of redundant logic

3.2 部署

经仿真验证后,将自动生成的代码与手动编写的TMS320F28335驱动代码集成,得到完整的CCS软件工程,软件编译下载至控制器。工作流程如图15所示。

图15 软件部署流程Fig.15 Software deployment process

软件工程中,包括自动生成的应用代码和驱动代码两部分。驱动代码实现与控制器硬件的交互,包括配置CPU时钟、配置各外设参数等,将外设模块(AD,GPIO等)采集的数据传递给应用代码,同时执行应用代码产生的指令(数字量输出、PWM占空比等)。

4 上机测试

为验证软件的功能,在空调逆变电源样机上进行测试。试验工装如图16所示。

图16 样机试验工装Fig.16 Test prototype

与第3节仿真验证相对应,图17、图18分别为逆变电源输入断电重新启动和冗余供电逻辑的测试结果,可以看出实际工作的时序与仿真一致。

图17 启停时序Fig 17 Start stop sequence

图18 冗余逻辑Fig.18 Redundant logic

运用自动代码生成方法,可以在软件仿真环节对软件功能进行调试,修正大多数软件问题,大大缩短样机调试的时间。另外,图形化编程提高了软件功能实现的操作性和可控性,在更好地减少功能设计漏洞的同时,大幅度缩减了软件编写时间。对一般的含工作时序、故障诊断、闭环调制、通信、数据存储等功能的电控软件,从依据设计需求搭建软件至软件部署后开始样机测试,一般需要1~2周的时间,较手写软件效率明显提高。

5 结论

本文阐述了使用Matlab实现自动代码生成的基本原理,以160 km/h标准动车组空调电源产品为例,介绍了电源控制软件模型的搭建、模型的仿真和软件的部署,展示了自动代码生成在电源控制软件开发中的运用过程。经过样机测试,运用自动代码生成实现的控制软件功能与仿真结果相同,可以大大缩短软件开发的时间,提高开发质量。使用Matlab实现自动代码生成在电源控制软件和其他电控系统开发中有很大的应用价值。

猜你喜欢
代码生成接触器时序
基于Sentinel-2时序NDVI的麦冬识别研究
Lustre语言可信代码生成器研究进展
智能大功率过零接触器研究与开发
基于FPGA 的时序信号光纤传输系统
一种毫米波放大器时序直流电源的设计
代码生成技术在软件开发中的应用
基于XML的代码自动生成工具
基于模糊自适应控制的接触器过零投切系统研究
基于PIC单片机的恒磁保持交流接触器控制电路
DPBUS时序及其设定方法