STM32晶振匹配总结

出处:维库电子市场网 发布于:2023-01-10 11:15:29

    1 前言客户反馈在批量生产阶段,发现部分产品的 MCU 的 RTC 在低温(0℃)下工作不正常,但是在常温下又是正常的,且其他正常的 MCU 的 RTC 在常温与低温下都是正常的。
    2 问题跟进与分析通过与客户邮件沟通,了解到客户使用的 MCU 型号是:STM32F030C6T6TR。在产品的主从结构中主要用作电源管理和时钟管理。通过客户的描述,似乎相同型号不同片子都存在较大的差异。

    由于时间紧急,在了解到初步信息后立即拜访客户,针对客户认为有问题的 MCU 芯片做针对性试验。通过STM32CubMx 生成测试工程,分别使用 LSI(40K),LSE(32.768K),RTC 工作时每秒通过 LED1(PB5)取反(通过 LED1 灯是否闪烁来指示 RTC 是否工作正常),然后分别测量 OSC 管脚与 PA8 脚(输出 LSI 或 LSE),并对比 ST 的 NUCLEO-F030 板,终测试结果如下:

    STM32F030 低温下 RTC 不工作通过测试结果,我们得到如下信息:
    l 当使用 LSI 时,无论常温还是低温下都能正常工作。
    l 当使用 LSE 时,常温下能正常工作,但在低温(0℃)时,RTC 不再工作(LED1 停止闪烁),且 PA8 管脚无输出,但保持为高电平,且此时 OSC 管脚此时是存在 32.768K 的波形的。
    l 通过修改负载电容 C1&C2 的电容值从 5.1pF 修改到 6.8pF 时,原本低温下不工作的 RTC 又能恢复正常工作。

    l 对比 ST 的 NUCLEO-F030 板子,在常温与低温下均能正常工作。

    STM32F030 低温下 RTC 不工作STM32F030 低温下 RTC 不工作从测试结果来看,通过修改负载电容的方式能让原本不能正常工作的 RTC 恢复正常工作,这个似乎为客户的负载电容不能精准的匹配系统的原因所致。
    但客户对于这种解释是不接受的,理由是现在设计的负载电容 5.1pF 是通过测试后的值,精度可以达到 6.5ppm,但如果改为 6.8pF,那么精度将会变到大约 30ppm,这个会影响到 MCU 的 RTC 的时间精准度,系统在长时间运行后,时间必然会偏差很大,超出设计合理范围,这个是不允许的。

    3 问题分析既然客户不接受修改负载电容,那么首先我们重新梳理下客户的晶振设计各种参数是否准确,客户的 LSE 电路设计如下所示:

    STM32F030 低温下 RTC 不工作如上图,图中的 MR10 10Mohm 这个反馈电阻在实际电路中是没有加的,晶振使用的是 TXC 的,从晶振厂商提供的数据手册中得到相关参数如下:

    STM32F030 低温下 RTC 不工作再者,由于客户代码中使用的 LSE drive 配置的是等级,从下图芯片对应的数据手册中可以找到对应的 gm值为 25uA/V,此时的驱动电流为 1.6uA:

    STM32F030 低温下 RTC 不工作上图有提到 AN2867 这个文档,于是我们打开这个文档,在 3.4 节,发现有这个要求:

    STM32F030 低温下 RTC 不工作也就是要求 gain margin 的值要求大于 5,这样晶振才能正常起振,那么 gain margin 又是如何计算的呢?接下来找到 gainmargin 的计算公式,如下:

    STM32F030 低温下 RTC 不工作其中 gm 就是图 4 中从数据手册中提到的跨导值,STM32F030 LSE 的不同驱动等级对应着不同的 gm 值,由于我们的测试代码使用的是 CubeMx 自动生成的代码,其默认使用的是等级,且客户使用的也是等级,因此,这个得出的 gm 值为 25 uA/V, gm 有了,那么上面公式中的 gmcrit 又该如何计算,我们接下来找到它的计算公式,如:
    STM32F030 低温下 RTC 不工作通过晶振对应参数,我们可以得出:
    ESR =70KΩ, C0 =1.0pF, CL =7.0pF,而 F 就是 LSE 的频率,为 32.768KHz.
    于是:
    g_mcrit =4 * 7E4 * POWER(2*PI()*32768,2) * POWER ((1.0E-12 7.0E-12),2) =7.6E-07终得到:
    gain_magin =gm/g_mcrit =2.5E-05/7.6E-07 =32.89这个值是远大于 5,因此,理论上不会存在晶振不起振是的问题,实际上当在低温下,之前在测试中也有发现晶振也是有起振,有波形输出的,只不过 PA8 脚没有波形输出,那个又是什么问题呢?
    提交给 pision,终定位到 LSE 的驱动等级过高,在 AN2867 这个文档中,有这样的描述:
    STM32F030 低温下 RTC 不工作也就是说,在 STM32F0 和 STM32F3 中,当使用驱动模式(gm_crit_max=5uA/V, 见 Figure9 gm_crit_max)时,对应地应该只使用在 CL=12.5pF 的晶振上,以此避免振荡回路饱和,从而导致启动失败。若此时使用了一个较小的 CL(如 CL=6pF),那么会导致振荡频率不稳定和工作周期可能被扭曲。

    AN2867 随后给出了一张表,列出了驱动等级与 gm_min、gm_crit_max 的关系,如下:

    STM32F030 低温下 RTC 不工作如上图,对于 STM32F0,当使用驱动模式 High 时,此时的 gm_min=25 uA/V,这个与数据手册中是一致的,另外 gm_crit_max =5uA/V,正是上面所描述的。

    也就是说,在使用驱动模式下,此时与之对应的 CL 应该使用 12.5pF,而客户所使用的 CL 是 7pF,这个与手册AN2867 的建议内容是不相符的。从图 4 可以看出,在驱动等级模式下,此时驱动电流(1.6uA),但这里使用了一个比较小的负载电容(CL=7pF),按 AN2867 所述,此时有可能导致振荡回路饱和,振荡不稳定,工作周期扭曲。
    此时,应该对应地下调这个 LSE 驱动等级,减小驱动电流,这里有 4 档(见 Figure 9):Low,Medium Low,Medium High,High。 目前使用的是 High,正是它出了问题,为保守起见,使用 Medium High 相对合适。
    打开 STM32F030 的参考手册,在 7.4.9 节中:
    STM32F030 低温下 RTC 不工作如上图,将 LSEDRV[1:0]这两个为修改为 10 即可,将原先低温下 RTC 有问题的 MCU 芯片修改后再次放到低温下进行验证,测试结果为正常。由于此问题是部分芯片有可能会出现的问题,客户需要对修改后的芯片进行持续跟踪,至今没有再反馈出现过此问题,由此,此问题基本算是解决。
    另外,从图 1 中所作的测试结果来看,实际上,在低温条件下,RTC 出现问题的时候,OSC pin 还是能正常捕捉到波形,只不过,PA8 脚这个 MCO 上没有波形,只是维持在高电平。于是,对于驱动电流过大所导致的振荡回路饱和,振荡不稳定,工作周期扭曲,这里理解为 MCO 脚与 MCU 内部振荡回路的连接点,也就是 MCO 所表现的波形。
    总结AN2867 这个文档总结了关于 STM32 晶振匹配方面的信息。里边有提到,负载电容 CL 值越大,所需的驱动电流也就越大,但牵引度越小。这也就解释了表 1 中通过增大 C1&C2 的电容值,原本出现问题的 RTC 能恢复正常的现象,这是由于 C1&C2 的电容值变大将导致负载电容 CL 变大,进而对应所需的驱动电流也就跟着增加,这反而减少了在高驱动模式情况下振荡回路出现饱和的机会。
关键词:STM32

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!