STM32RTC 晶振相关摘录

STM32RTC 晶振相关摘录

STM32的RTC晶振经常出现不起振的问题,这已经是“业界共识”了。。。很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了”

更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量。。。

最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。。。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。

从上述现象来看,我认为对RTC晶振起振影响最大的因素应该是PCB的布线。但是遇到问题时通常是PCB已做好,甚至已经做了几百块,没有回头路了。于是大家更关注的问题似乎就是“如何补救”了。在网上搜索一下,你就会发现世界是如此美好!每个人的经验和建议都不一样,甚至是完全相反的!这种现象告诉我们,除了PCB布线,对晶振起振影响最大的似乎不是电气参数,而是另外一种不可忽略的因素——人品!

各种相互矛盾的经验也告诉我们,导致晶振不起振的原因是多种多样的,也是因“人”而异的。也许,我们无法找到一个绝对有效的经验一举解决STM32的RTC晶振这个让人头疼的问题,但我们可以从各种经验中找到一些线索,为最终摸索到适合自己这块板子的解决方案提供一些帮助和提示。

如果晶振不起振,尤其是你已经使用了传说中的爱普生6pF晶振后还是不行,也许你应该尝试对以下几个方面排列组合,找到适合你这块板子的,更容易起振的方式。

下面就罗列一下可能影响RTC晶振起振的因素
1. 晶振的品牌和负载电容
大家貌似都知道要用6pF的晶振,但我发现其实12.5pF的也可以用。大家都说KDS日本原装的好,我那个3毛钱的国产晶振貌似也没啥大问题。。。
2. 晶振外接的匹配电容
有人说6pF的晶振要配6pF的电容。但有经验公式指出这个电容的值应该是晶振本身负载电容的两倍,6pF的晶振应该配10pF的匹配电容,当然12.5pF的就应该配20pF或者22pF的电容了~电容值不匹配可能造成晶振不起振。更神奇的是,有人指出去掉外接的匹配电容会使晶振起振!这似乎没啥道理,但在我的板子上,有且仅有这个方案是可行的!!!
3. 晶振并联的反馈电阻
晶振可以并联一个高阻值的电阻,据说这样更容易起振。。。这个电阻的阻值有人说是1MΩ,有人说是5MΩ,也有人说是10MΩ,,,当然也有人说不能并联这个电阻,并联了反而不起振
4. XTALout到晶振间串联电阻
这种做法是官方的应用笔记指出的,而且给出了这个电阻的计算公式。对这个电阻的的必要性也是众说纷纭,同样存在两种矛盾的说法,即必须要有这电阻,否则不起振。还有一说不能有这个电阻,否则不起振。。。从官方的应用笔记来看,这个电阻的主要作用是保护晶振,以防晶振发热。由此看来这个这个电阻似乎并非影响晶振起振的主要因素,甚至可能让晶振更难起振。
5. 晶振的外壳是否接地
这个就不用说了吧。。。晶振的外壳是金属的,做封装时可以把那个焊盘做成机械焊盘而悬空,也可以做成电气焊盘,然后连接到GND。对这个说法同样存在争议,有人说外壳必须接地,也有人说接地后反而不起振。
6. 提高Vbat引脚的电源质量
这种说法是有一定道理的,因为RTC部分是由Vbat的来供电的。有人说Vbat引脚对电源质量要求比较高,如果纹波较大可能会影响晶振的起振。更有人说反而需要一些噪声,激励晶振产生正反馈从而顺利起振(本人对此表示呵呵)。。。但不管怎样,提高电源质量对大家都是好事~
7. 晶振周围的环境
有人指出应该仔细清洗RTC晶振周围的电路,甚至是使用环氧树脂胶将晶振密封起来。这种说法得到了一些人的支持,看来也是有相当多的事实依据。
8. 减少晶振焊接时加热的时间
有人认为长时间加热晶振进行焊接会对晶振本身带来影响,却不是彻底损坏晶振,从而使得晶振不容易起振。。。这种说法我没验证过,个人表示怀疑。。。
9. 焊接的焊锡量
这个种说法感觉就更不靠谱了,但真的有人在晶振引脚上多加了点焊锡晶振就能起振了。从原理上说,多加点焊锡确实会改变晶振和PCB间的寄生参数,但我感觉影响微乎其微。。。可能晶振已经徘徊在临界值的边缘了,这种做法才会起到一点作用。
10. 使用有源晶振
个人认为这是一劳永逸解决晶振不起振问题的不二法门!有人对STM32的RTC晶振不易起振的原因做了一个解释,即出于低功耗的考虑,STM32对晶振的驱动功率比较低,所谓“好鼓不用重锤”,一些差的晶振就需要更高的驱动功率,所以不易起振。我认为这种解释是有道理的。使用有源晶振则不存在驱动功率的问题,如果问题确实是因为驱动功率造成的,那使用有源晶振毫无疑问可以彻底解决问题。而且目前网上还没看到说有源晶振不起振的求助帖。但是有源晶振通常比较昂贵,甚至要比一颗外置的RTC芯片还要贵。至于这个问题的取舍,就要看各位看官自己的想法了

二、我从2014年开始使用STM32内部RTC用于产品,之前出现过很多问题,也换过很多晶振,比如按照ST推荐的6pF晶振,也出现很多问题,贴片的很贵的那种也用过几种,都不行,查询了一些晶振启振的资料,最后还是使用2mm的那种最便宜的晶振,使用过多个批次,每次200套左右,已经1000多套了,只有几套出现问题,并且更换晶振后都能够修复,卖出去的产品里面也只有一套出现问题了(我程序里面如果检测到RTC外部晶振故障,会多次重试,依旧不行会切换到内部晶振,并且设备联网可以校时)。

STM32RTC 晶振相关摘录_第1张图片

3).如何选择电容C1,C2?

(1):因为每一种晶振都有各自的特性,所以最好按制造厂商所提供的数值选择外部元器件。(2):在许可范围内,C1,C2值越低越好。应该试用电容将他的振荡频率调到IC所需要的频率,越准确越好,C值偏大虽有利于振荡器的稳定,但将会增加起振时间。

(3):应使C2值大于C1值,这样可使上电时,加快晶振起振。

(4) 对于32KHZ以上的晶体振荡器,当VDD>4.5V时,建议C1=C2≈30PF。

1.根据这个资料我把int脚上面的电容去掉,out脚上面的电容接6pF(不接电容out脚信号很强,但是有点变形,接6pF电容后接近正弦波,接18pF后幅度变小),这样解决了99%以上的STM32晶振问题(用的是2mm圆柱晶振,最便宜的那种)。

2.很久没有折腾晶振问题,最近2个新产品上面(几块板子同时出问题,肯定不是偶然了)遇到了,一个最终调试发现是PC13,靠近in的那个脚,如果有高电平或脉冲,会导致很大部分的晶振不启振,或者突然停止振动(也是调试很久,对比发现这个问题的),通过把PC13接低电平(或者输出低电平)解决了这个批次的问题。

3.还有一个产品也是新产品,几片同样出现晶振不启振,目前正在调试,刚刚测试发现只要用示波器接out是可以显示波形,接in后晶振立即停止了,抗干扰能力非常弱,这也就是STM32的最大bug,上面PC13脚影响RTC同样是这个问题。

STM32RTC 晶振相关摘录_第2张图片

看到晶振启动电路后,我尝试加上一个10M电阻在晶振两端,发现晶振启振特别稳定,并且用示波器也能看到稳定的波形。

STM32RTC 晶振相关摘录_第3张图片
in脚上面稳定的波形,并且抗干扰能力变强了,也不再受到PC13以及示波器的影响而停止了。

STM32RTC 晶振相关摘录_第4张图片

out脚上面波形有畸变,并且幅度较小。

4.如果是手工焊接的,建议使用酒精或洗板水把晶振附近焊接点清洗干净,也可以解决部分出问题设备。

通过上面这些改进,可以解决我目前所遇到的所有晶振问题,但是很折腾人,马上又要出1000套货,看看这个批次是否会出现晶振问题,如果对RTC要求较高,最终还是建议使用外部RTC。

2017-08-11 补充:本次1000套生产的产品一套都没有出现RTC晶振问题,相反以前手工焊接出现很多,初步判断很多问题是由于助焊剂导致,建议将晶振部分使用洗板水清洗干净,并喷涂三防漆可以有效的解决这个问题。

你可能感兴趣的:(嵌入式)