TI中文支持网
TI专业的中文技术问题搜集分享网站

pwm模块

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

bkn1860:

65535不满足75000.   这个只能是把EPWM模块的时钟频率往下降了,降了之后你计算出来的值就小于65535.

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

Joey Mao:

zhiyu pan

请说明一下你使用的是哪款DSP,使用的代码是何处的例程?

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

zhiyun pan:

回复 Joey Mao:

28335.EPWM模块

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

zhiyun pan:

回复 Joey Mao:

您好,我使用的是HVACI_Sensorless_2833x。从这个式子pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2,如果我要降低pwm1.PeriodMax的值,是不是要对PWM的载波频率进行倍频,也就是降低T的值?

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

Joey Mao:

这种情况,你需要降低系统时钟频率,不再使用150M,而是使用120M或90M,都可以满足

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

Joey Mao:

回复 zhiyun pan:

你的问题因果关系应该是这样的:pwm1.PeriodMax 变量的设置值,决定了实际硬件的PWM载波输出频率,而根据公式就可以知道,减小T就可以减小pwm1.PeriodMax 变量值,变量T实际就是硬件PWM载波输出频率的变量化体现,T=1/f,f即载波频率,f的单位程序中一般使用kHz。

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

chong wang:

回复 Joey Mao:

您好,我在PWM的初始化中对TBCTL寄存器进行了设置,将CLKDIV_PRESCALE_X_1改为CLKDIV_PRESCALE_X_2,这样根据TBCLK=SYSCLKOUT/(CLKDIV*HSPCLKDIV)以及设置中#define HSPCLKDIV_PRESCALE_X_1      0x0000 ,#define CLKDIV_PRESCALE_X_2         0x0400可以得到TBCLK=SYSCLKOUT/(2X1)=75MHZ,进行了2分频。然后将ISR_FREQUENCY改为1.

然后在主程序中将pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2;修改为pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/4;这样pwm1.PeriodMax 为37500,不会产生溢出,然后在实验中我们测得PWM如图:

但是实验中电机依然没有运行,请问问题还可能会出在哪些地方?麻烦您了!

 

 

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

Joey Mao:

回复 chong wang:

chong wang:

你好,只从你的PWM配置,我无法分析出你的电机为什么无法运行。

PWM配置可以根据需要进行修改,但是电机运行起来最重要的还是整个算法流程要确保正确。

建议你先用TI相应的例程,根据你的测试作一些参数上的修改,外设配置不用修改,等到实现电机成功运行之后,再根据你的需要修改PWM等其他外设的具体配置,这样便于分析问题。

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

chong wang:

回复 Joey Mao:

您好,我用的就是TI的HVACI_Sensorless_2833x,在10KHZ下也就是原程序中电机能够启动,但是当我按照上面跟您所说的那样对PWM进行配置降级开关频率到1KHZ时,电机却无法启动!PWM如上面的图那样。我想问您是否还需要对其他程序进行修改?PWM的占空比是否有影响呢?谢谢!

(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax这个公式怎么得出来的啊。还有我把开关频率改成1Khz,产生溢出,65535不满足75000.从uint16改成uint32,结果不对啊,这怎么解决啊

chong wang:

回复 Joey Mao:

您好,我刚才将开关频率降到5KHZ,也就是将ISR_FREQUENCY的设置由10改为5,没有对PWM的TBCTL寄存器进行改变!然后电机能够运行!还有我想请问您pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2;这个公式是不是应该用PWM的基准时钟/PWM载波频率/2?而在TI的原程序中设置的TBCLK=SYSTEM_FREQUENCY,没有进行分频!我不知道如果对PWM的CLKDIV和HSPCLKDIV修改后是不是对其他模块有影响,比如AD模块?谢谢您

赞(0)
未经允许不得转载:TI中文支持网 » pwm模块
分享到: 更多 (0)