基于纳芯微-NS800RT5039的控制环路的实时性能评估
该项目使用了NS800RT5039,实现了都该芯片的部分功能与实时性能评估的设计,它的主要功能为:通过业界内专业且具有代表性的Benchmark评估NS800RT5039真正的核心算力。
标签
嵌入式系统
测试
开发板
海波
更新2025-12-04
10

评估板介绍

42dd0d8fdadf719fe062a3f04146994.jpg

NS800RT5039 是芯弦半导体联合纳芯微推出的 NS800RT 系列实时控制 MCU 的首发型号之一。

image.png

  • 内核性能:采用单颗主频为 260MHz 的 Arm Cortex-M7 内核,支持分支预测、DSP 指令集和 FPU,能够满足高效实时控制的需求。
  • 存储配置:FLASH 容量为 512KB,可存储更多算法代码。配备 256KB SRAM,支持 ECC,其中 128KB 的 RAM 可以与 TCM 共享,加上原有的 128KB TCM,总容量可达到 384KB,能快速存储和读取数据,提升内核综合处理性能。
  • 集成外设:集成了丰富的外设,包括 16 对互补 / 32 路独立 PWM 输出,其中 16 路为高精度 HRPWM;3 个 12 位 ADC,采样速率高达 5MSPS,支持 34 个采样通道;2 个 12 位 DAC,采样速率 1MSPS;7 对(14 个)高速模拟比较器 CMPSS,带 DAC 与斜波发生器;3 路放大倍数可编程的差分输入运放 (PGA);8 个 Sigma-Delta 滤波器模块 (SDFM) 输入通道;以及两个全温度范围内精度可达 ±1% 的高精度时钟。
  • 功能安全:符合车规 AEC-Q100 认证标准,支持汽车 ISO26262 ASIL B 与工业 IEC61508 SIL2 等级的功能安全,内设 AES-128/256 和 TRNG 算法,提升了信息安全。
  • 应用领域:主要应用于光伏 / 储能逆变器、不间断电源、工业自动化、协作机器人、新能源汽车大 / 小三电、空调压缩机等需要高精度实时控制的系统中。
  • 开发支持:纳芯微和芯弦联合提供了全面的 SDK 开发套件、支持 KEIL,IAR,GCC/Eclipse 的 IDE 工具链以及系统评估板等各种软硬件支持。

1 任务要求

1.1 基础任务

1、调用Uart串口打印指定字符;

2、使用EPWM输出指定频率和占空比波形并测量波形;

1.2 额外任务

1、测试该芯片的三角函数加速性能;

2、测试该芯片的实时信号链性能;

2 任务测试

2.1 Uart打印指定字符

2.1.1 任务要求

任务要求:调用Uart串口,完成在串口输出 “Hello, NOVOSENSE Wedesign project.” 字符串任务。

2.1.2 关键程序分析

UART外设的使用和ST的UART外设使用方法其实大差不差,从API函数接口来看也相对比较全,从底层寄存器来看和ST和TI均有不同,但是对于用户侧来说通常不关心接口以下的东西,API接口做得足够好用就可以接受了。大致看来做到了功能级兼容

// 串口重定向
typedef struct __FILE FILE;

struct __FILE {
union {
long __FILE_alignment;
#if (defined(__ARM_64BIT_STATE) || defined(__TARGET_ARCH_AARCH64))
char __FILE_size[136];
#else /* __ARM_64BIT_STATE || __TARGET_ARCH_AARCH64 */
char __FILE_size[84];
#endif /* __ARM_64BIT_STATE || __TARGET_ARCH_AARCH64 */
} __FILE_opaque;
};

int fputc (int ch, FILE *f)
{
(void)f;

while (BOARD_SERIALCOM->STAT.BIT.TDRE == 0)
{
;
}
BOARD_SERIALCOM->DATA.WORDVAL = ch;

return ch;
}

上述代码使用过ST外设的不管是使用微库-MicroLIB”还是“不用微库-不使用半主机模式可能都或多或少有些印象,所以这个功能本身使用起来并不复杂。

2.1.3 测试结果

8ed00ece7d69d2c1715c1eae0ed90e1.png

2.2 EPWM输出指定波形

2.2.1 任务要求

任务要求:调用ePWM外设,实现在对应输出端口,输出一对互补PWM波形,波形频率2MHz,占空比50%。并使用12指神探捕获对应波形截图(未购买12指神探的可以用万用表电压档测量并拍照)。

2.2.2 关键程序分析

从API接口和寄存器来看,纳芯微的的EPWM外设基本和TI的EPWM外设全兼容,API接口配置也完全相同,所以对使用过C2000的用户十分的便捷。做到了寄存器级兼容


按需求产生2MHz,互补,Duty=50%的PWM:

周期和比较值都有了之后只需在对应的比较点执行对应的翻转动作即可,直接看代码就可以了,OUTPUT-A对应的是EPWM-A,OUTPUT-B对应的是EPWM-B,分别指的是两路输出,而COMPARE-A,COMPARE-B指的是比较的点,这两个点可以同时作用在EPWM-A上或EPWM-B上

void EPWM_init(void)
{
EPWM_setClockPrescaler(myEPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod(myEPWM1_BASE, 129);
EPWM_setTimeBaseCounter(myEPWM1_BASE, 0);
EPWM_setTimeBaseCounterMode(myEPWM1_BASE, EPWM_COUNTER_MODE_UP);
EPWM_disablePhaseShiftLoad(myEPWM1_BASE);
EPWM_setPhaseShift(myEPWM1_BASE, 0);
EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, 65);
EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, 65);
EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);
EPWM_disableRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);
EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);
EPWM_disableFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);
}

2.2.3 测试结果

注:未购买12指神探,使用逻辑分析仪测试的波形。

2.3 实时性能测试

暂不提供源码,感兴趣可以参考TI的官方源码移植

2.3.1 三角函数性能

计时单位为系统周期数

image.png

首先,eMATH的周期数较多我认为是因为外设和指令的区别,TI是内部实现的加速指令,而eMATH作为外设必须要有写寄存器、读寄存器、配置外设的开销,所以从系统周期数上慢些并不意外;其次我自己的测试结果和纳欣微有出入主要和程序的访存以及优化等级有关系,配置存在差异。测试方法上也可能不同,但测试结果上是可以体现eMATH的性能是较为强悍的。

2.3.2 实时信号链性能

image.png

计时单位为系统周期数

image.pngimage.png

注:程序中做了些许优化,Park和iPark使用的叫角度本质上是同一个,所以直接使用一次运算在两个变换中使用了该角度。

首先,从整体的测试结果上看,平均的系统周期数比ti慢100左右,主要实在中断响应和ADC读取以及PWM写入上存在明显短板,符合预期,ti在该方面做了专用指令加速以及支持实时中断机制,这些都属于系统架构上的设计优势,M7内核整体的通用性能以及使用eMATH赋能三角函数后的整体运算性能其实应该比TI的C28x是略好的,自行推算;其次,也是国产MCU的趋势--高主频,由于NS800RT5039主频高达260MHz,而TMS320F280039只有120MHz,虽然总的周期数比TI慢100cycles,但是使用的时间仍有显著优势,性能提升91%(换算成时间)。

3 使用感受与建议

3.1 感受

整体性能是比较强悍的,arm的生态也可以直接上手,开发环境也能接受,官方自己的IDE可以再优化优化,有很多CCS支持的功能目前并没有。

3.2 建议

1、软件开发包兼容度比较高,但可能是由于迭代比较快的原因对应的板级支持定义上有些配置不对,可能导致有些实例工程无法做到到手即跑;

2、建议要有代码生成工具,因为类似EPWM外设在工程使用中配置较为复杂,如果初始化的时候有工具避免很多重复工作;

3、建议增加个人申请样片和样板的机会,官网没有途径个人申请,必须是企业或者学生。

附件下载
设计资源-附件.rar
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号