摘要
电机控制应用设计传统上采用微控制器(MCU)或数字信号处理器(DSP)来运行电机控制算法。在研究永磁同步电机(PMSM)矢量控制的时候,坐标变换的三角函数运算、观测器的迭代、锁相环的鉴相环节(用到了三角函数)都比较消耗电机主控芯片的计算能力。在考虑算法实现的时候,都需要针对主控芯片的实际性能进行一定优化,才能确保算法能够顺利运行。这些要求都对MCU的实时处理能力以及配置的灵活性提出了高要求,下面将以极海的G32 R50x芯片为例介绍SIN/COS/TAN/ARTAN加速方法及相关配置。
一、 测试系统说明
在G32 R501平台上的执行性能,测试平台概况如下:
| 控制板 | G32 R501-LAUNCHXK-1.0 |
| |
| |
| |
| | |
| file:///C:/Users/geehy/AppData/Local/Temp/ksohtml27000/wps1.png |
| | |
源代码仅包含最小工程文件,需放置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、M52math;5、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
总结:在电机、电源领域应用中,强烈建议采用极海为G32AR50x系列芯片自研的紫电数学单元,可大大提高计算效率,相比较zidian比M52math快3.48倍,比ARM_CMSIS_DSP快4.01倍,减少计算中的开销,提高程序利用率。
参考:
A相关文档
1. 极海半导体(Geehy),APM32R50x数据手册
2. 极海半导体(Geehy),APM32R50x用户手册