TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

文章目录


在[1]的26.15节介绍了高精度PWM,内容翻译可以参考[2]。本文对个人认为应用中需要注意的点做记录。
对于2838x,最低允许的HRPWMCLK频率是60MHz,Micro Edge Positioning (MEP) 步长典型值是150ps,最大值是310ps。

26.15.1 HRPWM的操作描述

26.15.1.2 HRPWM 时钟源

每个HRPWM模块均通过各自的EPWMxCLK进行计时。HRCAL有一个单独的时钟。例如,HRPWM1来自EPWM1CLK,而HRPWM2来自EPWM2CLK。
TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

不能用CPU2通过ePWM2至ePWM8模块配置HRCAL的寄存器。

26.15.1.3 配置HRPWM

  • 影子模式—提供与常规PWM相同的影子(双缓冲)选项模式。只对CMPAHR,CMPBHR和TBPRDHR有效,并且应选择与CMPA,CMPB寄存器相同的加载方式。影子模式对高精度相位寄存器TBPHSHR无效。
  • 自动转换模式—该模式结合纯软件的SFO技术实现。对于Type 4 HRPWM模块,以CMPAHR为例是说明自动转换模式。如果启用了自动转换,则CMPAHR = 小数部分(PWMduty * PWMperiod)<< 8。SFO软件将在后台计算MEP的值,它将自动更新HRMSTEP的值。然后,MEP校准模块将使用HRMSTEP和CMPAHR寄存器中的值自动计算适当的数字,并移动高分辨率ePWM信号相应地边缘。如果禁用了自动转换,则CMPAHR寄存器的行为类似于Type 0 HRPWM模块,CMPAHR =(小数部分(PWMduty * PWMperiod)* MEP比例因子+0.5)<< 8)。在这种模式下,所有计算都需要由用户代码执行,而HRMSTEP寄存器被忽略。高分辨率周期的自动转换与高分辨率占空比的自动转换具有相同的行为。当使能高分辨率周期模式时,必须始终启用自动转换。

如果HRPWM模块被配置为增减计数器模式,则HRPWM寄存器的影子模式必须同时设置为在ZERO和PERIOD加载。来自用户的新值仅在CTR=ZERO时加载到阴影寄存器,但寄存器的影子模式必须同时设置为ZERO和PERIOD。CTR=PRD事件用于HRPWM模块内的特定内部逻辑。

自动转换模式还执行CMPBHR、DBREDHR和DBFEDHR的计算。SFO软件将计算后台代码中的MEP比例因子,并使用计算出的每个粗略步长的MEP步长数自动更新HRMSTEP寄存器。MEP校准模块随后将使用HRMSTEP和CMPBHR或DBREDHR/DBFEDHR寄存器中的值,自动计算由小数表示的适当MEP步数,并相应地移动高分辨率ePWM信号边缘。如果禁用自动转换,则CMPBHR的行为与CMPAHR相同。CMPBHR=(小数部分(PWMduty*PWMperiod)*MEP比例系数+0.5)<<8)。

26.15.1.5.3 占空比范围限制

在高分辨率模式下,MEP并不是在所有100%的占空比都有效:

  • 当没有使能高分辨率周期(TBPRDHR)控制时,新周期开始后的三个EPWMCLK后开始启用。也就是每个周期开始的三个EPWMCLK内是无法使用高分辨率的。
  • 当通过HRPCTL寄存器使能高分辨率周期(TBPRDHR)控制时:
    • 增计数时:有效占空比范围是:周期开始后的3个EPWMCLK周期,至周期结束前的3个EPWMCLK周期
    • 增减计数时:向上计数时,有效占空比范围是CTR = 0之后3个周期,直到CTR = PRD之前的3个周期,向下计数时,有效占空比范围是CTR = PRD之后3个周期,直到CTR= 0之前的3个周期。
  • 使用DBREDHR或DBFEDHR时,DBRED和/或DBFED寄存器时(对应于边缘的寄存器高分辨率位移)必须大于或等于7。(如果是200MHz的时钟,约对应时间为35ns)

注意:如果应用程序使能了高分辨率周期控制(HRPCTL [HRPE] = 1),则占空比必须在限制范围外。否则,将存在未定义行为的ePWM输出。

26.15.1.5.4 高分辨率周期

当仅在ePWMA输出使能高分辨率周期控制,而不对ePWMB使用时(反之亦然),在增计数时,非高分辨率输出将具有+/- 1 TBCLK周期的抖动,在增减计数时有+/- 2 TBCLK周期抖动。

26.15.1.5.4.1 高分辨率周期配置

使用高分辨率周期功能时,ePWMx模块必须严格按照流程配置

启用高分辨率周期模式时,EPWMxSYNC脉冲将向PWM引入+/- 1-2周期抖动(在增计数模式为+/-1周期,在增减计数模式为+/-2周期)。因此,不应将EPWMxSYNCO源设置为CTR=0或CTR=CMPB。否则,同步脉冲的每个PWM周期都会出现抖动。
当EPWMxSYNCI是EPWMxSYNCO源时,在高分辨率周期初始化期间只应发出一次软件同步脉冲。如果在PWM运行时应用软件同步脉冲,则同步脉冲时PWM输出上将出现抖动。

26.15.1.6 高分辨率死区操作

在增计数模式,当同时使用高分辨率占空比和高分辨率周期控制时,高分辨率死区不可用。
与使用HRPWM时的占空比限制一样,DBRED和DBFED值必须大于3才能使用高分辨率死区。

26.15.1.7 Scale Factor Optimizing Software (SFO)

MEP步长随电压的下降和温度的上升而增大,随电压的升高和温度的下降而减小。

26.15.2 SFO Library Software - SFO_TI_Build_V8.lib

  • SFO()函数的典型运行时间是130000个EPWMCLK。如果考虑200MHz的时钟,则对应65us。
  • SFO()校准完成并计算出新的比例因子后,程序返回1。如果校准仍在运行,则返回0。如果存在错误,则例程返回2,并且MEP_ScaleFactor为大于每个粗略EPWMCLK周期的最大255个MEP步长。在这种情况下,HRMSTEP寄存器将保持上一个小于256的MEP比例因子值,以进行自动转换。
  • 该函数可以作为后台任务在慢循环中运行,需要的CPU周期可以忽略不计。SFO函数需要执行的重复率取决于应用程序的操作环境。与所有数字CMOS器件一样,温度和电源电压变化对MEP操作有影响。然而,在大多数应用中,这些参数变化缓慢,因此通常每5到10秒执行一次SFO功能就足够了。如果预计会出现更快速的变化,则可能必须更频繁地执行以匹配应用程序。注意,SFO函数重复率没有上限限制,因此它可以在后台循环能够执行时尽快执行。
  • 使用HRPWM功能时,在PWM周期的前3个EPWMCLK周期内HRPWM逻辑将不激活(如果使用TBPRDHR,则在最后3个EPWMCLK周期内也不激活)。
  • 使用HRPWM功能时,如果禁用高分辨率周期控制(HRPCTL[HRPE=0]),且CMPA/CMPB寄存器值小于三个周期,则其CMPAHR/CMPBHR寄存器必须清除为零。如果启用高分辨率周期控制(HRPCTL[HRPE=1]),CMPA寄存器值不得低于3或高于TBPRD-3,避免PWM信号发生任何意外转换。

个人评价

自己刚刚入门HRPWM,凭第一印象写些评价,不一定对:

  • HRPWM的限制比想象中的多;
  • 最小3个周期的限制在设计软启动部分的代码时需要注意,当CMPA/CMPB小于3时,注意将CMPAHR/CMPBHR寄存器清零。
  • 高分辨率周期在LLC或者需要抖频的场合可能有帮助,但会为ePWM模块间同步带来很多麻烦;
  • 对于复杂的PWM策略,比如需要CMPA和CMPB同时控制ePWMxA,而ePWMxB由死区模块取反输出时,有必要使用死区高分辨率。

考虑到2838x的ePWM模块时钟可以配置为200MHz,天然比过去100MHz的频率高一倍,所以分辨率也高了一倍,暂时不准备在实际应用中使用高精度了。

例程

C2000ware4.0 中2838x有7个HRPWM相关的例程。手册里的描述简直是一场灾难,不看代码根本不知道例程想表达什么,而且一个与高分辨率死区有关的例子都没有。

  • 6.140 HRPWM Duty Control with SFO
  • 6.141 HRPWM Slider
  • 6.142 HRPWM Period Control Up-Down with SFO
  • 6.143 HRPWM Duty Control with UPDOWN Mode with SFO
  • 6.144 HRPWM Slider Test with Qformat
  • 6.145 HRPWM Duty Up Count with Qformat
  • 6.146 HRPWM Period Up-Down Count with Qformat

需要高分辨率死区的例程时可以参考2837xD的例程6.74 HRPWM Dead-Band Example (hrpwm_deadband_sfo_v8)

参考文献

  1. TMS320F2838x Real-Time Microcontrollers With Connectivity Manager Technical Reference Manual
  2. 28004x HRPWM 中文翻译
上一篇:PWM脉宽调制


下一篇:stm32f031 hal pwm周期频率计算和配置以及无输出的解决办法