关注、星标公众号,不错过精彩内容: z- l/ ]2 t9 m$ U2 o$ p5 T
m22zpubujtq64010478318.png
0 _: Z: ^% }" ]6 i
b) @) N F: _! I" [1 j( j- }
前几天我写了一篇《MCU的心脏-晶振》,部分同学表示,读后还是对有源晶振和无源晶振的区别并没有深入理解,觉得只是科普了晶振的类别和参数,下文将进一步讲解晶振的原理,以及晶振和STM32的关系。
^/ _+ w$ E' I9 ?
9 F) \1 L" ^8 h, ^& f4 X01压电效应0 o9 V I( J s! K8 N1 n
; ]( M( z `. Z- `& K' L0 c压电效应:某些电介质在沿一定方向上受到外力的作用而变形时,其内部会产生极化现象,同时在它的两个相对表面上出现正负相反的电荷。1 Y8 y& X/ A% Y# r) B) {* `% `
正压电效应:当外力去掉后,电介质又会恢复到不带电的状态。9 J( ^) |) ?7 ?7 ^0 X
逆压电效应:当作用力的方向改变时,电荷的极性也随之改变。相反,当在电介质的极化方向上施加电场,这些电介质也会发生变形,电场去掉后,电介质的变形随之消失。- h$ W1 W6 V5 j; s5 q6 Q
当在晶体表面上施加机械压力时,与机械压力成比例的电压出现在晶体上。该电压会导致晶体失真,失真的量将与施加的电压成比例,并且还与施加在晶体上的交流电压成正比,从而导致晶体以其固有频率振动。这种压电效应会产生机械振动或振荡,可用来代替以前的振荡器中的标准LC振荡电路。3 h* g7 `/ W8 p7 }. D( R( o* P
下图展示了:石英晶体的等效电路是一个串联的RLC电路。
) F8 x: s) C, o& A8 `: J% }- L1 c. Q, ^( B1 \1 H
ibqj1blwplk64010478418.png
) d& L; V& r$ `2 D( M▲ 石英晶体等效模型9 {# }: j8 @5 c) r8 V# I" S; b
. T5 `! u, H! t该电路代表晶体的机械振动,与电容Cp并联,电容Cp代表与晶体的电连接。石英晶体振荡器倾向于朝着其“串联谐振”方向运行。晶体的等效阻抗具有串联谐振,其中Cs在晶体工作频率下与电感Ls谐振。该频率称为晶体串联频率?s。如上图所示,除了Ls和Cs与并联电容器Cp谐振外,还有一个第二频率点是由于并联谐振而建立的第二频率点。
# b$ y+ W% A( n) \) i4 w0 Z5 X
- p8 j! g& E+ c! U, Z9 y02晶体振荡器的应用) r1 e2 u# ^. f, O/ R( T
& g7 x7 i, o H1 d晶体振荡器不仅仅是给MCU提供时钟,它在各个领域有各种应用,下面简单介绍一些晶体振荡器的应用:& R0 y* F& h# Q& f6 S
科尔皮兹晶体振荡器
9 r( T3 v5 p+ J6 j4 p9 {/ v# B- |) P, H; c' z
Colpitts振荡器用于产生非常高频率的正弦输出信号。该振荡器可以用作不同类型的传感器,例如温度传感器。使用Colpitts电路中的某些设备,我们可以实现更高的温度稳定性和高频。
' G/ _& P6 [/ k% c$ ^, ]
nbofgidkaur64010478518.png
5 t; y, F4 ?+ q7 J▲ 科尔皮兹晶体振荡器
. D' E0 r" x4 U5 l
/ N! x4 n) q* L& A阿姆斯壮晶体振荡器! h5 P Q1 x0 e# Z) R
该电路一直流行到1940年代。这些在再生无线电接收机中被广泛使用。在该输入中,来自天线的射频信号通过一个额外的绕组磁性耦合到振荡电路中,并且减少了反馈,以在反馈环路中进行增益控制。最后,它产生了一个窄带射频滤波器和放大器。在该晶体振荡器中,LC谐振电路被反馈环路取代。2 U/ ] W, y* ^' j
werqu1acnwe64010478618.png
. u0 L% K4 p& Q* y/ k▲ 阿姆斯壮晶体振荡器& k# p8 `* `1 @4 t! r- j1 F0 Z9 W
8 u: ~1 Z' u) K4 `皮尔斯晶体振荡器) \' u" |3 ~- \# Z8 P
在这个简单的电路中,晶体确定振荡频率,并以其串联谐振频率工作,?s在输出和输入之间提供低阻抗路径。谐振时有一个180 度的相移,使反馈为正。输出正弦波的幅度限制为漏极端子的最大电压范围。
" L0 }8 i: X" F( ?, g
laysgfrtuip64010478718.png
: x% k7 }8 n* O▲ 皮尔斯晶体振荡器* H; L k% Z: B
! H7 Z+ g/ V& m* H7 ^- T- K5 D
03无源晶振和有源晶振的区别+ R' m. K* \; z+ w& H8 f2 G
9 u+ n& q _8 g; ]$ c
' ~" p$ f3 a2 F3 f无源晶振和有源晶振的区别体现:1 L6 K4 [) V0 U( H4 L0 h
有源晶振:不依靠外部电路,通过自身产生震荡。
% R1 P' u# Q5 J无源晶振:就是一个晶体振荡器,无法通过自身产生震荡。1 ~& U/ g5 I. R; D9 z6 Y% Z
有源晶振的缺陷:与无源晶振相比,有源晶振信号电平几乎是不变的,价格方面也会更高。
: k8 p! |0 D& F$ n5 z) v" u" t6 I7 m; p7 x( q0 S' v
上面描述的还是不清晰,那么我们先看下有源晶振的结构图: `7 D7 ^; K6 S( q
* J1 t/ L% [* t* d" K% L3 E2 J4 x
rnpxakjgkzr64010478818.jpg
2 @3 x* ]3 x+ i+ e8 o▲ 有源晶振结构图4 x7 Q3 {! C) A+ d4 Q( A* n# _
7 ] s: z( X. D( H S) \7 S/ _# B
上图中XT就是晶体振荡器,其他的器件就是上文说的外部电路,这样只要给有源晶振供电,就可以产生时钟波形。' c$ c# e8 S' ~" s- n8 H3 e
而无源晶振,就是只有XT这个晶体振荡器。以STM32为例,STM32集成了上图除XT外的电路,所以我们可以接无源晶振。主要因为晶振不好集成,外挂晶振比较方便。
8 U) x2 g, o9 W; {- F4 K- o我们可以直接看有源晶振的解剖图,可以看到晶体振荡器和外部电路。6 }! G! W0 \1 _7 d' N; F3 a
. T% K- M! P5 C- @' w) b5 s; P' u
oajxur32s0j64010478918.png
, O9 b4 [7 k3 h. g1 v
: ~' |, N) K. s% i! q- ~: Z
h5q5vtpirye64010479018.png
* u+ w, V& y. [4 J
% s! W4 X4 `( _ f5 {- z1 j2 m; Q
▲ 有源晶振解剖图
; i3 y/ M) Q: x" D6 w
, x7 \1 V) K# d% \; |, Q ?; R& U下面看一下无源晶振的解剖图,只看到了晶振振荡器。! O) j% I+ B6 f1 K" ?
2wjykiiuveo64010479118.jpg
& e7 ]6 d2 y' ]! c' v- C9 q: }; w4 C
t5lp1pgugq064010479218.jpg
/ \6 O" b/ A1 V: R3 |0 M6 @
ti3sm0qgrcy64010479318.jpg
2 D0 f" @ \" Q6 w& }0 y: L▲ 无源晶振解剖图,左右滑动查看更多6 O G% G0 P W8 P) p8 @* h
/ V, h0 N6 D1 y04STM32外接晶振1 y3 ?: |& A* t1 x W$ O# w" D& q- H
" O! U0 O( P! [/ x: ^以STM32F207为例,一般情况下外部高速时钟(HSE)我们接25M的无源晶振。在用户手册中ST提供了两种方式:; C8 E" G! Q: `# `4 F
- J/ Y) M) K& q5 ^: L
11g3cfupeno64010479418.png
P1 c# e7 M" {6 ^▲ HSE时钟源
! b* b2 e: Z2 Y$ b
, k$ W9 G9 K/ ^$ h5 R, f3 x外部高速时钟(HSE)可以通过两个时钟源产生:+ B2 U# g5 I$ r+ _3 i5 q
1、外部晶体/陶瓷谐振器7 A. A! T1 M0 s0 p$ I- l; p- P
2、外部用户时钟
. r+ B7 L8 n8 h在外部时钟模式中,直接向OSC_IN引脚输入25MHZ的时钟信号,OSC_OUT处于高阻态。也就是说,我们可以外接有源晶振,但是上文说到,一般有源晶振价格都会高一点,很少有外接有源晶振的案例。' r0 U6 U! P4 i& [) ]0 \8 F4 a/ C
上面我们说到,STM32内部集成了晶体振荡器的外部电路,如果外接无源晶振,STM32理论上可以通过禁止部分电路,达到关闭外部高速时钟(HSE)的目的。
0 x+ u" t# B* S3 C' ~- W3 ~事实上,在STM32F207的RCC时钟控制寄存器(RCCclock control register)的16位HSEON,用来打开或关闭HSE振荡器。
! |' d# \3 \9 B9 ]& F" a
bcx1xb2ewga64010479518.png
$ C2 `/ U& s, M5 O+ q; r
由软件置1和清零。
+ F l: C( ], Z5 q4 e由硬件清零,用于在进入停机或待机模式时停止HSE 振荡器。如果HSE 振荡器直接或间接用于作为系统时钟,则此位不可复位。2 V; g3 d% Q' l* ^3 g
eni4dbqramj64010479618.png
1 ^' ?7 n3 y% [0 U x# s i如上图,在system_stm32f2xx.c文件中,345行就是开启HSE的,我们添加343行的死循环,再去测量晶振,发现没有波形。; k: j! b9 E! y" B& {0 ?
还有另一种方法,我们使用Jlink的J-FlashARM工具,擦除全片数据,再次上电,发现没有波形。/ `* J( I1 z$ g% ?/ K: a1 X
trdvg24aapb64010479718.png
5 \) B/ T0 [ t% T% q) n% ]) d这也就解答了一些萌新同学的问题,硬件没有问题,测量晶振发现没有起振,以为是硬件的问题。其实下载一个正常运行(使能了RCCclock control register的HSEON位)的demo,再去测量晶振波形就行了。* t& T/ ~, r d# v/ }
; I8 \; u0 b: x! ]4 v
fducf5cbwzj64010479818.gif
: m9 l/ Z% v' |8 Y8 t$ Y; Q
e1 Q/ L$ r. @, ?6 s8 c* S
o3osgflstc364010479919.gif
! d4 I3 C' O# M7 H4 ]! \
●设计一款兼容ST207和GD207的开发板- u4 s4 Z) ~& E/ H w
●MCU的心脏-晶振 |