极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11983|回复: 3

arduino作频率发生器

[复制链接]
发表于 2015-2-6 13:10:15 | 显示全部楼层 |阅读模式
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这个函数本身花费的时间就可以忽略不计了。
经过多次反复验证,证明准确无误。
供大家参考。
回复

使用道具 举报

发表于 2015-2-6 13:47:25 | 显示全部楼层
arduino的板子的时钟都是16m的呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 20:55:12 | 显示全部楼层
迷你强 发表于 2015-2-6 13:47
arduino的板子的时钟都是16m的呀

我用的板子是DCcduino UNO 12M的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-8 07:26:51 | 显示全部楼层
wjlht 发表于 2015-2-6 20:55
我用的板子是DCcduino UNO 12M的

不好意思,是16M的,晶振太小,没看注意
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 14:28 , Processed in 0.060880 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表