TMS320F28004xHRPWM中文翻译
HRPWM模块的特点:
- 扩展了时间分辨率。
- 占空比和相位控制都能应用。
- 比较A,比较B、相位寄存器拥有更精细的时间粒度控制。
- EPWMxA and EPWMxB 都拥有高精PWM输出能力。
- 在半周期操作时,死区的上升沿和下降沿实现高精控制。
- HRPWM生效自诊断功能。
- EPWMxA 和 EPWMxB 切换高精输出功能。
- 使能EPEMxB高精度的输出,通过EPWMxA的取反。
- 每个EMPWM模块都使能高精度的周期,占空比,相位在EPWMxA和EPWMxB输出。
一般来说,对于控制频率低于250kHz的应用不需要使用HRPWM。它一般应用于以下拓扑:
- 单相和多相交错Buck,Boost以及FlyBack电路
- 移相全桥
- D类放大器
关于PWM的位数定义如下图所示:
典型的PWM和高精PWM的位数对比如下图所示。可见HRPWM对于高频载波工作时,能提高系统的工作稳定度。
HRPWM的操作描述
HRPWM是基于微边沿控制技术(MEP)能够实现150ps的时间分辨功能。下图表示了系统时钟的粗信号与MEP细分信号的关系。每个粗信号包含了若干个细分信号,个数是动态的。随芯片内部电压和温度有关系。
HRPWM可配置的项
MEP包括了6个扩展的寄存器。它们是与16位的TBPHS, TBPRD, CMPA, CMPB, DBREDM & DBFEDM 结合在一起。
- TBPHSHR 高精相位寄存器。
- CMPAHR 高精比较A寄存器,注意它与A通道的AQ产生作用,而不是CMPA。
- TBPRDHR 高精周期寄存器。
- CMPBHR 高精比较B寄存器,注意它与B通道的AQ产生作用,而不是CMPB。
- DBREDHR 高精死区发生器上升沿延迟寄存器。
- DBFEDHR 高精死区发生器下降沿延迟寄存器。
下图灰色区域,是HRPWM作用相关的区域。请仔细观察。
HRPWM功能通过通道A和B的PWM信号路径进行控制。通过配置HRCNFG2寄存器也可以支持死区控制。 下图显示了HRPWM如何与8位扩展寄存器接口。
HRPWM 时钟源
HRPWM模块的时钟来自于EPWM1的时钟,因此EPWM1CLK必须使能。下图显示了时钟结构。
配置HRPWM
一旦将ePWM配置为提供给定频率和极性的常规PWM,进一步可以通过对特定ePWM模块的寄存器中的HRCNFG寄存器进行编程来配置HRPWM。该寄存器提供以下配置选项:
- 边沿模式—可对MEP进行编程,以在上升沿(RE)上,下降沿(FE)或同时出现两个沿(BE)提供精确的位置控制。 FE和RE用于电源拓扑需要占空比控制(CMPA或CMPB高分辨率控制),而BE用于拓扑需要相移,例如相移全桥(TBPHS或TBPRD高分辨率控制)。
- 控制模式—MEP是可编程的,通过CMPAHR / CMPBHR寄存器应对占空比控制,通过TBPHSHR寄存器应对相位控制。
- 影子模式—该模式提供与常规PWM相同的阴影(双缓冲)选项模式。且只对CMPAHR,CMPBHR和TBPRDHR有效,并且应选择与CMPA,CMPB寄存器的相同的加载方式。影子模式对TBPHSHR无效。
- 高分辨率B信号控制—通过在ePWM通道上输出高分辨率ePWMxA信号的反相版本,ePWM通道的B信号路径可以生成高分辨率输出。ePWMxB引脚。 Type 2或Type 4 HRPWM模块还可以启用高分辨率特性,其B信号路径也独立于A信号路径。28004x是Type4。
- 交换ePWMxA和ePWMxB输出—此模式可以交换高分辨率A和B输出。模式选择允许A和B直接输出,或A上输出B、B输出在A。
- 自动转换模式—该模式结合纯软件的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寄存器被忽略。高分辨率时段的自动转换与高分辨率占空比的自动转换具有相同的行为。当使能高分辨率周期模式时,必须始终启用自动转换。
在死区上升沿和下降沿延迟中配置高分辨率
一旦将ePWM配置为固定的频率,极性和半周期时钟模式下启用死区,对死区RED和FED进行高分辨率操作
通过在特定ePWM模块的寄存器中对HRCNFG2寄存器进行编程来启用。该寄存器提供以下配置选项:
- 边沿模式—可对MEP进行编程,以在死区上升时提供精确的位置控制边沿(RED),死区下降沿(FED)或两个边沿(DBRED信号的上升沿和下降沿DBFED信号的边沿)。
- 控制模式—选择将事件值加载到活动寄存器中的影子值以用于DBRED和DBFED处于高分辨率模式。用户需要选择脉冲以匹配ePWM DBCTL [LOADREDMODE]和DBCTL [LOADFEDMODE]位。
操作规则
MEP逻辑能够以255个(8位)离散时间步长之一放置边沿(请参阅特定于设备的数据表典型的MEP步长,28004x是150ps)。 MEP与TBM和CCM寄存器一起使用以确保最佳地应用时间步长,并在宽范围的范围内保持边缘放置精度
PWM频率,系统时钟频率和其他工作条件。下表显示了HRPWM支持的典型工作频率范围。
边沿位置
注意:下面的示例使用[CMPA:CMPAHR]寄存器组合显示。理论上如果用户打算使用[CMPBM:CMPBHRM]进行占空比操作,则运算和方程式是相同的。
在典型的功率控制环路中,数字控制器发出占空比命令,通常以存小数表示或百分比表示。假设对于特定的工作点,要求的占空比为0.405或40.5%且所需的转换器PWM频率为1.25 MHz。假定此时PWM系统时钟设定在100 MHz,占空比选择在40.5%附近。如下图所示,32个计数(320ns,占空比= 40%)的比较值最接近可达到的40.5%。这等效于320 ns的边缘位置,而不是所需的324 ns,因为100MHz的时间颗粒为10ns,因此只能输出320ns、330ns无法输出324ns。
通过使用MEP,可以实现更接近324 ns所需点的边缘位置。下表显示了除了CMPA值,22个MEP(CMPAHR寄存器)将边沿定位在323.96 ns处,导致误差几乎为零。在此示例中,假定MEP步进分辨率为180 ps。
缩放注意事项
上面已经演示了如果通过结合使用标准CMPA和MEP(CMPAHR)寄存器实现了快速高精边沿定位。但是,在实际应用中,有必要无缝地为CPU分配整数位和小数位,并且把它写入[CMPA:CMPAHR]寄存器组合。
为此,首先检查涉及的缩放或映射步骤。在控制软件中以纯小数或百分比为单位来表示占空比,比用时钟数或ns数的表示方式更有计算的方便性而无须关心最终的绝对占空比。此外,它使代码在不同运行方式的多种PWM频率转换器类型之间更具可移植性。
要实施映射方案,需要两步缩放过程:
假设:
TBCLK = 10ns(100Mhz)
PWM Frequency = 1.25Mhz(1/800ns)
所需占空比 = 0.405(40.5%)
PWM周期的粗步数 = 80(100/1.25)
每个粗步包含的MEP个数 = 55(10ns/180ps)
将CMPAHR保持在1-255范围内,小数四舍五入 = 0.5(0x80)
-
用于CMPA寄存器的整数值转换
CMPA的值 = int(PWMDuty * PWMPeriod); int表示整数部分
= int(0.405 * 80 )
= int(32.4)
= 32
-
用于CMPAHR寄存器的小数值转换
CMPAHR = (frac(PWMDuty * PWMPeriod)*MEP_ScaleFactor
+0.5) << 8); frac means fractional part
= (frac(32.4) * 55 + 0.5) << 8; Shifting is to move the
value to the high byte of CMPAHR.
= (0.4 * 55 + 0.5) << 8
= (22 + 0.5) << 8
= 22.5 * 256;
= 5760 (0x1680)
注意:如果AUTOCONV位(HRCNFG.6)被置1并且MEP_ScaleFactor在HRMSTEP中寄存器,CMPAHR / CMPBHR寄存器值= frac(PWMDuty * PWMperiod << 8)。其余的转换计算是在硬件中自动执行的,并且正确的MEP标定的信号沿出现在ePWM通道输出上。如果未设置AUTOCONV,则以上计算必须由软件执行。
注意:MEP比例因子(MEP_ScaleFactor)随系统时钟和DSP操作而变化条件。 TI提供了MEP比例因子优化(SFO)软件C功能,该功能使用每个HRPWM中的内置诊断程序并返回给定的最佳比例因子的工作点。
比例因子在有限的范围内缓慢变化,因此可以非常缓慢的在后台循环中运行该优化后的C函数。
在存储器中配置了CMPA,CMPB,CMPAHR和CMPBHR寄存器,以便28x CPU的32位数据功能可以将其写为单个串联值,即,[CMPA:CMPAHR],[CMPB:CMPBHR],依此类推。
对于对时间要求严格的每个周期都要运行的控制回路,汇编版本为推荐的。这是一个周期优化功能(11个EPWMCLK周期),需要Q15占空比值作为输入,并写入单个[CMPA:CMPAHR]值。
高精的占空比范围限制
在高分辨率模式下,MEP并不是在所有100%的占空比都有效。它的有效作用范围如下:
-
当没有使能高分辨率周期(TBPRDHR)控制时,新周期开始后的三个EPWMCLK后开始启用。也就是每个周期开始的三个EPWMCLK是不能用的。
-
当通过HRPCTL寄存器使能高分辨率周期(TBPRDHR)控制时:
-
在递增计数模式下:有效占空比范围处于,周期开始后三个EPWMCLK周期,直到期限结束之前的三个EPWMCLK周期。
-
在上下计数模式下:向上计数时,有效占空比范围处于,CTR = 0之后三个周期,直到CTR = PRD之前的三个周期,向下计数时,有效占空比范围处于,CTR = PRD之后三个周期,直到CTR= 0之前的三个周期。
-
-
使用DBREDHR或DBFEDHR时,DBRED和/或DBFED寄存器时(对应于边缘的寄存器高分辨率位移)必须大于或等于7。(如果是100M,约对应时间为70ns)
下面三个图说明了高精有效的占空比的范围限制。该限制规定了MEP上的循环极限。例如,高精的占空比边沿控制无法持续到0%。禁用高分辨率周期控制时,常规PWM占空比控制将完全停止工作尽管前三个周期没有HRPWM功能,但占空比仍为0%。多数情况在应用中,这应该不是问题,因为通常不会把控制器调节点设计为接近0%的占空比。当启用高分辨率周期控制(HRPCTL [HRPE] = 1)时,占空比不得在限制范围内。否则,ePWMxA输出上可能存在不确定的行为(这意味着,软件在设计时需要避开这些点)。
如果应用要求HRPWM在最小占空比限制以下运行,则HRPWM可以配置为在递减计数模式下运行,上升沿位置(REP)由禁用高分辨率时间段(HRPCTL [HRPE] = 0)时的MEP。如下图所述。在在这种配置下,最小占空比限制不再是问题。但是,会有一个最大占空比限制。
注意:如果应用程序启用了高分辨率周期控制(HRPCTL [HRPE] = 1),则占空比周期不得在限制范围外。否则,将存在未定义的行为ePWM输出。
更好的理解HRPWM的占空比可用的范围,一些常规的限制见下表所述。
高分辨率周期
Type1以上的器件支持MEP逻辑的高分辨率周期控制。(可以用于变频控制)
个人理解,对于占空比控制,选择合适的载波频率以保证周期值为整数。就可不用理会高分辨周期。
注意:启用高分辨率周期控制时,仅在ePWMxA上,而不在ePWMxB输出上反之亦然,在递增计数模式下,非高分辨率输出将具有+/- 1 TBCLK周期抖动,并且上下计数模式下+/- 2 TBCLK周期抖动。
之前对占空比描述的缩放过程适用于高分辨率时段,如下:
项目 | 值 |
---|---|
TBCLK | 10ns(100MHz) |
Required PWM frequency | 175 kHz (period of 571.428) |
Number of MEP steps per coarse step at 180 ps (MEP_ScaleFactor) | 55 (10 ns / 180 ps) |
Value to keep TBPRDHR within range of 1-255 and fractional rounding constant (default value) | 0.5 (0080h in Q8 format) |
存在的问题:
In up-count mode:
If TBPRD = 571, then PWM frequency = 174.82 kHz (period = (571+1)* TTBCLK).
If TBPRD = 570, then PWM frequency = 175.13 kHz (period = (570+1)* TTBCLK).
In up-down count mode:
If TBPRD = 286, then PWM frequency = 174.82 kHz (period = (2862) TTBCLK).
If TBPRD = 285, then PWM frequency = 175.44 kHz (period = (2852) TTBCLK)
解决方法:
With 55 MEP steps per coarse step at 180 ps each:
-
整数部分的计算
项目 值 Integer period value = int (571.428) * TTBCLK = int (PWMperiod) * TTBCLK= 571 * TTBCLK In up-count mode: TBPRD = 570 (TBPRD = period value - 1) = 023Ah In up-down count mode:TBPRD = 285 (TBPRD = period value / 2)= 011Dh -
小数部分的计算(高精周期必须开启MEP自动转换)
项目 值 TBPRDHR register value = (frac(PWMperiod) * MEP_ScaleFactor + 0.5) If auto-conversion enabled and HRMSTEP = MEP_ScaleFactor value (55): =frac (PWMperiod) << 8 (Shifting is to move the value to the high byte of TBPRDHR) TBPRDHR register value =frac (571.428) << 8=0.428 × 256=6D00h The autoconversion will then automatically perform the calculation such that TBPRDHR MEP delay is scaled by hardware to: =((TBPRDHR(15:0) >> 8) × HRMSTEP + 80h) << 8 Period MEP delay = (006Dh × 55 + 80h) >> 8=(17EBh) >> 8=0017h MEP Steps
高精周期配置
要使用高分辨率周期,必须按照给出的确切顺序初始化ePWMx模块。
以下步骤将CMPA与影子寄存器和对应的HRCNFG位一起使用以实现高分辨率在EPWMxA上的操作。为了在EPWMxB上进行高分辨率操作,请使用进行适当的替换在B频道字段。
- 使能ePWMx时钟。
- 使能HRPWM时钟。
- 禁用TBCLKSYNC 。
- 配置ePWMx registers - AQ, TBPRD, CC, 等。
- ePWMx只能配置为递增计数或增减计数模式。高分辨率期与递减计数模式不兼容。
- 必须为影子负载配置TBPRD和CC寄存器
- CMPCTL[LOADAMODE]
- 增计数模式: CMPCTL[LOADAMODE] = 1 (load on CTR = PRD)
- 增减计数模式:CMPCTL[LOADAMODE] = 2 (load on CTR=0 or CTR=PRD)
- 配置HRCNFG寄存器,以便:
- HRCNFG[HRLOAD] = 2 (load on either CTR = 0 or CTR = PRD)
- HRCNFG[AUTOCONV] = 1 (Enable auto-conversion)
- HRCNFG[EDGMODE] = 3 (MEP control on both edges)
- 对于高分辨率时段的TBPHS:TBPHSHR同步,请同时设置HRPCTL [TBPSHRLOADE] = 1且TBCTL [PHSEN] =1。在上下计数模式下,这些位必须为1。无论TBPHSHR的内容如何,均设置为1。
- Enable high-resolution period control (HRPCTL[HRPE] = 1)
- Enable TBCLKSYNC
- TBCTL[SWFSYNC] = 1
- HRMSTEP必须包含准确的MEP比例因子(每个EPWMCLK粗步的MEP步数)因为启用了自动转换。可通过SFO()函数获取MEP比例因子。
- 要控制高分辨率周期,请写入TBPRDHR(M)寄存器。
注意:当高分辨率周期模式启用时,EPWMxSYNC脉冲将引入+/- 1 - 2周期抖动到PWM(+/- 1周期在增加计数模式和+/- 2周期在增加-减少计数模式)。因此,不应该将TBCTL[SYNCOSEL]设置为1 (CTR = 0是EPWMxSYNCO源)或2 (CTR = CMPB是EPWMxSYNCO源)。否则,抖动将发生在每一个PWM周期与同步脉冲同时发生。
当TBCTL[SYNCOSEL] = 0 (EPWMxSYNCI为EPWMxSYNCO源)时,在高分辨率周期初始化时只发出一次软件同步脉冲。如果在PWM运行时应用软件同步脉冲,在同步脉冲产生时,PWM输出将出现抖动。利用软件同步可以保证只抖动一次。
死区高精操作
如果将死区设定为整数值,则无需考虑死区高精。
系统时钟 | 10 ns (100 MHz) &Deadband Enabled in half cycle mode, TBCLK =EPWMCLK |
---|---|
Required PWM frequency | 1.33MHz (1 / 750 ns) |
Required PWM duty cycle | 0.5 (50%) |
Required Dead band Rising Edge Delay | 5% over duty |
Required Dead band Rising Edge Delay in ns | (0.05 * 375 ns ) = 18.75 ns |
注意:
就像使用HRPWM时的占空比限制一样,DBRED和DBFED值必须大于3才能使用高分辨率死区。
死区延迟值与DBFED和DBRED的关系:
启用半周期时钟时,用于计算下降沿延迟和上升沿延迟的公式为:
FED = DBFED * TBCLK / 2
RED = DBRED * TBCLK / 2
DBRED和DBFED计算值:
Required Dead band Rising Edge Delay in ns = 18.75 ns
DBRED = RED / (TBCLK / 2)
DBRED = 18.75 ns / 5 ns
DBRED Required = 3.75 ns
With 55 MEP steps per coarse step at 180 ps each:
-
DBREDM寄存器的整数死区值转换(整数部分)
项目 值 Integer DBRED value = int (RED / (TBCLK / 2)) = int (3.75) DBRED = 3 -
死区高分辨率寄存器DBREDHR的小数转换(小数部分)
项目 值 DBREDHR register value = (frac(DBRED Required) * MEP_ScaleFactor + 0.5) << 8 (Shifting is to move the value to the high byte of DBREDHR)
=(frac (3.75) * 55 + 0.5) << 8
= ( 0.75 * 55 + 0.5 ) << 8
=(41.75) * 256 Shifting left by 8 is the same as
multiplying by 256.DBREDHR value =29C0h MEP Steps
Hardware will ignore lower 9 bits in the above
calculated DBREDHR value
注意:如果设置了AUTOCONV位(HRCNFG.6),并且MEP_ScaleFactor在HRMSTEP寄存器中,则DBREDHR:DBRED = frac((required DB值)< <8)。其余的转换计算在硬件中自动执行,并且正确的MEP值在信号边缘出现在ePWM通道输出上。如果没有设置AUTOCONV,则必须通过软件进行上述计算。
Scale Factor Optimizing Software (SFO)
微边沿定位器(MEP)逻辑能够在255个离散时间步长中放置边沿。如前所述,这些步骤的大小约为150ps(请参阅设备特定数据表,了解您设备上的典型MEP步骤大小)。MEP步长根据最坏情况的工艺参数、工作温度和电压而变化。MEP步长随着电压和温度的升高而增大,随着电压和温度的升高而减小。使用HRPWM特性的应用应该使用ti提供的MEP比例因子优化(SFO)软件功能。在HRPWM运行时,通过SFO函数可以动态确定每个EPWMCLK周期的MEP步数。
为了有效地利用MEP功能,软件需要知道MEP比例因子的正确值。为了实现这一点,HRPWM模块内置自检和诊断能力,可用于确定最佳MEP规模因子值的任何工作条件。TI提供了一个C-callable库,包含一个利用该硬件的SFO函数,并确定了最佳的MEP比例因子。因此,MEP控制和诊断寄存器被保留给TI使用。
更加详细的SFO的使用在后续会有描述。
使用优化汇编代码的HRPWM示例
理解HRPWM功能的最佳方法是通过真实的例子。下面是个简单Buck转换器,使用非对称PWM(向上计数)方式。
单相Buck变换器
PWM需求如下:
- PWM frequency = 1 MHz (that is, TBPRD = 100 )
- PWM mode = asymmetrical, up-count
- Resolution = 12.7 bits (with a MEP step size of 150 ps)
下面的示例都有用c编写的初始化和配置代码,为了更容易理解,使用了下面所示的#宏定义。其实,在器件手册的脉冲宽度调制器(ePWM)模块参考指南中介绍时,#宏定义也被使用了。
// HRPWM (High Resolution PWM) //
================================
// HRCNFG
#define HR_Disable 0x0
#define HR_REP 0x1 // Rising Edge position
#define HR_FEP 0x2 // Falling Edge position
#define HR_BEP 0x3 // Both Edge position #define HR_CMP 0x0 // CMPAHR controlled
#define HR_PHS 0x1 // TBPHSHR controlled #define HR_CTR_ZERO 0x0 // CTR = Zero event
#define HR_CTR_PRD 0x1 // CTR = Period event
#define HR_CTR_ZERO_PRD 0x2 // CTR = ZERO or Period event
#define HR_NORM_B 0x0 // Normal ePWMxB output
#define HR_INVERT_B 0x1 // ePWMxB is inverted ePWMxA output
初始化代码如下:
void HrBuckDrvCnf(void)
{
// Config for conventional PWM first
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
EPwm1Regs.TBPRD = 100; // Period set for 1000 kHz PWM
hrbuck_period = 200; // Used for Q15 to Q0 scaling
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1 is the Master
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Note: ChB is initialized here only for comparison purposes, it is not required
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // optional
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; // optional
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // optional
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // optional
// Now configure the HRPWM resources
EALLOW; // Note these registers are protected
// and act only on ChA
EPwm1Regs.HRCNFG.all = 0x0; // clear all bits first
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // Control Falling Edge Position
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; // CMPAHR controls the MEP
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO; // Shadow load on CTR=Zero
EDIS;
MEP_ScaleFactor = 66*256; // Start with typical Scale Factor
// value for 100 MHz
// Note: Use SFO functions to update
MEP_ScaleFactor dynamically
}
中断代码如下:
EPWM1_BASE .set 0x6800
CMPAHR1 .set EPWM1_BASE+0x8
;===============================================
HRBUCK_DRV; (can execute within an ISR or loop)
;===============================================
MOVW DP, #_HRBUCK_In
MOVL XAR2,@_HRBUCK_In ; Pointer to Input Q15 Duty (XAR2)
MOVL XAR3,#CMPAHR1 ; Pointer to HRPWM CMPA reg (XAR3)
; Output for EPWM1A (HRPWM)
MOV T,*XAR2 ; T <= Duty
MPYU ACC,T,@_hrbuck_period ; Q15 to Q0 scaling based on Period
MOV T,@_MEP_ScaleFactor ; MEP scale factor (from optimizer s/w)
MPYU P,T,@AL ; P <= T * AL, Optimizer scaling
MOVH @AL,P ; AL <= P, move result back to ACC
ADD ACC, #0x080 ; MEP range and rounding adjustment
MOVL *XAR3,ACC ; CMPA:CMPAHR(31:8) <= ACC
; Output for EPWM1B (Regular Res) Optional - for comparison purpose only
MOV *+XAR3[2],AH ; Store ACCH to regular CMPB
附录A SFO软件库- SFO_TI_Build_V8.lib
SFO软件典型的所需要运行周期需要130000个EPWMCLK周期。
Scale Factor Optimizer Function - int SFO()
此进程持续驱动微边缘定位器(MEP)校准模块运行SFO诊断和确定适当的MEP比例因子(每粗EPWMCLK步骤的MEP步骤数)。
如果EPWMCLK = TBCLK = 100 MHz,并且假设MEP步长为150 ps,则典型比例因子100 MHz时的值=每TBCLK单位66 MEP步(10 ns)
该函数返回一个MEP比例因子值:MEP_ScaleFactor = Number of MEP steps per EPWMCLK
使用该函数的约束:
- SFO()可以在最小EPWMCLK = TBCLK = 50 MHz一起使用。 MEP诊断逻辑的时钟是EPWMCLK而不是TBCLK,因此EPWMCLK限制是一个重要的约束。在50 MHz以下,随着器件工艺的变化,在低温和芯片内高压下,MEP步长可能会减小,即255个MEP步骤将不会跨越整个EPWMCLK周期。
- 在任何时候,SFO()都可以被调用,从而在MEP校准模块上运行SFO诊断。
用法:
- 当ePWM的HRPWM被开启时,SFO可以在任何时候被调用。所获得的比例因子结果可以应用于在HRPWM模式下运行的所有ePWM通道(因为该功能利用了MEP校准模块(运行中)中的诊断逻辑独立于ePWM通道)。
- 校准完成并计算出新的比例因子后,此程序返回1。如果校准仍在运行,则返回0。如果存在错误,则例程返回2,并且MEP_ScaleFactor为大于每个粗略EPWMCLK周期的最大255个精细步长。在这种情况下,HRMSTEP寄存器将保持最后的小于256的MEP比例因子值,以进行自动转换。
- 当不使用高分辨率周期控制时,在HRPWM中运行的所有ePWM模块的最小占空比限制在3-EPWMCLK周期以上。如果启用了高分辨率时段控制,则会出现一个额外的占空比限制3-PWM周期结束之前的EPWMCLK周期。
- SFO()函数还使用比例因子结果更新HRMSTEP寄存器。如果HRCNFG [AUTOCONV]位置1,当在后台运行SFO()时,应用程序软件仅负责设置CMPAHR =小数部分(PWMduty * PWMperiod)<< 8或CMPBHR =小数部分(PWMduty * PWMperiod)<< 8或TBPRDHR =小数部分(PWMperiod)。MEP校准模块将
使用HRMSTEP和CMPAHR / CMPBHR / TBPRDHR寄存器中的值自动计算由占空比或周期表示的MEP步骤的适当数量,并相应地移动高分辨率ePWM信号沿。 - 如果HRCNFG [AUTOCONV]位清零,则将忽略HRMSTEP寄存器。用户的应用软件将需要手动执行必要的计算:
- CMPAHR = (fraction(PWMduty * PWMperiod) * MEP Scale Factor) << 8 + 0x080
- Similar behavior applies for TBPHSHR, CMPBHR, DBREDHR, DBFEDHR. Auto-conversion must
be enabled when using TBPRDHR.
SFO()程序可以在后台慢循环中调用。重复执行SFO功能的速率取决于应用程序的操作环境。与所有数字CMOS器件一样,温度和电源电压的变化也会影响MEP操作。但是,在大多数应用中,这些参数变化缓慢,因此通常每5到10秒执行一次SFO功能就足够了。如果预计会有更快的变化,那么该程序可能必须更频繁地执行才能匹配应用程序。注意,SFO函数重复率没有上限限制,因此它可以像后台循环一样快地执行。
使用HRPWM功能时,HRPWM逻辑将在每个PWM周期的前三个EPWMCLK无效(如果使用TBPRDHR,则每个PWM周期的最后三个EPWMCLK周期也是无效的)。如果禁用了高分辨率周期控制(HRPCTL [HRPE = 0])并且CMPA / CMPB寄存器的值小于三个周期,则其CMPAHR / CMPBHR寄存器必须清零。如果启用了高分辨率周期控制(HRPCTL [HRPE = 1]),则CMPA寄存器值不得低于3或高于TBPRD-3,避免PWM信号发生任何意外变化。
软件的使用
软件库函数SFO()计算HRPWM支持的ePWM的MEP比例因子模块。比例因子是1-255范围内的整数,表示一个系统时钟周期的微步数。比例因子值以整数返回变量称为MEP_ScaleFactor。如下表所示:
Software Function call | Functional Description | Updated Variables |
---|---|---|
SFO() | Returns MEP scale factor in the HRMSTEP register | MEP_ScaleFactor and HRMSTEP register. |
要使用ePWM的HRPWM功能,建议将按如下描述使用SFO()。
-
Add “Include” Files
#include "F28x7x_Device.h" // F28x7x Headerfile #include "F28x7x_EPwm_defines.h" // init defines #include "SFO_V8.h" // SFO lib functions (needed for HRPWM)
-
Element Declaration
Declare an integer variable for the scale factor value as shown below.
int MEP_ScaleFactor = 0; //scale factor value volatile struct EPWM_REGS *ePWM[] = {0, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs};
-
MEP_ScaleFactor Initialization
SFO()函数不需要MEP_ScaleFactor中的起始比例因子值。使用之前应调用应用程序代码SFO()中的MEP_ScaleFactor变量来驱动MEP校准模块来计算MEP_ScaleFactor值。
// MEP_ScaleFactor initialized using function SFO () while (SFO() == 0) {} // MEP_ScaleFactor calculated by MEP Cal Module
-
Application Code
在应用程序运行时,设备温度和电源电压均可能出现超预期的波动。为了确保为每个ePWM模块使用最佳比例因子,SFO()应该作为较慢的背景循环的一部分定期重新运行。
main () { int status; // User code // ePWM1, 2, 3, 4 are running in HRPWM mode // The status variable returns 1 once a new MEP_ScaleFactor has been // calculated by the MEP Calibration Module running SFO // diagnostics. status = SFO(); if(status==2) {ESTOP0;} // The function returns a 2 if MEP_ScaleFactor is greater // than the maximum 255 allowed (error condition) }
,设备温度和电源电压均可能出现超预期的波动。为了确保为每个ePWM模块使用最佳比例因子,SFO()应该作为较慢的背景循环的一部分定期重新运行。
main ()
{
int status;
// User code
// ePWM1, 2, 3, 4 are running in HRPWM mode
// The status variable returns 1 once a new MEP_ScaleFactor has been
// calculated by the MEP Calibration Module running SFO
// diagnostics.
status = SFO();
if(status==2) {ESTOP0;} // The function returns a 2 if MEP_ScaleFactor is greater
// than the maximum 255 allowed (error condition)
}
附录B HRPWM相关寄存器
HRCNFG Register
该寄存器主要配置A通道和B通道的影子寄存器的装载时间点,边沿控制对象控制模式的选择,以及A和B是否相互交换。还有就是MEP自动转换使能。
HRPWR Register
该寄存器主要配置MEP校准硬件电路是否启动。
HRMSTEP Register
该寄存器是只读寄存器,表示MEP的步数。
HRCNFG2 Register
该寄存器配置死区影子寄存器的装载时间点,边沿控制模式。
HRPCTL Register
高精周期控制寄存器,主要配置高精周期是否使能,以及高精相位加载是否使能。
CMPAHR Register
配置比较值A的高精部分。
DBREDHR Register
配置死区上升沿延迟高精部分。
DBFEDHR Register
配置死区下降沿延迟高精部分。