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

msp430g2553测量较高频率方波测不准&430g2553可以对输入引脚的外来信号分频吗

用8Mhz信号作为时钟,采集P1.1口外来的输入信号的频率。昨天用函数发生器试了一下,最高可以准确测量110khz信号,高了就不行了。100多khz距离8m不是还差那么远为什么就不行了啊???我需要测量400khz左右信号,现在就只能分频了,430可以对外来信号分频吗? 不行的话就只能用芯片了。用74hc4040或者cd4518应该都可以吧?

#include <msp430.h>

int j=0,i,l;

long int k,f,new_cap=0,old_cap=0,cap_diff=0;

int main(void)

{
WDTCTL = WDTPW + WDTHOLD;
P1OUT=0;
if (CALBC1_8MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_8MHZ; // Set DCO to 8MHz
DCOCTL = CALDCO_8MHZ;
for(i=0;i<20000;i++);//等晶振稳定震荡
P1DIR=0x10;//P1.4输出SMCLK
P1SEL=0X12;//P1.4输出SMCLK信号,为第二功能。P1.1引脚作输入接受捕获信号,为第二功能。
P2DIR |= BIT1;
P2SEL |= BIT1;
TA1CCR0 = 82-1; // Period Register
TA1CCR1 = 21; // TA1.1 25% dutycycle
TA1CCTL1 |= OUTMOD_7; // TA1CCR1, Reset/Set
TA1CTL = TASSEL_1 + MC_1 + TACLR;
CCTL0=CM_1+CCIS_0+SCS+CAP+CCIE;//上升沿捕获+P1.1捕捉CCI0A 输入+同步+捕获模式+开始中断
TACTL=TASSEL_2+MC_2;//SMCLK时钟+连续模式
_BIS_SR(LPM0_bits+GIE);

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0x40;//led翻转
j++;
if(j%2>=1)
old_cap=TACCR0;//第一次捕获上升沿时,定时器的值
if(j%2==0)
{
new_cap=TACCR0;//第二次捕获上升沿时,定时器的值
if(new_cap<old_cap)
cap_diff=65536+new_cap-old_cap;//两次相减得到一个周期内定时器的计数
else
cap_diff=new_cap-old_cap;//两次相减得到一个周期内定时器的计数

f=8000000/cap_diff*0.99;//根据测试结果430g2553得到的信号比实际信号差不多大0.01
__bic_SR_register_on_exit(LPM0_bits + GIE);
}
}

灰小子:

msp430g2553的dco最高可以设置到16MHz,建议用这个时钟频率试试。

msp430的io不能对外来信号分频。

看你用的定时器捕获模式,是要测量信号的占空比吗?

如果只是测量信号的频率,可以使用io中断,这样能采集到的外部信号频率更高。

user5274669:

回复 灰小子:

不需要测量占空比,只需要捕获频率。额…群主,你说的io中断如何操作能说具体点怎么操作吗

Susan Yang:

可使用Timer的capture mode来测量频率,您可以参考下 MSP430G2x53, MSP430G2x33, MSP430G2x13, MSP430G2x03 Code Examples(下载链接 www.ti.com.cn/…/toolssoftware )内的

msp430g2xx3_ta_21.cTimer_A, Normal Timer Mode Input Period and Duty Cycle Measurement。

另外您可以适当的提高一下示例中所用的Timer的时钟源频率 以提高测量的精度。

灰小子:

回复 user5274669:

参考这个频率计设计wenku.baidu.com/…/526a42c8a1c7aa00b52acb19.html

user5274669:

回复 灰小子:

群主,他是方法是定时1s计算上升沿或者下降沿的个数。之前我也知道有这种方法,但是一直不会操作,如何准确定时1s?在网上找1s标准定时程序?(其实我想自己写标准1s定时嘿嘿)

Loops:

回复 user5274669:

你好. 分两个部分:

1. 时间的问题.你可以使用一个定时器,根据定时器时钟, 可以设置好固定的时间间隔的事件;

2. 关于IO的上升或者下降的捕获,可以使用带捕获功能的IO口, 用定时器的捕获模式 

赞(0)
未经允许不得转载:TI中文支持网 » msp430g2553测量较高频率方波测不准&430g2553可以对输入引脚的外来信号分频吗
分享到: 更多 (0)