前言
當前 STM32G4 系列以及 STM32H723 中雖然有專門計算三角函數(shù)的硬件 CORDIC,但目前是定點的 CORDIC 硬件,很多實際應用,比如電機控制,數(shù)字電源,客戶整個軟件代碼是基于浮點的運算,因此有必要對如何利用 CORDIC 計算浮點的三角函數(shù)(本文計算正弦和余弦),以及計算時間的評估做下說明文檔,給客戶一定的參考示例,本文使用 STM32G474 為例來進行。
使用 CORDIC 計算定點三角函數(shù)
這邊不做具體的說明,詳細信息請參考 STM32G4 的培訓文檔。實際上就三個步驟,寫入CSR 寄存器,寫入角度以及模值,讀取計算結果。注意這邊沒有等待標志位的操作,實際上是CORDIC 特有的零開銷單次模式 (Zero overhead single shot mode) ,這種是最快的運算方式。
用 CORDIC 浮點計算正余弦量
浮點的計算要做的就是輸入和輸出對浮點轉定點,定點轉浮點的操作,同時需要根據(jù)角度的周期性,對角度做限制,把角度范圍控制在[-π, π]。
浮點三角函數(shù)計算程序
結合上面的分析,我們可以將幾個操作步驟整合起來進行編程。
利用 Cordic 計算浮點三角函數(shù)時間測試
可以通過對匯編指令的查看,看是否在 STM32G4 上有效的執(zhí)行了浮點指令 FPU。
結論
從上面的執(zhí)行浮點 CORDIC 運算程序以及測試結果來看,浮點的三角函數(shù)會消耗些時間,主要時間耗在浮點轉定點、定點轉浮點的過程中,好在 STM32G4 和 STM32H7 系列都帶浮點 FPU單元,可減少計算時間,其他影響因素可以考慮 IDE 的配置,程序是否運行在緊耦合 RAM 等配置,以便得到更快的計算速度。