例如将EPWM1_A和EPWM1_B设置为两路相差为90度的PWM波,用来模拟编码器的信号。
如果用EPWM1_A和EPWM2_A来做,很容易实现,设置EPWM1和EPMW2的相差即可,但是这样要求将EPWM1模块和EPWM2的频率设置为一样,这样一个需求就占用了EPWM1_A,EPWM1_B,EPWM2_A,EPWM2_B四个端口。
因此如果能用一个EPWM1能搞定最好。
我用的芯片是TMS320F28035
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.
例如将EPWM1_A和EPWM1_B设置为两路相差为90度的PWM波,用来模拟编码器的信号。
如果用EPWM1_A和EPWM2_A来做,很容易实现,设置EPWM1和EPMW2的相差即可,但是这样要求将EPWM1模块和EPWM2的频率设置为一样,这样一个需求就占用了EPWM1_A,EPWM1_B,EPWM2_A,EPWM2_B四个端口。
因此如果能用一个EPWM1能搞定最好。
我用的芯片是TMS320F28035
别人的分享
我想将ePWM3和ePWM4作为同频率的PWM波输出,但之前错开一个角度。寄存器配置应该没有问题,但是两个相位还是相同。在网上查找说,因为ePWM3和ePWM4不在同一个同步链。请问各位大虾,是这样的么。我在28335的资料里看到,ePWM同步链方案有三种,其中有两种这两个pwm是在同一同步链的。请问如何配置同步链方式呢
寄存器配置如下:
让EPWM3和EPWM4以相同的频率输出,只是前后相位不同,EPWM3主要设置如下(频率为100Hz)
EPwm3Regs.TBPRD = 18750;
EPwm3Regs.TBPHS.half.TBPHS = 0;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL =TB_CTR_ZERO;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 2;
EPwm3Regs.TBCTL.bit.CLKDIV = 2;
EPwm3Regs.CMPA.half.CMPA = 12500;
EPwm3Regs.CMPB = 6250;
EPWM4的主要设置如下:
EPwm4Regs.TBPRD = 18750;
EPwm4Regs.TBPHS.half.TBPHS = 12500;
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE; //使能PHASE寄存器
EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm4Regs.CMPA.half.CMPA = 12500;
EPwm4Regs.CMPB = 6250;
问题已经解决了,自问自答吧。刚才做试验验证了一下,确实ePWM3和ePWM4不是同一个同步链,像我这样的配置是不会产生相位差的。当我换成ePWM4和ePWM5时,按照上面那样配置,输出就正确了。那么,如何让ePWM3和ePWM4输出同频不同相位的PWM波呢,可以这样,将ePWM1设置成同步信号源,ePWM3和ePWM4设置成接受同步信号,并加载相位寄存器。将ePWM3和ePWM4相位寄存器设置的不同,就可以使得ePWM3和ePWM4输出同频不同相位的PWM波了
自己回答一下,可以通过Up down计数的方式来实现
TI的例程eqep_pos_speed 就是通过ePWM1A和ePWM1B来模拟产生正交编码信号,从而给eEQP模块来检测的。