极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 717|回复: 7

定时器CTC模式产生方波时,电压会跳变

[复制链接]
发表于 2018-5-14 20:40:21 | 显示全部楼层 |阅读模式
各位大神好,本人在DIY一个玩意,用TIME1的CTC模式产生非PWM方波,在固定的频率时输出很好。但是我需要是从 10KHz 到 100KHz 循环变频的, 无论是用定时中断,还是用电位器控制频率,在变化的过程中,方波输出的D9脚都会无规律出现电压跳变,影响了后级音频处理电路,耳机中会同步听到喀喇喀喇的杂音。我用的是 NANO 板子。

如图所示,39KHz的方波,中间有个电压跳变的断层
webwxgetmsgimg.jpg

这个问题就经困扰了几天,实在想不出什么原因,请各位大神指点迷津,谢谢!

以下是方波代码:

  pinMode(9, OUTPUT);  
  TCCR1B=0;
  TCCR1A=_BV(COM1A0);                       //OC1A取反
  TCCR1B = _BV(WGM12)|_BV(CS10) ;    //  CTC 模式;无分频
  OCR1A = 80;                                      // 约100KHz     计算为:F_CPU/2/Need_HZ-1 来得到你想要的,四舍五入来截取频率
回复

使用道具 举报

 楼主| 发表于 2018-5-14 21:31:49 | 显示全部楼层
更新一下:

我用TIME0 8位定时器CTC模式重新做了一个变频方波,这下就再也没有电压跳变了,频率变化非常顺滑,TIME 1是16位定时器,难到问题出在这里?
回复 支持 反对

使用道具 举报

发表于 2018-5-15 01:38:52 | 显示全部楼层
有的时候和PCB设计有关,试试加个下拉电阻 或许就能收到效果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-15 03:17:16 | 显示全部楼层
本帖最后由 文少 于 2018-5-15 03:19 编辑
darkorigin 发表于 2018-5-15 01:38
有的时候和PCB设计有关,试试加个下拉电阻 或许就能收到效果


NANO我是独立运行测试的,没有其它电路连结,上下拉电阻都试过了不行。
仔细测试了16位的定时器1,只要OCR1A参数有连续变化(变更频率),就会出现变化不顺滑,有断层的现象,CTC模式是这样,快速PWM模式也是这样,实在很费解。
相同的方式设定8位的定时器0和2,却工作得非常好。
因为自己的产品要同时用到三个定时器,就对调了一下,把TIME1作为定时中断,0和2作为驱动时钟,倒也比较完美~~
回复 支持 反对

使用道具 举报

发表于 2018-5-15 06:59:22 | 显示全部楼层
难道这个是328的bug?
回复 支持 反对

使用道具 举报

发表于 2018-5-15 10:25:27 | 显示全部楼层
个人还是觉得会不会是模块的个体问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-16 01:11:40 | 显示全部楼层
弘毅 发表于 2018-5-15 06:59
难道这个是328的bug?

不至于吧,要是BUG就太那个了。
CTC模式也是参照本版块一个贴子设定的,好像叫什么“用ARDUINO产生高精度方波”,核对了各个寄存器设定没问题,单频率挺好的,如果把OCR1A的值用一个变量,连续变化时就出现了这个问题,同样的方法在定时器0和2却木有问题~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-16 02:17:24 | 显示全部楼层
darkorigin 发表于 2018-5-15 10:25
个人还是觉得会不会是模块的个体问题。

应该不是个体问题
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2018-8-16 16:42 , Processed in 0.040604 second(s), 7 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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