徐 颖
(厦门海洋学院 信息系计算机教研室,厦门 361012)
传统的嵌入式系统开发过程大致可分为需求分析、设计、执行、测试与验证4个环节,具有如下特点:每个开发环节孤立地进行,“好似一堵堵的墙”;开发人员不可避免地存在对需求分析与技术规范文档的理解偏差;设计必须通过搭建硬件原型进行,开发资金投入大;实现只能采用手工编程的方式,难度大、效率低、错误多;测试与验证只能在完成原型样机之后才进行,查错与修正的费用巨大,造成潜在的市场风险;对于大型项目,需要众多的开发人员手工编程,并且开发平台也不统一,后期整合难度大,开发周期长等,限制了嵌入式DSP、MSP430单片机等的应用普及。
本文所介绍的基于Matlab的嵌入式系统的开发过程与传统方法并无太大差别,与传统方法比较,具有如下优势:在统一的开发-测试平台上,允许产品从需求分析阶段就开始验证,并做到持续不断的验证与测试;产品的缺陷暴露在产品开发的初级阶段,开发者把主要精力放在算法和测试用例的研究上,嵌人式代码的生成和验证过程则留给计算机完成。本文将通过一个实际应用系统——转差频率控制的异步电动机矢量控制系统来说明基于Matlab模型的嵌入式系统的开发方法。
转差频率控制的异步电动机矢量控制调速系统的原理如图1所示。该系统主电路采用了SPWM电压型逆变器,逆变器所需的PWM由控制器输出。控制器根据设定转速与实际转速之差来控制PWM,从而控制电机的转速,使实际转速可以自动跟踪设定转速。
根据上述系统控制原理,在Matlab-Simulink中建立如图2所示的模型。
系统的控制部分由给定、PI调节器、函数运算、两相/三相坐标变换、PWM脉冲发生器等环节组成。
仿真给定了转速为1 400 r/min时的空载起动过程,在起动后0.45 s时加载TL=65N·m。该系统是比较复杂的系统,收敛是仿真计算中经常出现的问题,经试用各种计算方法,选择了固定步长算法ode5,步长取10e-50。模型仿真的结果如图3所示。
图3 转速变化
前面介绍的控制模型是连续系统的模型,而实际的控制是由DSP来完成的,且大部分的控制器包括DSP都是数字系统,数字系统只能实现离散的控制。另外,利用实时工作站(RealTimeWorkshop)生成代码要求不能包含连续系统的模型,所以必须把连续系统的模型用离散系统的模型替代。
原来的模型中包含连续系统模型的有给定环节、电流电压转换及定子电压矢量转角3个部分,这些模型中包含的连续模型有积分模块、限幅积分模块和微分模块。篇幅所限,这里给出给定环节的离散模型,给定环节中包含了1个限幅积分模型。由于离散系统没有相同的模型,所以用1个积分模型和1个限幅模型来代替原来的限幅积分模型,替换后将限幅模型的上限下限设置成与原模型相同。替换后的模型如图4所示。
图4 给定环节离散模型
模块更换完成之后,再次对系统进行仿真与分析,可以得到同样的结果。这说明离散后控制系统的性能没有损失。
由于目标系统处理器F2812不是浮点处理器,虽然非浮点处理器也可以实现浮点运算,但是以牺牲CPU效率为代价的,为了尽可能提高CPU利用率,可以将模型中的一部分转换成定点模型,之所以是一部分,是因为Matlab模型定点化并不是支持所有的模块。
有2种方法可以将浮点模型转成定点模型进行信号处理:①手动设定字长,再借助Fixed-Point Tool工具检查设置是否满足设计要求,如果在运算过程中变量发生溢出,则用Fixed-Point Tool工具自动定标;②利用Fixed-Point Advisor工具自动定标,再借助Fixed-Point Tool工具进一步优化定标,本文采用了这种方法完成了模型的定点处理。
模型定点化之后,需要对定点的结果进行评估验证,这时可以采用 Fixed-Point Tool。Fixed-Point Tool工具支持对数据进行手动定标以及对定标后的数据和系统性能进行分析。由于前面已经使用Fixed-Point Advisior工具进行了自动定标,这里主要对定标的结果进行性能分析和验证。
分析验证的主要方法是对比定标前和定标后的系统性能。首先选择待记录的数据并对系统进行仿真,以记录数据,这里的记录分2步,分别记录浮点模型的数据(作为对比的参照)和定标后的数据。然后将二者之间进行对比、分析。图5为wr的对比图。从图5中可以看出模型定点化之后,控制的结果几乎是一样的。
图5 wr对比图
在做完前面的工作之后,接下来要准备进行代码生成。Matlab与几大公司合作推出的目标支持包Target Support Package可以为代码生成带来几大便利。
目标支持包支持为各种微处理器、控制器及DSP执行从Matlab模型产生代码。这使用户花费更少的精力在生成代码的修改上,甚至不需要修改就可以在目标系统上执行。利用目标支持包,可以整合周边设备和实时操作系统与Matlab创建的算法模型、Stateflow状态图及Embeded Matlab语言子集,而无需编写驱动程序和运行时的代码。由此产生的可执行文件可应用到嵌入式硬件,进行目标快速原形设计,实时性能分析以及现场生产。
本文中控制系统的输入有电机的转速、接收设定转速,这2个分别用支持包中的QEP和SCI RCV模块来处理,而控制系统的输出用GPIO模块来处理。应用支持包后的控制系统如图6所示。
需要说明的是,如果输入输出在目标支持包中没有对应的模块,可以利用RTW Toolbox或SFunction编写硬件的驱动模块,再将它加入目标支持包中。
图6 应用目标支持包后的控制系统
接下来可以生成代码了,在执行代码生成之前,可以先利用Embedded IDE Link建立Matlab与CCS IDE的连接。这样做的好处是,生成代码的同时会生成对应的工程,并且在CCS显示工程的同时将工程生成可执行文件,通过仿真器下载到DSP中。
将前面生成的可执行代码,通过IDE环境下载到目标板上,将目标板连接到驱动板,驱动板通过电源接入电机。启动电源,可以看到通过Matlab开发的程序可以很好地完成控制任务。开机时将设定转速设为 1 400,电机在1 s内达到1 401,改变设定转速后,电机也可以快速地跟踪设定转速。关掉电源,将一个飞轮接到电机转轴上,再次进行实验,电机在2 s内启动到1 400。实验结果证明,转差率控制的电机控制系统可以较好地实现电机转速控制功能,也可以使电机自适应扭矩的变化,与在模型仿真时的效果一致。
除了上面介绍的之外,在开发过程中,还可以使用model advisor对模型进行检查、使用SIL进行软件在环测试、硬件在环测试。所有这些工具使开发结果的可靠性得到大大提高。
应用Matlab进行系统建模并在此基础上进行程序的开发可以大大提高开发效率,工程师可以将主要精力放在模型的建立上而不是代码的编写上。系统的测试不需要等到产品样例制作完成之后才能进行,而是在开发过程中随时都可以进行。基于模型的开发方式从经济性、可靠性、开发效率上都优于传统方法。
[1]Documentation for MathWorks Products,R2010a[EB/OL].[2010-01-12]. http://www.mathworks.com/access/helpdesk/help/helpdesk.html.
[2]The MathWorks.Inc.Embedded IDE Link 4 User’s Guide For Use with Texas Instruments’Code Composer Studio[Z].[S.l.]:The MathWorks,2009.
[3]The Math Works.Inc.Embedded MATLAB User’s Guide[Z].[S.l.]:The Math Works,2010.
[4]The Math Works.Inc.Real-Time Workshop 7 User’s Guide[Z].[S.l.]:The Math Works,2010.
[5]The Math Works.Inc.Real-Time Workshop Embedded Coder 5 User’s Guide[Z].[S.l.]:The Math Works,2010.
[6]The MathWorks.Inc.Target Support Package 4 User's Guide For Use with Texas Instruments C2000[Z].[S.l.]:The MathWorks,2010.
[7]General Motors Powertrain.Automatic Code Generation Process[EB/OL].[2010-02-03].http://www.mathworks.com/'automotive/iac/presentations/michaels.pdf.
[8]陈阳,徐晓光,陈跃东.基于嵌入式系统的电能采集终端设计与实现[J].重庆理工大学学报:自然科学版,2011(2):97-101.
[9]陈明,全厚德,寇超.嵌入式系统中低速组网协议的研究与设计[J].四川兵工学报,2010(6):74 -76.
[10]蒋承延,贾晅.基于USB的嵌入式远程视频监控系统设计[J].重庆工商大学学报:自然科学版,2009(6):558-562.