最近小编看到大家都在讨论基于MATLAB的控制系统实时仿真平台设计相关的事情,对此呢小编也是非常的感应兴趣,那么这件事究竟是怎么发生的呢?具体又是怎么回事呢?下面就是小编搜索到的关于基于MATLAB的控制系统实时仿真平台设计事件的相关信息,我们一起来看一下吧!
(资料图片)
硬件在回路平台的实现
平台结构
图1是控制系统硬件在回路仿真平台的结构框图,整个平台由一台PC机、一台工控机和一台DSP及相关通信和数据采集设备组成。
(1)PC机为宿主机,运行Windows系统和MATLAB软件,宿主机在仿真前完成控制算法的设计,在Simulink下进行控制器的软件在回路仿真验证,对控制算法模块和对象模块进行分离并执行自动代码生成,通过以太网完成链接、下载;仿真过程中,宿主机对控制器和对象仿真机进行实时监控、在线调参和数据记录;仿真结束后进行数据的整理分析。
(2)工控机作为目标机,由工业控制计算机及配套的ISA总线结构的数据采集卡组成,运行的是对象数学模型来模拟被控对象的运行过程。为了保证程序执行的实时性,同时更方便、快速地组建仿真系统并满足监控仿真过程的需求,发动机仿真机采用xPC目标环境。
(3)控制器是基于TMS3202812 DSP芯片的开发板,运行控制算法,通过D/A模块向工控机发送控制信号并通过A/D模块从工控机接收对象的状态。
本文主要的研究工作就是围绕着基于DSP和xPC Target的平台的构建和实现展开。
DSP的自动代码生成实现
平台中的F2812 DSP开发板包括16路A/D转换通道,其拥有12位分辨率、80ns转换时间、0~3V量程;在板集成4个12位分辨率、 10V量程的D/A通道。针对该DSP开发板,MATLAB/RTW工具箱提供了包括A/D、D/I、D/O等相关元件在内的驱动程序支持包Target Support Package TC2,能够通过自动代码生成技术完成生成编译和下载。
在此过程中,有两部分关键工作:
S函数的封装
由于2812系列DSP芯片本身没有D/A转换模块,MATLAB/Simulink并未提供2812系列DSP的D/A驱动程序模块。这就要根据DSP开发板生产商提供的C代码的D/A模块驱动程序,利用S-functions进行封装,以便得到通用的、能直接使用的Simulink模块。
S函数提供了一个C、C++、Ada、Fortran等代码和Simulink模块之间的接口,用来实现对模块的编程。通过S-函数创建的模块具有与Simulink模型库中的模块相同的特征[5]。其基本步骤如下:
(1)编写S函数接口文件,也就是将厂商提供的C形式的D/A驱动代码按照S-Function要求的格式进行改写,相关函数及流程如图2。
(2)接口文件的编译:将编写好的接口文件保存为DSPDA.cpp,使用命令MEX DSPDA.cpp进行编译,生成DSPDA.mexw32文件,如图3所示。
(3)S函数封装:此步骤需将Simulink->User-Defined Functions的S-Function模块与S函数接口文件名进行关联,并在S-Function Parameters中添入D/A模块的3个输入参数(通道选择、电压范围选择和采样时间)。
(4)添加自定义模型库:创建slblocks.m文件,并利用blkStruct.Name和blkStruct.OpenFcn函数完成程序的编写,将S函数模块添加到Simulink模块库。
(1)分析模型和对模型描述文件进行编译
RTW分析用户的Simulink图形模块.mdl,计算模块参数,递推采样时间、确定模型各模块的执行次数等信息,并把模型编译成以model.rtw为文件名的中间描述文件。
(2)目标语言编译器(Target Language Compiler)将模型描述文件.rtw转换为指定目标代码的解释性编程语言。
(3)生成自定义联编文件(makefile)
针对不同的目标环境,根据系统模板联编文件(Template Makefile)生成自定义联编文件model.mk。
(4)生成可执行程序
RTW将调用联编实用程序make unity,对生成的联编文件.mk,进行编译、链接,转化为可以在目标环境中运行的.exe文件。
摘要:针对现有控制系统设计方法开发周期长、费用高的问题,本文利用基于模型的软件开发方式,以DSP和工业控制计算机为硬件,构建了能够实现Simulink模块自动代码生成的、能完成针对任何复杂对象控制仿真的控制系统硬件在回路仿真平台,解决了S函数封装、控制应用程序模块连接等关键问题,同时以直流电机速度控制为例,在完成Simulink全数字仿真的基础上,利用该仿真平台进行了半物理仿真,仿真结果证实了该平台的有效性。
控制系统开发的一般流程是设计人员进行对象建模、控制算法设计、离线全数字仿真,之后将验证过的控制算法于真实控制器中手动编程实现并进行硬件在回路的半物理仿真,这就涉及到代码编写、软件校验测试等工作,整个开发过程设计繁杂、周期长且调试困难[1-2]。
随着越来越多成熟的软件工具的出现,以自动代码生成技术为代表的基于模型的软件开发方法逐渐兴起,让算法到嵌入式实时C代码的生成一次成功,避免传统开发要重复多次才能成功的弊端。而MATLAB/RTW工具更是以其可靠性高、组建灵活等特点在众多能实现自动代码生成的软件中优势明显。
本文正是利用MATLAB/RTW构建了适用于任何复杂被控对象的硬件在回路仿真系统,该系统能够实现DSP/工控机环境下Simulink模型自动编译与下载、仿真参数在线修改、仿真数据实时存储等功能,以直流电机速度控制位对象的仿真结果也证实了该平台的有效性。
RTW与自动代码生成
RTW(Real-time Workshop)是MATLAB的重要组成部分[3][4],或者说是一个基于MATLAB/Simulink的自动代码生成环境,它能直接从Simulink仿真模型中产生优化的、可移植的和个性化的代码,并根据目标系统配置自动生成多种环境下的可执行程序,支持的硬件包括如DSP、x86、PowerPC等系列CPU构建的计算机,软件平台如DOS、Windows、VxWorks、xPC、Linux等操作系统,甚至可以独立运行于裸机上。利用RTW和自动代码生成技术能够避免软件开发人员手工编制、调试程序这一复杂、反复的过程,从而缩短研发周期,提高产品质量。RTW的工作流程可分为四步:
DSP控制程序的构建
利用上文封装的D/A模块和MATLAB提供的DSP板A/D驱动模块,再加上针对不同对象设计并完成全数字仿真验证的控制算法模块,可进行DSP控制程序模块的构建。
其中DSP的AD转换模块包括软件启动方式、EVA\EVB以及外部引脚方式等多种启动方式,而利用事件管理器(EV)中的通用定时器GP启动ADC无疑是最直接的,借助通用定时器,利用其下溢、周期匹配和比较匹配等多种模式可产生触发ADC信号,只需在MATLAB提供的C281x PWM模块的ADC Start Event和Waveform period中做出相应设置即可,如图4所示。需要注意的是,DSP的AD模块完成输入信号的模数转换之后,会将结果存放于DSP处理器的结果寄存器中[6]。这就需要由CPU定时读取结果寄存器,此间隔时间可在如图5所示的ADC模块参数设置的Sample time一项中予以指定。
工控机的自动代码生成实现
xPC目标
xPC Target是MathWorks公司提供和发行的一个基于RTW体系框架的附加产品,可将Intel 80x86/Pentium计算机或PC兼容机转变为一个实时系统,该目标系统与MATLAB/Simulnk无缝集成,支持大多数Simulink模块的实时代码生成,同样提供了包括研华在内的众多I/O板卡的驱动模块,在该目标环境下可对目标机运行程序进行在线调参,实现数据实时显示和记录,是用于产品原型开发、测试和配置实时系统的PC机解决途径[7]。
针对xPC目标的工控机代码生成
本系统中的被控对象仿真机使用研华工控机,并通过ISA总线的、包含有16路A/D通道和2路D/A通道的研华PCL-812PG数据采集卡与DSP控制器的A/D和D/A连接实现数据传输。
(1)要实现工控机的自动代码生成,首先应在工控机中启动xPC Target目标环境:MALTAB软件为xPC目标环境提供了包括需要外加启动盘的Bootfloppy\Dosloader方式、CDBoot方式和通过网络连接启动的NetworkBoot方式等在内的多种启动方式。本系统以U盘为载体、采用Dosloader方式启动目标环境,这就要先利用USBoot软件将U盘制作为DOS启动盘,再借助xPC目标浏览器(xPC Target Explorer)配置目标机相关参数(启动方式、通信模式等)并将目标环境设置的相关文件拷贝到做好的DOS启动盘上从而完成xPC Target目标启动盘的制作。
(2)工控机应用程序开发
MATLAB为xPC目标系统提供了包括本系统所使用的研华PCL-812PG数据采集卡在内的A/D、D/A、D/I、D/O、RS-232、ARINC429等模块的Simulink驱动程序模块。利用提供的A/D与D/A驱动模块,结合被控对象模型即可构建如图6的被控对象仿真机应用程序模块并进行代码的生成和下载。同时,还可以通过xPC目标浏览器与目标机进行连接,对仿真时的数据进行记录和导出。
实验验证
为了对所构建的硬件在回路仿真系统性能进行验证,本文以直流电机为对象,在利用系统辨识方法建立如式1的速度离散化模型(以电压为输入、以测速发电机转速所对应的实测电压为输出)的基础上,确定其离散PID控制器参数kp/ki/kd分别为0.5/4/0.01,并在PC机下进行了以幅值为2的阶跃信号为输入的MATLAB全数字仿真。从如图7所示的仿真结果可以看出,闭环系统调节时间大约为1秒,没有稳态误差,而且当系统在第3秒加入一个幅值为0.1的干扰时,系统在控制器的作用下能够在0.5秒内克服干扰的影响,证实了该控制算法的性能。
为了进一步验证控制系统性能,将构建的对象仿真机和控制器的应用程序借助RTW实现自动代码生成和下载,并进行期望值为2V时的硬件在回路仿真,仿真结果如图8所示。显然,与全数字仿真结果相比,硬件在回路仿真的输出仍能较好的跟踪输入信号,上升过程较平稳,调节时间1.5秒,比全数字仿真略长,稳态值存在最大幅值2%的轻微波动。总体看来,控制效果较全数字仿真略有下降,而起因是由于硬件在回路仿真系统中,信号在DSP和工控机之间进行A/D和D/A转换过程的精度和能量损失。
结论
本文在解决了S函数封装、应用程序模块构建等问题的基础上,以DSP与工控机为核心、构建了能实现任何复杂对象控制器仿真验证的、基于MATLAB/RTW和自动代码生成技术的硬件在回路仿真系统。针对电机对象模型和控制算法的硬件在回路仿真结果证实了由于A/D、D/A转换的精度损失,相比于全数字仿真该平台性能有轻微下降,但硬件平台的性能仍然是可靠有效的。
参考文献:
[1] 齐振恒,孙中杰,李涛. RTW嵌入式代码自动生成机制与代码结构分析[J].计算机测量与控制,2010,18,(3):639-642
[2] 侯跃恩.基于DSP的伺服控制系统设计与实现[D].武汉理工大学,2009
[3] 李根,唐臻宇,耿海翔,金佛荣.基于MATLAB/RTW的控制系统一体化新型设计方法[J].中国测试,2010,36,(1):75-78
[4] MATLAB User"s Guide Version 7.5[R].The Math Works Inc,2007
[5] 程雪飞,王强,彭继慎.基于S函数的专家PID控制器的实现[J].仪器仪表用户,2006,13(2):86-87
[6] 苏奎峰,吕强,常天庆,张永秀. TMS320X281X DSP原理及C程序开发[M].北京航空航天大学出版社,2008
[7] 进兵.基于xPC Target的无人机飞行控制软件快速原型设计[D].南京航空航天大学,2009