老师你好!我遇到个很奇怪的问题,烦请您帮忙分析一下。我只输出一个PWM。
void EPwm1Setup();
main()
{
……..
EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{}
}
EPwm1Setup();
{
………
}
问题一:按照以上这样的再RAM里运行,正常。点击运行(F5),执行。点击停止运行,停止。问题来了,在我第二次再点击运行时,还有波形输出,为什么啊?第二次点击时,应该不执行啊,停留在主循环for(;;)里啊,为什么还有波形输出?
问题二:把上面的调用函数位置换一下,不在主循环的外面调用,放到主循环里,就不执行了,没有波形输出了,这是为什么啊?
void EPwm1Setup();
main()
{
……..
//EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{
EPwm1Setup();
}
}
EPwm1Setup();
{
………
}
针对我以上的问题,是我哪里配置出问题了,请告诉我可能问题出现的位置,我在检查,感谢
user4539844:
回复 Eric Ma:
你好,老师,我是初学,下面是我这个PWM的函数,有一些#define我就没有列举,想知道问题出在哪里?
void EPwm1Setup(){
// Setup TBCLK EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUT EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count updown EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period,10K时为1875 EPwm1Regs.TBCTL.bit.PHSEN = 0x1; // Disable phase loading EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0 EPwm1Regs.TBCTL.bit.PRDLD =0x1; EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Setup shadow register load on ZERO EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values EPwm1Regs.CMPA.half.CMPA = 390; // Set compare A value 938 is 50% // EPwm1Regs.CMPB = EPWM1_MIN_CMPB; // Set Compare B value
// Set actions EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on event A, up count
// EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero // EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count
// Interrupt where we will change the Compare Values EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT EPwm1Regs.ETPS.bit.INTPRD = 0x01; // Generate INT on 3rd event EPwm1Regs.ETSEL.bit.SOCAEN=1; EPwm1Regs.ETSEL.bit.SOCASEL=0x1; EPwm1Regs.ETPS.bit.SOCAPRD=0x1; }
老师你好!我遇到个很奇怪的问题,烦请您帮忙分析一下。我只输出一个PWM。
void EPwm1Setup();
main()
{
……..
EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{}
}
EPwm1Setup();
{
………
}
问题一:按照以上这样的再RAM里运行,正常。点击运行(F5),执行。点击停止运行,停止。问题来了,在我第二次再点击运行时,还有波形输出,为什么啊?第二次点击时,应该不执行啊,停留在主循环for(;;)里啊,为什么还有波形输出?
问题二:把上面的调用函数位置换一下,不在主循环的外面调用,放到主循环里,就不执行了,没有波形输出了,这是为什么啊?
void EPwm1Setup();
main()
{
……..
//EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{
EPwm1Setup();
}
}
EPwm1Setup();
{
………
}
针对我以上的问题,是我哪里配置出问题了,请告诉我可能问题出现的位置,我在检查,感谢
囧:
回复 user4539844:
PWM初始化做一遍就会一直出波形了,你为什么要重复的放在状态机里再去初始化?
老师你好!我遇到个很奇怪的问题,烦请您帮忙分析一下。我只输出一个PWM。
void EPwm1Setup();
main()
{
……..
EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{}
}
EPwm1Setup();
{
………
}
问题一:按照以上这样的再RAM里运行,正常。点击运行(F5),执行。点击停止运行,停止。问题来了,在我第二次再点击运行时,还有波形输出,为什么啊?第二次点击时,应该不执行啊,停留在主循环for(;;)里啊,为什么还有波形输出?
问题二:把上面的调用函数位置换一下,不在主循环的外面调用,放到主循环里,就不执行了,没有波形输出了,这是为什么啊?
void EPwm1Setup();
main()
{
……..
//EPwm1Setup(); //PWM输出模块,已经配置正常,能输出了
………
for(;;)
{
EPwm1Setup();
}
}
EPwm1Setup();
{
………
}
针对我以上的问题,是我哪里配置出问题了,请告诉我可能问题出现的位置,我在检查,感谢
user4539844:
回复 囧:
我是想控制什么时候输出这个波形。我在做直流电机控制项目,想在外部有信号输入时,在输出PWM.