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