找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15923|回复: 7
打印 上一主题 下一主题
收起左侧

用arduino作为方波发生器,非常精准,频率任意可调

  [复制链接]
跳转到指定楼层
楼主
最近研究了arduino的定时器,可以用pwm作为方波发生器,在9脚上输出方波。代码如下:
void setup()
{
  // 下面的等值于 OC1A = 输出用于定时器1的CTC模式
  pinMode(9, OUTPUT);  // 设置默认关联了D9(查表得知)为输出
  TCCR1B=0; // 只是个复位的习惯可以不要
  TCCR1A=_BV(COM1A0); // 要是困扰的话你也可以写成 TCCR1A = 0b01000000;
  //这里和上一个表示了 = CTC 模式, 开启比较器(默认输出), prescaler = 1
  TCCR1B = _BV(WGM12)|_BV(CS10) ; //  这里等值于 TCCR1B = 0b00001001;

  // 最有意思的了,16位的玩意来确定要一个怎样的频率
  OCR1A = 0; // 计算为:F_CPU/2/Need_HZ-1 来得到你想要的,遗憾的是四舍五入来截取频率
  
}

void loop(){
  //这次啥也没做
}

通过设置OCR1A来改变频率大小,例子上输出方波频率为8M,够高吧!由于OCR1A是16为寄存器,最大也只能设为65535,故频率最低可达到122HZ,arduino晶振为16M,因此这个例子能输出的频率范围为f/(2*65536)  到f/2, 其中f为arduino时钟频率,即16M

下面是生成8M方波的图形,非常精准

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:85865 发表于 2018-10-23 10:53 | 只看该作者
还不太明白
回复

使用道具 举报

板凳
ID:162514 发表于 2018-10-25 19:26 | 只看该作者
不明白!
回复

使用道具 举报

地板
ID:272625 发表于 2019-2-14 20:56 来自触屏版 | 只看该作者
自娱自乐,自说自话吧!
回复

使用道具 举报

5#
ID:469313 发表于 2019-3-2 09:50 | 只看该作者
不明白! void loop()这里什么也没有,怎么会有方波输出?
回复

使用道具 举报

6#
ID:563758 发表于 2019-12-4 15:00 来自触屏版 | 只看该作者
用pro mini试的。还可以。学习了

2019-12-04_14.57.56.jpg (1.24 MB, 下载次数: 163)

2019-12-04_14.57.56.jpg

2019-12-04_14.58.26.jpg (1.77 MB, 下载次数: 180)

2019-12-04_14.58.26.jpg

2019-12-04_14.59.41.jpg (1.63 MB, 下载次数: 167)

2019-12-04_14.59.41.jpg
回复

使用道具 举报

7#
ID:428400 发表于 2019-12-7 18:19 | 只看该作者
占空比也可调才好
回复

使用道具 举报

8#
ID:718483 发表于 2020-3-29 23:10 | 只看该作者
直接操作寄存器?
回复

使用道具 举报

9#
无效楼层,该帖已经被删除
10#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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