FOC控制中会用到三角函数
调试通信的时候,也会用三角函数产生一个测试波形
优化三角函数的运行时间是一个不可避免的事情,而幸运的是,前人已经把树种上了。
用专用的浮点运算单元FPU来做浮点运算,比用STM32本身来做浮点运算要快。
要使用STM32,ST公司提供了标准外设库、HAL库等。
而要使用FPU,ARM/ST公司提供的库叫做 DSP库
STM32 HAL库 CUBEMX FPU 和 DSP库朽木白露的博客-CSDN博客hal库dsp 这篇博客可以好好看看。
FPU简介
-
FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的 CPU)来说必须要按照IEEE-754 标准的算法来完成运算,是相当耗费时间的。而对于有 FPU 的 CPU来说,浮点运算则只是几条指令的事情,速度相当快。
-
STM32F4 属于 Cortex M4F 架构,带有 32 位单精度硬件 FPU,支持浮点指令集,相对于 Cortex M0 和Cortex M3 等,高出数十倍甚至上百倍的运算性能。 STM32F4 硬件上要开启 FPU是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启 STM32F4 的硬件 FPU。
简单来说,FPU是集成在STM32F4系列以上的一个专用浮点运算处理器,相当于我们电脑中专门用于处理图像计算的GPU,在处理浮点运算时,速度比CPU处理要快几十倍,是一种专用型的处理单元。在STM32 F4系列中,带有该单元,我们只需要设置 CPACR 寄存器即可。
DSP简介
-
STM32F405 采用 Cortex-M4 内核,相比 Cortex-M3 系列除了内置硬件 FPU 单元,在数字信号处理方面还增加了DSP 指令集,支持诸如单周期乘加指令(MAC),优化的单指令多数据指令(SIMD),饱和算数等多种数字信号处理指令集。相比Cortex-M3,Cortex-M4 在数字信号处理能力方面得到了大大的提升。Cortex-M4 执行所有的 DSP指令集都可以在单周期内完成,而 Cortex-M3 需要多个指令和多个周期才能完成同样的功能。
DSP (数字信号处理),FPU是硬件,ST提供了FPU的库叫做DSP库,用于FPU的使用。DSP库之于FPU就如同 HAL库 之于 STM32 一样,是ST公司为硬件所开发的软件库。
实验:
在168MHz主频的STM32F405RGT6中,运行一次sin函数大约需要30~50us,运行一次arm_sin_f32函数,
只需要3us。 运行时间是1个数量级差距。
用arm_sin_f32吧! 咋用看我另一篇博客
STM32_如何添加DSP库_heqiunong的博客-CSDN博客_stm32 添加dsp库