0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FOC之定点小数运算

fcsde-sh 来源:未知 作者:胡薇 2018-07-11 15:10 次阅读

许多MCU 芯片只支持整数运算,如果要在这些芯片上进行小数运算,定点运算应该是最佳选择了;此外即使芯片支持浮点数,定点小数运算也是最佳的速度选择。所谓定点小数运算,就是将小数点位置固定,用整数的方式来进行运算;由于小数点的位置是固定的,所以就没有必要储存它。既然没有储存小数点的位置,那么计算机当然就不知道小数点的位置,所以这个小数点的位置是我们写程序的人自己需要牢记的。那么,如何将小数表示成整数呢?

处理器整数以二进制形式存储,首先要了解如何将小数转换成二进制!假定MCU 是16位,因最高位是符号位,那么有效位就只有15位(不考虑符号则16位)。即小数点之后可以有0~15 位。我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12 格式的定点小数,而Q0就是我们所说的整数:

以Q12 格式为例,Q12 的正数的最大值是0111.111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢? 请看下面的运算:

对于Qn格式的定点小数的表达的数值就它的整数值除以2^Qn。在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。反过来把一个实际所要表达的值x 转换Qn 型的定点小数的时候,就是x*(2^ Qn)了。例如0.2 的Q12 型定点小数为:0.2*(2^12) =819.2,由于这个数要用整数储存, 所以是819 即0x0333。因为舍弃了小数部分,所以0x0333 不是精确的0.2,实际上它是819/2^12=0.199951171875,非常接近0.2 了。

因此我们可以归纳出一个公式,假定x 表示实际的小数, q表示这小数在MCU 中的Qn 型定点小数,则有:

由以上公式我们可以很快得出定点小数运算法则:

加减法和一般的整数运算相同,而乘除法的时候,为了使得结果的小数点位不移动,对数值进行了移动(乘除2^Qn实际是将被乘除数左或右移动n位):

q3 = q1 * q2 / (2^Qn) ---> q3 = (q1 * q2 )>>Qn

c语言来写定点小数的乘法就是:

short q1,q2,q3;

....

q3=((long q1) * (long q2)) >> n;

由于/ 2^Qn 和* 2^Qn可以简单的用移位来计算,所以定点小数的运算比浮点小数要快得多。下面我们用一个例子来验证一下上面的公式:用Q12来计算2.1 * 2.2,先把2.1, 2.2转换为Q12 定点小数:

2.1 * 2^12 = 8601.6 = 8602

2.2 * 2^12 = 9011.2 = 9011

(8602 * 9011) >> 12 = 18923

18923 的实际值是18923/(2^12) = 4.619873046875 和实际的结果4.62相差0.000126953125,对于一般的计算已经足够精确了。好了,话不投机半句多,说了这么多,最终还是要用实例代码来形象的指出如何实现定点运算。

MCU 实例

用硕呈16BIT-MCU 实现一组数据乘以0.492,这组数据是:

100*0.492=49.2

105*0.492=51.66

147*0.492=72.324

350*0.492=172.2

860*0.492=423.12

458*0.492=225.336

步骤一,先确定小数,0.492属于小于“1”的小数;且乘数与被乘数符号都为正,为了提高精度,可以考虑使用Q16 格式;因此将0.492转换成定点小数有:

步骤二,编写如下代码:

在地址0x00F0 处,设定运算为无符号乘以无符号运算。

地址0x00F1 处,将Q16 小数送入MX 寄存器

地址0x00f4~0x00f8 处,利用循环计算出_MUL_表格中列出的数据,并将结果存到I0指向的缓冲中(MR1 是计算结果的整数位,MR0 是计算结果的小数低位)。

计算结果请查阅以下表格:

如果运算不需要小数部分(即运算结果取整),则"MCU 运算结果"中的数值均需要向右移动16位去掉小数部分;在代码中,用户可以直接取MR1的数字做为整数结果(假如不考虑四舍五入)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343676
  • FOC
    FOC
    +关注

    关注

    20

    文章

    303

    浏览量

    42181

原文标题:一步步解剖FOC之定点小数运算!

文章出处:【微信号:fcsde-sh,微信公众号:fcsde-sh】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于牛顿迭代法的FPGA定点小数计算

    倒数算法的HDL实现,只需要进行一次到两次迭代便可获得相对精确的结果。在一些实时图像处理场合中,对算法的运算速度和Latency要求较高,因此可以采用定点小数适当地降低精度以获得更高的性能。
    发表于 07-18 07:33

    【每日一知识点】如何在没有浮点运算的单片机中,更高效快速的进行小数运算

    许多 MCU 芯片只支持整数运算,如果要在这些芯片上进行小数运算,那么该如何高效滴、快速滴、计算呢? 定点小数
    发表于 03-16 11:02

    浮点运算定点编程看完你就懂了

    详解浮点运算定点编程  
    发表于 04-02 06:59

    定点dsp浮点运算教程

    定点dsp浮点运算的多媒体视频教程:
    发表于 01-24 09:14 50次下载
    <b class='flag-5'>定点</b>dsp浮点<b class='flag-5'>运算</b>教程

    DSP芯片的定点运算

    DSP芯片的定点运算3.1 数 的 定 标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围
    发表于 04-06 14:07 33次下载

    定点小数的表示方法

    定点小数的表示方法   定点小数,是指小数点准确固定在数据某个位置上的小数,从实用角度看,都把
    发表于 10-13 17:12 7952次阅读

    定点小数的编码方法

    定点小数的编码方法  用定点小数引出数值的三种编码(原码、补码和反码)方法是最方便的。   (1) 原码表示法,是用机器数的最高一位代表符号,以下各位
    发表于 10-13 17:19 3086次阅读
    <b class='flag-5'>定点</b><b class='flag-5'>小数</b>的编码方法

    定点DSP,定点DSP是什么意思

    定点DSP,定点DSP是什么意思 定点DSP完成的是整数运算小数运算,数值格式中不包含阶码,
    发表于 03-26 14:56 2269次阅读

    DSP芯片的定点运算

    DSP芯片的定点运算,虽然浮点运算逐渐流行,不过定点依然有强大的市场
    发表于 06-17 16:33 7次下载

    定点DSP C55X实现浮点相关运算解析

    引 言 DSP结构可以分为定点和浮点型两种。其中,定点型DSP可以实现整数、小数和特定的指数运算,它具有运算速度快、占用资源少、成本低等特点
    发表于 11-02 11:26 2次下载
    <b class='flag-5'>定点</b>DSP C55X实现浮点相关<b class='flag-5'>运算</b>解析

    一文了解FPGA浮点小数定点小数的换算及应用

    定点小数运算 有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。 所谓定点
    的头像 发表于 06-28 15:49 6363次阅读

    DSP第6章 DSP芯片的定点运算

    数的定标即指人为确定小数位置,以便实现定点运算
    发表于 04-04 17:12 5次下载
    DSP第6章 DSP芯片的<b class='flag-5'>定点</b><b class='flag-5'>运算</b>

    LM4F定点格式于浮点格式的对比和浮点运算的应用详细中文资料

    定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,
    发表于 05-09 11:40 11次下载
    LM4F<b class='flag-5'>定点</b>格式于浮点格式的对比和浮点<b class='flag-5'>运算</b>的应用详细中文资料

    FPGA定点小数的常规格式、相对于浮点小数的优势与劣势和计算的概述

    所谓定点小数,就是小数点固定地隐含在某一位置上的数据。由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了
    的头像 发表于 06-12 19:34 8969次阅读
    FPGA<b class='flag-5'>定点</b><b class='flag-5'>小数</b>的常规格式、相对于浮点<b class='flag-5'>小数</b>的优势与劣势和计算的概述

    浮点与定点运算以及数据定标和精度问题

    计算机体系结构中浮点和定点数据的表示 1、定点数: 定点数指小数点在数中的位置是固定不变的,通常有定点整数和
    的头像 发表于 12-06 10:00 2821次阅读