你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F030 低温下 RTC 不工作

[复制链接]
STMCU小助手 发布时间:2022-2-25 20:02
1 前言
/ E( l% b/ k4 n8 w' o# x客户反馈在批量生产阶段,发现部分产品的 MCU 的 RTC 在低温(0℃)下工作不正常,但是在常温下又是正常的,且其他正常的 MCU 的 RTC 在常温与低温下都是正常的。4 f9 F! k* f& ]! ?' |6 B

* |' F9 |) a+ h# e# f  L; H1 X2 问题跟进与分析
% d1 R% c- [; |1 a; j通过与客户邮件沟通,了解到客户使用的 MCU 型号是:STM32F030C6T6TR。在产品的主从结构中主要用作电源管理和时钟管理。通过客户的描述,似乎相同型号不同片子都存在较大的差异。
. t  W0 a4 U) W& K4 j9 {
) M7 |+ u0 b' \$ ~由于时间紧急,在了解到初步信息后立即拜访客户,针对客户认为有问题的 MCU 芯片做针对性试验。通过STM32CubMx 生成测试工程,分别使用 LSI(40K),LSE(32.768K),RTC 工作时每秒通过 LED1(PB5)取反一次(通过 LED1 灯是否闪烁来指示 RTC 是否工作正常),然后分别测量 OSC 管脚与 PA8 脚(输出 LSI 或 LSE),并对比 ST 官方的 NUCLEO-F030 板,最终测试结果如下:, H: c8 b  j2 S! \: R
% {7 n3 Y2 K- {% z2 E
7HKM@`4TO8{R8)P~DD{_CID.png 9 b$ K0 Q* X. v7 m: d! T7 ?
& V5 F9 ?* F* ~9 \8 y
通过测试结果,我们得到如下信息:7 C' H# I) v1 g/ b8 w  r7 D
    当使用 LSI 时,无论常温还是低温下都能正常工作。: e( Q0 y0 J3 ^
    当使用 LSE 时,常温下能正常工作,但在低温(0℃)时,RTC 不再工作(LED1 停止闪烁),且 PA8 管脚无输出,但保持为高电平,且此时 OSC 管脚此时是存在 32.768K 的波形的。/ H; P1 D( N8 P2 z3 G0 w
    通过修改负载电容 C1&C2 的电容值从 5.1pF 修改到 6.8pF 时,原本低温下不工作的 RTC 又能恢复正常工作。
. I" e6 f# k* x+ B    对比 ST 官方的 NUCLEO-F030 板子,在常温与低温下均能正常工作。
  c+ P6 u5 t( Q8 d" G; ~$ Y
" p: u' m4 N% O7 U  Z I0W7}9IJ@3S]]C$SMA3KPL8.png
; p( w3 s8 `  ]/ n: C: {9 `* |3 [3 R6 B# c! n# f! A
HA)WVIPHU3O1IRWC)Y4{XR4.png
# q- ~6 }: g  M* B: ?$ K  ?0 l1 G! l* |; y- f) b5 i
从测试结果来看,通过修改负载电容的方式能让原本不能正常工作的 RTC 恢复正常工作,这个似乎为客户的负载电容不能精准的匹配系统的原因所致。* G' d6 Z' U  V2 s) V
. P. i: T# a5 N
但客户对于这种解释是不接受的,理由是现在设计的负载电容 5.1pF 是通过测试后的值,精度可以达到 6.5ppm,但如果改为 6.8pF,那么精度将会变到大约 30ppm,这个会影响到 MCU 的 RTC 的时间精准度,系统在长时间运行后,时间必然会偏差很大,超出设计合理范围,这个是不允许的。4 {! _3 M" w3 B8 s9 E
- ]9 J+ Y/ t. q! i1 n' l$ j( h
3 问题分析3 m$ E- g* V3 q0 u' N) x
既然客户不接受修改负载电容,那么首先我们重新梳理下客户的晶振设计各种参数是否准确,客户的 LSE 电路设计如下所示:$ \9 c' c6 Q1 ?3 f; V

3 P( l, p5 m: z' a: d MEX641(VL$~0]S2}JE7G~3V.png
. d, O" S2 P  k* C: e6 s( l) p3 m  e7 R# f8 z" j( o- p

( G" q7 q/ D! Y( i: d6 z如上图,图中的 MR10 10Mohm 这个反馈电阻在实际电路中是没有加的,晶振使用的是 TXC 的,从晶振厂商提供的数据手册中得到相关参数如下:
' k- j/ J' m9 x/ t7 T7 m9 `/ N) B3 F" X: d0 \
D]V`R$V@TU0UA{K9D`{~J06.png 0 N6 K7 H* h" V- b" O+ N

' U. @1 X/ o# u0 g/ ?5 ]  o再者,由于客户代码中使用的 LSE drive 配置的是最高等级,从下图芯片对应的数据手册中可以找到对应的 gm值为 25uA/V,此时的驱动电流为 1.6uA:
4 U0 v% _: ~! @5 ?. F
/ K4 ~3 [" |9 r# h5 U% E 521}O$DMYA]RQ6UQ@8(V2L4.png
0 e% I* K8 v$ H/ Y) Q2 o/ p; a. L' ~$ U3 i3 s% [% G
6 t# N+ y+ O0 L0 o# Q
上图有提到 AN2867 这个文档,于是我们打开这个文档,在 3.4 节,发现有这个要求:
* \2 g% M* j- h5 l4 w  x  j" ]5 c% K! F" K0 n+ O9 J- D9 M
32(WL5(IS`D@Z3G@$S(K`PK.png
! U: t# D6 H# ?% g" I1 ^- h8 l. U1 H. \
0 A$ G0 J, z! T# [9 x3 ?
也就是要求 gain margin 的值要求大于 5,这样晶振才能正常起振,那么 gain margin 又是如何计算的呢?接下来找到 gainmargin 的计算公式,如下:
- B1 A) Q& J: z& I1 W$ K' e8 r6 r6 @9 y% l% I
SVSS(QUX~L9HDJ[K$Z6VUUD.png # Z$ M( G& v$ |- {, g9 S$ Q
" m1 m$ [" k+ T; L& I) v6 c5 R
其中 gm 就是图 4 中从数据手册中提到的跨导值,STM32F030 LSE 的不同驱动等级对应着不同的 gm 值,由于我们的测试代码使用的是 CubeMx 自动生成的代码,其默认使用的是最高等级,且客户使用的也是最高等级,因此,这个得出的 gm 值为 25 uA/V, gm 有了,那么上面公式中的 gmcrit 又该如何计算,我们接下来找到它的计算公式,如:
  l7 r  @5 X/ f9 F3 G4 k# }! r2 o3 }( P4 \
1JI_M}I5[%0Z0C]E}2J46HO.png 6 d4 q- X# [! n

5 ~8 Z6 T' ^% f1 l2 w, t$ g通过晶振对应参数,我们可以得出:2 H0 g* c, W: n6 k
ESR =70KΩ, C0 =1.0pF, CL =7.0pF, 而 F 就是 LSE 的频率,为 32.768KHz.
1 R1 f, @& W- }% B于是:
, D! H/ V) @/ e7 _g_mcrit =4 * 7E4 * POWER(2*PI()*32768,2) * POWER ((1.0E-12 + 7.0E-12),2) =7.6E-07. B* h/ x, d- D) ^
最终得到:
2 ~$ p/ d4 w& r  d1 V) W6 f/ Mgain_magin =gm/g_mcrit =2.5E-05/7.6E-07 =32.89
' s& `  P2 @5 i; ^0 g这个值是远大于 5,因此,理论上不会存在晶振不起振是的问题,实际上当在低温下,之前在测试中也有发现晶振也是有起振,有波形输出的,只不过 PA8 脚没有波形输出,那个又是什么问题呢?7 Z+ M- v7 k5 Z' c2 Q, k
: |- U" A( p# t8 B$ P
提交给 division,最终定位到 LSE 的驱动等级过高,在 AN2867 这个文档中,有这样的描述:% S5 t8 T8 W, n8 k$ L" k
. ]; ?/ a) n2 Z' b  v
R19MYLZ7X{UE25J[H)@{`ET.png & a$ j$ a; s0 F, U7 {2 V

' ^+ _! A* ?, a1 N2 {% \也就是说,在 STM32F0 和 STM32F3 中,当使用最高驱动模式(gm_crit_max=5uA/V, 见 Figure9 gm_crit_max)时,对应地应该只使用在 CL=12.5pF 的晶振上,以此避免振荡回路饱和,从而导致启动失败。若此时使用了一个较小的 CL(如 CL=6pF),那么会导致振荡频率不稳定和工作周期可能被扭曲。' s! I* j/ c, m' s$ m$ a( q8 S3 V

# o4 ~4 F# `) [AN2867 随后给出了一张表,列出了驱动等级与 gm_min、gm_crit_max 的关系,如下:  N" ?! P4 v6 e" e, [" Z
' v, Q$ u$ ~# h5 n+ o
9QRG785ZV0QUICV80DQI%L1.png , _4 _& S8 Z, e
1 t! g. i* q. G8 }7 d. P
1 j- C. {, ?: x% @
如上图,对于 STM32F0,当使用最高驱动模式 High 时,此时的 gm_min=25 uA/V,这个与数据手册中是一致的,另外 gm_crit_max =5uA/V,正是上面所描述的。
4 m3 m* n7 ~2 c! }9 @0 e5 @, e0 L* P$ v( t0 N  R  H5 }& K
也就是说,在使用最高驱动模式下,此时与之对应的 CL 应该使用 12.5pF,而客户所使用的 CL 是 7pF,这个与手册AN2867 的建议内容是不相符的。从图 4 可以看出,在最高驱动等级模式下,此时驱动电流最大(1.6uA),但这里使用了一个比较小的负载电容(CL=7pF),按 AN2867 所述,此时有可能导致振荡回路饱和,振荡不稳定,工作周期扭曲。
3 L1 A0 I9 b/ T1 @& S+ j, T5 F& e
$ P% G2 p" K6 r3 n+ D此时,应该对应地下调这个 LSE 驱动等级,减小驱动电流,这里有 4 档(见 Figure 9)ow,Medium Low,MediumHigh,High. 目前使用的是 High,正是它出了问题,为保守起见,使用 Medium High 相对合适。
0 P5 P  w: v* M- F% ]# i( E  ^# l8 G4 }8 l$ T; x: D
打开 STM32F030 的参考手册,在 7.4.9 节中:
( k. k. i5 V9 V  X {]8HYIKSEV6RCMHGNV3%0(P.png , }$ G. g/ J. T

* [5 S& J, P/ J% h
& l% y9 Q" f6 Q9 C" d/ @如上图,将 LSEDRV[1:0]这两个为修改为 10 即可,将原先低温下 RTC 有问题的 MCU 芯片修改后再次放到低温下进行验证,测试结果为正常。由于此问题是部分芯片有可能会出现的问题,客户需要对修改后的芯片进行持续跟踪,至今没有再反馈出现过此问题,由此,此问题基本算是解决。
8 i5 z! v' G9 V+ R- B# P3 T8 y. t' O  Q
另外,从图 1 中所作的测试结果来看,实际上,在低温条件下,RTC 出现问题的时候,OSC pin 还是能正常捕捉到波形,只不过,PA8 脚这个 MCO 上没有波形,只是维持在高电平。于是,对于驱动电流过大所导致的振荡回路饱和,振荡不稳定,工作周期扭曲,这里理解为 MCO 脚与 MCU 内部振荡回路的连接点,也就是 MCO 所表现的波形。
) Y; r0 q: B$ H& W- f4 _$ I* J: S* |; v! R. `7 u5 P7 b
3 Z& a/ z' [( v1 e4 H
3 总结
0 a: ]! N. q: @6 p+ v! x  B. aAN2867 这个文档总结了关于 STM32 晶振匹配方面的信息。里边有提到,负载电容 CL 值越大,所需的驱动电流也就越大,但牵引度越小。这也就解释了表 1 中通过增大 C1&C2 的电容值,原本出现问题的 RTC 能恢复正常的现象,这是由于 C1&C2 的电容值变大将导致负载电容 CL 变大,进而对应所需的驱动电流也就跟着增加,这反而减少了在高驱动模式情况下振荡回路出现饱和的机会。
0 _# N0 n; Z# L4 ]( Z1 r在一般情况下,关于晶振这方便我们往往比较关注的是 gain margin 的计算,它的值太小的话会导致不起振,但同时,我们也应该适当关注由驱动电流过大导致振荡回路饱和的情况。+ k1 K6 Z* q+ w
& a% ]0 ^' c  q% z
赞 收藏 评论0 发布时间:2022-2-25 20:02

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版