测量低频时的奇怪问题

Jonekey   2005-8-16 15:31 楼主
使用TA的捕获口测频率,输入频率范围从0-5KHz左右,采样一直很稳定,直到约50Hz以下,数据异常。
在试验程序中只做捕获一个工作,在捕获口中加入标志位,发现1S内捕获中断次数异常,从几百到上千吧,输入频率恢复到50Hz以上,数据恢复正常。
用示波器看输入频率波形良好,不知道是哪里的问题?

回复评论 (5)

看得不是很清楚,最好有源代码
点赞  2005-8-16 17:09
应该是计时器部分溢出
点赞  2005-8-16 17:10
引用:

使用TA的捕获口测频率,输入频率范围从0-5KHz左右,采样一直很稳定,直到约50Hz以下,数据异常。
在试验程序中只做捕获一个工作,在捕获口中加入标志位,发现1S内捕获中断次数异常,从几百到上千吧,输入频率恢复到50Hz以上,数据恢复正常。
用示波器看输入频率波形良好,不知道是哪里的问题?
可能是TA的时钟源太快了吧,以致在进行扑获低频时溢出了,查询一下溢出标志位。
点赞  2005-8-17 09:13
TA的时钟源是8M晶振,在TA的中断里有对中断溢出的记数程序,溢出不应该影响捕获的中断
以下是试验程序,TB是一秒定时,输入频率10Hz,每秒捕获记数TIMERCNT3有几百次

void main(void) //组程序开始
{
init(); //调用初始化子程序
TBCCTL2|=CCIE;
interval =1;
CCTL0|= CCIE+CAP+SCS+CM0;
TACTL|= MC1;
_EINT();
while(1)
{
_BIS_SR(CPUOFF);
_NOP();
}
}

interrupt[TIMERB1_VECTOR] void TIMER_B1(void)
{
switch(TBIV)
{
case 4:

TBCCR2 += 32768;
_NOP();
break;
default: break;
}
}
interrupt[TIMERA1_VECTOR] void TIMER_A1(void)
{
switch(TAIV)
{
case 10 :
OVERFLOWCNT++;
break;
default: break;
}
}
interrupt[TIMERA0_VECTOR] void TIMER_A(void)
{ TIMERCNT3++;

_NOP();
}
点赞  2005-8-17 10:20
又作了一下测试,输入信号10Hz,当捕获选择上升沿时,每秒捕获中断200-300次,改成捕获条边沿后,每秒捕获中断300-400次,有所变化,还是不明白为什么。
点赞  2005-8-19 16:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复