跳转到主要内容

RA2E1定时器带死区互补PWM中断延时问题分析

<strong><font color="#4e5e9e">概述</font> </strong>

本次测试用的是RA生态工作室提供的R7FA2E1A72DFL demo板,控制定时器输出互补的带死区PWM,并通过中断触发一对IO口的电平切换。

<strong><font color="#4e5e9e">问题</font> </strong>

为什么使用GPT输出带死区的互补PWM,进入比较匹配中断后会有一小段延时才开始执行callback。

<strong><font color="#4e5e9e">分析</font> </strong>

触发中断后没有马上执行逻辑操作,在底层耗时太长。

<strong><font color="#4e5e9e">操作</font> </strong>

使用e2 studio配置工程分析现象

<strong>1、GPT模块的设置</strong>

时钟框图如下,GPT0是32位定时器,GPT4、GPT5、GPT6、GPT7、GPT8和GPT9是16位定时器。

<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259126-1.png&…; alt=“图1 GPT框图" /></center><center><i>图1 GPT框图</i></center>

<strong>2、配置工程时需要注意对应通道是0,4,5,6,7,8,9,没有1,2,3。</strong>

配置过程:

timer7,P302->GTIOC7A,P301->GTIOC7B,20kHz,duty=50%,打开Capture A Interrupt(compare match A),输出互补同步三角波pwm,死区设1us。

<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259127-2.png&…; alt=“图2 GPT配置" /></center><center><i>图2 GPT配置</i></center>

<strong>3、配置IO口在callback进行翻转</strong>

<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259128-3.png&…; alt=“图3 在timer7_callback触发IO翻转" /></center><center><i>图3 在timer7_callback触发IO翻转</i></center>

现象如下:

A:死区时间AB设定为1us,1,2通道为GTIOC7A(P302)和GTIOC7B (P301)

B:触发比较匹配中断后,翻转3(P103)通道和4(P104)通道的电平

从触发中断到完成3,4通道电平翻转的时间AC为3.3us。

<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259129-4.png&…; alt=“图4 定时器中断触发IO翻转时间" /></center><center><i>图4 定时器中断触发IO翻转时间</i></center>

分析——使用GPT输出带死区的互补PWM,进入比较匹配中断后会有一小段时间的延时才开始执行电平翻转:

a:通过操作寄存器完成翻转的时间为350ns,因此排除操作IO口占用时间的因素

b:在callback中完成电平翻转需要3.3us

<strong>4、为了缩短时间,把IO翻转改到gpt_capture_a_isr中执行,不在r_gpt_call_callback中执行IO翻转,</strong>

<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259130-5.png&…; alt=“图5 gpt_capture_a_isr" /></center><center><i>图5 gpt_capture_a_isr</i></center>
<center><img src="http://mcu.eetrend.com/files/2022-06/wen_zhang_/100561568-259131-6.png&…; alt=“图6 触发中断到完成IO翻转时间为AC:1.22us" /></center><center><i>图6 触发中断到完成IO翻转时间为AC:1.22us</i></center>

<strong><font color="#4e5e9e">结论</font> </strong>

因为执行r_gpt_call_callback前后还需要执行一段代码,执行底层耗时过长,因此把callback改为NULL,然后在ISR底层中执行R_PORT1->PCNTR3_b.POSR,是目前测试时间最短的操作了。

来源:<a href="https://mp.weixin.qq.com/s/h5qvBppMx0AEmyU6L4aU5A">瑞萨MCU小百科</a&gt;
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。