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

MSP430F2132: 如何控制对外发送的PWM脉冲的数量?

Part Number:MSP430F2132

想通过MCU,的定时器发送PWM。 目前发送pwm、设置占空比都比较正常。但有些业务需要控制发送PWM脉冲数量。 

volatile unsigned int counter=0;
void init_triggerin_pwm(){P1DIR |= BIT3;P1SEL |= BIT3;TACCTL0 = OUTMOD_2|CCIE ;// TACCR0 toggle modeTACCR0 = 11000;// TA1CCR1 PWM duty cycleTACCTL2 = OUTMOD_2 ;// TA1CCR1 reset/setTACCR2 = 50;// TA1CCR1 PWM duty cycleTACTL = TASSEL_2 + MC_1+TACLR  ;// SMCLK, up modecounter=0;

}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer1_A0 (void)
{counter++;if(counter>15){TACCR0 = 0;counter=0;}

}

以上代码控制,可以实现发送PWM,有时候也能控制发送PWM数量,但无法精准控制,有时候发了很多,有时候就发这么多。

关闭了其他中断的代码,main程序也进入低功耗。按理应该不至于有其他影响。请问能精准设置脉冲的总数吗?

Susan Yang:

使用定时器A产生PWM波形的话,CCR0就是脉冲周期,CCR1/CCR2就是脉宽。

设置一个全局变量。在定时器到达CCR0的时候触发中断,然后在中断中对变量计数,到达指定的数量之后关闭PWM输出。

,

andy:

我上面的代码,就是这么做的。 计数到了用TACCR0 = 0;关闭输出。这个方法有时候正常停止。不知道有时候停不住,要多发好多才停呢?不知道为什么?是什么阻塞了中断代码?

,

Susan Yang:

andy 说: 计数到了用TACCR0 = 0;关闭输出。

您可以使用将TACTL的MCx 值设为来关闭定时器输出

00 Stop mode: the timer is halted.

,

andy:

谢谢Susan Yang,2种方式关闭都可以。不是关闭动作本身引起的问题。现在是因为延迟才到中断代码这里来导致发多了脉冲。感觉是什么引起了阻塞。或者其他任务优先级抢占了。但我的main代码已经进入低功耗停止状态。其他地方中断也都停了。理论上没有抢占任务。

,

Susan Yang:

谢谢反馈。

andy 说:现在是因为延迟才到中断代码这里来导致发多了脉冲。

那请问程序中除了定时器输出PWM,是否还有其他任务?

若是可以的话,将这段代码单独拿出来新建工程测试看是否还有这样的问题

,

Susan Yang:

我们将在下面的链接讨论

https://e2echina.ti.com/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/206905/pwm 

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F2132: 如何控制对外发送的PWM脉冲的数量?
分享到: 更多 (0)