2019-07-15 16:16发布
西电技术员 发表于 2016-4-5 20:50 我用F149做过,感觉比较容易,你可以看看你那块板子给的例程,然后找个网上的测频原理看看,稍改一下就行了
最多设置5个标签!
1.在一个固定时间内对输入的信号进行计数然后用计数的值换算成频率,固定的时间越长精度越高,而固定的时间一定时频率越高精度越高,所以适用于高频测量。
2.用待测信号的一个脉宽为基准时间来控制一个固定的高频参考信号计数,通过高频信号的计数值换算成待测信号的频率,这样的方法适用与低频,参考信号频率越高精度越高,待测频率越低精度越高,不过这种方法用单片机我没试过。
我以前做过2015年全国大学生电子竞赛f题数字频率计,我们用的这两个方法,你可以参考一下
你好,我写了一个捕获频率的程序,但是好像精度不够不知道为什么,可以帮我看看吗?
ulint captar=0,capfirst,caplast,time=0,pulse=0,f;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
lcdinit();
P2DIR &=~BIT0;
P2SEL |=BIT0;
TA1CCTL1=CM_1+SCS+CCIS_0+CAP+CCIE;
TA1CTL=TASSEL_1+MC_2+TACLR+TAIE;
_EINT();
while(1){
f=pulse*32768/time;
display(f);
TA1CCTL1 |= CCIE;
TA1CTL |= TAIE;
}
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1 (void)
{
switch(TA1IV){
case 2:{
if(captar==0)
{
capfirst=TA1CCR1;
captar++;
}
else{
caplast=TA1CCR1;
captar++;
}
TA1CCTL1 &=~CCIFG;
break;
}
case 14:{
if(captar==0)
pulse=0;
else{
pulse=captar-1;
time=caplast-capfirst;
captar=0;
}
TA1CCTL1&=~CCIE;
TA1CTL=~TAIE;
break;
}
default:break;
}
}
一周热门 更多>