arduino做频率发生器,但是频率和理论计算的有一定的误差,究其原因,是因为arduino在读写数字端口的时候需要花一定的时间,而这个时间是不能被忽略的
void setup() {
// 初始化数字引脚,使其为输出状态。
// 大部分Arduino控制板上,数字13号引脚都有一颗Led ,这个作为发生器的输出端。
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // 使Led亮
delayMicroseconds(20); // 持续 秒钟
digitalWrite(13, LOW); // 使Led灭
delayMicroseconds(20); // 持续 秒钟。
}
如何设定的延迟时间为t,则理论上信号输出的方波的频率应为1/(2×t),经过时间检测,本人发现有一定的误差,去掉延迟后,直接测最高可能达到的信号发生频率,即
void loop() {
digitalWrite(13, HIGH); // 使Led亮
//delayMicroseconds(20); // 持续 秒钟
digitalWrite(13, LOW); // 使Led灭
// delayMicroseconds(20); // 持续 秒钟。
}
用万用表频率档测得最高的频率为116k,(本人arduino的板子的晶振为12M)
周期就是1/116k,那么这个时间的一半就是digitalWrite函数所花费的时间,因此,后面延迟的时间再加上这个时间,就是方波发生器的半周期的时间,delayMicroseconds这个函数本身花费的时间就可以忽略不计了。
经过多次反复验证,证明准确无误。
供大家参考。 |