文少 发表于 2018-5-14 20:40:21

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

各位大神好,本人在DIY一个玩意,用TIME1的CTC模式产生非PWM方波,在固定的频率时输出很好。但是我需要是从 10KHz 到 100KHz 循环变频的, 无论是用定时中断,还是用电位器控制频率,在变化的过程中,方波输出的D9脚都会无规律出现电压跳变,影响了后级音频处理电路,耳机中会同步听到喀喇喀喇的杂音。我用的是 NANO 板子。

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


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

以下是方波代码:

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位定时器,难到问题出在这里?

darkorigin 发表于 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?

darkorigin 发表于 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
个人还是觉得会不会是模块的个体问题。

应该不是个体问题
页: [1]
查看完整版本: 定时器CTC模式产生方波时,电压会跳变