极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 78055|回复: 15

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

[复制链接]
发表于 2015-3-14 14:10:58 | 显示全部楼层 |阅读模式
最近研究了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方波的图形,非常精准

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-3-14 14:44:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-3-14 16:20:54 | 显示全部楼层
能用Arduino MEGA2560发出频率为47.21Hz,幅值为3.3V,占空比为1-10%之间的pwm波?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-14 19:17:03 | 显示全部楼层
amxamx 发表于 2015-3-14 16:20
能用Arduino MEGA2560发出频率为47.21Hz,幅值为3.3V,占空比为1-10%之间的pwm波?

这很容易实现呀,用delay()函数,设置引脚高电平和低电平,就可轻松实现,频率越低越容易实现,高频率的方波就需要用定时器了,不占用cpu
回复 支持 反对

使用道具 举报

发表于 2015-3-15 09:52:14 | 显示全部楼层
wjlht 发表于 2015-3-14 19:17
这很容易实现呀,用delay()函数,设置引脚高电平和低电平,就可轻松实现,频率越低越容易实现,高频率的 ...

高电平不是默认5V了?  幅值3.3V怎么设置啊?
   我用delay函数算了时间,正脉宽对,负脉宽不对了。。
回复 支持 反对

使用道具 举报

发表于 2015-3-15 13:26:46 | 显示全部楼层
楼主如果要改变pwm的占空比应该怎么做
回复 支持 反对

使用道具 举报

发表于 2015-3-16 14:58:05 | 显示全部楼层
xiaoxiaosaonian 发表于 2015-3-15 13:26
楼主如果要改变pwm的占空比应该怎么做

这个我不是很明白,
digitalWrite(led,HIGH)
delay(X)
digitalWrite(led,LOW)
delay(Y)
只知道改变X,Y就能改变占空比,x=y就是50%,至于频率就不用我说了吧?
回复 支持 反对

使用道具 举报

发表于 2015-3-16 20:19:53 | 显示全部楼层
wsy0315 发表于 2015-3-16 14:58
这个我不是很明白,
digitalWrite(led,HIGH)
delay(X)

这个我知道,置高置低,我想用的是用定时器1和2写pwm,用3,9,10,11引脚输出这个
回复 支持 反对

使用道具 举报

发表于 2015-3-17 23:32:35 | 显示全部楼层
楼主用的什么软件的呀?
回复 支持 反对

使用道具 举报

发表于 2015-3-18 08:11:06 | 显示全部楼层
hsr18299 发表于 2015-3-14 14:44
http://code.google.com/p/arduino-pwm-frequency-library/downloads/list

老大,google上不去啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 22:54:15 | 显示全部楼层
Karl 发表于 2015-3-17 23:32
楼主用的什么软件的呀?

用逻辑测试仪测的引脚
回复 支持 反对

使用道具 举报

发表于 2015-3-29 19:39:45 | 显示全部楼层
xiaoxiaosaonian 发表于 2015-3-16 20:19
这个我知道,置高置低,我想用的是用定时器1和2写pwm,用3,9,10,11引脚输出这个

不是很明白你的问题,delay不就算是定时了吗?
回复 支持 反对

使用道具 举报

发表于 2016-7-26 11:26:46 | 显示全部楼层
感谢楼主分享,请问要是想改变所产生的脉冲的占空比的话该怎么做
回复 支持 反对

使用道具 举报

发表于 2016-7-26 12:14:48 | 显示全部楼层
本帖最后由 jg521000 于 2016-7-26 13:44 编辑

楼主,我查了一下ATMEGA32U4芯片的资料, WGM2=1 WGM1=0,WGM0=0的时候,是保留模式??为何可以产生方波呢?
谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2016-12-21 02:44:59 | 显示全部楼层
楼主的代码如果用于MEGA2560则输出脚是11~~

回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 07:32 , Processed in 0.085655 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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