凌思微 le501x 高级定时器 死区时间计算

5010中配置死区时间

本文主要记录,在调试timer互补输出带死区嵌入的PWM功能时,如何计算死区时间。

LE5010中支持互补输出的TIMER只有ADTIM和GPTIMC。其中ADTIM有三路,GPTIMC只有1路。本文以ADTIMER为例。

直接看参考手册里的寄存器 ADTIM_BDTR 的介绍,初步看的时候不太容易懂看懂,举例说明与实际应用也不符,看的也不太明白,下面说下我的理解;
在这里插入图片描述
可以看到死区时间DT是由DTG[7:0]决定的,这里可以看成两个部分[7:5]和[4:0],tdtg表示设置死区时间的步长值。这里还有一个问题tDTS是什么?

根据ADTIM_CR1的寄存器可以得知,tDTS由ADTIM_CR1的CKD决定:
在这里插入图片描述
对应软件的中初始化配置:

TimHandle.Init.ClockDivision = 0;
在这里插入图片描述

配置为0,表示tDTS等于系统时间的周期时间。

打开app_config.h文件,配置系统时钟为16M

#define SDK_HCLK_MHZ (16)

这样可以算出 tDTS = 1/16M = 62.5ns。

接下来就可以算死区时间了。

  • DTG[7:5] = 0xx时,DT=DTG[7:0] x tdtg,此时tdtg=tDTS

    死区时间能以62.5ns的步进,从0调整到127*62.5ns = 7937.5ns

  • DTG[7:5] = 10x时: DT=(64+DTG[5:0]) x tdtg,此时tdtg=2tDTS

    (64+0)x 2 x 62.5ns => (64+63)x 2 x 62.5ns
    换算后:(128~254)x 62.5ns

  • DTG[7:5] = 110时: DT=(32+DTG[4:0]) x tdtg,此时tdtg=8tDTS

    (32+0)x 8 x 62.5ns => (32+15)x 8 x 62.5ns
    换算后:(256~504)x 62.5ns

  • DTG[7:5] = 111时: DT=(32+DTG[4:0]) x tdtg,此时tdtg=16tDTS

    (32+0)x 16 x 62.5ns => (32+15)x 16 x 62.5ns
    换算后:(512~1008)x 62.5ns

示例:

在这里插入图片描述
这里配置的数为0x3f,根据前面的说明可以算出死区时间DT = 63*62.5ns = 3.9375us。
通过逻辑分析仪看的波形,时间基本吻合
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值