使用MSP430G2553单片机捕获PWM脉冲波占空比-学习笔记

这个问题解决办法还是蛮简单的,我就直接上代码了。使用MSP430G2553捕获时,只需要将定时器设置为捕获模式,并设置相关寄存器即可进行捕获。

0c3a310ac68ba578

方法一:上升沿、下降沿循环触发法计算(自命方法名,勿喷)

简介:使用一个IO口,循环捕获上升沿、下降沿、然后计数计算即可。具体操作看代码后即可明晰。

 

代码使用CCS V5 编译通过,且完美捕获频率值在(50,350)范围内,峰峰值为2.3V (0,2.3)的脉冲波。
所需变量声明:
unsigned int start,last,end,overflow,h,s;//h-pwm占空比高电平技术  s-pwm总周期计数
定时器初始化:
	TACTL=TASSEL_2+TAIE+MC_2;
	CCTL1=CM_1+SCS+CAP+CCIE;
	P1DIR&=~BIT2;
	P1SEL|=BIT2;
	TACCR1=0;
	TACCR2=0;
定时器中断函数:
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMERA1()//捕获上升沿
{

	switch(TAIV)                              //向量查询
	  { case 2:                                //捕获中断
	       if(CCTL1&CM_1)                      //上升沿
	         {
	           CCTL1=(CCTL1&(~CM_1))|CM_2;       //更变设置为下降沿触发
	           start=TACCR1;                      //记录初始时间
	           s=start-last+65536*overflow;
	           last=start;
	           overflow=0;                     //溢出计数变量复位
	         }
	       else if(CCTL1&CM_2)                 //下降沿
	        {
	         CCTL1=(CCTL1&(~CM_2))|CM_1;       //更变设置为上升沿触发
	         end=TACCR1;                        //用start,end,overflow计算脉冲宽度
	         TACTL &=~CCIFG;

	         h=end-start+65536*overflow;


	        }
	       break;
	    case 10:                               //定时器溢出中断
	       overflow++;
	       break;                              //溢出计数加1
	    default:break;
	  }

}
main()函数计算方法:
占空比=h/s