各位老师好!
我想利用外部的脉冲通过GPIO6口输入,实现Epwm与外部信号同步的功能,并且想将Epwm2与Epwm3之间的同步信号断开,使Epwm3之后的同步信号仅与Epwm3关联。苦于对Epwm及GPIO设置不熟练,一直无法实现,且没有找到相关例程,想求助一下各位老师,希望获得一个详细的设置步骤,万分感谢!
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.
各位老师好!
我想利用外部的脉冲通过GPIO6口输入,实现Epwm与外部信号同步的功能,并且想将Epwm2与Epwm3之间的同步信号断开,使Epwm3之后的同步信号仅与Epwm3关联。苦于对Epwm及GPIO设置不熟练,一直无法实现,且没有找到相关例程,想求助一下各位老师,希望获得一个详细的设置步骤,万分感谢!
1、设置GPIO6功能为EPWMSYNCI(其它I/O引脚的功能不能为EPWMSYNCI)
2、设置EPWM2、EPWM3及...对应的IO引脚功能
3、初始化EPWM1关于外部同步信号的设置
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // TB_SYNC_IN = 0
其它设置自己参考datesheet
4、设置EPWM2关于外部同步信号的设置
EPwm2Regs.TBPHS.half.TBPHS = 0x0000;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // TB_SYNC_DISABLE = 3
5、设置EPWM3关于外部同步信号的设置
EPwm3Regs.TBPHS.half.TBPHS = 0x0000;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // TB_CTR_ZERO = 1
5、设置EPWM4关于外部同步信号的设置
EPwm4Regs.TBPHS.half.TBPHS = 0x0000;
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // TB_SYNC_IN = 0
onebyte老师您好,感谢您的回复。
现在可以同步了,由于GPIO6口和GPIO32口都被占用了,因此是通过ECap将外部同步信号输入,再在ECap1的中断中加入语句:
EALLOW;
EPwm1Regs.TBCTL.bit.SWFSYNC = 1;
EDIS;
通过软件置位的方式将预设相位值EPwm1Regs.TBPHS.half.TBPHS载入。
但目前实现的现象是外部同步信号和片内PWM1信号基本同步,两个方波基本相对静止,但有90度左右的相位差,且这个相位差还有10多度左右的不稳定偏移。
不知道这种软件置位的方法是否比直接EPWMxSynci引脚输入的效果差?产生同步相位差的原因是否是主程序中其他中断造成的延时引起?
烦请老师指点一下,谢谢!!
我尝试了不用EPwm1Regs.TBCTL.bit.SWFSYNC = 1; 语句触发相位重置,而改通过GPIO32输入同步信号,结果同步PWM波形中的不稳定偏移消失了,分析其原因可能是高频信号杂波干扰了输入的同步信号,造成ECAP1的误触发(原来同步信号是通过ECAP1输入的,软件重置PWM1相位的语句写在ECAP1的中断中)。
但是,外部同步脉冲和产生的PWM1波形之间仍然有90度的相位差。请教各位老师是何原因?
问题解决了,是PWM1初相设置的问题,自己马虎大意了。谢谢各位老师。