This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
C2000团队,
我正在使用F2.8377万S,并且从ePWM模块收到了意外行为。 我正在将ePWM2配置为向上/向下计数模式。
意外行为1:如果我使用非零值(例如1)预加载TBCTR,则计时器第一次不会在PRD开始倒计时。 它一直计数到0xFFFF,然后滚动。 之后,我相信它对周期匹配的反应是正确的。
意外行为2:我已将SOCB配置为在期间匹配时触发。 但是如果我使用TBCTR =0进行初始化,则在启用SOCB时,我会立即得到SOCB触发器。 TBCTR仍显示为零。
我有说明问题的代码,希望与他人进行WebEx交流。 请告诉我。
此致
David
您好,Kris,
三大珠三角的影子实际上是这两个问题的问题。 对于第二个问题,初始活动PRD 寄存器必须为零。 因此,SOCA在ZRO上触发,SOCB在PRD上正确触发,两者同时进行。
解决此问题的方法是在TBCTL寄存器中设置PRD寄存器的立即重新加载,写入初始PRD值,然后将TBCTL设置为 在ZRO匹配时重新加载PRD以进行正常(典型)操作。 例如:
EPwm2Regs.TBCTL.ALL = 0x003B; //配置计时器控制寄存器
//位15-14 00: 空闲/软,emu halt:11 =忽略,00 =立即停止
//位13 0: PHSDIR,0=同步事件后倒计时
//位12-1万 : CLKDIV,000 => TBCLK = HSPCLK/1
//位9-7000 : HSPCLKDIV,000 => HSPCLK = EPWMCLK/1
//位6 0: SWFSYNC,0 =未生成软件同步
//位5-4 11: SYNCOSEL,11 =禁用同步输出
//位3 1: PRDLD,0 =在ZRO上重新加载PRD,1 =访问时立即重新加载
//位2 0: PHSEN,0=禁用相位控制
//位1-0 11: CTRMODE,11=定时器停止(禁用)
EPwm2Regs.TBCTR = 0x0000; //清除计时器计数器
EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod; //设置计时器周期
EPwm2Regs.TBCTL.bit.PRDLD = 0; //在ZRO上重新加载PRD
我将关闭此线程。 谢谢!
David
David,
您将阴影活动加载事件设置为什么? 是否可以临时使用PHSEN并对初始卷影到活动副本执行SWFSYNC?
编辑:抱歉-我看到您发布了它PRDLD =0,它在CTR =0上加载阴影TBPRD。 这对于您的初始问题#1是有意义的,但对于第二个问题,如果您从TBCTR =0开始,它不会立即加载影子寄存器,我对此感到惊讶。 我是否正确理解了第2项?
此致,
克里斯
您好,Kris,
我发现需要这样做:
EPwm2Regs.TBCTL.ALL = 0x003B; //配置计时器控制寄存器
//位15-14 00: 空闲/软,emu halt:11 =忽略,00 =立即停止
//位13 0: PHSDIR,0=同步事件后倒计时
//位12-1万 : CLKDIV,000 => TBCLK = HSPCLK/1
//位9-7000 : HSPCLKDIV,000 => HSPCLK = EPWMCLK/1
//位6 0: SWFSYNC,0 =未生成软件同步
//位5-4 11: SYNCOSEL,11 =禁用同步输出
//位3 1: PRDLD,0 =重新加载PRD:0 = ZRO,1 =访问时立即
//位2 0: PHSEN,0=禁用相位控制
//位1-0 11: CTRMODE,11=定时器停止(禁用)
EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod; //设置计时器周期(活动寄存器)
EPwm2Regs.TBCTL.bit.PRDLD = 0; //在ZRO上重新加载活动PRD
EPwm2Regs.TBPRD = ADC_SAMPLE_PERiod; //设置计时器周期(阴影寄存器)
如果将重新加载配置为立即,则实际上不会加载影子PRD。 设计必须是阴影或活动的,而不是通过阴影传递到活动的。 因此,在配置阴影模式后,您必须执行第二次写入以加载阴影。 这似乎是成功的。
此致,
David