关注、星标公众号,不错过精彩内容
# U+ a( l: O$ s
m22zpubujtq64010478318.png
6 {( }% E( @; S) L6 }! a* z& X- P
5 `5 w( @( P% i: c T5 O& E, x前几天我写了一篇《MCU的心脏-晶振》,部分同学表示,读后还是对有源晶振和无源晶振的区别并没有深入理解,觉得只是科普了晶振的类别和参数,下文将进一步讲解晶振的原理,以及晶振和STM32的关系。
( O; n& | d9 e
- }8 C3 C2 d2 P. x" V01压电效应
% c, S9 k$ R* J- i! I5 }6 r6 ~! _
压电效应:某些电介质在沿一定方向上受到外力的作用而变形时,其内部会产生极化现象,同时在它的两个相对表面上出现正负相反的电荷。
+ c# R* D% O* Z; T9 s" @4 N正压电效应:当外力去掉后,电介质又会恢复到不带电的状态。
s4 q' D) M4 G8 o+ k逆压电效应:当作用力的方向改变时,电荷的极性也随之改变。相反,当在电介质的极化方向上施加电场,这些电介质也会发生变形,电场去掉后,电介质的变形随之消失。5 T* {! u. S4 ^! h; F* L) l3 w
当在晶体表面上施加机械压力时,与机械压力成比例的电压出现在晶体上。该电压会导致晶体失真,失真的量将与施加的电压成比例,并且还与施加在晶体上的交流电压成正比,从而导致晶体以其固有频率振动。这种压电效应会产生机械振动或振荡,可用来代替以前的振荡器中的标准LC振荡电路。; o! p$ N1 y9 b7 t e& U* y( U
下图展示了:石英晶体的等效电路是一个串联的RLC电路。 p" `" h9 y) P* v+ W$ a% G% s
. @& j# {& o9 @
ibqj1blwplk64010478418.png
u3 ]% x9 E, p+ k8 H U$ n▲ 石英晶体等效模型+ ]1 U2 O8 l* V( P k' k+ F
% `4 X& h& w0 C2 d( e该电路代表晶体的机械振动,与电容Cp并联,电容Cp代表与晶体的电连接。石英晶体振荡器倾向于朝着其“串联谐振”方向运行。晶体的等效阻抗具有串联谐振,其中Cs在晶体工作频率下与电感Ls谐振。该频率称为晶体串联频率?s。如上图所示,除了Ls和Cs与并联电容器Cp谐振外,还有一个第二频率点是由于并联谐振而建立的第二频率点。
1 \. g6 m, q2 Z. G& P1 F) A3 _3 {( c; [4 Q! J& D# Q3 Q8 \8 v
02晶体振荡器的应用
4 k! A9 ?4 L% Z' `' z: n0 ~' ]* d
b, V; ^6 q \晶体振荡器不仅仅是给MCU提供时钟,它在各个领域有各种应用,下面简单介绍一些晶体振荡器的应用:2 t% s7 v/ T; R6 u/ w. E
科尔皮兹晶体振荡器9 E+ V& |' G/ F3 n
* w' P1 H" G* G2 w' ]Colpitts振荡器用于产生非常高频率的正弦输出信号。该振荡器可以用作不同类型的传感器,例如温度传感器。使用Colpitts电路中的某些设备,我们可以实现更高的温度稳定性和高频。
2 ~/ t8 N% Z0 I2 T! K% X. _* M8 L
nbofgidkaur64010478518.png
# g: _% m8 `! `* i( m▲ 科尔皮兹晶体振荡器
# V z5 S. g1 v/ C* o% d% l5 c& r* `" P% b) v4 b X
阿姆斯壮晶体振荡器" v2 v* ]( q' H2 @* y0 ~
该电路一直流行到1940年代。这些在再生无线电接收机中被广泛使用。在该输入中,来自天线的射频信号通过一个额外的绕组磁性耦合到振荡电路中,并且减少了反馈,以在反馈环路中进行增益控制。最后,它产生了一个窄带射频滤波器和放大器。在该晶体振荡器中,LC谐振电路被反馈环路取代。
4 u& o- f! \- B6 N; C5 X" X! v5 U
werqu1acnwe64010478618.png
* Y9 H$ z' G# I j; L▲ 阿姆斯壮晶体振荡器
) l; X* |' X) w
/ g9 X! S' O7 }9 X皮尔斯晶体振荡器: v6 ?4 T! F3 R8 x' _
在这个简单的电路中,晶体确定振荡频率,并以其串联谐振频率工作,?s在输出和输入之间提供低阻抗路径。谐振时有一个180 度的相移,使反馈为正。输出正弦波的幅度限制为漏极端子的最大电压范围。/ K7 Q. ]. V1 Z& v
laysgfrtuip64010478718.png
4 j$ b3 ^. j/ Y. q
▲ 皮尔斯晶体振荡器
! r% J/ v% y" ?. f8 t1 _( L! u5 w( l" V9 e* x- j
03无源晶振和有源晶振的区别) L, Z F' ?4 s
% }3 w+ M3 F" b/ x
1 G" L% ~, p' r+ x3 ]2 I无源晶振和有源晶振的区别体现:% g @, W! ]4 u; `, P# c" J
有源晶振:不依靠外部电路,通过自身产生震荡。
+ N& l3 O5 l: V5 D无源晶振:就是一个晶体振荡器,无法通过自身产生震荡。3 Q2 w7 O$ X" l! J& S# t+ `
有源晶振的缺陷:与无源晶振相比,有源晶振信号电平几乎是不变的,价格方面也会更高。+ y0 {% a1 ]9 B, M" _4 B$ K
$ X" a$ q( G& H/ ]) `' U5 A! Y/ U3 Z上面描述的还是不清晰,那么我们先看下有源晶振的结构图:2 j2 [( K' e2 a" d0 X# j
' u% l! F8 y8 l: v* g3 @8 f
rnpxakjgkzr64010478818.jpg
& j5 m( M$ x" O# n( N% Y8 ^% n2 m▲ 有源晶振结构图
/ P2 l# Q& N! b+ N! A1 P Q7 {
a+ p1 \; o/ }& R$ u) d上图中XT就是晶体振荡器,其他的器件就是上文说的外部电路,这样只要给有源晶振供电,就可以产生时钟波形。# p8 X+ Z7 q) b# z% _: X9 g/ d+ H" {
而无源晶振,就是只有XT这个晶体振荡器。以STM32为例,STM32集成了上图除XT外的电路,所以我们可以接无源晶振。主要因为晶振不好集成,外挂晶振比较方便。
e$ {' D f2 l- v6 \# l/ T$ W我们可以直接看有源晶振的解剖图,可以看到晶体振荡器和外部电路。7 [+ K5 t2 k7 b) p4 t
/ y2 r, J/ @( P
oajxur32s0j64010478918.png
' Z# M) L- K: u4 t2 l) [1 R) q% K6 _& ~' C1 Z& ^; U
h5q5vtpirye64010479018.png
& ~" N. Y4 i7 ~0 c, q! P! V
6 j9 D( q, }# Y) | H+ t) q' o b
▲ 有源晶振解剖图
" a6 ^& N. A! \9 }# c g3 e5 e( c3 s" A* J: |
下面看一下无源晶振的解剖图,只看到了晶振振荡器。
4 G# n7 X! ^% N8 Z
2wjykiiuveo64010479118.jpg
4 Z( c( }9 a; Z1 J2 { P/ X
t5lp1pgugq064010479218.jpg
w4 z4 Z9 ^1 I! B; ]. T9 Q5 M
ti3sm0qgrcy64010479318.jpg
0 C; X, y+ T8 U7 d9 t7 \) Z▲ 无源晶振解剖图,左右滑动查看更多
1 m6 n. E+ [# _6 E5 X. n) S0 a7 J; V- K0 ]
04STM32外接晶振" ?6 L9 N& w$ e( S* @, \% r s
5 ?$ V8 x( r/ u% G+ T) q+ R) }
以STM32F207为例,一般情况下外部高速时钟(HSE)我们接25M的无源晶振。在用户手册中ST提供了两种方式:: s8 W5 j* s; y3 a7 i7 q; o. {
$ M7 f) ^6 y4 F# \: Z
11g3cfupeno64010479418.png
9 I4 e' L& N: G# @0 h1 G▲ HSE时钟源 k: K0 _# p! z, W
2 x3 M+ K# t- z( x* K3 `) h$ t外部高速时钟(HSE)可以通过两个时钟源产生:/ C) Y& _3 d! y- S0 h0 i) g
1、外部晶体/陶瓷谐振器
3 I! q9 \% w8 z3 I- w$ p2 H2、外部用户时钟
* A1 c, F+ g3 e9 u, N在外部时钟模式中,直接向OSC_IN引脚输入25MHZ的时钟信号,OSC_OUT处于高阻态。也就是说,我们可以外接有源晶振,但是上文说到,一般有源晶振价格都会高一点,很少有外接有源晶振的案例。
% p- v& F* t+ y: ~. t g上面我们说到,STM32内部集成了晶体振荡器的外部电路,如果外接无源晶振,STM32理论上可以通过禁止部分电路,达到关闭外部高速时钟(HSE)的目的。, D" X/ t% }) k1 y! x4 @, ]
事实上,在STM32F207的RCC时钟控制寄存器(RCCclock control register)的16位HSEON,用来打开或关闭HSE振荡器。) X( t6 X8 G# s3 k) m
bcx1xb2ewga64010479518.png
! A( r, `2 V: \$ L" p0 h$ {
由软件置1和清零。0 q# P* e5 i$ y
由硬件清零,用于在进入停机或待机模式时停止HSE 振荡器。如果HSE 振荡器直接或间接用于作为系统时钟,则此位不可复位。0 ^; x: ~9 `4 p* A1 o3 l$ y
eni4dbqramj64010479618.png
, [ A0 s/ C" X v# i1 N
如上图,在system_stm32f2xx.c文件中,345行就是开启HSE的,我们添加343行的死循环,再去测量晶振,发现没有波形。
( ]0 W5 n- Y3 \! [9 n- I还有另一种方法,我们使用Jlink的J-FlashARM工具,擦除全片数据,再次上电,发现没有波形。, Y" E4 ?: v' d" ^0 K! i
trdvg24aapb64010479718.png
1 v( t% ]6 Q6 Y+ K, R% X( o
这也就解答了一些萌新同学的问题,硬件没有问题,测量晶振发现没有起振,以为是硬件的问题。其实下载一个正常运行(使能了RCCclock control register的HSEON位)的demo,再去测量晶振波形就行了。/ h6 n# i _6 j% x) W. V
, B( I3 Q) v; k
fducf5cbwzj64010479818.gif
# ?0 j+ }; t _$ _# b& ]
4 ?+ F6 u) ~. w4 s; r
o3osgflstc364010479919.gif
4 r3 I) l3 t* n●设计一款兼容ST207和GD207的开发板% R8 H# O- r1 S
●MCU的心脏-晶振 |