编者按:在电力电子控制应用中,优化控制算法的代码,是开发人员常常要考虑的问题。在更多的时间内执行更多的算法,就意味着更高的控制频率和更快的系统响应。下面这篇文章来网络,很全面的总结了在电机控制中如何优化算法,也根据不同的处理器自带的协处理器或者硬件指令进行调整。
引言
电机控制应用设计传统上采用微控制器(MCU)或数字信号处理器(DSP)来运行电机控制算法。在研究永磁同步电机(PMSM)矢量控制的时候,坐标变换的三角函数运算、观测器的迭代、锁相环的鉴相环节(用到了三角函数)都比较消耗电机主控芯片的计算能力。在考虑算法实现的时候,都需要针对主控芯片的实际性能进行一定优化,才能确保算法能够顺利运行。
数据的概念
浮点数
浮点数是一种小数表示方法。 IEEE浮点数标准定义了两种基本的格式:以4个字节表示的单精度格式和以8个字节表示的双精度格式。 单精度格式的4个字节可以分为三个部分:1位的符号位(0代表正数,1代表负数),8位用做指数,最后的23位用做有效数。下面给出了单精度格式的三部分的划分方式,其中有效数的最低位的最右边。
![9ec8096e51722d8315cd0d3e87d27319.png](https://i-blog.csdnimg.cn/blog_migrate/72a0f55ab9af6ce44b307d321a4cac0d.png)
双精度浮点数情况类似,它需要8个字节来表示,结构如下:
![ae963b229e9ebf670640f85ecf46b0fe.png](https://i-blog.csdnimg.cn/blog_migrate/8591e98ca4c8ff5d372d3f6181688513.png)
浮点数的特点是小数点位置的计数信息并没有和整个数字一起存储,所以使用小数的程序必须知道小数点的位置。 浮点数加法中,最重要的一点就是如何对有效数相加,为了能使它们的有效位匹配,需要利用指数来确定对其如何移位。你需要把有效数部分的相加,但并不是简单的相加。两个数的指数部分的必须对齐。两个浮点数的乘法意味着要把有效数当做整数相乘,并且把指数部分相加。为了使结果规范化,一般需要对指数调整一次到两次。浮点数运算的另一层次的复杂性体现在处理一些较为繁杂的函数运算,例如平方根、指数、对数和三角函数。但所有的都可以通过加减乘除来实现。 因此,浮点数的计算需要FPU才能高效进行。
定点数
另一种小数表示方法是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数。定点数相对简单,其小数点位置固定。因此,其从选取小数点位置开始,就确定好了数据的大小范围和精度。 TI的IQmath库、ARM的CMSIS_DSP库就是使用这一格式的典型代表。
提高执行效率的方法
提升硬件性能
这里最直接的办法,尤其研究高性能控制的时候,应当优先提升硬件性能,将算法实现作为首要目的。 参考计算机的发展,它是从CPU(向量计算)向 GPU(矢量计算)、AI(矩阵计算)和 FPGA(空间计算)发展。对于电机控制,这一情况也是类似的。最初的单片机作为主控芯片,就类似只有单核CPU进行运算,而现在很多单片机与dsp都有多核运算,比如stm32H7、dsp28379。此外,还有思路是协处理器的采用,比如dsp28035中有clzheqa浮点数协处理器,FPGA中加入arm核或者dsp核、dsp28m35中m3内核与c2000内核混合使用,这种情况下的多核是异构多核,有一个核心负责通讯等任务,另一个核负责计算,这种应用也是很广泛的。
优化程序以提升效率
考虑到成本因素,从程序优化上来提升效率。并且有的硬件性能也需要程序优化才能充分发挥。 程序效率不够主要有以下原因: 1. 编译器的优化等级不够,以至生成的代码本身的效率低下; 2. 对不支持浮点运算的芯片采用过多浮点运算; 3. 对于有浮点运算能力的芯片,则可能是采用了双精度浮点运算。比如三角函数库的选取不当,导致在计