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.

频率捕捉和launchpad 产生pmw遇到的问题

Other Parts Discussed in Thread: MSP430G2553, MSP430F149

初学msp430, 买了个f149开发板,在网上找了一个程序代码,部分原代码如下:

Cycle=sum/8+sum%8; //TimerA的时钟为8M、将采集数据转化us

Cycle*=0.962; //对数据进行补偿

sum为两次上升沿捕捉CCR0的差值(已多次取平均值),最终显示周期为Cycle的值,单位us。按我的理解Cycle=sum/8;就可以了,谁能告诉我这两句什么意思,程序是测MCLK的,即32.768Hk,经计算不分频,2分频,4分频,8分频

周期应为:                                                  30.5us,   61.0us,   122.1us,   244.1us,

原代码测得:                                               34us,     60us,      121us,     242us,

而将原两行代码改为Cycle=sum/8;则为: 33us,      63us,     126us,     252us,(测量数据均取整)

很奇怪,后三个数据确实原代码更接近,求解释两句原代码。。。(问题1)

还有,我还有一个launchpad,运行了下列代码:

#include <msp430G2553.h>

int main( void )

{

 WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗

 P1DIR |= 0x01;              // 设置P1.0输出方向

 while(1)

 {

   unsigned int i;

   P1OUT ^= 0x01;            //取反

   i = 50000;                // 延时

   while (i--);

 }

}

P1.0得到的应该是方波,LED灯也确实这么显示。可再用上面问题1的程序测周期怎么也测不出来数据,无论怎么更改  i  的初值怎么回事?(问题2)

还有另一个问题,同样launchpad,以下程序用定时器A0产生pmw波:

#include <msp430G2553.h>

int main( void )

{

 WDTCTL = WDTPW + WDTHOLD;              //关闭看门狗

 TACTL=TACLR+TASSEL0;                    //ACLK,清除TAR

 CCR0=500;                        

 CCTL1=OUTMOD_7;                        

 CCR1=100;                            

 P1DIR|=BIT2;

 P1SEL|=BIT2;

 TACTL|=MC0;                            //timer_A为增计数模式

 for(;;)

 {

   _BIS_SR(LPM3_bits);

   _NOP();

 }

}

改变CCR0,CCR1值确实能感觉到频率和占空比的变化(通过板上自带led闪烁),但也明显感觉到频率极其不稳定,甚至难以预料,将IAR软件关闭又是另一种不稳定(周期好像变大了),同样的程序稍加修改在我的msp430f149开发板上很稳定,怎么回事?(问题三)

  • 问题一:你需要检查一下MCLK,SMCLK,ACLK的频率是多少,可以通过相应的引脚将频率输出来。然后再计算脉宽,无非就是一个算数运算嘛。

    问题二:LaunchPad有输出的话,还是需要检查149中脉宽捕获的程序。

    问题三:不稳是与TImerA的时钟源有关系,timerA的时钟源为ACLK,ACLK默认又有VLOCLK来驱动,VLOCLK本身的波动就比较大,没有记错的话,在9K~12K之间飘。接一个32.768K晶体试试