首页/文章/ 详情

GCKontrol实现定点计算

2年前浏览654

01


             

定点计算概念


       
在不同的处理器中,根据计算方式的不同,可分为浮点计算与定点计算。顾名思义,浮点计算在计算过程中,小数点的位置是变动的,定点计算小数点的位置则不变。        

       
浮点计算的优点是表示数的动态范围大,精度也可以很细;缺点是有一些处理器不支持浮点计算,并且计算过程也很复杂。        

       
定点计算的优点是运算速度快,硬件相对简单;缺点是计算过程中容易溢出,产生误差。        

       
GCKontrol支持对硬件的定点计算,在实现动态系统时(如控制系统或数字滤波器),由于时间或内存大小的限制,通常不采用浮点软件仿真。所以在对二元整数值进行定标,需采用定点数学。        

       
1.1基本功能        

       
GCKontrol的定点数描述:在硬件中,数字以二进制形式存储。二进制是固定长度的二进制(1和0)序列。硬件组件或软件函数解析1和0序列的方式由数据类型说明。定点数据类型和  GCKontrol内置整数类型之间会有区别。其中之一就是,内置整数数据类型只代表整数,而定点数据类型还包含二进制小数点位置或数字定标信息。        

       
二进制数以定点或浮点数据表示。GCKontrol的定点数据类型将具备这三个特征:字大小以位为单位、二进制小数点位置,以及符号位(有/无符号)。二进制小数点的位置用来定标和解释定点值。定点数据类型可以是整数、小数或广义定点数。这三种数据类型之间的主要区别是默认二进制小数点的位置。        

       
定点值的动态范围小于字长相同的浮点值。为避免溢出并最大限度地减少量化误差,必须对定点数进行定标。        

       
1.2定点计算公式        

       
GCKontrol支持由二进制小数点来定标的定点数据类型,可指定任意线性定标。物理值与整数值换算公式如下:        

       
物理值=             ×整数值 offset        

       
其中,n为定标值,offset为偏移,两者可在GCKontrol软件中进行配置,配置后软件将自动换算对应的最值范围。        

       
1.3定点计算精度        

       
GCKontrol定点数的精度是其数据类型和定标可表示的连续值之间的差值,等于其最低有效位的值。最低有效位的值(因此也是数字的精度)由小数位数决定。定点值的误差小于等于其数据类型和定标所确定精度的一半。        

       
例如二进制小数点右侧具有四位的定点表示的精度为             (即 0.0625),这是其最低有效位的值。此数据类型和定标范围内的任何数字的误差都小于等于             (即 0.03125),即精度的一半。        

       
舍入方法:        

       
有限精度表示数字,并不是可用范围内每个数字都可精确表示。如果数字不能由指定的数据类型和定标值精确表示,则使用舍入方法将该值转换为可表示的数字。虽然在舍入操作中会丢失一定的精度,但计算成本和偏置量取决于舍入方法本身。        

       
1.4定点计算范围        

       

类型                

说明                

值的范围                

int8

有符号8位整数

                 到                 

uint8

无符号8位整数

0到                 

int16

有符号16位整数

                 到                 

uint16

无符号16位整数

0到                 

int32

有符号32位整数

                 到                 

uint32

无符号32位整数

0到                 

int64

有符号64位整数

                 到                 

uint64

无符号64位整数

0到                 


       

       

02


         

基本操作


       
在GCKontrol的建模过程中,我们支持对特定的一些模块进行输出信号属性设置,并且全局参数也支持一样的设置。        
       

       

图1 常量模块属性设置1        

       
如上图,常量模块属性设置第三项可以设置输出的信号属性,若选择Auto,则输出的信号属性默认按照GCKontrol对于不同种类模块定义的特殊规则去输出。        

       

图2 常量模块属性设置2        

       
如上图,常量模块输出的信号属性可以按照需求去自定义输出,若不勾选定点计算,则输出为当前数据类型的纯整型输出。若勾选定点计算,则用户可以配置模块输出的定标与偏移,根据定标和偏移GCKontrol自动计算出对应的最值范围。相反的如果用户去定义最值范围,GCKontrol也会自动计算出此时与之对应的定标和偏移。        

       

图3 显示信号属性        

       
如上图,配置好输出信号属性后,可以在菜单栏的数据下方,勾选“显示信号属性”,模块输出端口的右下方就会显示出当前信号流上的信号属性。        

       

图4 显示整数值        

       
运行仿真后,数据标签支持展示对应的物理值和整数值,便于调试。        

       

图5 全局参数配置整数类型        

       
同样的,在全局参数中,也可以有相同的配置,使用方式也一样,如上图可知,运行结果一致。        

       

       

03


         

应用案例——PMSM电机(定点计算)


       
在之前的《用GCKontrol实现永磁同步电机控制的示例工程》(点击蓝字即可跳转查看文章)文章中介绍了永磁同步电机(PMSM)的功能原理和如何使用GCKontrol实现PMSM的过程。对于定点计算,在原始工程中,将dq到abc变换里的表达式模块拆分,如下图:        

       

图6 坐标变换        

       
外部输入的d轴电压、q轴电压和转子角度theta分别从double的数据类型,使用数据转换模块,将double类型的数据转换为int16的数据类型。根据原始工程数据,可以得知这三个变量的数据区间,将d轴电压和q轴电压定标设置为5,将转子角度的定标设置为12(其他模块统一使用数据类似为int16,定标为5的信号属性)。        

       

图7 theta角的信号属性        

       
运行仿真后,我们可以使用数据标签来查看当前信号流上的数据,下图为某一时刻的物理值:        

       

图8 物理值        

       
下图为同一时刻的整数值:        

       

图9 整数值        

       
在导出配置中,也可以导出对应的物理值或整数值:        

       

图10 导出csv        

       
根据以上配置,运算出abc的数据。最终将abc输出的整数数据转换为double类型的数据,继续传输到工程中。        

       

图11 定点计算模块        

       
以上展示的只是部分支持定点计算的模块,若需要了解更多定点计算概念以及模块支持情况,请查看GCKontrol帮助手册《定点计算》章节。        

       
下图为原始工程浮点计算的部分重要数据结果与定点计算下同样的数据结果图片比较:        

       

图12 浮点计算结果        

       

图13 定点计算结果        

       
可以看到GCKontrol实现的定点计算运算结果与浮点计算结果几乎一致。        

       

       

04


         

实际应用


       
在GCKontrol中我们证明了,浮点运算可以转换为定点运算,并且两种运算的仿真结果匹配度极高。在复杂的系统集成场景下,GCKontrol支持生成定点计算的C代码,将代码在嵌入式系统中运行,编译到嵌入式系统(比如STM32),最终应用在总线板卡、控制器、芯片和示波器等硬件上,去耗费极少的时间,占用较少的资源,进行高效的仿真。        
汽车芯片电机控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-09-29
最近编辑:2年前
世冠科技
国内领先的系统仿真工业软件和数...
获赞 25粉丝 17文章 142课程 1
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈