RA6单片机4种互补PWM模式原理和实现方法

strongerHuang 2026-06-13 08:00

在电机工程中,有时候需要输出带死区的0%和100%的占空比PWM波形,以达到过调制效果。


在单片机PWM调试的日常工作中,很多工程师对“0%占空比”和“100%占空比”的认知往往停留在教科书层面——前者意味着无输出,后者则对应持续高电平。但当你真正面对电机驱动、逆变电源这类需要互补PWM输出的项目时,情况就变得复杂了:上下桥臂必须插入死区时间来防止直通短路,而常规的占空比调整逻辑在接近0%和100%边界时反而容易失效。

本文以RA6T2为例,介绍在使用RA-T系列芯片建立电机工程时,如何使用GPT的互补PWM模式输出带死区的0%和100%的占空比波形,其结果可推广应用到其他系列芯片和相关领域。


在系统设计确定的情况下,母线电压的值受硬件设计限定,是确定的、有限的。根据电压方程式分析,电机的可运转速度具有理论上限。有时根据控制需要,可以应用过调制的方法,在限定母线电压范围内,提高输出电压利用率,从而达到提高瞬时过载能力、动态响应速度等控制效果。


RA6T2的GPT模块,有4种互补PWM模式。主要的区别是缓冲寄存器的传送时刻不同:


(1)互补PWM模式1(在波峰传送)

(2)互补PWM模式2(在波谷传送)

(3)互补PWM模式3(在波峰和波谷传送)

(4)互补PWM模式4(立即传送)


当使用RA6T2设计电机系统时,可使用GPT的互补PWM模式3,输出带死区的0%和100%的占空比PWM波形。


使用互补PWM模式3,默认锁定三个连续的通道。根据芯片默认设置,可以使用GPT1,2,3作为一组配合输出,或者选择GPT4,5,6作为一组配合输出。

RA6单片机4种互补PWM模式原理和实现方法图1


使用时,最低标号的通道作为主通道,相邻两个高标号通道作为从属通道。每个通道的计数器GTCNT按照主通道的周期循环并独立计数。对于每个通道,计数器在计数过程中,当GTCNT与GTCCRA发生比较匹配时,正向和负向的波形分别从GTIOCn+iA(i=0,1,2)和GTIOCn+iB管脚输出,并且根据主通道的GTDVU寄存器的值,输出死区时间。GTCCRA寄存器带缓冲功能,GTCCRC、临时寄存器A、GTCCRD作为缓冲寄存器使用。详细讲解,请参看数据手册21.3.3.7章节部分。


(100%和0%输出的原理性讲解和时序图讲解)


一般占空比模式输出时,发波逻辑请参看数据手册figure21.52所示:

RA6单片机4种互补PWM模式原理和实现方法图2


当GPT工作在互补PWM模式3时,GPT32n+i.GTCNT按如上图方式循环计数。从图中可以注意到,GPT32n.GTCNT和GPT32n+1.GTCNT在计数时差一个死区时间的数值。这样在与GTCCRA发生匹配时,GTIOCnA和GTIOCnB将输出带死区的PWM波形。当缓冲寄存器的值发生更新后,在互补PWM模式3的机制下,GTCCRA将在波峰和波谷更新。


当需要输出带死区的100%占空比波形时,请参看数据手册figure21.61:

RA6单片机4种互补PWM模式原理和实现方法图3


当GTCCRA的值设定大于等于周期值加死区时间计数值时,匹配无法发生,则因匹配对应的端口翻转动作就不会发生。GPT32n+i.GTCNT仍然按设定继续计数。在这种情况下,GPT将一直输出100%占空比波形。


当需要输出带死区的0%占空比波形时,请参看数据手册figure21.67:

RA6单片机4种互补PWM模式原理和实现方法图4


GTCCRA的值设定为0时,匹配无法发生,则匹配对应的端口动作也不会发生。GPT32n+i.GTCNT仍然按设定继续计数。在这种情况下,GPT将一直输出0%占空比波形。


样例设计:

使用GPT4,5,6通道作为PWM输出通道,并设置工作模式为为互补PWM模式3,设定PWM波周期为125us,占空比按如下形式交替变化,并循环往复输出:


    1)50%占空比

    2)100%占空比

    3)50%占空比

    4)0%占空比


在FSP中的配置如下图所示,将GPT4通道波峰、波谷中断使能。

RA6单片机4种互补PWM模式原理和实现方法图5


GPT初始化相关的关键工程代码如下:

左右滑动查看完整内容

R_GPT4->GTCR_b.MD = 0x0E;R_GPT5->GTCR_b.MD = 0x0E;R_GPT6->GTCR_b.MD = 0x0E;//设置使用互补PWM模式3
R_GPT4->GTPR = 0x1D4C;//;R_GPT5->GTPR = 0x1D4C;//;R_GPT6->GTPR = 0x1D4C;//;
R_GPT4->GTPBR = 0x1D4C;//;R_GPT5->GTPBR = 0x1D4C;//;R_GPT6->GTPBR = 0x1D4C;//;R_GPT4->GTPDBR = 0x1D4C;//;R_GPT5->GTPDBR = 0x1D4C;//;R_GPT6->GTPDBR = 0x1D4C;//设置周期125us;
R_GPT4->GTIOR_b.GTIOA = 0x09;R_GPT5->GTIOR_b.GTIOA = 0x09;R_GPT6->GTIOR_b.GTIOA = 0x09;R_GPT4->GTIOR_b.GTIOB = 0x06;R_GPT5->GTIOR_b.GTIOB = 0x06;R_GPT6->GTIOR_b.GTIOB = 0x06;//设置引脚输出PWM波形具体形态
R_GPT4->GTBER2_b.CP3DB = 0;//R_GPT5->GTBER2_b.CP3DB = 0;//R_GPT6->GTBER2_b.CP3DB = 0;//使能双buffer功能
R_GPT4->GTCCR[0] = 0x0EA6;R_GPT5->GTCCR[0] = 0x0EA6;R_GPT6->GTCCR[0] = 0x0EA6;

R_GPT4->GTCCR[2] = 0x0EA6;R_GPT5->GTCCR[2] = 0x0EA6;R_GPT6->GTCCR[2] = 0x0EA6;
 R_GPT4->GTCCR[4] = 0x0EA6; R_GPT5->GTCCR[4] = 0x0EA6; R_GPT6->GTCCR[4] = 0x0EA6;//预设50%输出


在中断callback函数内设置循环发波逻辑,并更新PWM占空比:

左右滑动查看完整内容

if(g_user_count<1000) g_user_count++;  // 循环控制基准递加
    if(g_user_count<=31)    {    u2_count_u = (uint16_t) ((u2_temp_base * (0.5F)) + (u2_temp_deadt * 0.5F));    u2_count_v = (uint16_t) ((u2_temp_base * (0.5F)) + (u2_temp_deadt * 0.5F));    u2_count_w = (uint16_t) ((u2_temp_base * (0.5F)) + (u2_temp_deadt * 0.5F));    }//设置占空比50%
    elseif(g_user_count<=93)    {    u2_count_u = (uint16_t) ((u2_temp_base * (1.0F))+ (u2_temp_deadt));    u2_count_v = (uint16_t) ((u2_temp_base * (1.0F))+ (u2_temp_deadt));    u2_count_w = (uint16_t) ((u2_temp_base * (1.0F))+ (u2_temp_deadt));    }//设置占空比0%
    elseif(g_user_count<=124)    {    u2_count_u = (uint16_t) ((u2_temp_base * (0.5)) + (u2_temp_deadt * 0.5F));    u2_count_v = (uint16_t) ((u2_temp_base * (0.5)) + (u2_temp_deadt * 0.5F));    u2_count_w = (uint16_t) ((u2_temp_base * (0.5)) + (u2_temp_deadt * 0.5F));    }//设置占空比50%
     elseif(g_user_count<=186)     {     u2_count_u = (uint16_t) (0);     u2_count_v = (uint16_t) (0);     u2_count_w = (uint16_t) (0);     }//设置占空比100%
    else    {        g_user_count = 0;    }//循环一周,计数清0
    R_GPT4->GTCCR[4] = (uint32_t) u2_count_u;    R_GPT5->GTCCR[4] = (uint32_t) u2_count_v;    R_GPT6->GTCCR[4] = (uint32_t) u2_count_w;//设置占空比寄存器


用示波器采集输出波形,黄色为GTIOCnA引脚输出,绿色为GTIOCnB引脚输出,紫色为PWM波峰、波时刻,采用翻转I/O口的方式同步指示波峰、波谷时刻,上升沿为波峰,下降沿为波谷。运行样例工程后测试波形如下系列图所示。


RA6单片机4种互补PWM模式原理和实现方法图6

100%到50%的波峰更新细节


RA6单片机4种互补PWM模式原理和实现方法图7

50%到0%的波峰更新细节


RA6单片机4种互补PWM模式原理和实现方法图8

0%到50%的波谷更新细节


RA6单片机4种互补PWM模式原理和实现方法图9

50%到100%的波谷更新细节


RA6单片机4种互补PWM模式原理和实现方法图10

100%到50%的波谷更新细节


RA6单片机4种互补PWM模式原理和实现方法图11

50%到0%的波谷更新细节


本文介绍在RA-T系列芯片设计电机项目时,使用GPT输出带死区的0%和100%的占空比PWM波形,并展示了关键FSP设置步骤和测试程序关键代码。如需样例工程,请复制下方链接至浏览器,或扫描二维码查看下载。


例程下载地址:

https://gitee.com/recn-mcu-ae/overmodulationshare


------------ END -----------



关于科技区角:国内科技展会垂直内容策划服务商,提供从论坛内容全案策划、会展市场化IP打造到精准专业观众一站式邀约服务,以产业内容吸引高质量B端人群,打通展会从议题设计、演讲嘉宾邀约、宣传预热、精准邀观到供需对接全链路。
声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。
单片机
more
单片机电池供电产品设计要点
搞单片机开发的IDE,都在趋向VS Code
单片机OTA传输协议深入分析
分享一个占用单片机2K内存就能跑的AI模型
单片机自定义printf函数的几种写法
如何将单片机变量“钉”在Standby RAM中?
单片机开发为啥很少用C++?
单片机BootLoader与APP如何合并?
单片机工程师面试时可能会遇到的几个问题
不会写单片机不会画电路板?做完这个四轴飞行器,我把STM32和PCB全搞懂了!
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号