找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14031|回复: 7
收起左侧

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

  [复制链接]
ID:412533 发表于 2018-10-19 23:40 | 显示全部楼层 |阅读模式
最近研究了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方波的图形,非常精准
1.png
回复

使用道具 举报

ID:85865 发表于 2018-10-23 10:53 | 显示全部楼层
还不太明白
回复

使用道具 举报

ID:162514 发表于 2018-10-25 19:26 | 显示全部楼层
不明白!
回复

使用道具 举报

ID:272625 发表于 2019-2-14 20:56 来自手机 | 显示全部楼层
自娱自乐,自说自话吧!
回复

使用道具 举报

ID:469313 发表于 2019-3-2 09:50 | 显示全部楼层
不明白! void loop()这里什么也没有,怎么会有方波输出?
回复

使用道具 举报

ID:563758 发表于 2019-12-4 15:00 来自手机 | 显示全部楼层
用pro mini试的。还可以。学习了
2019-12-04_14.57.56.jpg
2019-12-04_14.58.26.jpg
2019-12-04_14.59.41.jpg
回复

使用道具 举报

ID:428400 发表于 2019-12-7 18:19 | 显示全部楼层
占空比也可调才好
回复

使用道具 举报

ID:718483 发表于 2020-3-29 23:10 | 显示全部楼层
直接操作寄存器?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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