真是沒想到啊,把11.0592MHz的晶振焊成了12MHz,單片機串口通訊打印全亂碼了。明明頻率差不多,為什么會導(dǎo)致通訊徹底失敗?貿(mào)澤科普實驗室?guī)Т蠹覐拇趤y碼開始,重新認識晶振——
01為什么晶振頻率有小數(shù)點的特殊數(shù)值?
在通信的時候,單片機需要設(shè)置串口波特率,也就是每秒傳輸?shù)谋忍財?shù),比如9600波特率,就是每秒傳9600個二進制位。串口通訊要想正常傳數(shù)據(jù),發(fā)送端和接收端的波特率必須一致,就像兩個人聊天,一個人每秒說10個字,而另一個人每秒只能聽8個字,必然聽不清,也就是對應(yīng)串口亂碼了。
波特率并不是憑空設(shè)定的,而是由晶振頻率計算出來的,以視頻中51單片機為例,其1個機器周期等于12個晶振時鐘周期,波特率就是:
波特率=晶振頻率÷機器周期÷分頻系數(shù)
我們還是以常用的9,600波特率為例,算一筆賬,差距一眼就能看出:
如果使用的是11.0592MHz晶振:
晶振頻率:11,059,200Hz
機器周期:12 個時鐘周期,每秒能產(chǎn)生:11,059,200÷12 = 921600個機器周期
波特率計算:921,600÷96=9,600,剛好是目標波特率

圖1
如果換成12MHz晶振:
晶振頻率:12,000,000Hz
機器周期:12個時鐘周期,每秒能產(chǎn)生 12,000,000÷12= 1,000,000個機器周期
波特率計算:1,000,000÷ 104≈9615(實際波特率),和目標9,600存在明顯誤差。若按理想分頻,單片機無法實現(xiàn)非整數(shù)分頻(1,000,000÷96≈10416.67),只能取近似值,導(dǎo)致實際波特率和目標值的誤差進一步擴大。

圖2
所以,把11.0592MHz的晶振焊成了12MHz,就導(dǎo)致了串口通信出錯。如果你在單片機開發(fā)中遇到過這種串口亂碼玄學(xué)問題,不妨先檢查晶振有沒有焊對。
其實,上面串口通信的例子,很好的解釋了振頻率總有很多“帶小數(shù)點”的奇怪數(shù)值,這個問題是很多剛接觸電子開發(fā)的人都會疑惑的。
除了11.0592MHz,32.768kHz也是常用的非整數(shù)晶振頻率,它幾乎是所有實時時鐘(RTC)電路的標配。這是因為32.768kHz恰好是2的15次方(2^15=32768),經(jīng)過15次二分頻后,就能精準得到1Hz的時鐘信號(每秒1個脈沖),完美匹配“秒”的時間單位。如果選用其他頻率,想要得到1Hz信號,要么需要復(fù)雜的分頻電路,要么會產(chǎn)生計時誤差,32.768kHz因此成為RTC電路的“黃金頻率”。

圖3
為什么晶振頻率有小數(shù)點的特殊數(shù)值?答案很簡單:這些看似特殊的頻率,都是經(jīng)過精密計算的工程極優(yōu)解,每一個數(shù)字背后都藏著實用的設(shè)計邏輯。
02晶振是如何精確到小數(shù)點四位的?
晶振能實現(xiàn)如此高的頻率精度,核心在于其內(nèi)部的石英晶片。
拆開晶振的金屬外殼,一片經(jīng)過精密切割的石英晶片便顯露出來了,還有連接在其表面的金屬電極。

圖4
石英晶體具有獨特的壓電效應(yīng):給石英晶體施加交變電壓時,晶體會隨之產(chǎn)生周期性的機械振動(逆壓電效應(yīng));反之,機械振動又會產(chǎn)生對應(yīng)的電信號(正壓電效應(yīng))。正是這種電能與機械振動的持續(xù)相互轉(zhuǎn)換,構(gòu)成了穩(wěn)定振蕩的基礎(chǔ)。

圖5
而晶振的精準頻率,要歸功于石英晶體本身的一個關(guān)鍵特性了,它具有一個由自身物理結(jié)構(gòu),比如切割方向、幾何尺寸、厚度等所決定的固有機械諧振頻率。當我們施加的外部交變電壓頻率恰好與這個固有頻率一致時,便會引發(fā)諧振。此時,晶體的機械振幅達到極大,輸出的電信號也極為強勁和穩(wěn)定。

圖6
由于這個頻率是由晶體本身的物理結(jié)構(gòu)決定的,幾乎完全不受外部電路和環(huán)境干擾,因此才能實現(xiàn)極高的精度。晶振有那么多“非整數(shù)”的標稱頻率都是經(jīng)過精密計算和切割后,石英晶體所能穩(wěn)定產(chǎn)生的、精確的固有諧振頻率。
03有源vs無源:晶振該怎么選?
搞懂了晶振的頻率邏輯,接下來就是使用中的實際問題了,比如晶振主要分為有源晶振和無源晶振,怎么選?
無源晶振:需要“外部助力”才能工作
平時在單片機超小系統(tǒng)中常用的2腳晶振,大多是無源晶振,必須依靠外部的起振電路才能產(chǎn)生穩(wěn)定振蕩。
常見的起振電路是皮爾斯并聯(lián)振蕩電路,由兩個匹配電容(CL1、CL2)和單片機內(nèi)部的反相放大器組成。

圖7
晶振 datasheet 中會標注負載電容(CL)和雜散電容(Cs)的數(shù)值,通過公式 CL = (CL1×CL2)/(CL1+CL2) + Cs,就能計算出合適的匹配電容參數(shù)——如果電容數(shù)值不合適,晶振可能無法起振,或者輸出頻率不穩(wěn)定。

圖8
無源晶振的優(yōu)勢很明顯:成本低、體積小、設(shè)計靈活,適合對成本敏感、功能相對簡單的電路,比如51單片機超小系統(tǒng)、簡單傳感器模塊等。但它的缺點也不容忽視:需要額外設(shè)計起振電路,對布線要求較高,抗干擾能力相對較弱。
有源晶振:即插即用的“時鐘模塊”
有源晶振則是一體化解決方案——把石英晶體、起振電路、信號放大電路和波形整形電路全部集成在金屬外殼內(nèi),相當于一個現(xiàn)成的時鐘信號發(fā)生器。
使用時,只需給有源晶振接通電源,就能直接輸出穩(wěn)定的時鐘信號,不需要額外設(shè)計起振電路,電路連接非常簡單。而且有源晶振的輸出信號穩(wěn)定性更高、抗干擾能力更強,還能提供更寬的頻率范圍,部分型號甚至支持頻率可調(diào)。
不過有源晶振的價格比無源晶振高不少,體積也更大,功耗相對較高,更適合對時鐘精度和穩(wěn)定性要求高的場景,比如工業(yè)控制、通信設(shè)備、高端單片機系統(tǒng)等。
04晶振使用也有“坑”要避?
雖然晶振是結(jié)構(gòu)簡單的電子元件,但很多新手會因細節(jié)疏忽踩坑,導(dǎo)致電路工作異常,比如:
1)正如開頭的實驗所示,不同頻率晶振對應(yīng)的機器周期、波特率等參數(shù)不同,隨意替換會導(dǎo)致功能異常,必須根據(jù)電路設(shè)計需求選擇指定頻率,不能隨意更換。
2)無源晶振的匹配電容不能隨便選,需按 datasheet 計算選型,否則會影響起振和頻率穩(wěn)定性。
3)晶振電路對布線要求較高,晶振應(yīng)盡量靠近單片機的晶振引腳,布線不宜過長,避免引入干擾,導(dǎo)致時鐘信號異常。
晶振,就像電子系統(tǒng)的“心臟”,每一次精準振蕩,都為設(shè)備的正常運行提供時間基準。從串口亂碼到實時計時,晶振的頻率選擇和選型都直接影響著項目成敗。希望通過這篇文章,你能真正搞懂晶振的核心邏輯,以后在開發(fā)中再也不會為“選什么晶振”“為什么通訊失敗”而頭疼。
-
單片機
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670292 -
晶振
+關(guān)注
關(guān)注
35文章
3562瀏覽量
73436 -
串口
+關(guān)注
關(guān)注
15文章
1619瀏覽量
82811
原文標題:11.0592MHz 換 12MHz,串口直接亂碼?原因終于說清了 | 貿(mào)澤科普實驗室
文章出處:【微信號:貿(mào)澤電子,微信公眾號:貿(mào)澤電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
晶振應(yīng)該用11.0592MHZ還是12MHZ的?
11.0592MHZ晶振跟51單片機是什么關(guān)系?
請問11.0592MHZ晶振跟51單片機有什么關(guān)系?
為什么51單片機愛用11.0592MHZ晶振?
12MHz晶振與11.0592MHz兩種不同晶振的區(qū)別
單片機串口通信亂碼怎么解決
為什么51單片機愛用11.0592MHZ晶振
單片機串口通信亂碼問題
11.0592MHz晶振換成12MHz后單片機串口通訊亂碼的原因分析
評論