基于纳芯微NS800RT5039评估板实现PWM输出
该项目使用了纳芯微NS800RT5039评估板,实现了PWM输出的设计,它的主要功能为:串口输出,输出PWM信号。
标签
PWM
纳芯微
12指神探
WeDesign
NS800RT5039
TetraPak
更新2025-12-02
66

1. 所选任务介绍

本项目旨在验证和学习 Novosense NS800RT5039 微控制器的两项核心外设功能。任务分为两个部分:

  • 任务一:UART 串口通信
    此任务要求利用 MCU 的UART外设,通过开发板板载的 DAP-Link 虚拟串口,向 PC 端的串口助手发送指定字符串 "Hello, NOVOSENSE Wedesign project."。此任务用于验证开发环境、基础驱动以及 MCU 的基本 I/O 通信能力。
  • 任务二:ePWM 互补波形输出
    此任务要求使用增强型脉宽调制(ePWM)模块,在指定的 GPIO 端口上输出一对参数为频率 2MHz、占空比 50% 的互补 PWM 波形。

2. 项目描述

本项目是一个基于纳芯微NSSinePad-NS800RT5039 开发板的入门级综合实验。首先通过一个简单的 "Hello, NOVOSENSE Wedesign project." 串口打印程序,搭建了从代码编写、编译、下载到运行和调试的整个开发流程。在此基础上,项目进一步使用了 NS800RT5039 芯片强大的 ePWM 外设,实现了高频、高精度的互补 PWM 波形输出。

3. 硬件介绍

微控制器: NS800RT5039是本项目的核心控制器。它是一款高性能、高实时性的微控制器,专为工业和汽车应用设计。其关键特性包括:

高性能内核: 采用运行频率高达 260MHz 的 Arm Cortex-M7 内核,并集成了纳芯微自研的 eMath 浮点数学运算加速核,能够高效执行复杂的控制算法。

丰富的内存: 内置 512KB Flash 和 388KB SRAM(均带 ECC 功能),保证了程序的可靠性和数据处理空间。

高精度外设: 拥有 3 个高达 5Msps 的 12 位 ADC 和多达 32 路 PWM 输出,其中 16 路是分辨率高达 100ps 的高精度 PWM (HRPWM),非常适合高频开关电源和精密电机控制。

通信接口齐全: 集成了多个串口、CAN-FD、SPI、I2C 等接口,满足复杂的通信需求。

高可靠性: 符合 AEC-Q100 Grade 1 汽车级标准,并通过了 IEC60730、ISO26262 ASIL-B 等功能安全设计认证。

NSSinePad-NS800RT5039是官方提供的低成本开发和评估板。它为用户提供了便捷的硬件平台来访问 NS800RT5039 的所有功能,其引出所有 IO,方便用户连接外设进行测试。板载调试器集成了 DAP-Link 调试仿真器,通过一根 USB Type-C 线缆即可完成供电、程序下载/调试和虚拟串口通信,无需额外购买 J-Link/ST-Link 等调试工具,并且板载了 CAN 收发器和编码器接口芯片。

4. 设计思路

整体方案框图如下图所示

系统初始化:

  • 初始化整个系统的时钟。根据代码,系统主频 DEVICE_SYSCLK_FREQ 设置为 260MHz。这是所有外设时钟的基础。
  • 解锁外设寄存器锁,以便进行后续配置。
  • 初始化开发板 Board_init(),这通常会配置引脚的复用功能,例如将特定引脚配置为 UART 的 TX/RX 或 ePWM 的输出。

任务一:UART 串口输出

外设选择: 选择一个 UART 外设(例如 UART0)。

引脚配置: 将 MCU 的相应引脚(如 GPIO0/1)配置为 UART0 的 TX 和 RX 功能。开发板的 DAP-Link 会将 MCU 的某个 UART 接口桥接到 USB 虚拟串口,需要确保配置的是正确的 UART 模块。

参数配置: 配置 UART 的波特率、数据位、停止位和校验位。通常配置为 115200 8-N-1。

数据发送: 在 main 函数中,调用 C 标准库函数 printf()。

任务二:ePWM 互补波形输出

外设选择: 选择一个 ePWM 模块,例如 myEPWM1_BASE (ePWM1)。ePWM 的工作需要一个时基时钟 (TBCLK)。TBCLK 由系统主频 SYSCLK 经过分频得到。

为了获得 2MHz 的 PWM,我们需要精确计算周期寄存器的值。一个合适的 TBCLK 是关键。假设 HSPCLKDIV=1, CLKDIV=1,则

周期 (TBPRD) 计算: PWM 的频率由时基周期寄存器 (TBPRD) 和计数模式决定。代码中使用了增减计数模式 (Up-Down Count Mode)。

计算结果 65 是一个整数,因此该频率可以精确实现。

占空比 (CMPA) 计算: 占空比由比较寄存器 (CMPA/CMPB) 的值决定。对于 50% 的占空比,在增减计数模式下

。这里出现了小数,CMPA 寄存器只能写入整数。但由于是完全对称的 50% 占空比,可以将 CMPA 设置为 TBPRD 的一半,即 32 或 33,产生的波形会非常接近 50%。

更精确的方式是配置 Action Qualifier (AQ) 模块,使其在向上计数到 CMPA 时拉低,在向下计数到 CMPA 时拉高,这样配置的。取 32 或 33 均可。

互补输出与死区配置

为了生成一对互补信号,需要使用 ePWM 的死区模块 (Dead-Band, DB)。

配置死区模块,使其输入源为 ePWMxA (本例中为 ePWM1A)。

配置输出模式,使 ePWMxA (GPIO0) 正常输出,ePWMxB (GPIO1) 输出 ePWMxA 的反向信号。

虽然本任务未要求,但实际应用中通常会设置一个小的死区时间(上升沿/下降沿延时)来防止桥臂直通。

引脚配置

将 GPIO0 和 GPIO1 配置为 myEPWM1_EPWMA_PIN_CONFIG 和 myEPWM1_EPWMB_PIN_CONFIGmyEPWM1_EPWMB_PIN_CONFIG,即 ePWM1A 和 ePWM1B 的输出功能。

如下图所示,GPIO0 和 GPIO1分别作为两个PWM通道输出,十二指神探连接这两个端口,完成数据采集。

5. 关键代码

程序流程图

定义PWM信号参数

/* 定义PWM信号参数的结构体 */
EPWM_SignalParams pwmSignal =
            {2000000, 0.5f, 0.5f, true, DEVICE_SYSCLK_FREQ,
            EPWM_COUNTER_MODE_UP_DOWN, EPWM_CLOCK_DIVIDER_2,
            EPWM_HSCLOCK_DIVIDER_1};

这是配置 PWM 的核心。它以定义了目标频率、占空比、通道使能关键参数。

调用库函数配置PWM

/* 调用库函数,根据上面的结构体配置ePWM1 */
EPWM_configureSignal(myEPWM1_BASE, &pwmSignal);


这一行是实现 PWM 功能的关键。它调用了官方提供的库函数,将 pwmSignal 结构体中的参数自动计算并写入 ePWM1 的各个寄存器(如 TBPRD, CMPA, AQCTL, TBCTL 等),极大地简化了开发。

串口打印

/* 延时后通过串口打印字符串 */
Delay_ms(DELAY_1S);
printf("Hello, NOVOSENSE Wedesign project.\n");

调用 printf 函数。Delay_ms 是为了等待外设稳定或避免信息过早输出。

GPIO引脚功能复用

void GPIO_init(void)
{
/* EPWM1A GPIO configuration */
GPIO_setPinConfig(myEPWM1_EPWMA_PIN_CONFIG);
/* EPWM1B GPIO configuration */
GPIO_setPinConfig(myEPWM1_EPWMB_PIN_CONFIG);
// ...
}

此函数负责将引脚复用为 ePWM 功能。myEPWM1_EPWMA_PIN_CONFIG 是一个宏,定义了具体GPIO以及其对应的 ePWM 功能。

6. 实物演示及说明

硬件连接:

  1. 使用 USB Type-C 数据线将 NSSinePad 开发板连接到 PC。。
  2. 逻辑分析仪的探头 1 的连接到 ePWM1A 对应的排针引脚GPIO0,地线连接到开发板的 GND。
  3. 将示波器的探头 2 的连接到 ePWM1B 对应的排针引脚(例如 GPIO,地线连接到开发板的 GND。

软件操作:

  1. 在 PC 的设备管理器中查看 DAP-Link 虚拟串口的 COM 端口号。
  2. 打开串口助手软件,设置 COM 号与设备管理器中一致,波特率设置为 921600,8-N-1。
  3. 将修改好的代码(修正了 ePWM 时钟分频)编译并下载到开发板。
  4. 程序运行后,复位开发板。


结果:

串口输出: 在串口助手窗口中,能看到字符串 "Hello, NOVOSENSE Wedesign project." 被打印出来。

PWM 波形: 在Pulseview上,能观测到以下波形:

两个通道均为方波信号。

两个方波的相位相反(一个高电平时另一个为低电平),呈互补关系。

使用示波器的测量功能,测得每个波形的频率应精确为 2.00 MHz。

每个波形的占空比应为 50%。

7. 总结

通过本次基于 NS800RT5039 的开发实践,我收获颇丰。

首先加深了对高性能 MCU 的理解。NS800RT5039 强大的 Cortex-M7 内核和高达 260MHz 的主频给我留下了深刻印象。尤其是其 ePWM 模块,不仅数量多,而且支持 100ps 的高精度,这在以往使用的中低端 MCU 中是罕见的。实现 2MHz 的高频 PWM 输出非常轻松,这充分体现了它在高速实时控制领域的巨大潜力。

其次体会到官方 SDK 和库函数带来的便利。通过调用 EPWM_configureSignal 这样一个封装的函数,就可以完成复杂的 PWM 配置,无需逐个去操作底层寄存器,降低了入门门槛。


附件下载
task.zip
NSSinePad-NS800RT5039任务源码
pico_sdk_sigrok.uf2
十二指神探逻辑分析仪固件
团队介绍
团队成员
TetraPak
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号