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.

pwm模块



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

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

  • zhiyu pan

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

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

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

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

  • 您好,我在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如图:

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

     

     

  • chong wang:

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

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

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

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

  • 您好,我刚才将开关频率降到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模块?谢谢您

  • chong wang:

    请在程序运行起来时(不管电机时候运行),通过CCS监测变量 SYSTEM_FREQUENCY,pwm1.PeriodMax ,

    另外,查看PWM初始化,PWM用的是什么模式,具体配置怎样?