pilibeibei的笔记 https://bbs.21ic.com/?278259 [收藏] [复制] [RSS]

日志

为什么用定时器调38kHz老不稳?

已有 1413 次阅读2010-4-10 05:56 |系统分类:单片机

最近自己搞红外线玩,想用载波,却发现用定时器调的38kHz老不稳。想来想去,肯定是这样做有问题,但没弄明白是什么问题。在某论坛发现一哥们对别人帖子的回复给了我完美的答案。回复如下:


 


如果你用于民用产品,这并没什么问题,但你做工业级甚至军工级产品时(军工级不等于用于真的用于军工),这里面其实有些问题存在:

51单片机要响应一个中断,必须要执行完当前正在执行的指令,而当前执行的指令从1机器周期到4个机器周期不等,假如你的主频高,这个时间可以忽略,但你用的是11059K晶振,这就意味着在中断响应时,会有1~4uS的不固定延迟.
虽然你使用了自动重装方式,可以精确地保证平均周期与预期值相等,但实际产生的波形是宽的宽窄的窄,相当于在38K基频上混入了一个随机噪声频谱(26uS+-2uS),它带来的效果不清楚,也许是通信距离缩短.

很多工业控制程序里,在某些区域会大量使用NOP指令,为的就是在中断发生的前后正好执行到nop区域,保证时序的精确.

很多产品的检测比较严格,别等产品的规模测试都做完了,以为没啥事了,结果却被这些细枝末节的小问题郁闷个好些天.

这并不是什么大问题,只是我认为做硬件必须养成严谨的习惯,所以把这些细节分享给大家.


原因的确如这位哥们说的那样,51指令在执行的过程中会给中断带来随机的延时。我做了一个反推理,写了一个程序,只做脉冲输出口自动反转,别的什么也不干,此时再用示波器测出来的38kHz就相当的稳了,基本在0.5kHz以内跳动。


我想调38kHz还是另想他法吧。


 


 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)