求一份MSP430f5529的数字频率计代码一份,测频范围为1hz-100khz,误差为1%。

2019-07-15 16:16发布

本帖最后由 成谶 于 2016-4-5 20:34 编辑

新手刚学,求助如题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
西电技术员
1楼-- · 2019-07-15 21:08
 精彩回答 2  元偷偷看……
无量寿经
2楼-- · 2019-07-16 01:29
1hz时误差1%太困难,
cccfffww
3楼-- · 2019-07-16 04:20
数字测频率有两种方法:
1.在一个固定时间内对输入的信号进行计数然后用计数的值换算成频率,固定的时间越长精度越高,而固定的时间一定时频率越高精度越高,所以适用于高频测量。
2.用待测信号的一个脉宽为基准时间来控制一个固定的高频参考信号计数,通过高频信号的计数值换算成待测信号的频率,这样的方法适用与低频,参考信号频率越高精度越高,待测频率越低精度越高,不过这种方法用单片机我没试过。

我以前做过2015年全国大学生电子竞赛f题数字频率计,我们用的这两个方法,你可以参考一下
daifangbo
4楼-- · 2019-07-16 04:48
呃呃呃..................
成谶
5楼-- · 2019-07-16 09:04
西电技术员 发表于 2016-4-5 20:50
我用F149做过,感觉比较容易,你可以看看你那块板子给的例程,然后找个网上的测频原理看看,稍改一下就行了

你好,我写了一个捕获频率的程序,但是好像精度不够不知道为什么,可以帮我看看吗?
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;
}
}

一周热门 更多>