arduino测方波频率(外部中断)

  • Post author:
  • Post category:其他


单片机测方波频率有两种典型的方法:

1.如果频率较块时候:利用定时器(定时一秒),外部中断下降沿触发,计算一秒钟触发的次数,算出频率

2.如果频率较慢的话,利用两个下降沿或上升沿时间间隔,测出频率

教程针对第二种

1.arduino外部中断教程

介绍:中断程序可以看作是一段独立于主程序之外的程序,当中断触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中 断程序,中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序。如此便可做到实时响应处理事件的效果。

具体程序;设置一个引脚,默认是输入

//下降沿触发 触发中断0(引脚2),调用blink函数

attachInterrupt(0, blink, FALLING);

2.时间函数

micros():毫秒计数

micros();微秒计数

一般用unsiged long(无符号长整型表示)

3.程序编写(硬件连接,一个单片机引脚输出方波信号(模拟信号源),一个单片机引脚2读取方波信号)

//arduino测方波频率
int SensorINPUT = 2;      //连到中断0,也就是数字引脚`
unsigned long time1,time2,time_;
float pl;

void setup() {
  Serial.begin(9600);  //开启串口
  pinMode(SensorINPUT, INPUT);  //设置引脚输入(默认就是输入)
  attachInterrupt(0, blink, FALLING);   //下降沿触发,触发中断0,调用blink函数
  
}


void loop() {
   //int a = digitalRead(SensorINPUT);  //串口打印一下看看数据正确吗
   //Serial.println(a);  
   if(time2 > 1000000000 ){
     time2= 0;    //避免溢出
    }
   delay(10);
}

void blink() {               //中断函数blink()
  time1 = time2;    //保留上一次数值
  time2 = millis(); //读取现在的时间数值
  time_ = time2 - time1;   //计数两个下降沿之间的所经过的时间
  pl=1000.0/time_;     //计算频率  pl = 1/(time_/1000)  时间的倒数
  Serial.println("----");
  Serial.print(pl);     //打印数值
  Serial.println("----");
}



版权声明:本文为weixin_39303781原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。