SL定标杂记

最近在学习Simulink的定标,下面记录一下方法,以备以后之用。

以下图为例,双击Kp 增益,定位到第2个选项卡【Signal Attributes】

SL定标杂记_第1张图片


然后再输出类型中选择fixdt(1,16,2^0,0),然后点击右侧带》的按钮,可进行详细设置。


SL定标杂记_第2张图片

fixdt(1,16,2^0,0)这里面参数的含义如下:

第一位:1:代表有符号,即Signed;0:代表无符号,即Unsigned。

第二位:代表数据的位数,这里选择16位长度,通常可以设置为8、16、32位长度。

第三位:代表数据的精度(或分辨率),其中2^-3=0.125,数据精度为0.125。

第四位:代表数据范围的偏移量,一般为0。

当数据位数和数据精度确定后,所能表示的数据范围也就能确定了。16位无符号的范围为0~65535,有符号的范围是-32768~32767,由于精度为0.125,因此所表示的数据范围为-4096~4095.875,这些表示范围在下面的Fixed-point details里已经给计算好了,如果修改上面数值后,可以点击Refresh Details来刷新。

数据范围的确定往往需要根据输出量来确定,比如这个例子中假如输入量范围是(-100~1100),由于该模块是增益模块,本身还会有一个数值,假设增益的值范围是(0~2),则输出量的范围是(-200~2200)。如果自己不确定上面fixdt(1,16,2^0,0)里的参数给如何填,可直接在下图的Output minimum和Output maximum中填入输出值的范围,然后点击下方的Calculate Best-Precision Scaling按钮,就会自动为你选出最佳参数,但这个值往往不是整数,而是带有小数点的值,因此一般还是手动计算好了,至于偏移量,一般用0。

SL定标杂记_第3张图片

最后一点,定标后生成的代码不能直接在单片机中运行,由于在模型中已经定标了,因此底层变量入口需要对应的乘上相应的精度的倒数才可以。


以上面模型为例,假设输入量Input为整型,在整个运算过程中需要进行浮点运算,最终输出量也为整型。将代码生成后,在CW里运行,假设初值x=1000;输出量y实际依然是拥有精度的值,需要在底层除上该精度(2^3,即2^-3的倒数)的倒数,才是最终结果。


SL定标杂记_第4张图片


你可能感兴趣的:(Simulink杂记)