控制/MCU
前言
写文章之前,先调查一个小问题。如下图 1 为某32位单片机的系统框图,我们可以看到系统时钟可以选择内部RC振荡器或者外部晶振:那么大家写程序时,习惯用外部晶振来为系统分频用还是习惯用内部晶振?
图 1
相信这两种方式都不在少数吧,用内部晶振的工程师估计多数都有成本方面的考虑,毕竟很多产品对成本压的比较厉害。当然高附加值的产品估计不会对一颗晶振计较,为了系统整体性能,会果断选择用外部晶振,突出一个有钱~
问题描述及解决方式
那么使用内部RC振荡器晶振会存在哪些问题呢?
分享之前遇到的一个技术问题,某款单片机有两个晶振,一个晶振作为系统主时钟24MHz主时钟,另一个是RTC32.768kHz低速时钟,低速时钟摘取关键的描述如下:
图 2
总结下上面描述的主要意思有4点:
1、RTC时钟源有两个,一个可以来自外部,另一个可以来自系统内部RC振荡器;
2、RTC时钟主要用于唤醒电路、下电实时时钟操作、低速低功耗系统、看门狗计数器输入;
3、内部RC振荡器的精度在50%,其启动要比外部32.768kHz晶振快;
4、当系统检测不到外部32.768kHz晶振时,会自动切换到内部RC振荡器,且不需要软件配置;
项目首次做样机时,两个晶振都放上了,后来翻看技术手册发现了这颗晶振可以去掉,用内部RC替代,心想既然厂家做了这样一个内部晶振供使用,那么其性能也是可以的,并且也去掉后在实验室常温下跑了下全业务运行,没有出现异常。因此,在原理图评审时跟同事决定将此晶振去掉来降低一部分成本,毕竟剩下来的是几十万的纯利润。就这样,下一批样机到了,产品做回归测试,常温下测试没问题,但是在高低温实验箱跑到60多度环境温度就出线重启,查了好久,实验过程中将各个电源用示波器检测起来,样机出线故障时,电源并无异常,蒙圈了,这个问题有点上头。
核对与上版原理图的差异,只有晶振这块去掉了,难道是这的问题,查看芯片手册,看到了上图 2 的描述,立即换下一台样机做测试,故障没有复现,又准备了3台样机去做测试,故障没有复现,基本确定是晶振导致的本次问题。高温测试时内置RC振荡器时钟波动范围太大,导致喂狗时间错误,然后重启复位了,因此最终还是决定要接外置的32.768kHz晶振。
经验总结
1、单片机内部RC振荡器可靠性一般,产品可靠性要求高的应用不建议使用;
2、如果要使用内部振荡器作为时钟,外部晶振空置不接,一般可以考虑将晶振输入引脚接地、输出引脚悬空处理,具体芯片可以参照数据手册推荐的方式处理;
3、修改对温度影响敏感的电路,需要做相应的温度测试;
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !