cancel
Showing results for 
Search instead for 
Did you mean: 

TRAVEO™ T2G

chme_4646286
New Contributor

基于CYTVII-B-E-1M-SK验证SDL7.3 TCPWM timer功能,示例代码路径如下:

T2G_Sample_Driver_Library_7.3.0\tviibe1m\src\examples\tcpwm\timer

附件是验证的cm4代码(“tviibe1m_flash_cm4_mc_template.eww”工程);

目前出现的问题是:

TCPWM计数时钟配置为10MHz,当周期寄存器设置为5us时,通过IO翻转,实测波形正常;

chme_4646286_0-1637241523242.png

当把周期寄存器配置成1us时,发现IO翻转波形出现异常,如下所示:

chme_4646286_1-1637241586041.png

无论是波形周期,还是占空比,都出现错误;

请问出现该问题的原因是IO不支持高速翻转,还是TCPWM配置错误呢?

如果是IO翻转有频率限制,那datasheet哪里有对应的参数说明?

期待答复,谢谢~~

 

 

0 Likes
7 Replies
yanf
Moderator
Moderator

Hi chme_4646286,

产生PWM波可以使用PWM专用模块,不需要使用counter模块。

在PWM模块中可以更方便的配置频率和占空比。根据您代码中的上下文判断,您配置的是1MHz的PWM波而不是10MHz,我在1MHz用例程测试没有发生问题。

请参考SDL library - pwm - normal例程

Best Regards,

Finn

0 Likes
yanf
Moderator
Moderator

Hi chme_4646286,

使用通用GPIO在高频翻转时将出现严重失真,请查看附图(频率约为13MHz)。

所以当需要高频PWM波形时,请仅使用PWM模块,并将GPIO的hsiom配置到对应PWM模块

Best Regards,

Finntek00000 (2).png

0 Likes
chme_4646286
New Contributor

Hi yanf;

感谢你的答复;

这里我并不是要验证PMW功能,此处IO翻转的目前只是为了验证我设置的timer周期值是否和实际值保持一致;

就如我示例中修改的:

外设时钟我设置的10MHz,在counter寄存器结构体中不再分频,peirod寄存器计数10次,

如下所示:

cy_stc_tcpwm_counter_config_t const MyCounter_config =

{

    .........

     .period = 10ul - 1ul, // 10,000,000Hz / 10 = 1us
    .clockPrescaler = CY_TCPWM_COUNTER_PRESCALER_DIVBY_1, // 10,000,000Hz / 1 = 10MHz

    ........

}

此时timer中断周期应该是1us,通过IO翻转检测该周期值;

但是IO翻转测的波形明显不对(如第一个问题中的附图),能帮忙解答下为什么会出现这种问题吗?

0 Likes
yanf
Moderator
Moderator

Hi chme_4646286,

我明白您的意思了,您希望了解出现您附图中的错误是否由于定时器不准确。

这种情况是由于通用GPIO无法支持高速翻转,导致波形不准确。您可以做一下试验,将target frequency设置为2000000 (2MHZ)

此时Period 设置为10,波形准确。Period 设置为1,波形不准确。

如果是由于定时器不准确,period为10时,误差为10倍累计,更加不准确。所以定时器不准确不成立。

是普通GPIO不支持高速翻转导致的这样的情况,并非定时器不准确。高速PWM波需要使用PWM对应的GPIO复用类型。

yanf_0-1637549887890.png

Period = 10

 

yanf_1-1637549911445.png

Period = 1

 

0 Likes
chme_4646286
New Contributor

Hi yanf;

是普通GPIO不支持高速翻转导致的这样的情况”,我觉得并不能解释该问题;

原因如下:

附件是我基于systick模块验证的timer 中断,当配置中断时基是1us时,使用通用的IO(P12_1)端口,其翻转波形时正常的,如下图所示;

chme_4646286_0-1637558729930.png

所以P12_1端口以1MHz的频率翻转,是不会出现波形异常的;

那使用TCPWM模块时,同样配置1us定时中断,且使用P12_1端口翻转测试,为什么1us波形会异常呢?

期待你的答复,谢谢~~

0 Likes
yanf
Moderator
Moderator

Hi chme_4646286,

经过测试这种情况确实存在。我们正在内部讨论排查原因。谢谢您的等待。

Best Regards,

Finn

0 Likes
yanf
Moderator
Moderator

Hi chme_4646286,

我们将有问题的代码放入M0+ / M4核中分别跑,发现能到达的最大翻转频率不同。而两段代码是相同的,也就是说TCPWM的配置是相同的。

所以我们认为当频率较高(在500kHZ后),出现翻转频率错误的原因是由于M0无法及时响应并完成中断服务函数导致的。也就是说,在CPU依然处理前一次的中断服务函数时,下一个TCPWM触发的中断已经到来,这导致了实际翻转频率偏低。在频率更快的M4上,其可以支持到翻转频率更高,大约1.1MHZ。

Systick作为ARM核内的模块,访问速度较片内外设TCPWM模块有优势,所以其响应中断、清除标志位的速度更快,核心能够以更高的频率响应它的中断。但频率足够高时,也会出现类似的形况。

由于芯片已经是ASIC电路,我们无法进行类似Pre-silicon-validation-process的深入研究去观察TCPWM模块实际的中断多久产生一次,在高频下产生是否正常。非常抱歉。但TCPWM模块share共同的时钟源和计数器,如果PWM能在高频下正常工作,那么counter在高频下的工作也应该是正常的。

 

Best Regards,

Finn

0 Likes