STM32應用:簡介STM32G4 CORDIC加速功能

ARM的Cortex-M4核心,已經具備了浮點數運算和DSP功能,已經可以為三角函數計算提供了加速的功能,新發表的STM32G4系列,除了具備了Cortex-M4核心外,更進一步的配備了CORDIC﹝座標旋轉數位計算機﹞的數學運算加速器,可以為下列數學函數提供更好的加速效果。
  • Sine ﹝sinθ﹞
  • Cosine﹝cosθ﹞
  • Phase ﹝atan2 y, x﹞
  • Modulus ﹝√x2+y2
  • Arctangent ﹝tan -1 x﹞
  • Hyperbolic sin ﹝ sinh x﹞
  • Hyperbolic cosine ﹝ cosh x﹞
  • Hyperbolic arctangent ﹝tanh -1 x﹞
  • Natural logarithm ﹝ln x﹞
  • Square root ﹝√x﹞

  大大购相关商品 
   NUCLEO-G431RB  >> 查询存货及售价




以下是範例程式
首先在CubeMX內,啟動CORDIC功能,並且設置兩個DMA傳輸。


/*## Configure the CORDIC peripheral ####################################*/

sCordicConfig.Function = CORDIC_FUNCTION_SINE; /* sine function */
設定使用SINE功能。
sCordicConfig.Precision = CORDIC_PRECISION_6CYCLES; /* max precision for q1.31 sine */
設定精確度。
sCordicConfig.Scale = CORDIC_SCALE_0; /* no scale */
設定scale factor,這項視功能而定,在SINE運算中此項參數無效,故設置為0。
sCordicConfig.NbWrite = CORDIC_NBWRITE_1; /* One input data: angle. Second input data (modulus) is 1 after cordic reset */
sCordicConfig.NbRead = CORDIC_NBREAD_1; /* One output data: sine */
sCordicConfig.InSize = CORDIC_INSIZE_32BITS; /* q1.31 format for input data */
sCordicConfig.OutSize = CORDIC_OUTSI

填好上面參數後,呼叫HAL_CORDIC_Configure將設定寫入,然後呼叫HAL_CORDIC_Calculate_DMA做運算,資料會用DMA送入,計算結果用DMA送出。
開始計算後,可以呼叫HAL_CORDIC_GetState等待CORDIC運算完成,或是利用DMA中斷的callback function來通知已經計算完成。

本文附件提供一個SINE DMA範例可以參考,以浮點數運算比較,CORDIC可以比DSP提升約三倍的效率。目前在馬達FOC控制運算中,則可以提供12%左右的加速效果。

技術文檔

類型標題檔案
軟件IOC

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論

谢扬

谢扬

6 個月前