关注、星标公众号,不错过精彩内容/ P& E" l0 [5 F
m22zpubujtq64010478318.png
) W% k8 |4 s. m# L
! S: B! v4 N- ?0 Y, d前几天我写了一篇《MCU的心脏-晶振》,部分同学表示,读后还是对有源晶振和无源晶振的区别并没有深入理解,觉得只是科普了晶振的类别和参数,下文将进一步讲解晶振的原理,以及晶振和STM32的关系。
8 l! m( e* Z7 d/ e, ~0 {
; Z( B1 Z& k" [* g01压电效应
) E/ Y4 H/ n, [! s! h6 s2 M0 _+ D3 K
压电效应:某些电介质在沿一定方向上受到外力的作用而变形时,其内部会产生极化现象,同时在它的两个相对表面上出现正负相反的电荷。1 W' V7 y+ ]9 @/ r( |: m& g' I
正压电效应:当外力去掉后,电介质又会恢复到不带电的状态。
6 Q6 A5 p8 N. x" r. F逆压电效应:当作用力的方向改变时,电荷的极性也随之改变。相反,当在电介质的极化方向上施加电场,这些电介质也会发生变形,电场去掉后,电介质的变形随之消失。
- a- W0 T6 v. l当在晶体表面上施加机械压力时,与机械压力成比例的电压出现在晶体上。该电压会导致晶体失真,失真的量将与施加的电压成比例,并且还与施加在晶体上的交流电压成正比,从而导致晶体以其固有频率振动。这种压电效应会产生机械振动或振荡,可用来代替以前的振荡器中的标准LC振荡电路。
* j/ f+ W3 `* w( X& ^下图展示了:石英晶体的等效电路是一个串联的RLC电路。
1 F! E3 B3 @0 i1 W) n
7 v! {$ w8 h$ i, p5 R
ibqj1blwplk64010478418.png
/ E2 B1 U% p8 b0 o▲ 石英晶体等效模型' g( j* {3 t7 @
0 ]6 e Z7 s# Y+ u6 ?6 ^该电路代表晶体的机械振动,与电容Cp并联,电容Cp代表与晶体的电连接。石英晶体振荡器倾向于朝着其“串联谐振”方向运行。晶体的等效阻抗具有串联谐振,其中Cs在晶体工作频率下与电感Ls谐振。该频率称为晶体串联频率?s。如上图所示,除了Ls和Cs与并联电容器Cp谐振外,还有一个第二频率点是由于并联谐振而建立的第二频率点。
' r: L8 _/ I" u3 F8 R: H5 s0 c8 u
02晶体振荡器的应用: D7 |( [& m' t \: Q6 b& a* v
) |6 D8 L0 _. d( m; @6 t, z3 i/ c晶体振荡器不仅仅是给MCU提供时钟,它在各个领域有各种应用,下面简单介绍一些晶体振荡器的应用:, V4 j8 t; G& A# q4 P
科尔皮兹晶体振荡器
) ]( y. T" B$ f% v$ D& d* N5 K; u n7 X3 @6 f1 |; `6 z
Colpitts振荡器用于产生非常高频率的正弦输出信号。该振荡器可以用作不同类型的传感器,例如温度传感器。使用Colpitts电路中的某些设备,我们可以实现更高的温度稳定性和高频。
5 }( m7 p: j2 ^9 [4 M6 A' H
nbofgidkaur64010478518.png
( Q- x/ ^, {$ c8 ~& U" w) ~▲ 科尔皮兹晶体振荡器5 h, r( F+ ?, b" Y2 s; Y" C3 p! r9 a2 Y
' ]/ k Q0 ]1 f' L! K& a. x阿姆斯壮晶体振荡器
) U1 E* \7 m3 d4 \7 q该电路一直流行到1940年代。这些在再生无线电接收机中被广泛使用。在该输入中,来自天线的射频信号通过一个额外的绕组磁性耦合到振荡电路中,并且减少了反馈,以在反馈环路中进行增益控制。最后,它产生了一个窄带射频滤波器和放大器。在该晶体振荡器中,LC谐振电路被反馈环路取代。
" l( u6 b6 J. T$ t8 M& [* p
werqu1acnwe64010478618.png
A% V. F/ S6 M }; l3 D0 ?▲ 阿姆斯壮晶体振荡器
. {8 K* ?# u& x+ X: _% e% t- f1 C
( a: Z# C8 m; {5 Y% i7 w/ D5 k皮尔斯晶体振荡器 I4 v( E5 k$ g$ Z- U% r. j$ y
在这个简单的电路中,晶体确定振荡频率,并以其串联谐振频率工作,?s在输出和输入之间提供低阻抗路径。谐振时有一个180 度的相移,使反馈为正。输出正弦波的幅度限制为漏极端子的最大电压范围。
, [( n* P7 V$ A
laysgfrtuip64010478718.png
7 M# I' h5 y. j, b! I1 v
▲ 皮尔斯晶体振荡器
$ ^ i: A6 @6 w5 j3 a" t% r- e/ D" x, |3 @* Z) I1 i9 d
03无源晶振和有源晶振的区别
- {6 s* v1 W/ k, O$ V* V" ^# @: G9 u: D1 |" ]) U5 i
5 f+ E* w+ G4 V* r无源晶振和有源晶振的区别体现:
! b b6 H8 M# s$ r, J, N有源晶振:不依靠外部电路,通过自身产生震荡。
}* t5 C m4 ~, Y/ n8 V无源晶振:就是一个晶体振荡器,无法通过自身产生震荡。- R4 v, w! o) H4 J6 B3 d6 {8 B/ q9 O
有源晶振的缺陷:与无源晶振相比,有源晶振信号电平几乎是不变的,价格方面也会更高。 j8 a3 e" G1 O
& r; Y# o3 S. F4 @
上面描述的还是不清晰,那么我们先看下有源晶振的结构图:
- k s' M) n4 k9 N
9 P9 v2 x6 O# o# I/ _. \- D; V5 o
rnpxakjgkzr64010478818.jpg
6 f. x/ p. E8 V2 M5 B& @
▲ 有源晶振结构图# ~/ u! m- V5 v- `6 O1 M' q4 x
' k9 H* S8 a( U- P1 ^/ X$ r上图中XT就是晶体振荡器,其他的器件就是上文说的外部电路,这样只要给有源晶振供电,就可以产生时钟波形。
- j3 R- A* Y# n1 S! V而无源晶振,就是只有XT这个晶体振荡器。以STM32为例,STM32集成了上图除XT外的电路,所以我们可以接无源晶振。主要因为晶振不好集成,外挂晶振比较方便。
( f" } }/ t; O我们可以直接看有源晶振的解剖图,可以看到晶体振荡器和外部电路。0 {8 E* G r" `$ F% }3 [7 B3 a% U9 w. {$ ~* a
! _! ^5 d! y9 J7 w
oajxur32s0j64010478918.png
8 r/ j; {6 V6 y3 T
- a6 V) c# n' F* P
h5q5vtpirye64010479018.png
5 r' L. X4 r9 S8 N
% X6 E+ s2 F3 H' B3 S▲ 有源晶振解剖图
. X% r$ }6 g; A/ ]/ j. x* }. l9 Y) D& Q8 g: H. d k! ?1 {0 [8 f
下面看一下无源晶振的解剖图,只看到了晶振振荡器。
9 x8 p% o, w# i" x# k+ ]
2wjykiiuveo64010479118.jpg
5 S* k; Q, l- @2 C( ]: ]
t5lp1pgugq064010479218.jpg
: R5 U5 M2 B6 g$ d$ W( W+ f$ ?+ w" O" P
ti3sm0qgrcy64010479318.jpg
" f! B+ l: [1 f6 e▲ 无源晶振解剖图,左右滑动查看更多
* V9 u) i: w% E4 m+ h9 C
* d9 V) E! I0 _0 R( k) W04STM32外接晶振- c* ?( f+ v0 A% o
6 ^% S& O) o+ E, G! y以STM32F207为例,一般情况下外部高速时钟(HSE)我们接25M的无源晶振。在用户手册中ST提供了两种方式:
9 `; q9 X% ^$ f; W8 v
# w( D: M' o, N, p$ k. q
11g3cfupeno64010479418.png
+ E ]1 m; M8 e! H! `7 ^- x▲ HSE时钟源
- l. T% q. S7 A7 T2 X! O
9 t2 P! [" J N3 D& K/ o外部高速时钟(HSE)可以通过两个时钟源产生:) N1 R. ? `- c* R0 D9 p& _
1、外部晶体/陶瓷谐振器. H9 O& N: O1 Q7 n
2、外部用户时钟
# i7 I( M) c$ G5 }" g; `: E在外部时钟模式中,直接向OSC_IN引脚输入25MHZ的时钟信号,OSC_OUT处于高阻态。也就是说,我们可以外接有源晶振,但是上文说到,一般有源晶振价格都会高一点,很少有外接有源晶振的案例。
) w( d9 x$ u* n, [上面我们说到,STM32内部集成了晶体振荡器的外部电路,如果外接无源晶振,STM32理论上可以通过禁止部分电路,达到关闭外部高速时钟(HSE)的目的。
$ t2 E- _' k; A5 c. |事实上,在STM32F207的RCC时钟控制寄存器(RCCclock control register)的16位HSEON,用来打开或关闭HSE振荡器。
, U0 Y# C1 C4 n& G# I
bcx1xb2ewga64010479518.png
0 B0 ^$ F7 F5 x9 i) E% A$ R由软件置1和清零。
7 s8 G+ _* S2 Z0 u. I' R0 B由硬件清零,用于在进入停机或待机模式时停止HSE 振荡器。如果HSE 振荡器直接或间接用于作为系统时钟,则此位不可复位。
: M( `! U o5 _ z6 p
eni4dbqramj64010479618.png
- T0 F- J4 W/ [& y! v9 U: W" E如上图,在system_stm32f2xx.c文件中,345行就是开启HSE的,我们添加343行的死循环,再去测量晶振,发现没有波形。
0 r+ r; C' R, v3 E还有另一种方法,我们使用Jlink的J-FlashARM工具,擦除全片数据,再次上电,发现没有波形。/ u8 Y1 m& Z2 }( Y, W6 p K9 s
trdvg24aapb64010479718.png
! ?; q. e) M9 L' }这也就解答了一些萌新同学的问题,硬件没有问题,测量晶振发现没有起振,以为是硬件的问题。其实下载一个正常运行(使能了RCCclock control register的HSEON位)的demo,再去测量晶振波形就行了。0 S8 v8 W' g/ x: s' f8 Q* K
4 R$ l* k. [, [7 t! O+ |$ h+ Y
fducf5cbwzj64010479818.gif
0 ~% Z$ t' X/ t* f5 e2 F; h
, Z- w. R$ ]; G
o3osgflstc364010479919.gif
% e1 h8 Q5 N* T7 q9 m●设计一款兼容ST207和GD207的开发板
& ]: ^- I( _3 I2 S1 F7 ]2 M, c) j●MCU的心脏-晶振 |