前言
当前 STM32G4 系列以及 STM32H723 中虽然有专门计算三角函数的硬件 CORDIC,但目前是定点的 CORDIC 硬件,很多实际应用,比如电机控制,数字电源,客户整个软件代码是基于浮点的运算,因此有必要对如何利用 CORDIC 计算浮点的三角函数(本文计算正弦和余弦),以及计算时间的评估做下说明文档,给客户一定的参考示例,本文使用 STM32G474 为例来进行。
使用 CORDIC 计算定点三角函数
这边不做具体的说明,详细信息请参考 STM32G4 的培训文档。实际上就三个步骤,写入CSR 寄存器,写入角度以及模值,读取计算结果。注意这边没有等待标志位的操作,实际上是CORDIC 特有的零开销单次模式 (Zero overhead single shot mode) ,这种是最快的运算方式。
用 CORDIC 浮点计算正余弦量
浮点的计算要做的就是输入和输出对浮点转定点,定点转浮点的操作,同时需要根据角度的周期性,对角度做限制,把角度范围控制在[-π, π]。
浮点三角函数计算程序
结合上面的分析,我们可以将几个操作步骤整合起来进行编程。
利用 Cordic 计算浮点三角函数时间测试
可以通过对汇编指令的查看,看是否在 STM32G4 上有效的执行了浮点指令 FPU。
结论
从上面的执行浮点 CORDIC 运算程序以及测试结果来看,浮点的三角函数会消耗些时间,主要时间耗在浮点转定点、定点转浮点的过程中,好在 STM32G4 和 STM32H7 系列都带浮点 FPU单元,可减少计算时间,其他影响因素可以考虑 IDE 的配置,程序是否运行在紧耦合 RAM 等配置,以便得到更快的计算速度。
669