使用HRPWM的注意事项
整理分享使用HRPWM的注意事项 ,希望有所帮助,仅作参考,欢迎阅读内容。
内容相关其他词:,内容如对您有帮助,希望把内容链接给更多的朋友!
图1HRPWM的微边沿定位MEP示意图计算举例:如下图所示(开关频率为1MHz),控制精度是由PWM的“计数器值”和“比较值”的来决定。Fx的CPU频率为MHz,假设EPWM模块时钟为MHz,此时EPWM单个计数周期为8.3ns,MEP步长为ps。如此,可将每一个计数周期再细分为8.3ns/ps=.份。如图中单边向上计数模式下,开关频率为1MHz,则三角波载波周期为1us,计数周期TBPRD等于。如果想实现.%的占空比,则边沿时间的控制应当是.*8.3ns=.ns。此时,设定CMPA=(ns),剩下的1.ns(不足单个计数周期)应当由HRPWM模块来实现,也就是CMPA上再加上1.ns=ps=ps*8.3»8个MEP步长。图2单边计数模式下的载波波形其中,PWM分辨率的计算公式,如图3所示。图*WM的分辨率计算公式图4为不同开关频率下的PWM和HRPWM的分辨率。如下图,当开关频率>k,或者所要求的PWM分辨率>(9-bit)时,*则需要使用HRPWM模块。图4PWM和HRPWM的分辨率算例表1.2高精度PWM的相关寄存器高精度PWM相关的寄存器,如CMPAHR/CMPBHR、TBPHSHR、TBPRDHR、DBREDHR和DBFEDHR,以及HRPWM的时钟输入与配置,如图5和图6所示。HRPWM高精度寄存器作用位置是在AQ子模块之后,由此不会影响AQ执行边沿动作。图5HRPWM的相关的寄存器图6HRPWM的相关的寄存器作用位置图7HRPWM的时钟输入与配置其中,需要注意的是CMPAHR寄存器只会影响ChannelA,它跟CMPA没有任何必然关系;CMPBHR寄存器只会影响ChannelB,它跟CMPB没有任何必然关系。同时,CMPAHR和CMPBHR分别可以作用在上升沿、下降沿和上升/下降沿。如下图寄存器的说明可知,如果仅配置CMPAHR寄存器值,而ChannelB上通过死区模块由PWMxA极性翻转而来,ChannelB上则不会产生高精度的PWM波形。若需要ChannelA和ChannelB都需要高精度模式,此时需要将CMPAHR与CMPBHR赋予相同的值,从而产生正确的PWM波形,如图8所示。图8HRPWM的CMPAHR/CMPBHR寄存器说明1.3高精度PWM的CMPAHR/CMPBHR寄存器计算以Fx/Fx为例,CMPAHR的算例及计算过程如下图9所示。分别针对不同CMPAHR和CMPBHR上升沿REP(RisingEdgePosition)、下降沿FEP(FallingEdgePosition)和上升/下降沿BEP(BothEdgePosition)的作用示例。图9HRPWM的CMPAHR算例CMPAHR和CMPBHR上升沿REP作用示例,如图:图CMPAHR和CMPBHR下降沿FEP作用示例,如图:图CMPAHR和CMPBHR上升/下降沿BEP作用示例,如图:图.4创建和配置高精度PWM的工程项目1)创建Driverlib的工程项目Step1:添加"Include"Files:#include"sfo_v8.h"以及所对应的库文件SFO_libStep2:声明VariableDeclarations:uint_tstatus=SFO_INCOMPLETE;uint_tMEP_ScaleFactor=0;//scalefactorvaluevolatileuint_tePWM[(PWM_CH+1)]={0,EPWM1_BASE,EPWM2_BASE};Step3:缩放因子初始化MEP_ScaleFactorInitialization:while(status==SFO_INCOMPLETE){status=SFO();if(status==SFO_ERROR){////SFOfunctionreturns2ifanerroroccurs&#ofMEP//steps/coarsestepexceed*aximumof.//error();}}Step4:增加用户代码并配置对应的寄存器如CMPAHRvoidmain(){intstatus;//Usercode//ePWM1,2,3,4arerunninginHRPWMmode//Thestatusvariablereturns1onceanewMEP_ScaleFactorha*een//calculatedbytheMEPCalibrationModulerunningSFO//diagnostics.status=SFO();for(;;){if(test_ctr<){HRPWM_setCounterCompareValue(ePWM[1],HRPWM_COUNTER_COMPARE_A,(0x+test_ctr));test_ctr++;}else{test_ctr=0;}if(status==SFO_ERROR){////SFOfunctionreturns2ifanerroroccurs&#of//MEPsteps/coarsestepexceed*aximumof.//error();}}}2)Bit-field按寄存器创建的工程Step1:添加"Include"Files:#include"sfo_v8.h"以及所对应的库文件SFO_libStep2:声明VariableDeclarations:Uintstatus=SFO_INCOMPLETE;intMEP_ScaleFactor=0;//scalefactorvaluevolatilestructEPWM_REGS*ePWM[]={0,&EPwm1Regs,&EPwm2Regs};Step3:缩放因子初始化MEP_ScaleFactorInitialization:同上。Step4:增加用户代码并配置对应的寄存器如CMPAHR同上。1.5测试工程与PWM波形2.高精度PWM的注意事项2.1高精度PWM的DeadBand半个TBCLK计数周期生效如下Note提示,死区的高精度模式控制仅在半个TBCLK计数周期生效,如下计算公式可知,若CPU主频直接分频给到EPWM时钟,即TBCLK为MHz,也就是ns,此时DBREDHR和DBFEDHR寄存器仅在5ns计数周期生效,这也是为了进一步保证高精度死区的生成。2.2高精度PWM的DeadBand高精度仅在双边计数Up-Down模式生效如下Note提示,死区的高精度模式控制仅在Up-Down计数模式下生效,这主要是由于HRPWM的Duty占空比高精度模式控制*所造成的。HRPWM在前三拍和后三拍是无效的,此时若想生成0%占空比可由普通PWM生成。硬件上不允许单边计数模式下实现占空比的高精度模式控制。2.3Up-Down模式下高精度PWM的寄存器加载时刻仅Zero-Period生效如下Note提示,双边计数Up-Down模式下高精度控制影子寄存器加载仅在ZEROANDPERIOD生效,HRPWM模块在过周期处用于内部特殊逻辑计算而不进行加载。单边计数Up模式无此*要求。此外单边Down模式下是不支持高精度HRPWM*作。3.结论高精度模式的控制实现与普通PWM配置有差异,总结来说有以下几点:1.CMPAHR负责ChannelA上的高精度控制,CMPBHR负责ChannelB上的高精度控制;2.HRPWM寄存器的生效时刻需要注意;3.死区和占空比高精度实现的模式会对计数方式有要求;4.单独某一个ChannelA上实现高精度会造成另外ChannelB上的影响,不过仅±1TBCLK;5.HRPWM高精度模式控制最高分辨率ps,可实现占空比Duty、死区DBREDHR和DBFEDHR、相移TBPHSHR和周期值TBPRDHR的高精度模式控制。以上不限于为高精度模式的使用与注意事项。参考文献[1]TMSxx,x,xHighResolutionPulseWidthModulatorHRPWM[2]HighResolutionPWM(HRPWM)ExtensiontoePWMReferenceGuide[3]TMSFxReal-TimeMicrocontrollersTechnicalReferenceManual.-spruix1[4]TMSFxReal-TimeMicrocontrollersTechnicalReferenceManual.-spruiw9a[5]TMSFxReal-TimeMicrocontrollersTechnicalReferenceManual.-SPRUID来源:TI作者:Ke,Shaoxing标签: 使用HRPWM的注意事项
本文链接地址:https://www.iopcc.com/jiadian/25093.html转载请保留说明!