|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解…… , N+ f7 i9 u/ k" C% E8 Y4 f5 L, L$ i/ m* F
# {: u. e4 W; S! A# }# G# I
有关51单片机有关晶振的问题一并总结出来,希望对学51的童鞋来说能有帮助。
& D; Y- I+ Q7 K* b( |# q 一,为什么51单片机爱用11.0592MHZ晶振?6 p! n) W# d5 J4 ?3 ^5 Q9 m, l7 K9 s4 f9 N1 ~- k: `! h" G
/ b$ t1 M7 g* j. y 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。7 K5 y0 s8 G- c% s9 t: {' X
9 c7 ~, D. k2 H( N! S+ y
" T/ F, S; `$ T8 n6 z 其二:用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根 据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般 波特率偏差在4%左右都是可以的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。 这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。 用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。# d1 k4 U, G6 v* R; X: z& c2 o" N* G
) \6 b8 h+ }9 [1 f 二,在设计51单片机系统PCB时,晶振为何被要求紧挨着单片机?, ^5 Q$ Q+ y0 p- a) ?% R K
9 J2 ~* k5 X8 [3 r2 f: y9 N4 J- x. u( K% f5 X3 p9 H
原因如下:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。( z1 \5 G0 Y0 V; y7 c Q9 {
( Q; X3 z8 d: J( r# {! R8 h$ E- e) l' \' \- {( A0 A3 Q, N; H. ?, N, Y3 J
问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。
8 G7 W9 I7 I, a
4 p% w! ]& g7 K5 t 晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。现实中,磁力线不常见, 电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就 越强,产生的电能量就越强,直到接收到的电信号强度超过或接近晶振产生的信号强度时,IC内的放大电路输出的将不再是固定频率的方波了,而是乱七八糟的信 号,导致数字电路无法同步工作而出错。, k9 J4 w: o h5 u# c1 g
1 S1 ^. k* |7 x8 ?0 y/ D9 w/ `4 W2 M; k
所以,画PCB(电路板)的时候,晶振离它的放大电路(IC管脚)越近越好。; S& K7 L* z/ U' r! @
7 p% ~ u3 [: l/ t) [9 r" o2 K" [, t% P4 P* g& `. y3 d5 y0 d$ q2 Z& p5 B# p
三,单片机电路晶振不起振原因分析- j5 |6 S' M& ?5 ^( a
3 f+ l, t& g; R1 h% M& w/ @8 o5 P" p/ D. j
遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?, f8 }/ G4 C8 C. E% n! ?
( r+ J6 M5 m$ o( m \% }# \' v5 Y# f* ~/ u' S3 H
① PCB板布线错误;②单片机质量有问题;③ 晶振质量有问题;
3 u x% @. P! @# G8 i0 G" {+ k1 t( L2 M) {$ c5 Z
* Q/ r$ P& i h( P7 O6 N$ a; w; I ④负载电容或匹配电容与晶振不匹配或者电容质量有问题;⑤PCB板受潮,导致阻抗失配而不能起振;⑥ 晶振电路的走线过长;4 n' s. S4 B/ v0 e/ D) \
4 H, K. o: `" E. B
3 B1 W* f0 G$ M/ k% _5 b ⑦晶振两脚之间有走线;⑧外围电路的影响。+ d G$ n9 B2 B! c( ~; B g
4 y7 M+ _. C/ U! d/ _7 j! ^* @* ~
解决方案,建议按如下方法逐个排除故障:5 J6 K# R! f% ]! K2 m
) X' u% N" G8 E0 O3 H7 A( z5 r+ H- G* d* F9 n9 |! k, X
① 排除电路错误的可能性,因此可以用相应型号单片机的推荐电路进行比较。② 排除外围元件不良的可能性,因为外围零件无非为电阻,电容,很容易鉴别是否为良品。③ 排除晶振为停振品的可能性,因为不会只试了一二个晶振。④试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请参考晶振的使用说明。
5 K) s5 m$ ]# `2 \/ o3 d9 {1 G& A. F5 V, C" M. p
^ R4 f1 |7 q ⑤在PCB布线时晶振电路的走线应尽量短且尽可能靠近IC,杜绝在晶振两脚间走线。
! ~# O, C6 _! U8 w {$ b) r
( Z- ~9 i7 ]0 g1 ?+ R1 L 四,51单片机时钟电路用12MHZ的晶振时那电容的值是怎样得出来的?拿内部时钟电路来说明吧!2 s ~+ ]1 P$ C5 q
; P0 l% Y# c/ o+ h5 }' q, O
, L6 f" @1 O X 其实这两个电容没人能够解释清楚到底怎么选值,因为22pF实在是太小了。这个要说只能说和内部的振荡电路自身特性有关系,搭配使用,用来校正波形,没有人去深究它到底为什么就是这么大的值。' r& `* `) X* @9 F+ n! L1 |7 ~ N& B9 E# C7 W
, T0 j- I; t. R
5 t- A: k. \" {+ S% w0 Y0 v8 a 19.89c52单片机如果不接晶振会有什么后果?
$ L5 n! K; U5 p' m7 u: S8 _- p$ ]" l( J2 N+ r9 j1 ?
单片机不工作了 程序无法烧入……等等
+ E- c6 n8 e3 Z4 |' R' D3 V
3 Z) h: _0 ^0 h 五,单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的!; O8 y6 o/ A$ f0 b. R0 D4 @* `( i% N& b z3 v1 O0 @
' k0 C% S+ }# \4 E( D( ^2 u 电容不对称也不会引起频率的漂移,说的频率漂移可能是因为晶振的电容的容量很不稳定引起的,可以换了试,换两电容不难,要不就是的晶振的稳定性太差了,或者测量的方法有问题.4 h( @$ t. U* U* u
/ G( M8 }* C- y! U; O$ s% ^ 六,单片机晶振与速度的疑问,执行一条指令的周期不是由晶振决定的吗。那么比如51单片机和MSP430,给51接高速晶振,430接低速的,是不是51跑的要快?是不是速度单片机速度仅仅与晶振有关,关键是单片机能不能支持那么大的晶振?' R5 U9 o% }' S3 {3 j8 ?, N1 m9 |7 M8 ?' T8 l
. C, U$ k9 G U9 o) O) k, G8 f 每个单片机的速度是受到内部逻辑门电平跳变速度限制的。两个芯片同时使用同样的晶振,比如12M的。因为AVR是RISC指令集,它在同样外部晶振频率下,比51要快。
' g% c2 [9 y6 G" L8 _, ^3 J
) y. Z+ U9 g" ?' F3 U 比如,51最快能接40M,AVR是16M的晶振。 h- j. E9 a5 K# E3 u+ F
1 p' ^, y$ F/ \4 a) V STC89C52大都用12MHz晶振,但由于其12个时钟周期才是一个机器周期,相当于其主频只有1MHz。& f5 n- x: [' K
+ S! h u4 K( `: M4 D. R" n
8 u6 _7 z5 G5 n5 [ MSP430采用RISC精简指令集, 430单片机若采用内部DCO震荡可达21MHz主频。单个时钟周期就可以执行一条指令,相同晶振,速度较51快12倍。8 x; H$ P+ S' R7 r
* k8 j2 i1 l; n
1 u# Q* _8 s. Z0 s$ J# T 对于一个51,给他用更高的晶振,速度会快些。但是对于高级的单片机就不一样了。高级单片机内部,一般都是有频率控制寄存器的,所以,简单的增加晶振,可能达到单片机的极限,导致跑飞。3 K9 D0 S0 o, t$ }- V
1 ~! u) X) ?8 k- Q5 n
4 N6 S' x! {( C 七,请问:有什么方法可以确定某一款单片机在某一大小的晶振下是否能正常工作?4 v! h' f* `& [" V6 h, E& J, o% t$ s! l$ K8 c9 y( x; O
! ]5 m1 a* ]; G9 H9 ]0 ^# m, V% s3 t0 K6 o( R# g9 e3 ]) ?; S
晶振选择太高不太合适,具体晶振上限是多少,恐怕测不出来,只能按照人家单片机的要求,一般STC系列单片机上限是35M或40M,stc单凭上写的有,如STC11F16XE 35I-LQFP44G其中35I就是晶振最高35M的工业级芯片。! ], w$ m, c; x; C2 v3 O4 u b
. U) z. |- D( `7 ~7 u' z! |) H. _* ~- o& w" v. B# A6 O" d
8 Y" ?2 b( ^7 t2 Y7 j0 V 超过上限会出现什么样的问题,没有测试过,一般晶振选择12M的比较多,如果选择STC 1T指令的,就相当于12*12=144M的晶振。如果用于串口通信,建议选用11.0592M的或22.184M,选择晶振最主要还是参照人家的说明书。
3 @, P! M8 H2 j* L* A/ F+ ~# g: p2 l$ @# j
: ^1 u2 W- V, b& ?- f 八,4个AT89C51单片机能否用一个12M的晶振使其都正常工作?一个采用内部时钟方式,其余三个用外部方式...那四个都用内部方式可以不(将4个单片机都并联在一个晶振上)?2 O/ P- |0 V! j% c6 W
9 q' C$ j+ O9 n/ d# ?8 L& E) G7 }6 {" V! [' Q: D2 z
可以,其中一个正常接晶振,他的XTAL2输出接到另外三个的XTAL1输入上。
9 _* [* {$ d! e1 v& U3 Y+ X2 F- m i5 @. E) g2 A0 ^- @0 y5 N1 a+ R1 s m. O* l# T$ }: I
九,单片机的运行速度和晶振大小的关系,若单片机的最高工作频率是40M,晶振是否可以选择24M或更高,但不超过40M,这样单片机的运行速度是否大增?长期在此工作频率下对单片机是否有不良影响?单片机对晶振的选择的原则是怎样的?
6 b# d; R: h2 R) }% [: D2 R! @% c7 e+ C" p- d
# Q% c" K! e" w3 o8 S' ~( C1 Z 当然是有影响的,单片机的工作速度越快,功耗也越大,受干扰也会越厉害,总之最高能跑40M的,跑不超过40M的是没有问题的,只是对相关的技术(如PCB的设计元件的选取等)会高去很多.: k7 e/ L) t. s6 x4 b7 M1 J6 ?
$ b, ]* t% N, T4 G. {3 A
2 K7 M5 k9 y% \/ d7 j8 g 十,89c51单片机的复位电路中常采用12MHZ的晶振,实际上市场上稍小于12MHZ,为什么呢?! N; e% {. b; n a! h, m' l+ g
3 a1 M; {8 E+ [9 L1 f8 G! Q3 n% ], }% R, x! x T# ]. M* x. E$ j5 G/ B
答:需要串口通讯时一般是用11.0582MHZ的,这样波特率才好算。3 J) o/ X- U4 \( n1 Q& L1 t9 h, M! i; k8 J7 d2 T
) N- Z$ [8 c" Z8 ?' p5 e4 j( @
用12MHZ的工作周期就容易计算。8 X( C2 j" V1 t1 z9 u, r M
! I; e0 t) B3 j" _
十一,单片机晶振上电不起振,但是手碰一下晶振就起振了,为什么?怎么判断单片机晶振是否起振呀?
, b% K) j! b! ^0 F* c+ `$ V Z% x0 j# ^- ^' a6 w7 o9 J( T Q6 N V5 M
看看晶振配的电容焊了没有,值有没有错误?. A* S8 I' ~, b2 k) c; z/ r
2 X- O- F I0 ?: {$ R# I ^0 V4 z C; E O' g; x* T- `! s4 V- I
最简单是用示波器,另外可以看一下电源是否正常。! x" k, O5 ]& }3 p5 \$ R* c
/ h) b9 N# D' x& M. G4 E, C% \- z* E2 d( l' I- R. E: ~6 U
十二,怎样判断单片机外部晶振有没有起振?的STC89C52单片机本来是好好的后来不行了,换了个晶振就好了。但是过了几个小时后又不行了,是怎么回事。还有就是怎样判断晶振是否起振?2 j9 Z: Q+ P' g! Q) N. b
5 e) U8 h$ `( R8 E; }5 `, U2 v! q' `0 @# A+ @
①先换一块单片机试试,问题还在则排除单片机;②可能是虚焊造成的,这点要注意;③用STC89C52也碰到过类似的问题,换了块晶振就OK 了,好像STC起振不橡AT89S52那么顺。其实对于STC89C52可以直接看30脚(ALE),接个灯,起振一下子就能看出来了。0 ~+ D* m1 g8 |1 U* k' M% B- ~
9 E1 i: T! @# P- n, Y# P) z6 T. i; P+ L; u) u' t6 s' P/ s7 K% O @4 O
十三,51单片机晶振上接的电容大小该如何选择?是晶振越大,电容值也要大一些吗,一般常用多大的。有人说常用的从15-33pf,具体如何选择效果最好?比如分别用一个6M和12M的晶振,用多大电容更合适?! U! z. p) c9 G; K
. n0 Y" b! C8 Q) g) ~, f+ g2 v, r& e
- x( c: F; Q7 O0 k5 W( x1 A5 Q0 T5 I 15-33pf都可以 们一般用的是15P和30P 晶振大小影响不大 们常用的4M 和12M 以及11.0592M和20M 24M 们都用的 30P 单片机内部有相应的整形电路 们不比担心3 `$ p2 X- Y. k8 @! `
) F N; D* l: O8 ?
) e- `% Q6 G; v6 ^" B4 w5 C 23.给51单片机12M晶振接2200pF电容会怎么样?电路图里貌似是22pF的,但是没有22pF的...接2200pF会不会不正常工作?
; Y, Q4 q- M3 q* w/ t" s! o/ o: d2 A) f( v2 }+ M- H0 ?
不可以,晶体会不工作的。15-33p是合理范围。可以试试看,对单片机不会有损坏。6 W6 A a0 H, g" G
7 H2 U- }9 q* i8 z1 _# m5 E( V* A; m `! o/ R" C0 l
十四,没有程序的空白单片机,外部晶振能起振么?; y+ R( O& S8 f' P& _4 U
( w9 C* q$ _4 w3 H0 k7 G
1 G' w9 {4 [: C; c) w1 O 没有内部晶振的单片机,外部晶振可以起振,如传统类MS51系列单片机有内部晶振的单片机,外部晶振不会起振,需要对外部晶振进行配置后才会起振,如果不对外部晶振进行配置仍使用内部晶振,如silicon lab系列C8051F020单片机1 h4 a v7 I4 ]7 Z9 u6 o* p$ \6 j& n% {% q' T# F& w$ _
" ]. F3 P" B# @- B1 d 十五,为什么at89c52 P1.0输出2.5v电压,单片机好像未工作,晶振波形是不规则的正弦波可不可以?线路板没有达到预想效果,发光二极管一直亮,感觉还是单片机的问题,P1.0输出2.5v电压,看门狗用的X5045。怎么回事?" e7 m2 v Q0 _& m0 z
& B, V4 [. @: D( d1 I) h; Z+ Q
将看门狗拿掉,暂时做成最小系统,既只有电源、8952、晶振和两只30P左右的电容。- O; ~( w6 h# L4 h; ^) G. [
% N. W7 D( D: n) O0 T0 H1 P# @! i8 L' _
L) W: A( z6 ?3 C) D8 h4 s3 p ①将P1.0口置1,测试该口的电压是否在2.5V以上;+ t; |# }( l3 }0 l' }
6 C( F! Y3 W% n, v4 h _. x# ?3 P2 }2 ], Y6 M- T" ^0 C, t1 [! j! L! i
②将P1.0口置0,测试改口电压是否约为0V。8 [8 O, d0 g7 }4 [$ G6 F9 C
# u" F M- U! x: z4 u6 n( D. ]2 p, f( v% M; B- y/ U2 F% D" z7 e% [3 J; n7 z0 E
是的话就是OK的,否则就要看看电源电压、晶振、8952了。电源电压是5+、-0.25V,且纹波一定要小" g5 X J+ o& Y+ Y& p. |; C0 |1 [: w. P4 N
) |+ y* `& p7 e6 D7 C9 \
十六,制作max232下载单片机,工作电压都正常,要外加晶振嘛?: I4 P! b) c" n& P5 F
- s9 A4 ?* Z1 J# n6 _) L/ L
, H/ J1 N, V5 r( B8 u( p 当然要加,如果没有外加晶振,那么单片机的时钟电路就没有了,导致单片机串口就不能进行数据传输了,最终这个下载器具就不能下载程序了。4 ~6 h! t8 B. v/ g
" R8 Z% e' m j" A- a& u1 V4 j" G' P! x5 [# o: o
% {5 F. V4 X6 _6 R 十七,若89c52单片机使用外接晶振,应如何设置?
* R# C# i; I* J$ z' \% U
2 A5 T5 g( D! q7 f4 d 晶振的两个管脚各接一个20~30pf的电容后分别接入单片机的XTAL1和XTAL2,两个电容的另一端并接后接地即可,不再需要任何设置) U& W$ \9 g {0 i6 y& A! ]+ V6 S: ?' ]% G% G5 z- a6 z8 l% c$ w# ~
$ r' n M! x5 E( \" W u
# }$ O) B5 t: F6 B ^ 十八,晶振的原理,如何产生正弦信号的,详细一点,从电路方面分析?$ ^: h0 u6 a/ l+ d% A' C+ `( a' S5 D$ O
6 d9 t' v% p1 X5 h4 @/ U* {1 C
, |" M" F( ^4 G7 Y 晶体可以等效为一个电感,与里面的电容形成振荡回路,能量从电感慢慢到电容,再从电容慢慢到电感,周而复始形成振荡。正半周是电容的充放电过程,负半周是电感的充放电过程。7 n3 N ~0 [: {4 o* ^1 X3 b
* o. F0 K* Q, F @7 V1 _" g- Y3 [7 g. K# X' ?0 m7 N" ^/ k0 e' }
十九,现在要用52单片机做一个交通灯电路。要求是红灯,绿灯30s,黄灯3s。循环变化。那么外界晶振怎样选择?单指令周期多少比较合适?图中外接的两个电容的作用是什么?大小多少合适?
" [9 I6 D7 ]$ d( u9 ^' w% ~3 @- |; w
' [8 X0 d4 A7 n 如果选择晶振的话,那两个电容值可以选择:30加减10PF左右的(频率在0~33MHZ之间);; z5 Y' N1 a1 u" v4 ~' P0 \4 L- |
8 r" E; M# c+ O: F7 o2 f: M$ X9 t+ @. p( E, w" M# \
如果选择陶瓷晶振的话,电容值可以选择:40加减10PF左右的(频率在1.2~12MHZ)振荡器应尽量靠近电容。指令周期是可以算的,这个是有公式的!. ^( _0 Q. ]# K$ f6 Z0 [# {9 K& v
# \* K. u! F |+ ~. F0 ?* R
( W1 _ I% _/ Z: e# y8 N- n% v 二十,89c52单片机 晶振频率才12兆,太小了,怎样能改大晶振频率?( \4 C4 a; P7 y' f2 w; v# h
6 H; A- O9 t S; c: }0 @' v8 b, x; Z9 m7 }
外接18.432或者24MHz的晶振。或者换4T的W77E58单片机,这样相当于把工作频率提高3倍。或者换1T的DS89C4XX单片机,这相当于把工作频率提高8倍!用1T的STC12C5A60S2单片机也有这样的效果。/ d0 K$ B9 r. a7 v3 p- H# A% Z
3 z: ~$ V6 u) x* x! m. Q# A: R7 w+ }- V! u4 B4 e9 C5 ]6 V9 ^5 }- w+ _- M
二十一,单片机不能正常工作,晶振问题?如何去检查晶振正常还是不正常?另外看到说晶振跟两个小电容要离得很近,几乎都没剪引脚(就是买回来多长就多长)就插上去了,这个也有关系吗?2 R/ O, ?4 Z! y- l+ x$ {7 a
* I& }( }) ]$ D/ Y, }# f, t, R1 G6 E, x# ]) Z
% S0 {5 p' S% \8 `$ H& a& C. \ 用万用表测量单片机连接晶振的两个引脚,正常起振的状态下电压大概比供电电压的1/2略低一些,如果其中一个或全部引脚为电源电压或零就表明没起振。那个引脚长些一般不会有什么影响,相比之下接地更关键些,两个谐振电容接地端到单片机的电源地要尽量近些。4 }; D( e5 s, K- L
|
|