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

F5529产生SPWM周期性产生一个错值

我用MSP430F5529LP的Timer_A1产生SPWM,会周期性出现一个错误值,求大佬指点一二,波形如下:

代码如下:

#include <msp430.h> 

/*
 * main.c
 */
int nSinTable[] = {255, 254, 246, 234, 219, 199, 177, 153, 128, 103, 79, 57, 37, 22, 10, 2, 1,
					2, 10, 22, 37, 57, 79, 103, 128, 153, 177, 199, 219, 234, 246, 254};

int nCount;

void Init_CLK(void)
{P2DIR |= BIT2;// SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7;// MCLK set out to pinsP7SEL |= BIT7;P5SEL |= BIT2+BIT3;// Port select XT2UCSCTL6 &= ~XT2OFF;// Enable XT2UCSCTL3 |= SELREF_2;// FLLref = REFO// Since LFXT1 is not used,// sourcing FLL with LFXT1 can cause// XT1OFFG flag to setUCSCTL4 |= SELA_2;// ACLK=REFO,SMCLK=DCO,MCLK=DCO// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settlesdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG;// Clear fault flags}while (SFRIFG1&OFIFG);// Test oscillator fault flagUCSCTL6 &= ~XT2DRIVE0;// Decrease XT2 Drive according to// expected frequencyUCSCTL4 |= SELS_5 + SELM_5;// SMCLK=MCLK=XT2
}

void Init_TimerA(void)
{
	P2DIR |= BIT0;
	P2SEL |= BIT0;

	nCount = 0;
	TA1CCTL1 |= OUTMOD_7;
	TA1CCTL0 = CCIE;// CCR0 interrupt enabled
	TA1CCR0 = (256- 1);
	TA1CTL |= TASSEL_2 + ID_1 + MC_1;
	TA1CCR1 = nSinTable[nCount];
	TA1CTL |= TACLR;
}

int main(void)
{WDTCTL = WDTPW + WDTHOLD;// Stop WDTInit_CLK();Init_TimerA();

//  _EINT();__bis_SR_register(LPM0_bits + GIE);// Enter LPM0, enable interrupts__no_operation();// For debugger
}


// Timer0 A0 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
	{
		nCount += 1;
		if(nCount >= 32)
		{
			nCount = 0;
		}
		TA1CCR1 = nSinTable[nCount];
	}
}

灰小子:

定位一下,看看出错时nCount是多少。

user4740510:

回复 灰小子:

用示波器抓波形之后发现nCount[14]=10和nCount[15]=2时的波形被那一段高电平取代了,那段错误的高低电平共用时两个TA1CCR0,占空比接近50%,那段错误的高低电平前后是nCount[13]=22和nCount[16]=1,波形正常。

还有一个问题想请教您,TA1CCR0计满之后再TAIV中对应哪个中断向量

user4740510:

回复 灰小子:

用示波器抓波形之后发现nCount[14]=10和nCount[15]=2时的波形被那一段高电平取代了,那段错误的高低电平共用时两个TA1CCR0,占空比接近50%,那段错误的高低电平前后是nCount[13]=22和nCount[16]=1,波形正常。

还有一个问题想请教您,TA1CCR0计满之后再TAIV中对应哪个中断向量

user4740510:

回复 灰小子:

又分析了一下波形,发现nCount[15]=2时的波形没有问题,只有nCount[14]=10时的波形有问题,错误的波形高电平加低电平共两个PWM周期(TA1CCR0=256),占空比将近50%

灰小子:

回复 user4740510:

你这个程序是CCR1计数到CCR0,是TAxCCR1 CCIFG

赞(0)
未经允许不得转载:TI中文支持网 » F5529产生SPWM周期性产生一个错值
分享到: 更多 (0)