Bootstrap

F280049C_技术手册--HRPWM_DBREDHR_DBFEDHR

HRPWM 的操作说明

手册:

        The HRPWM is based on micro-edge positioner (MEP) technology. MEP logic is capable of positioning an edge very finely by sub-dividing one coarse system clock of a conventional PWM generator. The time step accuracy is on the order of 150ps

        HRPWM 基于微边缘定位器 (MEP) 技术。MEP 逻辑能够通过细分传统 PWM 发生器的一个粗略系统时钟来非常精细地定位边缘。 时间步精度约为150ps

        The MEP of the HRPWM is controlled by six extension registers. These HRPWM registers are concatenated with the 16-bit TBPHS, TBPRD, CMPA, CMPBM, DBREDM, and DBFEDM registers used to control PWM operation.       

        HRPWM 的 MEP 由 6 个扩展寄存器控制。 这些 HRPWM 寄存器与用于控制 PWM 操作的 16 位 TBPHS、TBPRD、CMPA、CMPBM、DBREDM 和 DBFEDM 寄存器连接。

特别注意:

        HRPWM capabilities on Deadband Rising Edge Delay and Falling Edge Delay is applicable only during dead band half cycle clocking Operation. The number of MEP steps is half in size [bits 15:9 ]than duty and phase high-resolution registers for the same reason.

        死区上升沿延迟和下降沿延迟的 HRPWM 功能仅在死区半周期时钟操作期间适用。 出于同样的原因,MEP 步数的大小 [位 15:9] 是占空比和相位高分辨率寄存器的一半。

小沙:这里在实际代码中写的话,需要额外乘以 `2` 来调整计时,确保死区时间与实际的时钟周期同步。其实就是计数频率变高了两倍。

HRPWM Source Clock

        The HRPWM module and HRCAL module are clocked from the EPWM1CLK. Therefore, EPWM1CLK must be enabled for the HRCAL or any of the HRPWM modules to be enabled.Figure 18-85 shows the HRCAL and HRPWM modules sourced from the ePWM1 clock source.

        HRPWM 模块和 HRCAL 模块由 EPWM1​​CLK 提供时钟。 因此,必须使能 EPWM1​​CLK 才能使能 HRCAL 或任何 HRPWM 模块。 图 18-85 显示了源自 ePWM1 时钟源的 HRCAL 和 HRPWM 模块。

MEP 步长、PWM 频率和分辨率之间的关系:

小沙:这里我的EPWM的Sys Clock为100Mhz,就是10ns一个Step,MEP的Step就是10ns/56=0.178ns,差不多是178ps,符合上面他说的MEP步进周期。

        这里F280049C和F280039C的HRPWM的Source CLock的结构不一样,39C的HRPWM根据各自的EPWM信号给出的,而不是49C统一通过EPWM1给出

手册中关于DBREDHR的详细解释:

小沙:DBREDHR寄存器一共16位,0-8是保留位,只有9-15是寄存器值。同时DBREDHR又是DBRED寄存器的一部分。

测试产生28ns的死区时间(F280049C,上升沿和下降沿相同死区时间):

1.根据手册的计算公式给·出的寄存器值为:

           高16位DBFED:

        28ns/5ns=5.6ns                                                                (死区时间除EPWM周期5ns)

        0000 0000 0000 0101 == 5                                              (5个EPWM周期转换二进制)

低16位DBFEDHR:

(0.6ns*55+0.5)= 33.5约等于33                         (和手册中计算DBREDHR寄存器值步骤一致)

(手册中*256代替了左移8位,但是根据手册硬件会忽视0-9位的寄存器值,这里我感觉应该是左移9位,*512才对,有点奇怪。)

把33替换成二进制0010 0001并添加低8位就可以得到下面的寄存器的数值:

     0000 0000 0000 0101 0010 0001 0000 0000 = 336128

 DAB_HAL_updatePWMDeadBandSec(336128,336128);                                       修改死区寄存器

结果死区时间是22ns

2.根据TI的代码计算28ns所需要的寄存器值为:

#pragma FUNC_ALWAYS_INLINE(DAB_calculatePWMDeadBandSecTicks)
static inline void DAB_calculatePWMDeadBandSecTicks(void)
{
    uint32_t ticks;

    //
    // 65536 denotes 2^16, 0.000000001 for ns
    // 2.0f is needed due to half-cycle clocking mode 
    //
    ticks = ((uint32_t)(DAB_pwmDeadBandREDSecRef_ns * (float32_t)65536 *
            ((float32_t)0.000000001) * DAB_PWMSYSCLOCK_FREQ_HZ * 2.0f));
    DAB_pwmDeadBandREDSec_ticks = ( ticks & 0xFFFFFE00);

    ticks = ((uint32_t)(DAB_pwmDeadBandFEDSecRef_ns * (float32_t)65536 *
            ((float32_t)0.000000001) * DAB_PWMSYSCLOCK_FREQ_HZ * 2.0f));
    DAB_pwmDeadBandFEDSec_ticks = ( ticks & 0xFFFFFE00);

}

寄存器值=28 * 65536 * 10^-9 * 100*10^6 * 2 = 367001.6

0000 0000 0000 0101 1001 1001 1001 1001 = 367001                               (转二进制,并高位补0)

DAB_HAL_updatePWMDeadBandSec(367001,367001);                                       修改死区寄存器

结果死区时间是22ns

        两者之间从我的DSlogic看出来死区时间都是22ns,怀疑是对死区时间很小的控制能力不行,并且在手册中我有看到对与HRPWM的计数值不能低于某个值的警告。(DBRED和DBFED值必须大于3才能使用高分辨率死区。)应该是这个问题,误差有点大,误差有6ns左右,但是对于500ns的死区时间。观测到的死区时间最大误差为498ns。精度确实比低死区时间高很多。

同样的方法测试324.5ns的死区时间:

1.TI的代码:DBRED VALUE = 4253286(Dec)

2.手册计算:DBRED VALUE = 0000 0000 0100 0000 0011 0010 0000 0000 = 4207104(Dec)

        结果依旧是一样的,死区时间还是相同,对于这个DBRED或者DBFED的寄存器值。

那对比这两个不同的数值的二进制:

手册计算:0000 0000 0100 0000 || 0011 0010 0000 0000         = 4207104(Dec)
Ti:           0000 0000 0100 0000 || 1110 0110  0110 0110         =  4253286(Dec)

        DBREG的值是一样的对于低16位来比较,4253286(Dec)的低8位有数值,手册说硬件会忽视,不看低8位。并且Ti的代码中也是对低9位进行清零的,来对比9:15位的MEP的步进周期数。也就是HRPWM的部分:

        1.Ti代码:1110 0110(Bin) =  230 (Dec)

        2.手册计算:0011 0010(Bin)= 50(Dec)

        324.5ns/5ns = 64.9得出小数部分应该是0.9是对的,从公式倒推回去,50/55=0.9,是符合的毕竟是这么推过来的。但是Ti代码计算出的HRPWM的寄存器值很奇怪。后面我只修改这里HRRED寄存器的值对死区时间的变化没有影响。不知道这个HRPWM存在的实际意义是什么,对于180ps的MEP步进周期计数,但光是一些误差就有好几个ns,感觉不太好用。还待学习.....

2024/12/11 20:42:09 -Erick 
 

;