定点计算与浮点计算在MCU上的较量:以电机控制系统算法实现为例

在嵌入式系统尤其是电机控制算法的实现过程中,定点计算与浮点计算的选取始终是一个重要议题。电机控制系统对实时性和计算效率有着极高要求,而MCU(微控制器)作为其核心处理器,其计算模式的选择直接影响整个系统的性能。本文将围绕定点计算与浮点计算在电机控制系统软件实现中的应用、优劣势以及具体案例展开讨论。

一、定点计算

定点计算是基于整数或二进制补码表示实数的方法,无需专门的浮点运算单元(FPU),因此在许多低端或资源有限的MCU上广为采用。电机控制算法中的常见参数如电流、速度等,可以通过合适的量化方法转化为定点数进行处理。例如,在PID控制器中,比例、积分和微分环节的各项参数以及中间结果都可以用定点数表达,从而节省存储空间和计算资源。

优点:

硬件开销小:大部分MCU无需内置FPU即可支持定点计算,降低了成本和功耗。

计算速度快:定点运算指令执行周期短,有助于提高实时性。

易于移植和调试:定点计算的实现相对简单,代码兼容性更好。

缺点:

精度受限:定点数表示范围和精度固定,可能因数值范围过小或过大导致计算误差累积。

设计复杂性:需要精心选择合适的量化方式和字长,以平衡精度与资源占用。

此图片来源于网络

二、浮点计算

相比之下,浮点计算提供了较大的动态范围和较高的精度,尤其适合处理涉及大量乘除法和指数运算的复杂电机控制算法。现代高端MCU往往配备了FPU,可以直接支持IEEE 754标准的单精度或双精度浮点数运算。

优点:

高精度计算:浮点数提供动态范围大的表示方法,有利于减小算法误差。

算法实现简洁:无需手动量化处理,简化编程和算法移植。

缺点:

硬件资源消耗大:使用FPU会占用更多硅片面积,增加MCU的成本和功耗。

执行速度相对较慢:浮点运算的指令周期通常比同等功能的定点运算要长,可能影响实时性。

具体案例分析: 在设计一款高性能伺服电机控制器时,如果选择使用低成本、低功耗的MCU,考虑到电机控制算法中的参数调整较为频繁,且对实时性要求较高,采用定点计算或许更为适宜,只需合理设计量化策略以确保足够的精度。而对于一些需要高精度定位和复杂控制算法的场合,如工业机器人关节电机的控制,采用内建FPU的高端MCU,通过浮点计算可以更好地保证算法性能和控制精度。

结论: 定点计算与浮点计算在电机控制系统中的选用,本质上是性能、成本和精度之间的权衡。开发者应根据具体应用场景和MCU资源情况,合理评估计算需求和限制,以实现最优化的电机控制算法实现方案。随着MCU技术的快速发展,未来的芯片设计可能兼顾两者之长,提供更加灵活、高效且能满足多样化需求的计算平台。

三、FPU相关

浮点运算单元(Floating Point Unit, FPU)是计算机处理器中专门处理浮点数运算的部件,它遵循国际标准化组织制定的IEEE 754浮点数标准来执行加、减、乘、除以及其它复杂浮点运算。浮点数相比整数运算更能精确表示较大范围内的小数,是科学计算、图像处理、信号处理等领域不可或缺的基础工具。

原理介绍

浮点运算单元的核心工作原理如下:

  1. 数据表示:浮点数由符号位(表示正负)、指数部(表示数值大小)和尾数部(表示小数部分)组成。FPU负责解析和操作这些部分。

  2. 算术运算:FPU包含专用电路来进行浮点加减乘除运算,这些运算涉及到对指数和尾数的独立处理,包括对齐(对齐尾数以便相加或相减)、相加减、乘法和除法、舍入处理以及异常情况检查(如溢出、下溢、NaN、无穷大等)。

  3. 特殊函数处理:除了基本算术运算,FPU还可能支持其他数学函数,如平方根、三角函数、对数函数、指数函数等。

  4. 流水线处理:现代FPU设计通常采用流水线结构以提高运算效率,即将运算分为多个阶段并在不同时间内并行执行。

成本分析

在计算机硬件设计中,是否配备FPU以及FPU的性能等级直接影响到处理器的成本:

  1. 硬件成本:FPU作为一个额外的硬件组件,增加了处理器的制造成本。它需要更多的硅片面积,这意味着更高的材料成本和工艺难度。越复杂的FPU,其内部结构可能包括更多的晶体管和更先进的电路设计,成本自然越高。

  2. 功耗与散热:高性能FPU往往伴随着更大的功耗,这会影响整个系统的电源管理设计,并可能需要更有效的散热解决方案,间接增加整体系统的成本。

  3. 性能与价格比:尽管增加了成本,FPU却极大地提高了处理器处理浮点运算的能力,对于需要高性能计算的场合来说,这样的投入通常是值得的。在嵌入式系统中,如果任务需求并不涉及大量的浮点运算,则选择不带FPU的处理器可以降低成本。

  4. 市场定位与竞争力:对于高端服务器芯片和图形处理器GPU而言,高效的浮点运算能力是必不可少的,因此厂家愿意投资于更强大的FPU设计,以提升产品在市场上的竞争力。

总结起来,浮点运算单元的设计和集成对处理器性能有着重大影响,而其成本主要包括硬件设计与制造、功耗管理和市场定位等多个维度。在选择是否集成FPU以及何种级别的FPU时,工程师和制造商需根据目标应用需求、市场定位和经济效益做出权衡决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/711069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何定位检查不到的元素

光标离开输入框时,输入框立刻消失,导致无法查看该元素的html标签属性,如何定位这种元素呢?有两种方法,一种是通过事件监听器,另一种是通过网络接口抓包 1、首先定位到搜索按钮 这个搜索的按钮,当…

统计信号处理基础 习题解答10-14

题目: 观测到数据 其中是已知的,是方差为的WGN,且和独立,求的MMSE估计量以及最小贝叶斯MSE。 解答: 观测到的数据写成矢量形式: 其中: 根据题目条件,符合定理10.3,因此…

Qt项目天气预报(1) - ui界面搭建

ui中部 效果演示 ui效果 显示效果 控件列表 配合右图查看 居中对齐-label 设置label居中对齐(别傻傻的空格对齐了) 间距配置 widget03 外围的widget对象: 包含label 和 widget0301,如下图 widget0301 内围的widget对象,如下图 样式表 widget03 …

UFS协议入门-UPIU帧结构

写在前面:本文参考UFS jedec3.1,本文思维导图如下 1. UPIU整体结构 UPIU的结构由帧头和数据两个构成,其中帧头Header为12B,数据data最小为20B,UPIU最小为32B,最大为6500B。如下图所示。 2. UPIU包头结构 对于帧头,固定结构如下图所示,后面分贝介绍每个位的含义。 2.1…

leetcode-09-[232]用栈实现队列[225]用队列实现栈[20]有效的括号[1047]删除字符串中的所有相邻重复项

重点: 栈和队列 Java中 栈不建议用stack来实现 建议用 ArrayDeque和Linkedlist来实现 队列建议用ArrayDeque和Linkedlist来实现 两者效率比较: java - Why is ArrayDeque better than LinkedList - Stack Overflow 基于Linkedlist是链表等,除…

前端学习CSS之神奇的块浮动

在盒子模型的基础上就可以对网页进行设计 不知道盒子模型的可以看前面关于盒子模型的内容 而普通的网页设计具有一定的原始规律,这个原始规律就是文档流 文档流 标签在网页二维平面内默认的一种排序方式,块级标签不管怎么设置都会占一行,而同一行不能放置两个块级标签 行级…

【Python系列】Python 中的日期和时间处理

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

物联网模型

1.1 流模型源码 到OneNote Makefile出错:build/output/paho_c_version 先make clean移除bulid/output内的动态库,再make就会看到出错,将build/output的动态库文件命名以 . so结束,再次make就不会出错了。在sudo make install 安装在usr/local/lib中 修改main.c文件之后,…

PyTorch C++扩展用于AMD GPU

PyTorch C Extension on AMD GPU — ROCm Blogs 本文演示了如何使用PyTorch C扩展,并通过示例讨论了它相对于常规PyTorch模块的优势。实验在AMD GPU和ROCm 5.7.0软件上进行。有关支持的GPU和操作系统的更多信息,请参阅系统要求(Linux&#xf…

将ZED获取的视频格式svo转换成其他格式

引言 svo视频格式是ZED的专属格式,实际应用中我们需要将该格式转化成其他可读的文件格式。 1 安装ZED-SDK 双击打开ZED的视频转化执行文件 "C:\Program Files (x86)\ZED SDK\samples\bin\ZED_SVO_Export.exe" 打开如下所示: 根据上述指示执行转换命令,官网也有…

unity跑酷游戏(源码)

包括:触发机关, 碰到障碍物游戏时间暂停(挂载到障碍物上) 上面需要有碰撞体 游戏物体上需要有标签 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Barrier : MonoBehaviour {p…

【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…

IDEA 配置方法模板无法获取到参数值和返回值(methodParameters()、methodReturnType()获取不到值)

问题现象&#xff1a; 我在 review 同事代码时候&#xff0c;发现方法上有注释&#xff0c;但是注释上又没有方法参数和返回值&#xff0c;这不是IDEA 配置了方法模板就可以自动生成的嘛&#xff0c;我出于好奇去问了下该同事是怎么回事&#xff0c;该同事有点不好意思的说我配…

sslyze一键检查服务器检查服务器的 SSL/TLS 安全性(KALI工具系列二十五)

目录 1、KALI LINUX 简介 2、sslyze工具简介 3、信息收集 3.1 目标主机IP&#xff08;服务器&#xff09; 3.2 KALI的IP 4、操作示例 4.1 扫描主机和端口 4.2 批量扫描 4.3 插件扫描 4.4 输出结果 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺…

pyinstall打包exe报错

1- 报错 Please install pywin32-ctypes. 前提&#xff1a;python安装路径中已经安装了pywin32-ctypes。 运行pyinstaller报错 PyInstaller cannot check for assembly dependencies. Please install pywin32-ctypes. 解决思路&#xff1a; python安装路径下Lib\site-packa…

B3981 [信息与未来 2024] 图灵完备

题目描述 &#xff08;你不需要看懂这张图片&#xff1b;但如果你看懂了&#xff0c;会觉得它很有趣。&#xff09; JavaScript 是一种功能强大且灵活的编程语言&#xff0c;也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换…

gitLab批量下载有权限的项目

前言 参考 https://www.jianshu.com/p/b3d4e5cee835 适用于git私服拉取个人所涉及权限的代码&#xff0c;方便有多个项目权限的人快速拉取自己所有权限的代码。 默认生成目录结构与gitlab一致 步骤一:获取权限你的代码权限文件d 从gitlab私服生成所有你有权限的代码信息 …

三运放仪表放大器通过设置单个电阻器的值来调整增益

从公式 1 中可以看出&#xff0c;我们可以通过调整单个电阻器 R G的值来调整仪表放大器的差分增益。这很重要&#xff0c;因为与电路中的其他电阻器不同&#xff0c; RG的值不需要与任何其他电阻器匹配。 例如&#xff0c;如果我们尝试通过更改 R 5的值来设置增益&#xff0c;…

Echarts图表: 矩形树图都有哪些配置项,一文告诉你

Hello&#xff0c;本期和大家分享矩形树图的配置项&#xff0c;欢迎评论区和贝格前端工场互动交流。 一、矩形树图是什么 矩形树图是ECharts中的一种图表类型&#xff0c;用于展示树形结构的数据。矩形树图通过矩形的大小和位置来表示树形结构中节点的层次关系和数据的大小。…

字典键值对找不到?Python魔法方法__missing__来帮你!

目录 1、__missing__基础介绍 🔍 1.1 什么是__missing__方法 1.2 __missing__在字典子类中的作用 2、场景一:自定义缺失键处理逻辑 🎭 2.1 实现默认值返回 2.2 动态数据加载机制 3、场景二:增强Dict功能 🛠️ 3.1 自动缓存未找到项 3.2 键转换与智能查询 4、场…