ARM的Cortex-M4核心,已經具備了浮點數運算和DSP功能,已經可以為三角函數計算提供了加速的功能,新發表的STM32G4系列,除了具備了Cortex-M4核心外,更進一步的配備了CORDIC﹝座標旋轉數位計算機﹞的數學運算加速器,可以為下列數學函數提供更好的加速效果。
大大购相关商品 NUCLEO-G431RB >> 查询存货及售价
以下是範例程式
首先在CubeMX內,啟動CORDIC功能,並且設置兩個DMA傳輸。
/*## Configure the CORDIC peripheral ####################################*/
- 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%左右的加速效果。
評論
谢扬
6 個月前