浅谈2812事件管理器的功率保护模块

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈2812事件管理器的功率保护模块
2014.8.28
杨康佳
今天用示波器看了下EV 模块输出的PWM 波形,顺便试了一下它的保护切断输出功能,发现了一些意想不到的问题,对我自己来说也好像是开发了一块新大陆。

首先遇到的问题是,死区的设置,发现设置死区后,实际的死区时间总是只有我计算出的一半。

后面我才发现,我之所以在这里犯错是因为我相信了中文文档。

因为它给出的公式根本就是有问题的,这是我对比英文文档发现的,英文文档其实没有给出公式,只是给了表格用来查询,但是可以总结出公式。

死区无非就是操作3个寄存器:
EvaRegs.DBTCONA .bit .DBT EvaRegs.DBTCONA .bit .EDBTx
EvaRegs.DBTCONA .bit .DBTPS
第一个寄存器的解释是:Dead-band timer period. These bits define the period value of the three 4-bit dead-band timers.
也就是死区周期寄存器,我把它设置为m 。

第二个寄存器的解释是:Dead-band timer x enable 。

也就是使能位,x 表示到底是对那一个比较单元设置的死区。

第三个寄存器的解释是:Dead-band timer prescaler 。

也就是死区定时器的预定标。

设为p
在这里也不多做解释,只列出我的到的公式:
P H SPCLK BD m T T 2⨯⨯=
T BD 是死区时间,T HSPCLK 是高速预定标器的周期值,m 是上面的寄存器设置的值,p 也是寄存器设置的值。

关于这部分就到这里了。

下面说功率保护部分的问题,EV 能输出的PWM 的引脚就16个,包括通用定时器1、2、3、4,PWM1~6,PWM7~12。

所以每一路都有功率保护功能。

因为EVB 和EV A 完全一样的,所以只说明EV A 。

具体是:
1,先谈通用定时器的PWM 输出的保护
控制通用定时器1和2的PWM 输出使能的寄存器有:GPTCONA[TCMPOE]、GPTCONA[TxCTRIPE]、GPTCONA[TxCMPOE](有x 的地方x=1或2)。

其中:
GPTCONA[TxCTRIPE]、GPTCONA[TxCMPOE]是在EXTCON[0]=1时有效;
GPTCONA[TCMPOE]是在EXTCON[0]=0时有效;
这个就是说,当EXTCON[0]=1时,可以单独控制定时器1或者2的PWM 输出,此时1和2是“不相干”的;当EXTCON[0]=0时,却只能同时控制定时器1和2,此时1和2是“同生共死”的。

然而如果你认为他们的关系就仅仅如此,那就错了,那就不值得我写这篇文章了。

2,后谈全比较单元的PWM输出的保护
控制全比较单元PWM输出使能的寄存器的寄存器有:COMCONA[FCMPOE]、COMCONA[FCMPxOE]、COMCONA[CxTRIPE](有x 的地方x=1或2或3)。

其中:
COMCONA[FCMPxOE]、COMCONA[CxTRIPE]是在EXTCON[0]=1时有效;
COMCONA[FCMPOE]是在EXTCON[0]=0时有效;
这个就是说,当EXTCON[0]=1时,可以单独控制3个比较单元PWM波的输出,此时他们三者是“不相干”的。

当EXTCON[0]=0时,却只能同时控制6路PWM波形(3个比较单元),此时他们三者是“同生共死”的。

这还没完。

别忘了还有个PDPINTA !
3,再谈功率保护引脚PDPINTA
这个引脚很讨嫌,愚弄了我们广大写书的教授们,找了几本书要么写的含糊,要么就写得有问题。

最后我得到真理的办法是:阅读英文文档->作出假设->实际调试检验假设,反复循环。

当然这必须要示波器。

很多是一笔带过,比如“PDPINTA在中断未被屏蔽的情况下,当PDPINTA 引脚变为低电平时,就把PWM1~6设置为高阻态。


现在敲出这一行字,我想骂人,其实PDPINTA哪有这么强大?
唉,算了,其实书还是写得蛮好,总比论文中的错误少。

注意这种“错误”不是疏忽引起的。

记住我说的:“PDPINA之所以能够把定时器和全比较单元的PWM输出置为高阻态,是因为他们的寄存器中GPTCONA[TCMPOE]和COMCONA[FCMPOE]存在有效的可能性,或者说未被保留的,或者等效的说EXTCON[0]=0,在这种情况下PDPINTA在中断未被屏蔽,当PDPINTA引脚变为低电平时,把PWM输出置为高阻态”
我这样说是有依据的。

英文文档证据:
上图中,“This bit, when active, is reset to zero when both PDPINT/T1CTRIP are low and EVIMRA(0) = 1.”实际上,他还没有说明的是,由于“reset to zero”导致了“0--Timer compare outputs, T1/2PWM_T1/2CMP, are in high-impedance state.”和“0--Full compare outputs, PWM1/2/3/4/5/6, are in Hi-Z state”
看到了吗?PDDINTA几乎没做什么,实际上是在其他条件满足上述条件时,PDDINTA为低时,GPTCONA[TCMPOE]和COMCONA[FCMPOE]这两个寄存器的值就自动改变了,这种改变导致的高阻态。

所以,这里面最重要的就是,得先把EXTCON[0]=0。

否则再怎么拉低PDDINTA也不会有高阻态。

可见,无论是通用定时器的保护还是全比较单元的保护都是和PDPINTA有密切关系,如果继续剖析,还有更好玩的。

4,欣赏DSP芯片设计师的构思
我们再来整理一下所有和PWM输出的使能相关的寄存器。

通用定时器类的:
TxCON[TECMPR] <总开关,与触发无关>
GPTCONA[TCMPOE]
GPTCONA[T2CTRIPE]
GPTCONA[T1CTRIPE]
GPTCONA[T2CMPOE]
GPTCONA[T1CMPOE]
全比较单元类的:
COMCONA[CENABLE] <总开关,与触发无关>
COMCONA[FCMPOE]
COMCONA[C3TRIPE]
COMCONA[C2TRIPE]
COMCONA[C1TRIPE]
COMCONA[FCMP3OE]
COMCONA[FCMP2OE]
COMCONA[FCMP1OE]
“纽带类”:
PDPINTA
触发关系:(箭头左边表示触发寄存器,右边表示保护实现寄存器)
COMCONA[C3TRIPE]----------->COMCONA[FCMP3OE]
COMCONA[C2TRIPE]----------->COMCONA[FCMP2OE]
COMCONA[C1TRIPE]----------->COMCONA[FCMP1OE]
GPTCONA[T2CTRIPE]---------->GPTCONA[T2CMPOE]
GPTCONA[T1CTRIPE]---------->GPTCONA[T1CMPOE]
以上在EXTCON[0]=1条件下(分别控制)实现。

PDPINTA --------------------------->COMCONA[FCMPOE]
PDPINTA --------------------------->GPTCONA[TCMPOE]
以上在EXTCON[0]=0条件下(一起控制)实现。

好吧,能不能欣赏到这种设计之美就看你的了。

凌晨1点。

OVER!。

相关文档
最新文档