单片机测方波频率有两种典型的方法:
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 版权协议,转载请附上原文出处链接和本声明。