打印
[G32R]

基于Geehy G32 R501 紫电三角函数性能测试对比

[复制链接]
17|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 duanchengjie325 于 2025-5-22 10:40 编辑

#技术资源# #申请原创#
摘要
电机控制应用设计传统上采用微控制器(MCU)或数字信号处理器(DSP)来运行电机控制算法。在研究永磁同步电机(PMSM)矢量控制的时候,坐标变换的三角函数运算、观测器的迭代、锁相环的鉴相环节(用到了三角函数)都比较消耗电机主控芯片的计算能力。在考虑算法实现的时候,都需要针对主控芯片的实际性能进行一定优化,才能确保算法能够顺利运行。这些要求都对MCU的实时处理能力以及配置的灵活性提出了高要求,下面将以极海的G32 R50x芯片为例介绍SIN/COS/TAN/ARTAN加速方法及相关配置。

一、 测试系统说明
在G32 R501平台上的执行性能,测试平台概况如下:
硬件平台
控制板
G32 R501-LAUNCHXK-1.0
MCU
G32 R501
仿真器
Geehy CMSIS-DAP WinUSB
主频
250MHz
软件平台
测试程序名称
zidian_ex1_math.c
源程序
file:///C:/Users/geehy/AppData/Local/Temp/ksohtml27000/wps1.png
优化等级(Optimization level)
默认优化等级
O0
源代码仅包含最小工程文件,需放置SDK中联合使用,详细路径为:G32R5xx_SDK_V1.0.0\driverlib\g32r501\examples\eval\zidian\zidian_ex1_math
文件usr中增加g32r501_FPUfastRTS_AC6.lib、fast_math_functions.h,并通过include链接文件;并同步增加CMSIS,调用ARM本身的DSP库使用。
二、 测试内容及说明
一、本案例采用5种测试模式:1、FPUfastRTS;2、FPUfastRTS+zidian_math;3、zidian_math;4、M52math5、ARM_CMSIS_DSP,进行对比测试。
1. FPUfastRTS:是极海为G32AR50x芯片编写的优化信号处理例程的集合,这些芯片支持单精度浮点单元(FPU32)、带三角数学单元(TMU类型0)的FPU32或双精度FPU(FPU64)。这些功能使C/C++程序员充分利用上述芯片的硬件加速器,加快了计算速度。开启该功能需调用g32r501_FPUfastRTS.lib文件,已放置在zidian_ex1_math\include文件内,该库包含两种计算方式,软件加速和硬件加速,通过FPUfastRTS.h二选一,软件采用汇编方式和最优控制方式实现,硬件采用内部硬件加速单元(zidian),均能得到理想执行时间。
2. FPUfastRTS+zidian_math:如上描述,在头文件中定义__ZIDIAN_FCAU__,开启硬件加速单元。
3. zidian_math:极海为G32AR50x系列芯片定制的硬件数学单元,实现三角函数计算,详见手册。
4. ARM_CMSIS_DSP:ARM官方为加速数学运算,提供的DSP库
5. M52内核:不采用任何加速运算,自然计算。
本案例采用5种数学运算进行对比测试:1、sqrt;2、sin;3、cos;4、atan;5、atan2;并进行cycle数及准确度两个维度测试。
三、本案例采用DWT计数,Cortex-M里面有一个外设叫DWT(Data Watchpoint and Trace),是用于系统调试及跟踪,它有一个32位的寄存器叫CYCCNT, 它是一个向上的计数器,记录的是内核时钟运行的个数,内核时钟跳动一次,该计数器就加1,精度高。
三、 详细测试说明
zidian_ex1_math.c文件中,已预定义宏,#define FPUfastRTS 1、#define zidian_math 0、#define ARM_CMSIS_DSP 0,通过改变0/1状态来启动对应功能。
1、FPUfastRTS测试:
令#define FPUfastRTS 1,#define zidian_math 0、#define ARM_CMSIS_DSP 0,程序自动调用g32r501_FPUfastRTS.lib功能,此时为软件模式,预定义删除__ZIDIAN_FCAU__,不调用硬件zidian单元,,测试结果如下:
2、FPUfastRTS+zidian_math测试:
#define FPUfastRTS 1、#define zidian_math 0、#define ARM_CMSIS_DSP 0,并在_C/C++ Define中,写入预定义_ZIDIAN_FCAU__,自动调用硬件zidian单元,测试结果如下:
3、zidian_math测试:
#define FPUfastRTS 0、#define zidian_math 1、#define ARM_CMSIS_DSP 0,并在_C/C++ Define中,写入预定义_ZIDIAN_FCAU__,自动调用硬件zidian单元,测试结果如下:
4、M52math测试:
令#define FPUfastRTS 0、#define zidian_math 1、#define ARM_CMSIS_DSP 0,预定义删除_ZIDIAN_FCAU__,测试结果如下:
5、ARM_CMSIS_DSP测试:
#define FPUfastRTS 0、#define zidian_math 0、#define ARM_CMSIS_DSP 1,工程中已加入CMSIS涉及到的所有DSP库,指令已按库要求同步更改(库没有atan指令,直接赋值0),测试结果如下:
四、 测试结论
综合测试结果对比,测试结果均相同,符合测试目标,根据时间最短排序为:
zidian_math > FPUfastRTS+zidian_math > FPUfastRTS > M52math > ARM_CMSIS_DSP

测试项目
执行时间
测试结果

FPUfastRTS
FPUfastRTS+zidian_math
zidian_math
M52math
ARM_CMSIS_DSP
1
sqrt
23375
13328
7771
17542
17066
0.899999976
2
sin
25274
12740
7731
38444
34733
1
3
cos
28233
13116
10444
46073
36244
0.707106709
4
atan
33244
12752
12132
34973
1.37340081
5
atan2
45122
15652
12460
38776
114734
1.10714877
总时间
155248
67588
50538
175808
202777


总结:在电机、电源领域应用中,强烈建议采用极海为G32AR50x系列芯片自研的紫电数学单元,可大大提高计算效率相比较zidian比M52math快3.48倍,比ARM_CMSIS_DSP快4.01倍,减少计算中的开销,提高程序利用率。

参考:
A相关文档
1. 极海半导体(Geehy),APM32R50x数据手册
2. 极海半导体(Geehy),APM32R50x用户手册

zidian_ex1_math.rar

953.2 KB

测试代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝