Intel物联网开发者专区
直播中

陈彭鑫

9年用户 165经验值
擅长:嵌入式技术
私信 关注
[经验]

【Intel Edison试用体验】5、爱迪生变身频率计

本帖最后由 左岸cpx 于 2016-9-1 16:08 编辑

前言:在MCU中,我们常用定时器边缘捕获的功能来测量方波信号的频率值。在FPGA中,我们经常用“等精度测量的原理”无误差地测量方波的频率。而对于我们的"小电脑"爱迪生,如何去测量方波频率,并尽量减少测量误差呢?  答案是“外部中断+获取时间戳”,两个上升沿或下降沿所在时间戳之差,即方波周期,得到周期那么频率自然就出来了。鉴于爱迪生的超高速(相对MCU来说),测量方波的频率误差也非常小。(但是肯定比不过等精度的测量方法,哈哈。)
另外,为了区别“无频率”或“频率非常小”两种情况,本文的代码设置了超时时间判定,来提高响应速度。
步骤1:直接上代码
var mraa = require("mraa");
var front_time = 0;
var back_time = 0;
var interval = 0;
var freq = 0;
var wave_begin = true;

var key = new mraa.Gpio(8);
key.dir(mraa.DIR_IN);
key.isr(mraa.EDGE_RISING, function(){
    if(wave_begin){
        var d = new Date();
        front_time = d.getTime();
        wave_begin = false;
    }else{
        var d = new Date();
        back_time = d.getTime();
        wave_begin = true;
        interval = back_time - front_time;
    }
});

//主循环
setInterval(function(){
    var d = new  Date();
    var time_now = d.getTime();
    if(time_now - back_time > 1500){
        //1.5秒超时,认为无信号,freq = 0 Hz
        interval = 0;
    }
    //计算频率
    if(0 == interval){
        freq = 0;
    }else{
        freq = 1000/interval;
    }
    console.log("The frequency is " + freq + " Hz");
}, 1000);


步骤2:分析代码
实验目的:通过外部中断和time时间戳来测量方波频率
原理:方波信号作为外部中断源,第一个上升沿(前沿front_time)到来时,爱迪生记录前沿时间戳;第二个上升沿(后延back_time)到来时,爱迪生记录后延时间戳。两个时间戳之差就是该方波的周期(注意时间戳的单位是毫秒哦!)。
问:什么叫做时间戳?
答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。
在中断服务函数中记录方波前沿和后延对应的时间戳,在主循环中计算方波频率。设置超时时间为1.5秒(所以,测量最低范围是1/1.5 Hz),1秒钟打印一次测量频率。
步骤3:实验现象
我这边是通过CPLD输出了频率为100 Hz的方波信号,和爱迪生共地后连接IO8,观察实验现象:
IMG_0222.JPG
可以看到在控制台打印出了 方波频率!

回帖(1)

CHNlyt

2016-9-25 12:38:48
基础不牢,人生悲催。现在回想读书荒废时光。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分