此前关于TI的C2000系列DSP的移相功能模块导致部分周期出现驱动脉冲丢失的现象,已经写了两篇文章了,其中第一篇提出这个现象并分析这种情况产生的原因,第二篇给出了一种可以在一定范围内规避脉冲丢失的方法。这种方法的思路是使用额外的ePWM2模块作为中继,产生一个固定的移相角,通过接力的方式,使ePWM1与ePWM3之间得到一个较大的移相角。虽然各种方式可以得到一个绝对值较大的移相角,但移相角的变化范围依然受到比较值的限制。以双有源桥为例,每一个开关管均为50% 占空比,所以比较值CMP等于周期值PRD的一半,由于ePWM3模块的移相值不能与自身的比较值发生跨越,因此可用的移相范围依然只是180度,当然这个移相范围对于双有源桥已经足够了,但这种方法需要消耗更多的硬件资源,对于复杂移相调制的双有源桥来说,可能需要多大4组互补且相位可调的PWM驱动信号,在加上所需要的中继模块,很可能超过DSP的片上资源总量,即使不超过这也是硬件资源的极大浪费,只能作为一种临时的解决方案。
本文根据ePWM模块的使用手册,给出另一种移相方法,在节省硬件资源的前提下实现较大范围的移相。
上回书说到PWM移相是通过传递同步信号实现的,每个ePWM模块都有个同步信号的输入端SYNCI和同步信号的输出端SYNCO,同步信号的产生有三种方式,分别是:
直接透传SYNCI的信号到SYNCO,作为下一个模块SYNCI,这种方式也是我当年的毕业设计用应用的,这样可以避免途经的模块移相角对后面的模块相位的影响。
CTR=0时产生SYNCO脉冲,这种方式假设模块1与模块2之间的相位发生变换,模块3也会随之变化,导致模块之间的移相同步值存在耦合,增加计算复杂度。
CMPB=CTR 这种方法可以在模块不使用CMPB时获得比较自由的移相方式,但也具有第2中方式的缺点,累计移相角的问题。
产生同步脉冲后,后一个模块接收到同步脉冲,会将PHS寄存器的值直接写到计数器CRT中,相当于为计数器赋初值,改变这个初值就会改变该计数器与前一个计数器的相位差。
上篇文章是针对方式2提出的方法,本篇文章针对方式3给出一种不用额外硬件资源作为中继就可以实现大范围移相的方法。
首先需要了解的是每个ePWM模块有两个比较值CMPA和CMPB,对于互补输出只需要使用一个CMP比较值寄存器,另一个闲置就可以了。因为死区模块可以根据CMPA自动生成两路互补带死区的驱动信号,那么闲置CMPB就可以用于产生移相同步脉冲,而且不会影响到自己模块的发波。根据上面的第三种同步信号产生方式,可以使用ePWM模块中的比较值CMPB与计数器CTR匹配的事件来产生同步信号输出SYNCO,通过调整CMPB寄存器的值调整SYNCO与SYNCI的延迟相位。
以上图为例,设定两个ePWM模块均为周期100,ePWM1的CMPB寄存器为30,ePWM2模块的PHS寄存器为0,得到的效果就是当模块1计数到30的时候,将模块2清零。这里面的CMPB用于产生移相角,移相角变化范围可以在0到360度之间。当然这个移相角的变换并非没有限制,假设在一个周期内移相角变化过大,超过180度,同样可能造成驱动脉冲的丢失。
上图给出了一个实例,移相角从80一下子改成了20,超过了半周期50,那么下一周期的ePWM2模块的计数只到40就再次归零了,没有机会与CMPA发生匹配(见红色虚线圈出的部分),因此这个周期的驱动脉冲无翻转。这种方法需要使用者注意:调整移相角要每个周期逐渐调整,设定一个最大调整步长。当然这个步长最好设定为远小于半周期,因为单次调整及时不超过半周期,也会导致驱动脉冲畸变,原本互补50% 占空比的PWM会变成非50%。造成变压器磁偏。较小的磁偏可以通过回路寄生电阻自行矫正,如果一个周期产生很大的磁偏,无法及时矫正,就可能导致变压器饱和。
值得注意的是这种移相方法获得的移相角是滞后的,而原本通过改写PHS寄存器得到的移相角是超前的。用户可以根据需要同时使用本文提出的移相方法和通过PHS寄存器赋初值的方法,这样可以获得更灵活的应用。但切记PHS的变化范围一定不能与比较值CMP发生跨跨越。
到此为止,关于C2000系列移相功能缺陷的分析与解决的文章就要告一段路了,接下来我准备了一块LCD板子,打算做一个串口屏,带触摸按键和一些存储外设,然后写写代码。此后屏幕可以作为更大的系统的HMI,例如数控电源显示与调节面板,电池模组的显示单元等等。我将会把串口屏的软硬件设计经验分享出来。
-
dsp
+关注
关注
553文章
7998浏览量
348887 -
模块
+关注
关注
7文章
2706浏览量
47466 -
PWM
+关注
关注
114文章
5186浏览量
213908 -
脉冲
+关注
关注
20文章
889浏览量
95639 -
串口屏
+关注
关注
8文章
534浏览量
37433
发布评论请先 登录
相关推荐
评论