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。
通过逻辑分析仪看的波形,时间基本吻合