隨著科技的進步,微控制器的功能日益強大,其中STM32G4系列微控制器便搭載了一項強大的數學運算加速工具——CORDIC(Coordinate Rotation Digital Computer)算法加速器。這項特性對於需要進行複雜運算的應用來說,無疑是一大福音。
CORDIC算法加速器是一種專門用於快速計算三角函數、双曲函數、平方根、對數等數學運算的硬體模組。在STM32G4系列微控制器中,這項功能的加入,使得開發者能夠在不增加額外硬體成本的情況下,實現高效率和精確度的數學運算,這對於工業控制、電機驅動、能源管理等領域的應用尤為重要。 利用CORDIC算法加速器,開發者可以減少對浮點運算單元(FPU)的依賴,從而降低整體系統的功耗,同時也能提升運算速度。這是因為CORDIC算法能夠透過一系列的位移和加減運算來近似計算出所需的數學函數值,這種運算方式比起傳統的浮點運算更為高效。
推薦文章:ST 2024年每月最新產品資訊,持續更新!
ARM的Cortex-M4核心,已經具備了浮點數運算和DSP功能,已經可以為三角函數計算提供了加速的功能,新發表的STM32G4系列,除了具備了Cortex-M4核心外,更進一步的配備了CORDIC﹝座標旋轉數位計算機﹞的數學運算加速器,可以為下列數學函數提供更好的加速效果。
大大購相關商品 NUCLEO-G431RB >> 查詢存貨及售價
以下是範例程式
CORDIC算法加速器是一種專門用於快速計算三角函數、双曲函數、平方根、對數等數學運算的硬體模組。在STM32G4系列微控制器中,這項功能的加入,使得開發者能夠在不增加額外硬體成本的情況下,實現高效率和精確度的數學運算,這對於工業控制、電機驅動、能源管理等領域的應用尤為重要。 利用CORDIC算法加速器,開發者可以減少對浮點運算單元(FPU)的依賴,從而降低整體系統的功耗,同時也能提升運算速度。這是因為CORDIC算法能夠透過一系列的位移和加減運算來近似計算出所需的數學函數值,這種運算方式比起傳統的浮點運算更為高效。
推薦文章:ST 2024年每月最新產品資訊,持續更新!
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%左右的加速效果。
評論