主要内容

定点燃油率控制系统

这个例子展示了如何执行浮点和定点燃料的速度控制系统的仿真设计使用仿真软件®和Stateflow®。万博1manbetx控制器利用仿真软件数值类型之间轻松切换浮点和定点仿万博1manbetx真。熟悉燃油率控制模型建模一个容错燃料控制系统

开放和编译模型

sldemo_fuelsys模型是一个闭环系统包含一个“植物”和“控制器”。在这个例子中,植物是根模型和控制器是“fuel_rate_control”子系统。植物是用来不断验证控制器的设计。这种植物也促进了浮点定点类型的转换。最初,浮点仿真的模型配置,如被数据类型显示信号线路。让我们看看前两个级别的数据类型层次结构。

打开sldemo_fuelsys通过fxpdemo_fuelsys和编译图看看信号数据类型。最初,控制器配置为使用单精度的数据类型。

fxpdemo_fuelsys sldemo_fuelsys ([]、[] [],“编译”);sldemo_fuelsys ([]、[] [],“术语”);

查看浮点燃料消耗率控制系统

open_system (“sldemo_fuelsys / fuel_rate_control”);

查看浮点计算气流

open_system (“sldemo_fuelsys / fuel_rate_control / airflow_calc”);

查看浮点计算燃料

open_system (“sldemo_fuelsys / fuel_rate_control / fuel_calc”);

查看浮点控制逻辑

open_system (“sldemo_fuelsys / fuel_rate_control / control_logic”);

现在,让我们把窗户杂乱。

close_system (“sldemo_fuelsys / fuel_rate_control / airflow_calc”);
close_system (“sldemo_fuelsys / fuel_rate_control / fuel_calc”);
close_system (“sldemo_fuelsys / fuel_rate_control / control_logic”);hDemo.rt = sfroot; hDemo.m = hDemo.rt.find (“是”,“万博1manbetxSimulink.BlockDiagram”);hDemo.c = hDemo.m.find (“是”,“Stateflow.Chart”,“——”,“名字”,“control_logic”);hDemo.c.visible = false;
close_system (“sldemo_fuelsys / fuel_rate_control”);

从浮点数据类型转换到定点

定点顾问是利用从浮点转换控制器实现一个等价的定点实现。看到fxpdemo_fpa细节的定点顾问。您还可以优化和探索定点设计使用定点工具。看到fxpdemo_feedback为定点工具的细节。

植物模拟使用双精度的数据类型。如前所述,“fuel_rate_control”子系统配置,这样很容易在浮点和定点数据类型之间进行切换。这是通过配置块引用仿真软件MATLAB®工作区中的数值类型。万博1manbetx

这个模型使用四个落下的石块的计算:

  • u8En7 (unsigned 8位二进制点7扩展)

  • s16En3(签署了16位二进制点3扩展)

  • s16En7(签署了16位二进制点7扩展)

  • s16En15(签署了16位二进制点15缩放)

在MATLAB®工作区中查看这些对象。

u8En7s16En3s16En7s16En15
类属性名称大小字节s16En15 1 x1 91仿真软件。万博1manbetxNumericType s16En3 1 x1 91万博1manbetx仿真软件。NumericType s16En7 1 x1 91万博1manbetx仿真软件。91 Simulink.NumericType N万博1manbetxumericType u8En7 1 x1

浮点仿真的数值类型设置为单精度。的DataTypeMode属性模型数字对象设置为使用“单”。万博1manbetx此外,您可以设置双。

u8En7 = fixdt (“单一”);s16En3 = fixdt (“单一”);% #好吧s16En7 = fixdt (“单一”);% #好吧s16En15 = fixdt (“单一”);% #好吧disp (u8En7)
NumericType属性:DataTypeMode:‘单身’IsAlias: 0 DataScope:“汽车”HeaderFile:描述:“

模型配置日志顶层信号,仿真数据,仿真的结果存储到工作空间变量sldemo_fuelsys_output。我们会保存在hDemo仿真的结果。flt_out为以后与定点仿真进行比较。

set_param (“sldemo_fuelsys”,“StopTime”,“8”)sim卡(“sldemo_fuelsys”)hDemo。flt_out = sldemo_fuelsys_output;

切换到一个定点仿真模型数值类型设置为定点值。万博1manbetx具体来说,DataTypeMode被设置为使用二进制扩展点。

u8En7 = fixdt (0 8 7);s16En3 = fixdt(1、16日3);s16En7 = fixdt(7) 1, 16日;s16En15 = fixdt(15) 1, 16日;disp (u8En7)
NumericType属性:DataTypeMode:“定点:二进制点缩放”Signedness:“无符号”字:8 FractionLength: 7 IsAlias: 0 DataScope:“汽车”HeaderFile:描述:“

重新运行定点的仿真实现。你可以看到定点数据类型的信号。我们会在hDemo.fxp_out存储仿真的结果。

如果~ hasFixedPointDesigner () DAStudio.error (“万博1manbetx模型:fixedandfloat: FxDLicenseRequired”);结束sim卡(“sldemo_fuelsys”)hDemo。fxp_out = sldemo_fuelsys_output;

查看定点燃油率控制系统

open_system (“sldemo_fuelsys / fuel_rate_control”);

查看定点气流计算

open_system (“sldemo_fuelsys / fuel_rate_control / airflow_calc”);

查看定点计算的燃料

open_system (“sldemo_fuelsys / fuel_rate_control / fuel_calc”);

比较浮点和定点的结果

让我们来比较一下结果的模拟燃料流量和空气燃料比。

图(“标签”,“CloseMe”);次要情节(2,1,1);情节(hDemo.flt_out.get (“燃料”). values。时间,hDemo.flt_out.get (“燃料”).Values.Data,的r -);持有情节(hDemo.fxp_out.get (“燃料”). values。时间,hDemo.fxp_out.get (“燃料”).Values.Data,“b -”);ylabel (“FuelFlowRate (g /秒)”);标题(“燃油控制系统:浮点和定点比较”);传奇(“浮”,“固定”轴([0 8。2.25]);次要情节(2,1,2);情节(hDemo.flt_out.get (“air_fuel_ratio”). values。时间,hDemo.flt_out.get (“air_fuel_ratio”).Values.Data,的r -);持有情节(hDemo.fxp_out.get (“air_fuel_ratio”). values。时间,hDemo.fxp_out.get (“air_fuel_ratio”).Values.Data,“b -”);ylabel (空气/燃料比的);包含(的时间(秒))传说(“浮”,“固定”,“位置”,“东南”轴([0 8 11 16]);
当前情节举行当前情节

使用一个灵活的数据类型策略

你已经看到,一个模型可以配置为使用仿真软件之间切换浮点和定点数据数值类型。万博1manbetx在一个闭环模型,比如这个,必须注意这样的灵活性。在本例中,数据被转换为双精度和使用数据类型转换从植物块。两岸的控制器,输出模块将数据类型的转换通过反向传播继承:继承。这使得控制系统与植物改变数据类型的实现而不冲突的数据类型。

仿真软件总线信号的特殊考虑万博1manbetx

还值得注意的是仿真软件总线的数据类型的配置对象中使用这个模型:EngSensors。万博1manbetx单独的总线元素指定数据类型使用相同的模型数值正如以前讨论的对象。万博1manbetx这车有四个元素。

disp (EngSensors.Elements (1) disp (EngSensors.Elements (2) disp (EngSensors.Elements (3) disp (EngSensors.Elements (4))
BusElement属性:名称:“节流”复杂性:“真实”的维度:1数据类型:‘s16En3分钟:[]马克斯:[]DimensionsMode:“固定”单元:“度”描述:“BusElement属性:名称:“速度”复杂性:“真实”的维度:1数据类型:‘s16En3分钟:[]马克斯:[]DimensionsMode:“固定”单元:rad / s的描述:“BusElement属性:名称:“自我”复杂性:“真实”的维度:1数据类型:‘s16En7分钟:[]马克斯:[]DimensionsMode:“固定”单元:“V”的描述:“BusElement属性:名称:“地图”复杂性:“真实”的维度:1数据类型:‘u8En7分钟:[]马克斯:[]DimensionsMode:“固定”单元:酒吧的描述:“

视图控制器输入转换

数据类型转换块隔离装置的控制器。样品时间也从连续到离散使用汇率转换过渡块。

open_system (“sldemo_fuelsys /控制器”)

视图控制器输出的转换

数据类型转换块隔离控制器的工厂。样品时间也从离散连续时间使用汇率转换过渡块。

open_system (“sldemo_fuelsys /植物”)

关闭模式,相关数据和工作空间变量的例子

close_system (“sldemo_fuelsys”,0);关闭(findobj (0,“标签”,“CloseMe”));清晰的hDemo

闭幕词

您可以生成生产使用嵌入式C / c++代码编码器®。相关使用sldemo_fuelsys定点的例子,看看